diff --git a/src/gajim.py b/src/gajim.py index 9fe7016b6c221386920afc0aea56c4f449661455..68ea93333d29a330af855b90e657137344135623 100644 --- a/src/gajim.py +++ b/src/gajim.py @@ -600,6 +600,9 @@ class Interface: for request in self.gpg_passphrase.values(): if request: request.interrupt() + # .keys() is needed because dict changes during loop + for account in self.pass_dialog.keys(): + self.pass_dialog[account].window.destroy() if status == 'offline': # sensitivity for this menuitem if gajim.get_number_of_connected_accounts() == 0: @@ -1526,6 +1529,8 @@ class Interface: def handle_event_password_required(self, account, array): #('PASSWORD_REQUIRED', account, None) + if account in self.pass_dialog: + return text = _('Enter your password for account %s') % account if passwords.USER_HAS_GNOMEKEYRING and \ not passwords.USER_USES_GNOMEKEYRING: @@ -1538,13 +1543,16 @@ class Interface: gajim.config.set_per('accounts', account, 'savepass', True) passwords.save_password(account, passphrase) gajim.connections[account].set_password(passphrase) + del self.pass_dialog[account] def on_cancel(): self.roster.set_state(account, 'offline') self.roster.update_status_combobox() + del self.pass_dialog[account] - dialogs.PassphraseDialog(_('Password Required'), text, _('Save password'), - ok_handler=on_ok, cancel_handler=on_cancel) + self.pass_dialog[account] = dialogs.PassphraseDialog( + _('Password Required'), text, _('Save password'), ok_handler=on_ok, + cancel_handler=on_cancel) def handle_event_roster_info(self, account, array): #('ROSTER_INFO', account, (jid, name, sub, ask, groups)) @@ -3231,7 +3239,7 @@ class Interface: self.status_sent_to_users = {} self.status_sent_to_groups = {} self.gpg_passphrase = {} - self.gpg_dialog = None + self.pass_dialog = {} self.default_colors = { 'inmsgcolor': gajim.config.get('inmsgcolor'), 'outmsgcolor': gajim.config.get('outmsgcolor'),