From 9d98117f21da7fd476a88b89ba2d638dc979f3c9 Mon Sep 17 00:00:00 2001 From: Brendan Taylor Date: Mon, 14 Jul 2008 05:01:22 +0000 Subject: [PATCH] make GPG passphrase dialog nonmodal, fixes #3975 --- src/gajim.py | 54 ++++++++++++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/src/gajim.py b/src/gajim.py index 50f635af3..94d0fc7a3 100755 --- a/src/gajim.py +++ b/src/gajim.py @@ -1353,34 +1353,38 @@ class Interface: gajim.connections[account].gpg_passphrase(self.gpg_passphrase[keyid]) callback() return - if self.gpg_dialog: - # A GPG dialog is already open, retry in 0.5 second - gobject.timeout_add(500, self.handle_event_gpg_password_required, - account, array) - return - password_ok = False - count = 0 + title = _('Passphrase Required') second = _('Enter GPG key passphrase for account %s.') % account - while not password_ok and count < 3: - count += 1 - self.gpg_dialog = dialogs.PassphraseDialog(title, second, '') - passphrase, save = self.gpg_dialog.run() - if passphrase == -1: - # User pressed cancel - passphrase = None - password_ok = True + + def _cancel(): + # user cancelled, continue without GPG + gajim.connections[account].gpg_passphrase(None) + callback() + + def _ok(passphrase, checked, count): + if count < 3: + count += 1 + done = gajim.connections[account].test_gpg_passphrase(passphrase) else: - password_ok = gajim.connections[account].\ - test_gpg_passphrase(passphrase) - title = _('Wrong Passphrase') - second = _('Please retype your GPG passphrase or press Cancel.') - self.gpg_dialog = None - if passphrase is not None: - self.gpg_passphrase[keyid] = passphrase - gobject.timeout_add(30000, self.forget_gpg_passphrase, keyid) - gajim.connections[account].gpg_passphrase(passphrase) - callback() + done = True + passphrase = None + + if done: + if passphrase is not None: + self.gpg_passphrase[keyid] = passphrase + gobject.timeout_add(30000, self.forget_gpg_passphrase, keyid) + gajim.connections[account].gpg_passphrase(passphrase) + callback() + else: + # ask again + dialogs.PassphraseDialog(_('Wrong Passphrase'), + _('Please retype your GPG passphrase or press Cancel.'), + is_modal=False, ok_handler=(_ok, count), cancel_handler=_cancel) + + dialogs.PassphraseDialog(title, second, + is_modal=False, ok_handler=(_ok, 0), cancel_handler=_cancel) + def handle_event_roster_info(self, account, array): #('ROSTER_INFO', account, (jid, name, sub, ask, groups))