From ce9af46fc382560c82f4ee558e58390e3e5a2a08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20H=C3=B6rist?= Date: Thu, 28 Jun 2018 00:04:17 +0200 Subject: [PATCH] Fix join groupchat dialog with multiple accounts The dialog didnt show the account combobox when activated via CTRL + J from the Roster Also add a application action for join groupchat --- gajim/app_actions.py | 19 ++++++++++--------- gajim/application.py | 1 + gajim/common/app.py | 6 ++++++ gajim/dialogs.py | 19 ++++++++++++++----- gajim/roster_window.py | 11 +---------- 5 files changed, 32 insertions(+), 24 deletions(-) diff --git a/gajim/app_actions.py b/gajim/app_actions.py index 5206f901b..6174edd6e 100644 --- a/gajim/app_actions.py +++ b/gajim/app_actions.py @@ -120,16 +120,17 @@ def on_service_disco(action, param): def on_join_gc(action, param): - account = param.get_string() - invisible_show = app.SHOW_LIST.index('invisible') - if app.connections[account].connected == invisible_show: - app.interface.raise_dialog('join-while-invisible') - return - if 'join_gc' in interface.instances[account]: - interface.instances[account]['join_gc'].present() + account = None + if param is None: + if not app.get_connected_accounts(): + return else: - interface.instances[account]['join_gc'] = \ - dialogs.JoinGroupchatWindow(account, None) + account = param.get_string() + window = app.get_app_window(dialogs.JoinGroupchatWindow) + if window is None: + dialogs.JoinGroupchatWindow(account, None) + else: + window.present() def on_add_contact(action, param): diff --git a/gajim/application.py b/gajim/application.py index 63eb4a78f..375fb2bb3 100644 --- a/gajim/application.py +++ b/gajim/application.py @@ -303,6 +303,7 @@ class GajimApplication(Gtk.Application): ('quit', app_actions.on_quit), ('accounts', app_actions.on_accounts), ('add-account', app_actions.on_add_account), + ('join-groupchat', app_actions.on_join_gc), ('manage-proxies', app_actions.on_manage_proxies), ('start-chat', app_actions.on_new_chat), ('bookmarks', app_actions.on_manage_bookmarks), diff --git a/gajim/common/app.py b/gajim/common/app.py index 8bb695a03..8bdad77f3 100644 --- a/gajim/common/app.py +++ b/gajim/common/app.py @@ -577,3 +577,9 @@ def prefers_app_menu(): if sys.platform == 'win32': return False return app.prefers_app_menu() + +def get_app_window(cls): + for win in app.get_windows(): + if isinstance(win, cls): + return win + return None diff --git a/gajim/dialogs.py b/gajim/dialogs.py index d24468992..f8f57c369 100644 --- a/gajim/dialogs.py +++ b/gajim/dialogs.py @@ -2351,10 +2351,10 @@ class JoinGroupchatWindow(Gtk.ApplicationWindow): else: for widget in extended_widgets: getattr(self, widget).show() - self._fill_recent_and_servers(account) if account is None: connected_accounts = app.get_connected_accounts() + account = connected_accounts[0] for acc in connected_accounts: self.account_combo.append_text(acc) else: @@ -2378,8 +2378,6 @@ class JoinGroupchatWindow(Gtk.ApplicationWindow): # Select first account self.account_combo.set_active(0) - if self.minimal_mode == 0: - self.recent_combo.set_active(0) if self.password is not None: self.password_entry.set_text(self.password) @@ -2393,7 +2391,7 @@ class JoinGroupchatWindow(Gtk.ApplicationWindow): # Show password field if we are in extended mode or # The MUC is passwordprotected if self.minimal_mode == 0 or muc_caps_cache.supports( - room_jid, 'muc_passwordprotected'): + room_jid, 'muc_passwordprotected'): self.password_entry.show() self.password_label.show() @@ -2405,12 +2403,15 @@ class JoinGroupchatWindow(Gtk.ApplicationWindow): self.server_combo.get_child().set_text(server) def _fill_recent_and_servers(self, account): + self.recent_combo.remove_all() + self.server_combo.remove_all() recent = app.get_recent_groupchats(account) servers = [] for groupchat in recent: text = '%s on %s@%s' % (groupchat.nickname, groupchat.room, groupchat.server) + self.recent_combo.append_text(text) servers.append(groupchat.server) @@ -2435,7 +2436,11 @@ class JoinGroupchatWindow(Gtk.ApplicationWindow): def _on_account_combo_changed(self, combo): account = combo.get_active_text() + self.account = account self.nick_entry.set_text(app.nicks[account]) + if self.minimal_mode == 0: + self._fill_recent_and_servers(account) + self.recent_combo.set_active(0) def _on_key_press_event(self, widget, event): if event.keyval == Gdk.KEY_Escape: @@ -2448,6 +2453,11 @@ class JoinGroupchatWindow(Gtk.ApplicationWindow): account = self.account_combo.get_active_text() nickname = self.nick_entry.get_text() + invisible_show = app.SHOW_LIST.index('invisible') + if app.connections[account].connected == invisible_show: + app.interface.raise_dialog('join-while-invisible') + return + if self.minimal_mode < 2: if self.minimal_mode == 0: server = self.server_combo.get_active_text() @@ -2526,7 +2536,6 @@ class JoinGroupchatWindow(Gtk.ApplicationWindow): def _on_destroy(self, *args): if self.minimal_mode == 0: - del app.interface.instances[self.account]['join_gc'] app.ged.remove_event_handler('agent-info-received', ged.GUI1, self._nec_agent_info_received) app.ged.remove_event_handler('agent-info-error-received', ged.GUI1, diff --git a/gajim/roster_window.py b/gajim/roster_window.py index 7b9944e21..b4fdc6599 100644 --- a/gajim/roster_window.py +++ b/gajim/roster_window.py @@ -3626,16 +3626,7 @@ class RosterWindow: """ When the join gc menuitem is clicked, show the join gc window """ - invisible_show = app.SHOW_LIST.index('invisible') - if app.connections[account].connected == invisible_show: - dialogs.ErrorDialog(_('You cannot join a group chat while you are ' - 'invisible')) - return - if 'join_gc' in app.interface.instances[account]: - app.interface.instances[account]['join_gc'].present() - else: - app.interface.instances[account]['join_gc'] = \ - dialogs.JoinGroupchatWindow(account, None) + app.app.activate_action('join-groupchat') def on_show_transports_action(self, action, param): app.config.set('show_transports_group', param.get_boolean())