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/4e168244b4e02b1f96727f8950e2c9583...