Fix random crashes
This (hopefully) fixes the case where some actions cause the panel to die, with the Gdk wayland error message "Error reading events from display: Invalid argument".
This (hopefully) fixes the case where some actions cause the panel to die, with the Gdk wayland error message "Error reading events from display: Invalid argument".
by soreau, Thursday, 4 September 2025, 14:40:08 (1756996808), pushed by roundabout, Saturday, 6 September 2025, 21:54:28 (1757195668)
Author identity: Scott Moreau <oreaus@gmail.com>
b96a94015441cf1d41643a2fa0ea4a5dc48d2af3
_("NAME")
)
def destroy_foreign_toplevel_manager(self):
self.foreign_toplevel_manager.destroy()
self.wl_globals.remove(self.foreign_toplevel_manager)
self.foreign_toplevel_manager = None
def on_foreign_toplevel_manager_finish(self, manager: ZwlrForeignToplevelManagerV1):
if self.foreign_toplevel_manager:
self.destroy_foreign_toplevel_manager()
def on_new_toplevel(self, manager: ZwlrForeignToplevelManagerV1,
handle: ZwlrForeignToplevelHandleV1):
for panel in self.panels:
panel.wl_output_enter(output, output.name)
if not output.name.startswith("live-preview"):
if self.foreign_toplevel_manager:
self.foreign_toplevel_manager.destroy()
self.wl_globals.remove(self.foreign_toplevel_manager)
self.foreign_toplevel_manager.stop()
self.wl_display.roundtrip()
if self.foreign_toplevel_manager:
self.destroy_foreign_toplevel_manager()
self.foreign_toplevel_refresh()
self.foreign_toplevel_manager = self.registry.bind(self.foreign_toplevel_manager_id, ZwlrForeignToplevelManagerV1, self.foreign_toplevel_version)
self.foreign_toplevel_manager.id = self.foreign_toplevel_manager_id
self.wl_globals.append(self.foreign_toplevel_manager)
self.foreign_toplevel_manager.dispatcher["toplevel"] = self.on_new_toplevel
self.foreign_toplevel_manager.dispatcher["finished"] = lambda *a: print("Toplevel manager finished")
self.foreign_toplevel_manager.dispatcher["finished"] = self.on_foreign_toplevel_manager_finish
self.wl_display.roundtrip()
self.panels_generated = True
print(f"Monitor {output.name} ({interface}) connected", file=sys.stderr)