- Correctly give up gamescope xatom if no overlays have contents

This commit is contained in:
trigg 2023-09-24 21:32:18 +01:00
parent a1fa03d0a5
commit fece29c496
4 changed files with 45 additions and 3 deletions

View file

@ -258,6 +258,15 @@ class NotificationOverlayWindow(OverlayWindow):
text_height = icon_width
return text_height + (self.border_radius*4) + self.padding
def has_content(self):
if not self.enabled:
return False
if self.hidden:
return False
if self.testing:
return self.test_content
return self.content
def overlay_draw(self, _w, context, data=None):
"""
Draw the overlay

View file

@ -66,7 +66,7 @@ class OverlayWindow(Gtk.Window):
self.hidden = False
self.enabled = False
self.set_size_request(50, 50)
self.connect('draw', self.overlay_draw)
self.connect('draw', self.overlay_draw_pre)
# Set RGBA
screen = self.get_screen()
visual = screen.get_rgba_visual()
@ -86,6 +86,8 @@ class OverlayWindow(Gtk.Window):
self.set_decorated(True)
self.set_accept_focus(False)
self.set_wayland_state()
self.piggyback = None
self.piggyback_parent = None
if not piggyback:
self.show_all()
if discover.steamos:
@ -97,14 +99,14 @@ class OverlayWindow(Gtk.Window):
self.force_xshape = False
self.context = None
self.autohide = False
self.piggyback = None
self.piggyback_parent = None
if piggyback:
self.set_piggyback(piggyback)
self.get_screen().connect("composited-changed", self.check_composite)
def set_gamescope_xatom(self, enabled):
if self.piggyback_parent:
return
display = Display()
atom = display.intern_atom("GAMESCOPE_EXTERNAL_OVERLAY")
opaq = display.intern_atom("_NET_WM_WINDOW_OPACITY")
@ -143,6 +145,21 @@ class OverlayWindow(Gtk.Window):
other_overlay.piggyback = self
self.piggyback_parent = other_overlay
def has_content(self):
return False
def overlay_draw_pre(self, _w, context, data=None):
content = self.has_content()
if self.piggyback and self.piggyback.has_content():
content = True
if self.discover.steamos:
if not content:
self.set_gamescope_xatom(0)
else:
if not self.hidden and self.enabled:
self.set_gamescope_xatom(1)
self.overlay_draw(_w, context, data)
def overlay_draw(self, _w, context, data=None):
"""
Draw overlay

View file

@ -194,6 +194,13 @@ class TextOverlayWindow(OverlayWindow):
self.attachment[identifier] = pix
self.needsredraw = True
def has_content(self):
if not self.enabled:
return False
if self.hidden:
return False
return self.content
def overlay_draw(self, w, context, data=None):
"""
Draw the overlay

View file

@ -434,6 +434,15 @@ class VoiceOverlayWindow(OverlayWindow):
in_list.sort(key=lambda x: locale.strxfrm(x['friendlyname']))
return in_list
def has_content(self):
if not self.enabled:
return False
if self.hidden:
return False
if self.use_dummy:
return True
return self.userlist
def overlay_draw(self, w, context, data=None):
"""
Draw the Overlay