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]