Philipp Hörist pushed to branch gtk4 at gajim / gajim


Commits:
15202599 by Philipp Hörist at 2024-10-04T17:36:46+02:00
refactor: Make Popup work in workspace side bar

- - - - -


2 changed files:

- gajim/gtk/util.py
- gajim/gtk/workspace_side_bar.py


Changes:

=====================================
gajim/gtk/util.py
=====================================
@@ -956,19 +956,17 @@ def __init__(self,
         self.width = width
 
 
-class GajimPopover(Gtk.Popover):
+class GajimPopover(Gtk.PopoverMenu):
     def __init__(self,
                  menu: Gio.MenuModel | None = None,
-                 relative_to: Gtk.Widget | None = None,
                  position: Gtk.PositionType = Gtk.PositionType.RIGHT,
                  event: Any | None = None) -> None:
 
-        Gtk.Popover.__init__(self)
+        Gtk.Popover.__init__(self, autohide=True)
 
         if menu is not None:
-            self.bind_model(menu)
+            self.set_menu_model(menu)
 
-        self.set_relative_to(relative_to)
         self.set_position(position)
         if event is not None:
             self.set_pointing_from_event(event)
@@ -982,9 +980,11 @@ def set_pointing_to_coord(self, x: float, y: float) -> 
None:
         rectangle = GdkRectangle(x=int(x), y=int(y))
         self.set_pointing_to(rectangle)
 
-    def _destroy(self, popover: Gtk.Popover) -> None:
+    @staticmethod
+    def _destroy(popover: Gtk.Popover) -> None:
+        print('called')
         app.check_finalize(popover)
-        GLib.idle_add(popover.set_relative_to, None)
+        # GLib.idle_add(popover.set_relative_to, None)
 
 
 def iterate_listbox_children(listbox: Gtk.ListBox) -> Iterator[Gtk.Widget]:


=====================================
gajim/gtk/workspace_side_bar.py
=====================================
@@ -294,9 +294,12 @@ def __init__(self, workspace_id: str) -> None:
         selection_bar.set_size_request(6, -1)
         selection_bar.get_style_context().add_class('selection-bar')
 
+        self._popover_menu = GajimPopover(None)
+
         item_box = Gtk.Box()
         item_box.append(selection_bar)
         item_box.append(self._image)
+        item_box.append(self._popover_menu)
 
         overlay = Gtk.Overlay()
         overlay.set_child(item_box)
@@ -315,18 +318,27 @@ def __init__(self, workspace_id: str) -> None:
         # eventbox.connect('drag-begin', self._on_drag_begin)
         # eventbox.connect('drag-end', self._on_drag_end)
         # eventbox.connect('drag-data-get', self._on_drag_data_get)
-        # eventbox.connect('button-press-event', self._popup_menu)
+
+        controller = Gtk.GestureClick(button=Gdk.BUTTON_SECONDARY)
+        controller.connect('pressed', self._on_pressed)
+        self.add_controller(controller)
+
         eventbox.append(overlay)
         self.set_child(eventbox)
 
-    def _popup_menu(self, _widget: Gtk.Widget, event: Any) -> None:
-        if event.button != Gdk.BUTTON_SECONDARY:
-            return
+    def _on_pressed(
+        self,
+        _gesture_click: Gtk.GestureClick,
+        n_press: int,
+        x: float,
+        y: float,
+    ) -> bool:
 
         menu = get_workspace_menu(self.workspace_id)
-
-        popover = GajimPopover(menu, relative_to=self, event=event)
-        popover.popup()
+        self._popover_menu.set_menu_model(menu)
+        self._popover_menu.set_pointing_to_coord(x=x, y=y)
+        self._popover_menu.popup()
+        return Gdk.EVENT_STOP
 
     def update_avatar(self) -> None:
         self._image.update()



View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/152025997b3f48749130a7df4a7af705d61dc301

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/152025997b3f48749130a7df4a7af705d61dc301
You're receiving this email because of your account on dev.gajim.org.


_______________________________________________
Commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to