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


Commits:
4e168244 by wurstsalat at 2021-11-14T13:40:49+01:00
StartChat: Add 'Forget this Group Chat' menu action

- - - - -


4 changed files:

- gajim/app_actions.py
- gajim/application.py
- gajim/gtk/start_chat.py
- gajim/gui_menu_builder.py


Changes:

=====================================
gajim/app_actions.py
=====================================
@@ -17,6 +17,8 @@
 from gi.repository import Gtk
 from gi.repository import Gdk
 
+from nbxmpp import JID
+
 from gajim.common import app
 from gajim.common import helpers
 from gajim.common.app import interface
@@ -262,6 +264,12 @@ def start_chat(_action, param):
     account, jid = param.get_strv()
     app.interface.start_chat_from_jid(account, jid)
 
+def forget_groupchat(_action, param):
+    account, jid = param.unpack()
+    client = app.get_client(account)
+    client.get_module('Bookmarks').remove(JID.from_string(jid))
+    window = open_window('StartChatDialog')
+    window.remove_row(account, jid)
 
 def on_groupchat_join(_action, param):
     account, jid = param.get_strv()


=====================================
gajim/application.py
=====================================
@@ -398,6 +398,7 @@ def add_actions(self):
             ('open-link', 'as', app_actions.open_link),
             ('open-mail', 's', app_actions.open_mail),
             ('create-groupchat', 's', app_actions.on_create_gc),
+            ('forget-groupchat', 'as', app_actions.forget_groupchat),
             ('groupchat-join', 'as', app_actions.on_groupchat_join),
         ]
 


=====================================
gajim/gtk/start_chat.py
=====================================
@@ -35,6 +35,8 @@
 from gajim.common.const import MUC_DISCO_ERRORS
 from gajim.common.modules.util import as_task
 
+from gajim.gui_menu_builder import get_start_chat_row_menu
+
 from .chat_filter import ChatFilter
 from .groupchat_info import GroupChatInfoScrolled
 from .groupchat_nick import NickChooser
@@ -126,6 +128,12 @@ def __init__(self):
     def set_search_text(self, text):
         self._ui.search_entry.set_text(text)
 
+    def remove_row(self, account: str, jid: str) -> None:
+        for row in self._ui.listbox.get_children():
+            if row.account == account and row.jid == jid:
+                row.destroy()
+                return
+
     def _global_search_active(self):
         return self._ui.global_search_toggle.get_active()
 
@@ -747,9 +755,32 @@ def __init__(self, account, contact, jid, name, 
show_account,
 
         grid.add(box)
 
-        self.add(grid)
+        eventbox = Gtk.EventBox()
+        eventbox.connect('button-press-event', self._popup_menu)
+        eventbox.add(grid)
+        self.add(eventbox)
         self.show_all()
 
+    def _popup_menu(self, _widget, event):
+        if not self.groupchat:
+            return
+
+        if event.button != 3:  # right click
+            return
+
+        menu = get_start_chat_row_menu(self.account, self.jid)
+
+        rectangle = Gdk.Rectangle()
+        rectangle.x = event.x
+        rectangle.y = event.y
+        rectangle.width = rectangle.height = 1
+
+        popover = Gtk.Popover.new_from_model(self, menu)
+        popover.set_relative_to(self)
+        popover.set_position(Gtk.PositionType.RIGHT)
+        popover.set_pointing_to(rectangle)
+        popover.popup()
+
     def _get_avatar_image(self, contact):
         if self.new:
             icon_name = 'avatar-default'


=====================================
gajim/gui_menu_builder.py
=====================================
@@ -485,6 +485,22 @@ def get_subscription_menu(account: str, jid: str) -> 
Gio.Menu:
     return menu
 
 
+def get_start_chat_row_menu(account: str, jid: Union[JID, str]) -> Gio.Menu:
+    jid = str(jid)
+    menu_items: List[Tuple[str, str]] = [
+        ('forget-groupchat', _('Forget this Group Chat')),
+    ]
+    menu = Gio.Menu()
+    for item in menu_items:
+        action, label = item
+        action = f'app.{action}'
+        menuitem = Gio.MenuItem.new(label, action)
+        variant_list = GLib.Variant('as', [account, jid])
+        menuitem.set_action_and_target_value(action, variant_list)
+        menu.append_item(menuitem)
+    return menu
+
+
 def get_chat_list_row_menu(workspace_id: str, account: str,
                            jid: Union[JID, str], pinned: bool) -> Gio.Menu:
     jid = str(jid)



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

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/gajim/-/commit/4e168244b4e02b1f96727f8950e2c9583ac0b670
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