From d5a8f7508041596e1df9fb44841e5eae66d4c39b Mon Sep 17 00:00:00 2001 From: Yann Leboulanger <asterix@lagaule.org> Date: Wed, 6 Aug 2008 20:34:36 +0000 Subject: [PATCH] make EditGroups and ChangePassword dialogs asynchronous. see #4147 --- src/config.py | 15 ++++++++------- src/dialogs.py | 44 +++++++++++++++++++------------------------- src/roster_window.py | 14 ++++++-------- 3 files changed, 33 insertions(+), 40 deletions(-) diff --git a/src/config.py b/src/config.py index cc001fc0c5..103d9c6ac0 100644 --- a/src/config.py +++ b/src/config.py @@ -1880,18 +1880,19 @@ class AccountsWindow: return def on_change_password_button1_clicked(self, widget): + def on_changed(new_password): + if new_password is not None: + gajim.connections[self.current_account].change_password( + new_password) + if self.xml.get_widget('save_password_checkbutton1').get_active(): + self.xml.get_widget('password_entry1').set_text(new_password) + try: - dialog = dialogs.ChangePasswordDialog(self.current_account) + dialog = dialogs.ChangePasswordDialog(self.current_account, on_changed) except GajimGeneralException: # if we showed ErrorDialog, there will not be dialog instance return - new_password = dialog.run() - if new_password != -1: - gajim.connections[self.current_account].change_password(new_password) - if self.xml.get_widget('save_password_checkbutton1').get_active(): - self.xml.get_widget('password_entry1').set_text(new_password) - def on_autoconnect_checkbutton_toggled(self, widget): if self.ignore_events: return diff --git a/src/dialogs.py b/src/dialogs.py index 932803d8d8..ea8139dd74 100644 --- a/src/dialogs.py +++ b/src/dialogs.py @@ -81,7 +81,6 @@ class EditGroupsDialog: self.xml.signal_autoconnect(self) self.init_list() - def run(self): self.dialog.show_all() if self.changes_made: for (contact, account) in self.list_: @@ -1979,43 +1978,38 @@ class NewChatDialog(InputDialog): gajim.interface.new_chat_from_jid(self.account, jid) class ChangePasswordDialog: - def __init__(self, account): + def __init__(self, account, on_response): # 'account' can be None if we are about to create our first one if not account or gajim.connections[account].connected < 2: ErrorDialog(_('You are not connected to the server'), _('Without a connection, you can not change your password.')) raise GajimGeneralException, 'You are not connected to the server' self.account = account + self.on_response = on_response self.xml = gtkgui_helpers.get_glade('change_password_dialog.glade') self.dialog = self.xml.get_widget('change_password_dialog') self.password1_entry = self.xml.get_widget('password1_entry') self.password2_entry = self.xml.get_widget('password2_entry') + self.dialog.connect('response', self.on_dialog_response) self.dialog.show_all() - def run(self): - '''Wait for OK button to be pressed and return new password''' - end = False - while not end: - rep = self.dialog.run() - if rep == gtk.RESPONSE_OK: - password1 = self.password1_entry.get_text().decode('utf-8') - if not password1: - ErrorDialog(_('Invalid password'), - _('You must enter a password.')) - continue - password2 = self.password2_entry.get_text().decode('utf-8') - if password1 != password2: - ErrorDialog(_('Passwords do not match'), - _('The passwords typed in both fields must be identical.')) - continue - message = password1 - else: - message = -1 - end = True - self.dialog.destroy() - return message - + def on_dialog_response(self, dialog, response): + if response != gtk.RESPONSE_OK: + dialog.destroy() + self.on_response(None) + return + password1 = self.password1_entry.get_text().decode('utf-8') + if not password1: + ErrorDialog(_('Invalid password'), _('You must enter a password.')) + return + password2 = self.password2_entry.get_text().decode('utf-8') + if password1 != password2: + ErrorDialog(_('Passwords do not match'), + _('The passwords typed in both fields must be identical.')) + return + dialog.destroy() + self.on_response(password1) class PopupNotificationWindow: def __init__(self, event_type, jid, account, msg_type = '', diff --git a/src/roster_window.py b/src/roster_window.py index c1a499231a..321fb00730 100644 --- a/src/roster_window.py +++ b/src/roster_window.py @@ -2727,14 +2727,13 @@ class RosterWindow: on_canceled) def on_remove_group_item_activated(self, widget, group, account): - dlg = dialogs.ConfirmationDialogCheck(_('Remove Group'), + dialogs.ConfirmationDialogCheck(_('Remove Group'), _('Do you want to remove group %s from the roster?' % group), - _('Remove also all contacts in this group from your roster')) - dlg.set_default_response(gtk.BUTTONS_OK_CANCEL) - response = dlg.run() - if response == gtk.RESPONSE_OK: + _('Remove also all contacts in this group from your roster'), + on_response_ok=on_ok) + def on_ok(checked): for contact in gajim.contacts.get_contacts_from_group(account, group): - if not dlg.is_checked(): + if not checked: self.remove_contact_from_groups(contact.jid,account, [group]) else: gajim.connections[account].unsubscribe(contact.jid) @@ -2820,8 +2819,7 @@ class RosterWindow: on_response_clear = on_clear) def on_edit_groups(self, widget, list_): - dlg = dialogs.EditGroupsDialog(list_) - dlg.run() + dialogs.EditGroupsDialog(list_) def on_history(self, widget, contact, account): '''When history menuitem is activated: call log window''' -- GitLab