diff --git a/src/config.py b/src/config.py index 9c8431a51df31f7eea2237549fa44b54de50d064..a49f0a13f5872845b0402ea5a562974aa4c7d0e5 100644 --- a/src/config.py +++ b/src/config.py @@ -2021,37 +2021,40 @@ def on_gpg_choose_button_clicked(self, widget, data = None): _('There was a problem retrieving your OpenPGP secret keys.')) return secret_keys[_('None')] = _('None') + + def on_key_selected(keyID): + if keyID is None: + return + if self.current_account == gajim.ZEROCONF_ACC_NAME: + wiget_name_ext = '2' + else: + wiget_name_ext = '1' + gpg_key_label = self.xml.get_widget('gpg_key_label' + wiget_name_ext) + gpg_name_label = self.xml.get_widget('gpg_name_label' + wiget_name_ext) + use_gpg_agent_checkbutton = self.xml.get_widget( + 'use_gpg_agent_checkbutton' + wiget_name_ext) + if keyID[0] == _('None'): + gpg_key_label.set_text(_('No key selected')) + gpg_name_label.set_text('') + use_gpg_agent_checkbutton.set_sensitive(False) + if self.option_changed('keyid', ''): + self.need_relogin = True + gajim.config.set_per('accounts', self.current_account, 'keyname', + '') + gajim.config.set_per('accounts', self.current_account, 'keyid', '') + else: + gpg_key_label.set_text(keyID[0]) + gpg_name_label.set_text(keyID[1]) + use_gpg_agent_checkbutton.set_sensitive(True) + if self.option_changed('keyid', keyID[0]): + self.need_relogin = True + gajim.config.set_per('accounts', self.current_account, 'keyname', + keyID[1]) + gajim.config.set_per('accounts', self.current_account, 'keyid', + keyID[0]) + instance = dialogs.ChooseGPGKeyDialog(_('OpenPGP Key Selection'), - _('Choose your OpenPGP key'), secret_keys) - keyID = instance.run() - if keyID is None: - return - if self.current_account == gajim.ZEROCONF_ACC_NAME: - wiget_name_ext = '2' - else: - wiget_name_ext = '1' - gpg_key_label = self.xml.get_widget('gpg_key_label' + wiget_name_ext) - gpg_name_label = self.xml.get_widget('gpg_name_label' + wiget_name_ext) - use_gpg_agent_checkbutton = self.xml.get_widget( - 'use_gpg_agent_checkbutton' + wiget_name_ext) - if keyID[0] == _('None'): - gpg_key_label.set_text(_('No key selected')) - gpg_name_label.set_text('') - use_gpg_agent_checkbutton.set_sensitive(False) - if self.option_changed('keyid', ''): - self.need_relogin = True - gajim.config.set_per('accounts', self.current_account, 'keyname', '') - gajim.config.set_per('accounts', self.current_account, 'keyid', '') - else: - gpg_key_label.set_text(keyID[0]) - gpg_name_label.set_text(keyID[1]) - use_gpg_agent_checkbutton.set_sensitive(True) - if self.option_changed('keyid', keyID[0]): - self.need_relogin = True - gajim.config.set_per('accounts', self.current_account, 'keyname', - keyID[1]) - gajim.config.set_per('accounts', self.current_account, 'keyid', - keyID[0]) + _('Choose your OpenPGP key'), secret_keys, on_key_selected) def on_use_gpg_agent_checkbutton_toggled(self, widget): if self.current_account == gajim.ZEROCONF_ACC_NAME: diff --git a/src/dialogs.py b/src/dialogs.py index 4db667a0d96da1ba48bc5e6c1d14351409f6fd0a..43e7a97b011fc6564ac536f49a407492983e1a0f 100644 --- a/src/dialogs.py +++ b/src/dialogs.py @@ -256,8 +256,10 @@ def on_passphrase_dialog_destroy(self, widget): class ChooseGPGKeyDialog: '''Class for GPG key dialog''' - def __init__(self, title_text, prompt_text, secret_keys, selected = None): - #list : {keyID: userName, ...} + def __init__(self, title_text, prompt_text, secret_keys, on_response, + selected=None): + '''secret_keys : {keyID: userName, ...}''' + self.on_response = on_response xml = gtkgui_helpers.get_glade('choose_gpg_key_dialog.glade') self.window = xml.get_widget('choose_gpg_key_dialog') self.window.set_title(title_text) @@ -279,6 +281,7 @@ def __init__(self, title_text, prompt_text, secret_keys, selected = None): col.set_sort_column_id(1) self.keys_treeview.set_search_column(1) self.fill_tree(secret_keys, selected) + self.window.connect('response', self.on_dialog_response) self.window.show_all() def sort_keys(self, model, iter1, iter2): @@ -292,17 +295,16 @@ def sort_keys(self, model, iter1, iter2): return -1 return 1 - def run(self): - rep = self.window.run() + def on_dialog_response(self, dialog, response): selection = self.keys_treeview.get_selection() (model, iter) = selection.get_selected() - if iter and rep == gtk.RESPONSE_OK: + if iter and response == gtk.RESPONSE_OK: keyID = [ model[iter][0].decode('utf-8'), model[iter][1].decode('utf-8') ] else: keyID = None + self.on_response(keyID) self.window.destroy() - return keyID def fill_tree(self, list, selected): model = self.keys_treeview.get_model() @@ -1583,12 +1585,6 @@ def on_okbutton_clicked(self, widget): def on_cancelbutton_clicked(self, widget): self.dialog.destroy() - def get_response(self): - if self.is_modal: - response = self.dialog.run() - self.dialog.destroy() - return response - class SubscriptionRequestWindow: def __init__(self, jid, text, account, user_nick=None): xml = gtkgui_helpers.get_glade('subscription_request_window.glade') diff --git a/src/roster_window.py b/src/roster_window.py index 502ffd1b2585286a78ccfaf0055e2356d110220f..72f41d3fe2dd06ee69eff8c3453d43c1209899f5 100644 --- a/src/roster_window.py +++ b/src/roster_window.py @@ -2747,41 +2747,42 @@ def on_assign_pgp_key(self, widget, contact, account): attached_keys = gajim.config.get_per('accounts', account, 'attached_gpg_keys').split() keys = {} - #GPG Key keyID = _('None') for i in xrange(len(attached_keys)/2): keys[attached_keys[2*i]] = attached_keys[2*i+1] if attached_keys[2*i] == contact.jid: keyID = attached_keys[2*i+1] public_keys = gajim.connections[account].ask_gpg_keys() - #GPG Key public_keys[_('None')] = _('None') - instance = dialogs.ChooseGPGKeyDialog(_('Assign OpenPGP Key'), - _('Select a key to apply to the contact'), public_keys, keyID) - keyID = instance.run() - if keyID is None: - return - #GPG Key - if keyID[0] == _('None'): - if contact.jid in keys: - del keys[contact.jid] - keyID = '' - else: - keyID = keyID[0] - keys[contact.jid] = keyID - ctrl = gajim.interface.msg_win_mgr.get_control(contact.jid, account) - if ctrl: - ctrl.update_ui() - - keys_str = '' - for jid in keys: - keys_str += jid + ' ' + keys[jid] + ' ' - gajim.config.set_per('accounts', account, 'attached_gpg_keys', keys_str) - for u in gajim.contacts.get_contacts(account, contact.jid): - u.keyID = helpers.prepare_and_validate_gpg_keyID(account, + def on_key_selected(keyID): + if keyID is None: + return + if keyID[0] == _('None'): + if contact.jid in keys: + del keys[contact.jid] + keyID = '' + else: + keyID = keyID[0] + keys[contact.jid] = keyID + + ctrl = gajim.interface.msg_win_mgr.get_control(contact.jid, account) + if ctrl: + ctrl.update_ui() + + keys_str = '' + for jid in keys: + keys_str += jid + ' ' + keys[jid] + ' ' + gajim.config.set_per('accounts', account, 'attached_gpg_keys', + keys_str) + for u in gajim.contacts.get_contacts(account, contact.jid): + u.keyID = helpers.prepare_and_validate_gpg_keyID(account, contact.jid, keyID) + instance = dialogs.ChooseGPGKeyDialog(_('Assign OpenPGP Key'), + _('Select a key to apply to the contact'), public_keys, + on_key_selected, selected=keyID) + def on_set_custom_avatar_activate(self, widget, contact, account): def on_ok(widget, path_to_file): filesize = os.path.getsize(path_to_file) # in bytes