Daniel Brötzmann pushed to branch master at gajim / gajim


Commits:
bae27f1c by wurstsalat at 2021-12-11T19:32:22+01:00
MoreMenuButton: Create Popover on demand

- - - - -


1 changed file:

- gajim/gtk/conversation/rows/base.py


Changes:

=====================================
gajim/gtk/conversation/rows/base.py
=====================================
@@ -95,9 +95,9 @@ def __destroy(widget: Gtk.Widget) -> None:
 
 
 @wrap_with_event_box
-class MoreMenuButton(Gtk.MenuButton):
+class MoreMenuButton(Gtk.Button):
     def __init__(self, row, contact, name):
-        Gtk.MenuButton.__init__(self)
+        Gtk.Button.__init__(self)
         self.set_valign(Gtk.Align.START)
         self.set_halign(Gtk.Align.END)
         self.set_relief(Gtk.ReliefStyle.NONE)
@@ -111,11 +111,9 @@ def __init__(self, row, contact, name):
         image = Gtk.Image.new_from_icon_name(
             'feather-more-horizontal-symbolic', Gtk.IconSize.BUTTON)
         self.add(image)
-        self._create_popover()
-
         self.connect('clicked', self._on_click)
 
-    def _on_click(self, _button):
+    def _on_click(self, _button: Gtk.Button) -> None:
         show_retract = False
         if self._contact.is_groupchat:
             disco_info = app.storage.cache.get_last_disco_info(
@@ -125,9 +123,9 @@ def _on_click(self, _button):
             is_allowed = is_retraction_allowed(self_contact, contact)
             if disco_info.has_message_moderation and is_allowed:
                 show_retract = True
-        self._retract_button.set_visible(show_retract)
+        self._create_popover(show_retract)
 
-    def _create_popover(self):
+    def _create_popover(self, show_retract: bool) -> None:
         menu_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
         menu_box.get_style_context().add_class('padding-6')
 
@@ -147,17 +145,25 @@ def _create_popover(self):
             'edit-copy-symbolic', Gtk.IconSize.MENU))
         menu_box.add(copy_button)
 
-        self._retract_button = Gtk.ModelButton()
-        self._retract_button.set_halign(Gtk.Align.START)
-        self._retract_button.connect(
-            'clicked', self._row.on_retract_message)
-        self._retract_button.set_label(_('Retract'))
-        self._retract_button.set_image(Gtk.Image.new_from_icon_name(
-            'edit-undo-symbolic', Gtk.IconSize.MENU))
-        menu_box.add(self._retract_button)
+        if show_retract:
+            retract_button = Gtk.ModelButton()
+            retract_button.set_halign(Gtk.Align.START)
+            retract_button.connect(
+                'clicked', self._row.on_retract_message)
+            retract_button.set_label(_('Retract'))
+            retract_button.set_image(Gtk.Image.new_from_icon_name(
+                'edit-undo-symbolic', Gtk.IconSize.MENU))
+            menu_box.add(retract_button)
 
         menu_box.show_all()
 
         popover = Gtk.PopoverMenu()
         popover.add(menu_box)
-        self.set_popover(popover)
+        popover.set_relative_to(self)
+        popover.set_position(Gtk.PositionType.BOTTOM)
+        popover.connect('closed', self._on_closed)
+        popover.popup()
+
+    @staticmethod
+    def _on_closed(popover: Gtk.Popover) -> None:
+        GLib.idle_add(popover.destroy)



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

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


_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to