- Store monitor by plug name
- - Index was inconsistent between different DEs - - Index was inconsistent when matching monitor models existed - - Plugname is only inconsistent when switching DEs - Bugfix for notification overlay
This commit is contained in:
parent
3d95735c78
commit
ce0c1aece3
7 changed files with 115 additions and 93 deletions
|
|
@ -56,7 +56,7 @@ class DiscoverAudioAssist:
|
|||
|
||||
def thread_loop(self):
|
||||
# Start an asyncio specific thread. Not the prettiest but I'm not rewriting from ground up for one feature
|
||||
log.info("Staring Audio subsystem assistance")
|
||||
log.info("Starting Audio subsystem assistance")
|
||||
loop = asyncio.new_event_loop()
|
||||
loop.run_until_complete(self.pulse_loop())
|
||||
log.info("Stopped Audio subsystem assistance")
|
||||
|
|
|
|||
|
|
@ -231,11 +231,6 @@ class Discover:
|
|||
"main", "highlight_self", fallback=False))
|
||||
self.voice_overlay.set_icon_only(config.getboolean(
|
||||
"main", "icon_only", fallback=False))
|
||||
monitor = 0
|
||||
try:
|
||||
monitor = config.getint("main", "monitor", fallback=0)
|
||||
except:
|
||||
pass
|
||||
self.voice_overlay.set_vert_edge_padding(config.getint(
|
||||
"main", "vert_edge_padding", fallback=0))
|
||||
self.voice_overlay.set_horz_edge_padding(config.getint(
|
||||
|
|
@ -277,7 +272,9 @@ class Discover:
|
|||
self.voice_overlay.set_dummy_count(config.getint("main",
|
||||
"dummy_count", fallback=10))
|
||||
|
||||
self.voice_overlay.set_monitor(monitor)
|
||||
self.voice_overlay.set_monitor(
|
||||
config.get("main", "monitor", fallback="Any")
|
||||
)
|
||||
|
||||
self.voice_overlay.set_enabled(True)
|
||||
|
||||
|
|
@ -303,11 +300,6 @@ class Discover:
|
|||
"text", "rightalign", fallback=True))
|
||||
self.text_overlay.set_align_y(
|
||||
config.getint("text", "topalign", fallback=2))
|
||||
monitor = 0
|
||||
try:
|
||||
monitor = config.getint("text", "monitor", fallback=0)
|
||||
except:
|
||||
pass
|
||||
floating = config.getboolean("text", "floating", fallback=True)
|
||||
floating_x = config.getfloat("text", "floating_x", fallback=0.0)
|
||||
floating_y = config.getfloat("text", "floating_y", fallback=0.0)
|
||||
|
|
@ -336,7 +328,9 @@ class Discover:
|
|||
self.text_overlay.set_mouseover_timer(
|
||||
config.getint("text", "autohide_timer", fallback=1))
|
||||
|
||||
self.text_overlay.set_monitor(monitor)
|
||||
self.text_overlay.set_monitor(
|
||||
config.get("text", "monitor", fallback="Any")
|
||||
)
|
||||
self.text_overlay.set_floating(
|
||||
floating, floating_x, floating_y, floating_w, floating_h)
|
||||
|
||||
|
|
@ -350,11 +344,6 @@ class Discover:
|
|||
"notification", "rightalign", fallback=True))
|
||||
self.notification_overlay.set_align_y(
|
||||
config.getint("notification", "topalign", fallback=2))
|
||||
monitor = 0
|
||||
try:
|
||||
monitor = config.getint("notification", "monitor", fallback=0)
|
||||
except:
|
||||
pass
|
||||
floating = config.getboolean(
|
||||
"notification", "floating", fallback=False)
|
||||
floating_x = config.getfloat(
|
||||
|
|
@ -395,7 +384,9 @@ class Discover:
|
|||
if self.font:
|
||||
self.notification_overlay.set_font(self.font)
|
||||
|
||||
self.notification_overlay.set_monitor(monitor)
|
||||
self.notification_overlay.set_monitor(
|
||||
config.get("notification", "monitor", fallback="Any")
|
||||
)
|
||||
self.notification_overlay.set_floating(
|
||||
floating, floating_x, floating_y, floating_w, floating_h)
|
||||
if self.font:
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@ try:
|
|||
from gi.repository import GtkLayerShell
|
||||
except (ImportError, ValueError):
|
||||
GtkLayerShell = None
|
||||
pass
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
|
|
|||
|
|
@ -83,13 +83,13 @@ class SurfaceGetter():
|
|||
self.func(self.identifier, surface, mask)
|
||||
return
|
||||
except ValueError:
|
||||
errors.append("Value Error - Unable to read %s" % (mixpath))
|
||||
errors.append("Value Error - Unable to read %s", self.url)
|
||||
except TypeError:
|
||||
errors.append("Type Error - Unable to read %s" % (mixpath))
|
||||
errors.append("Type Error - Unable to read %s", self.url)
|
||||
except PIL.UnidentifiedImageError:
|
||||
errors.append("Unknown image type: %s" % (mixpath))
|
||||
errors.append("Unknown image type: %s", self.url)
|
||||
except FileNotFoundError:
|
||||
errors.append("File not found: %s" % (mixpath))
|
||||
errors.append("File not found: %s", self.url)
|
||||
# Not found in theme, try some common locations
|
||||
locations = [os.path.expanduser('~/.local/'), '/usr/', '/app']
|
||||
for prefix in locations:
|
||||
|
|
@ -150,7 +150,7 @@ def from_pil(image, alpha=1.0, format='BGRa'):
|
|||
def to_pil(surface):
|
||||
if surface.get_format() == cairo.Format.ARGB32:
|
||||
return Image.frombuffer('RGBA', (surface.get_width(), surface.get_height()), surface.get_data(), 'raw', "BGRA", surface.get_stride())
|
||||
return Image.frombuffer("RGB", (surface.get_width(), surface.get_height()), surface.get_data(), 'raw', "BGRX", stride)
|
||||
return Image.frombuffer("RGB", (surface.get_width(), surface.get_height()), surface.get_data(), 'raw', "BGRX", surface.get_stride())
|
||||
|
||||
|
||||
def get_surface(func, identifier, ava, size):
|
||||
|
|
|
|||
|
|
@ -281,7 +281,7 @@ class NotificationOverlayWindow(OverlayWindow):
|
|||
return self.test_content
|
||||
return self.content
|
||||
|
||||
def overlay_draw(self, _w, context, data=None):
|
||||
def overlay_draw(self, w, context, data=None):
|
||||
"""
|
||||
Draw the overlay
|
||||
"""
|
||||
|
|
@ -509,12 +509,12 @@ class NotificationOverlayWindow(OverlayWindow):
|
|||
return
|
||||
# key is the url to the image
|
||||
key = self.image_list[shape.data]
|
||||
if key not in self.attachment:
|
||||
if key not in self.icons:
|
||||
get_surface(self.recv_attach,
|
||||
key,
|
||||
key, None)
|
||||
return
|
||||
pix = self.attachment[key]
|
||||
pix = self.icons[key]
|
||||
(pos_x, pos_y) = ctx.get_current_point()
|
||||
draw_img_to_rect(pix, ctx, pos_x, pos_y - self.text_size, self.text_size,
|
||||
self.text_size, path=path)
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ class OverlayWindow(Gtk.Window):
|
|||
self.show_all()
|
||||
if discover.steamos:
|
||||
self.set_gamescope_xatom(1)
|
||||
self.monitor = 0
|
||||
self.monitor = "Any"
|
||||
self.align_right = True
|
||||
self.align_vert = 1
|
||||
self.floating = False
|
||||
|
|
@ -301,17 +301,14 @@ class OverlayWindow(Gtk.Window):
|
|||
def get_display_coords(self):
|
||||
if self.piggyback_parent:
|
||||
return self.piggyback_parent.get_display_coords()
|
||||
display = Gdk.Display.get_default()
|
||||
if "get_monitor" in dir(display):
|
||||
if self.monitor == None or self.monitor < 0:
|
||||
monitor = display.get_monitor(0)
|
||||
else:
|
||||
monitor = display.get_monitor(self.monitor)
|
||||
if monitor:
|
||||
geometry = monitor.get_geometry()
|
||||
return (geometry.x, geometry.y, geometry.width, geometry.height)
|
||||
log.warn("No monitor found! This is going to go badly")
|
||||
return (0, 0, 1920, 1080) # We're in trouble
|
||||
monitor = self.get_monitor_from_plug()
|
||||
if not monitor:
|
||||
monitor = self.get_display().get_monitor(0)
|
||||
if monitor:
|
||||
geometry = monitor.get_geometry()
|
||||
return (geometry.x, geometry.y, geometry.width, geometry.height)
|
||||
log.error("No monitor found! This is going to go badly")
|
||||
return (0, 0, 1920, 1080)
|
||||
|
||||
def get_floating_coords(self):
|
||||
(screen_x, screen_y, screen_width, screen_height) = self.get_display_coords()
|
||||
|
|
@ -323,7 +320,7 @@ class OverlayWindow(Gtk.Window):
|
|||
return (screen_x + self.pos_x * screen_width, screen_y + self.pos_y * screen_height, self.width * screen_width, self.height * screen_height)
|
||||
return (self.pos_x * screen_width, self.pos_y * screen_height, self.width * screen_width, self.height * screen_height)
|
||||
else:
|
||||
return (0, 0, screen_width, screen_height)
|
||||
return (screen_x, screen_y, screen_width, screen_height)
|
||||
|
||||
def set_needs_redraw(self, be_pushy=False):
|
||||
if (not self.hidden and self.enabled) or be_pushy:
|
||||
|
|
@ -374,26 +371,37 @@ class OverlayWindow(Gtk.Window):
|
|||
"""
|
||||
Set the monitor this overlay should display on.
|
||||
"""
|
||||
if type(idx) is str:
|
||||
idx = 0
|
||||
if self.monitor != idx:
|
||||
self.monitor = idx
|
||||
plug_name = "%s" % (idx)
|
||||
if self.monitor != plug_name:
|
||||
self.monitor = plug_name
|
||||
if self.is_wayland:
|
||||
display = Gdk.Display.get_default()
|
||||
if "get_monitor" in dir(display):
|
||||
monitor = display.get_monitor(self.monitor)
|
||||
if monitor:
|
||||
GtkLayerShell.set_monitor(self, monitor)
|
||||
else:
|
||||
self.hide()
|
||||
self.set_wayland_state()
|
||||
self.show()
|
||||
monitor = self.get_monitor_from_plug()
|
||||
if monitor:
|
||||
GtkLayerShell.set_monitor(self, monitor)
|
||||
else:
|
||||
log.error("No get_monitor in display")
|
||||
self.hide()
|
||||
self.set_wayland_state()
|
||||
self.show()
|
||||
self.set_untouchable()
|
||||
self.force_location()
|
||||
self.set_needs_redraw()
|
||||
|
||||
def get_monitor_from_plug(self):
|
||||
if not self.monitor or self.monitor == "Any":
|
||||
return None
|
||||
display = Gdk.Display.get_default()
|
||||
if not "get_n_monitors" in dir(display) or not "get_monitor" in dir(display):
|
||||
return None
|
||||
screen = self.get_screen()
|
||||
count_monitors = display.get_n_monitors()
|
||||
if count_monitors >= 1:
|
||||
for i in range(0, count_monitors):
|
||||
this_mon = display.get_monitor(i)
|
||||
connector = screen.get_monitor_plug_name(i)
|
||||
if connector == self.monitor:
|
||||
return this_mon
|
||||
return None
|
||||
|
||||
def set_align_x(self, align_right):
|
||||
"""
|
||||
Set the alignment (True for right, False for left)
|
||||
|
|
|
|||
|
|
@ -339,13 +339,20 @@ class MainSettingsWindow():
|
|||
m.append_text("Any")
|
||||
|
||||
display = Gdk.Display.get_default()
|
||||
screen = self.window.get_screen()
|
||||
if "get_n_monitors" in dir(display):
|
||||
count_monitors = display.get_n_monitors()
|
||||
if count_monitors >= 1:
|
||||
for i in range(0, count_monitors):
|
||||
v.append_text(display.get_monitor(i).get_model())
|
||||
t.append_text(display.get_monitor(i).get_model())
|
||||
m.append_text(display.get_monitor(i).get_model())
|
||||
this_mon = display.get_monitor(i)
|
||||
manufacturer = this_mon.get_manufacturer()
|
||||
model = this_mon.get_model()
|
||||
connector = screen.get_monitor_plug_name(i)
|
||||
monitor_label = "%s %s\n%s" % (
|
||||
manufacturer, model, connector)
|
||||
v.append_text(monitor_label)
|
||||
t.append_text(monitor_label)
|
||||
m.append_text(monitor_label)
|
||||
|
||||
v.set_active(v_value)
|
||||
t.set_active(t_value)
|
||||
|
|
@ -421,20 +428,18 @@ class MainSettingsWindow():
|
|||
|
||||
self.widget['voice_anchor_float'].set_active(
|
||||
0 if config.getboolean("main", "floating", fallback=False) else 1)
|
||||
self.update_floating_ahchor()
|
||||
self.update_floating_anchor()
|
||||
|
||||
self.widget['voice_align_1'].set_active(
|
||||
config.getboolean("main", "rightalign", fallback=False))
|
||||
self.widget['voice_align_2'].set_active(
|
||||
config.getint("main", "topalign", fallback=1))
|
||||
|
||||
monitor = 0
|
||||
try:
|
||||
config.getint("main", "monitor", fallback=0)
|
||||
except:
|
||||
pass
|
||||
|
||||
self.widget['voice_monitor'].set_active(monitor+1)
|
||||
self.widget['voice_monitor'].set_active(
|
||||
self.get_monitor_index_from_plug(
|
||||
config.get("main", "monitor", fallback="Any")
|
||||
)
|
||||
)
|
||||
|
||||
font = config.get("main", "font", fallback=None)
|
||||
if font:
|
||||
|
|
@ -600,13 +605,11 @@ class MainSettingsWindow():
|
|||
self.widget['text_background_colour'].set_rgba(self.make_colour(config.get(
|
||||
"text", "bg_col", fallback="[0.0,0.0,0.0,0.5]")))
|
||||
|
||||
monitor = 0
|
||||
try:
|
||||
config.getint("text", "monitor", fallback=0)
|
||||
except:
|
||||
pass
|
||||
|
||||
self.widget['text_monitor'].set_active(monitor+1)
|
||||
self.widget['text_monitor'].set_active(
|
||||
self.get_monitor_index_from_plug(
|
||||
config.get("text", "monitor", fallback="Any")
|
||||
)
|
||||
)
|
||||
|
||||
self.widget['text_show_attachments'].set_active(config.getboolean(
|
||||
"text", "show_attach", fallback=True))
|
||||
|
|
@ -643,13 +646,11 @@ class MainSettingsWindow():
|
|||
self.widget['notification_background_colour'].set_rgba(self.make_colour(config.get(
|
||||
"notification", "bg_col", fallback="[0.0,0.0,0.0,0.5]")))
|
||||
|
||||
monitor = 0
|
||||
try:
|
||||
config.getint("notification", "monitor", fallback=0)
|
||||
except:
|
||||
pass
|
||||
|
||||
self.widget['notification_monitor'].set_active(monitor+1)
|
||||
self.widget['notification_monitor'].set_active(
|
||||
self.get_monitor_index_from_plug(
|
||||
config.get("notification", "monitor", fallback="Any")
|
||||
)
|
||||
)
|
||||
|
||||
self.widget['notification_align_1'].set_active(config.getboolean(
|
||||
"notification", "rightalign", fallback=True))
|
||||
|
|
@ -730,6 +731,20 @@ class MainSettingsWindow():
|
|||
guild_ids.append(guild_id)
|
||||
return guild_ids
|
||||
|
||||
def get_monitor_index_from_plug(self, monitor):
|
||||
if not monitor or monitor == "Any":
|
||||
return 0
|
||||
display = Gdk.Display.get_default()
|
||||
screen = self.window.get_screen()
|
||||
if "get_n_monitors" in dir(display):
|
||||
count_monitors = display.get_n_monitors()
|
||||
if count_monitors >= 1:
|
||||
for i in range(0, count_monitors):
|
||||
connector = screen.get_monitor_plug_name(i)
|
||||
if connector == monitor:
|
||||
return i+1
|
||||
return 0
|
||||
|
||||
def get_monitor_obj(self, idx):
|
||||
"""
|
||||
Helper function to find the monitor object of the monitor
|
||||
|
|
@ -828,13 +843,6 @@ class MainSettingsWindow():
|
|||
with open(self.rpc_file, 'w') as f:
|
||||
f.write('--rpc --close')
|
||||
|
||||
def voice_toggle_test_content(self, button):
|
||||
self.voice_overlay.set_show_dummy(button.get_active())
|
||||
self.show_dummy = button.get_active()
|
||||
if self.show_dummy:
|
||||
self.voice_overlay.set_enabled(True)
|
||||
self.voice_overlay.set_hidden(False)
|
||||
|
||||
def overview_close(self, button):
|
||||
log.info("Quit pressed")
|
||||
self.close_overlay()
|
||||
|
|
@ -968,9 +976,9 @@ class MainSettingsWindow():
|
|||
|
||||
def voice_anchor_float_changed(self, button):
|
||||
self.config_set("main", "floating", "%s" % (button.get_active() == 0))
|
||||
self.update_floating_ahchor()
|
||||
self.update_floating_anchor()
|
||||
|
||||
def update_floating_ahchor(self):
|
||||
def update_floating_anchor(self):
|
||||
floating = self.widget['voice_anchor_float'].get_active() == 0
|
||||
if 'XDG_SESSION_DESKTOP' in os.environ and os.environ['XDG_SESSION_DESKTOP'] == 'cinnamon':
|
||||
floating = True
|
||||
|
|
@ -985,7 +993,14 @@ class MainSettingsWindow():
|
|||
self.widget['voice_place_window_button'].hide()
|
||||
|
||||
def voice_monitor_changed(self, button):
|
||||
self.config_set("main", "monitor", "%s" % (button.get_active()-1))
|
||||
screen = self.window.get_screen()
|
||||
idx = button.get_active()
|
||||
plug = "Any"
|
||||
if idx > 0:
|
||||
monitor = screen.get_monitor_plug_name(button.get_active()-1)
|
||||
if monitor:
|
||||
plug = monitor
|
||||
self.config_set("main", "monitor", plug)
|
||||
|
||||
def voice_align_1_changed(self, button):
|
||||
self.config_set("main", "rightalign", "%s" % (button.get_active()))
|
||||
|
|
@ -1202,7 +1217,12 @@ class MainSettingsWindow():
|
|||
self.config_set("text", "bg_col", json.dumps(colour))
|
||||
|
||||
def text_monitor_changed(self, button):
|
||||
self.config_set("text", "monitor", "%s" % (button.get_active()-1))
|
||||
screen = self.window.get_screen()
|
||||
plug = "Any"
|
||||
monitor = screen.get_monitor_plug_name(button.get_active()-1)
|
||||
if monitor:
|
||||
plug = monitor
|
||||
self.config_set("text", "monitor", plug)
|
||||
|
||||
def text_show_attachments_changed(self, button):
|
||||
self.config_set("text", "show_attach", "%s" % (button.get_active()))
|
||||
|
|
@ -1239,8 +1259,12 @@ class MainSettingsWindow():
|
|||
self.config_set("notification", "bg_col", json.dumps(colour))
|
||||
|
||||
def notification_monitor_changed(self, button):
|
||||
self.config_set("notification", "monitor", "%s" %
|
||||
(button.get_active()-1))
|
||||
screen = self.window.get_screen()
|
||||
plug = "Any"
|
||||
monitor = screen.get_monitor_plug_name(button.get_active()-1)
|
||||
if monitor:
|
||||
plug = monitor
|
||||
self.config_set("notification", "monitor", plug)
|
||||
|
||||
def notification_align_1_changed(self, button):
|
||||
self.config_set("notification", "rightalign", "%s" %
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue