window-list: Fix duplicate window button entries
Again.
By using this site, you agree to have cookies stored on your device, strictly for functional purposes, such as storing your session and preferences.
Again.
soreau,
created on Saturday, 6 September 2025, 21:45:54 (1757195154),
received on Saturday, 6 September 2025, 21:54:28 (1757195668)
Author identity: Scott Moreau <oreaus@gmail.com>
2fd324dcbe8330947e70ababb2e8dfdce425fbd0
self.foreign_toplevel_closed(handle) def foreign_toplevel_output_enter(self, handle, output): if self.show_only_this_output and (not hasattr(output, "name") or output.name != self.get_root().monitor_name): return
button.set_layout_manager(WindowButtonLayoutManager(self.window_button_options, button)) button.connect("clicked", self.on_button_click) self.set_app_id(button, handle.app_id) self.toplevel_buttons[handle] = buttonself.append(button)if handle.app_id.rsplit(maxsplit=1)[-1].startswith("wf-ipc-"): wf_output = self.get_wf_output_by_name(self.get_root().monitor_name) wf_id = int(handle.app_id.rsplit(maxsplit=1)[-1].removeprefix("wf-ipc-")) view = self.wf_socket.get_view(wf_id) mid_x = view["geometry"]["x"] + view["geometry"]["width"] / 2 mid_y = view["geometry"]["y"] + view["geometry"]["height"] / 2 output_width = wf_output["geometry"]["width"] output_height = wf_output["geometry"]["height"] if 0 <= mid_x < output_width and 0 <= mid_y < output_height and button.output == self.my_output: # It is in this workspace; keep it if button.get_parent() is None: self.toplevel_buttons[handle] = button self.append(button) else: self.toplevel_buttons[handle] = button self.append(button)def foreign_toplevel_output_leave(self, handle, output): if handle in self.toplevel_buttons:
self.drags = {} self.wl_output_ids = set() self.started = False self.all_handles: set[ZwlrForeignToplevelHandleV1] = set() self.obsolete_handles: set[ZwlrForeignToplevelHandleV1] = set()self.add_main_option( "trigger",
self.foreign_toplevel_manager.destroy() self.wl_globals.remove(self.foreign_toplevel_manager) self.foreign_toplevel_manager = None self.foreign_toplevel_refresh()def on_foreign_toplevel_manager_finish(self, manager: ZwlrForeignToplevelManagerV1): if self.foreign_toplevel_manager:
def on_new_toplevel(self, manager: ZwlrForeignToplevelManagerV1, handle: ZwlrForeignToplevelHandleV1): self.all_handles.add(handle)for panel in self.panels: panel.foreign_toplevel_new(manager, handle) handle.dispatcher["title"] = self.on_title_changed
handle.dispatcher["closed"] = self.on_closed def on_output_enter(self, handle, output): if handle in self.obsolete_handles: returnfor panel in self.panels: panel.foreign_toplevel_output_enter(handle, output) def on_output_leave(self, handle, output): if handle in self.obsolete_handles: returnfor panel in self.panels: panel.foreign_toplevel_output_leave(handle, output) def on_title_changed(self, handle, title): if handle in self.obsolete_handles: returnfor panel in self.panels: panel.foreign_toplevel_title(handle, title) def on_app_id_changed(self, handle, app_id): if handle in self.obsolete_handles: returnfor panel in self.panels: panel.foreign_toplevel_app_id(handle, app_id) def on_state_changed(self, handle, state): if handle in self.obsolete_handles: returnfor panel in self.panels: panel.foreign_toplevel_state(handle, state) def on_closed(self, handle): if handle in self.obsolete_handles: returnfor panel in self.panels: panel.foreign_toplevel_closed(handle) def foreign_toplevel_refresh(self): self.obsolete_handles = self.all_handles.copy()for panel in self.panels: panel.foreign_toplevel_refresh()
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)