From c07b87eace5a2023ab4ed7d480c413783c1abfaf Mon Sep 17 00:00:00 2001 From: trigg Date: Sat, 23 Mar 2024 20:26:14 +0000 Subject: [PATCH] - Debounce setting gamescope xatom too often - Check for existence of x11 window before attempting to use it in overlay - Check for valid monitor before setting window size based on it - Check for existence of x11 window when unsetting xshape - Fix typo in redraw logic for gamescope mode --- discover_overlay/overlay.py | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/discover_overlay/overlay.py b/discover_overlay/overlay.py index 2b203d3..9c81305 100644 --- a/discover_overlay/overlay.py +++ b/discover_overlay/overlay.py @@ -55,6 +55,8 @@ class OverlayWindow(Gtk.Window): def __init__(self, discover, piggyback=None): Gtk.Window.__init__(self, type=self.detect_type()) + self.is_xatom_set=False + self.discover = discover screen = self.get_screen() self.text_font = None @@ -111,7 +113,8 @@ class OverlayWindow(Gtk.Window): self.get_screen().connect("composited-changed", self.check_composite) self.get_screen().connect("monitors-changed", self.screen_changed) self.get_screen().connect("size-changed", self.screen_changed) - self.get_window().set_events(self.get_window().get_events() | Gdk.EventMask.ENTER_NOTIFY_MASK) + if self.get_window(): + self.get_window().set_events(self.get_window().get_events() | Gdk.EventMask.ENTER_NOTIFY_MASK) self.connect("enter-notify-event", self.mouseover) self.connect("leave-notify-event", self.mouseout) self.mouse_over_timer = None @@ -126,6 +129,10 @@ class OverlayWindow(Gtk.Window): def set_gamescope_xatom(self, enabled): if self.piggyback_parent: return + + if enabled == self.is_xatom_set: + return + self.is_xatom_set = enabled display = Display() atom = display.intern_atom("GAMESCOPE_EXTERNAL_OVERLAY") opaq = display.intern_atom("_NET_WM_WINDOW_OPACITY") @@ -254,7 +261,8 @@ class OverlayWindow(Gtk.Window): """ Remove XShape (not input shape) """ - self.get_window().shape_combine_region(None, 0, 0) + if self.get_window(): + self.get_window().shape_combine_region(None, 0, 0) def force_location(self): """ @@ -266,12 +274,13 @@ class OverlayWindow(Gtk.Window): display = Gdk.Display.get_default() if "get_monitor" in dir(display): monitor = display.get_monitor(self.monitor) - geometry = monitor.get_geometry() - scale_factor = monitor.get_scale_factor() - width = geometry.width - height = geometry.height - self.resize(width, height) - self.set_needs_redraw() + if monitor: + geometry = monitor.get_geometry() + scale_factor = monitor.get_scale_factor() + width = geometry.width + height = geometry.height + self.resize(width, height) + self.set_needs_redraw() return if not self.is_wayland: self.set_decorated(False) @@ -306,7 +315,7 @@ class OverlayWindow(Gtk.Window): def set_needs_redraw(self): if not self.hidden and self.enabled: if self.piggyback_parent: - self.piggyback_parent.set_need_redraw() + self.piggyback_parent.set_needs_redraw() if self.redraw_id == None: self.redraw_id = GLib.idle_add(self.redraw)