diff --git a/data/gui/subscription_request_window.ui b/data/gui/subscription_request_window.ui index 05856dca8..6077b9f2f 100644 --- a/data/gui/subscription_request_window.ui +++ b/data/gui/subscription_request_window.ui @@ -6,6 +6,7 @@ 12 Subscription Request dialog + True diff --git a/src/config.py b/src/config.py index d2807ae74..459f1c1a5 100644 --- a/src/config.py +++ b/src/config.py @@ -2040,7 +2040,7 @@ class AccountsWindow: gajim.interface.msg_win_mgr.change_account_name(old_name, new_name) # upgrade account variable in opened windows for kind in ('infos', 'disco', 'gc_config', 'search', - 'online_dialog'): + 'online_dialog', 'sub_request'): for j in gajim.interface.instances[new_name][kind]: gajim.interface.instances[new_name][kind][j].account = \ new_name @@ -2477,7 +2477,8 @@ class AccountsWindow: self.init_account_gpg() # update variables gajim.interface.instances[account] = {'infos': {}, - 'disco': {}, 'gc_config': {}, 'search': {}, 'online_dialog': {}} + 'disco': {}, 'gc_config': {}, 'search': {}, 'online_dialog': {}, + 'sub_request': {}} gajim.interface.minimized_controls[account] = {} gajim.connections[account].connected = 0 gajim.groups[account] = {} @@ -3926,7 +3927,8 @@ class AccountCreationWizardWindow: # update variables gajim.interface.instances[self.account] = {'infos': {}, 'disco': {}, - 'gc_config': {}, 'search': {}, 'online_dialog': {}} + 'gc_config': {}, 'search': {}, 'online_dialog': {}, + 'sub_request': {}} gajim.interface.minimized_controls[self.account] = {} gajim.connections[self.account].connected = 0 gajim.connections[self.account].keepalives = gajim.config.get_per( diff --git a/src/dialogs.py b/src/dialogs.py index 803835e42..dcad4c69c 100644 --- a/src/dialogs.py +++ b/src/dialogs.py @@ -2165,6 +2165,14 @@ class SubscriptionRequestWindow: xml.connect_signals(self) self.window.show_all() + def on_subscription_request_window_destroy(self, widget): + """ + Close window + """ + if self.jid in gajim.interface.instances[self.account]['sub_request']: + # remove us from open windows + del gajim.interface.instances[self.account]['sub_request'][self.jid] + def prepare_popup_menu(self): xml = gtkgui_helpers.get_gtk_builder('subscription_request_popup_menu.ui') menu = xml.get_object('subscription_request_popup_menu') diff --git a/src/gui_interface.py b/src/gui_interface.py index 3329ba359..2179a8b4d 100644 --- a/src/gui_interface.py +++ b/src/gui_interface.py @@ -478,7 +478,10 @@ class Interface: #('SUBSCRIBE', account, (jid, text, user_nick)) user_nick is JEP-0172 account = obj.conn.name if helpers.allow_popup_window(account) or not self.systray_enabled: - dialogs.SubscriptionRequestWindow(obj.jid, obj.status, account, + if obj.jid in self.instances[account]['sub_request']: + self.instances[account]['sub_request'][obj.jid].window.destroy() + self.instances[account]['sub_request'][obj.jid] = \ + dialogs.SubscriptionRequestWindow(obj.jid, obj.status, account, obj.user_nick) return @@ -2700,7 +2703,7 @@ class Interface: for a in gajim.connections: self.instances[a] = {'infos': {}, 'disco': {}, 'gc_config': {}, - 'search': {}, 'online_dialog': {}} + 'search': {}, 'online_dialog': {}, 'sub_request': {}} # online_dialog contains all dialogs that have a meaning only when # we are not disconnected self.minimized_controls[a] = {} diff --git a/test/lib/gajim_mocks.py b/test/lib/gajim_mocks.py index f61286c4f..52b8d0756 100644 --- a/test/lib/gajim_mocks.py +++ b/test/lib/gajim_mocks.py @@ -21,7 +21,7 @@ class MockConnection(Mock, ConnectionHandlersBase): self.sessions = {} gajim.interface.instances[account] = {'infos': {}, 'disco': {}, - 'gc_config': {}, 'search': {}} + 'gc_config': {}, 'search': {}, 'sub_request': {}} gajim.interface.minimized_controls[account] = {} gajim.contacts.add_account(account) gajim.groups[account] = {}