Author: asterix
Date: 2007-10-07 19:22:47 +0200 (Sun, 07 Oct 2007)
New Revision: 8888
Modified:
trunk/src/config.py
trunk/src/dialogs.py
trunk/src/filetransfers_window.py
trunk/src/groupchat_control.py
trunk/src/gtkgui_helpers.py
trunk/src/history_manager.py
trunk/src/roster_window.py
Log:
NonModalConfirmationDialog and ConfirmationDialognow automaticaly close window on ok or cancel. fixes #3486
Modified: trunk/src/config.py
===================================================================
--- trunk/src/config.py 2007-10-07 14:26:25 UTC (rev 8887)
+++ trunk/src/config.py 2007-10-07 17:22:47 UTC (rev 8888)
@@ -1645,10 +1645,7 @@
win_opened = True
break
# Detect if we have opened windows for this account
- self.dialog = None
- def remove(widget, account):
- if self.dialog:
- self.dialog.destroy()
+ def remove(account):
if gajim.interface.instances[account].has_key('remove_account'):
gajim.interface.instances[account]['remove_account'].window.\
present()
@@ -1656,13 +1653,13 @@
gajim.interface.instances[account]['remove_account'] = \
RemoveAccountWindow(account)
if win_opened:
- self.dialog = dialogs.ConfirmationDialog(
+ dialog = dialogs.ConfirmationDialog(
_('You have opened chat in account %s') % account,
_('All chat and groupchat windows will be closed. Do you want to '
'continue?'),
on_response_ok = (remove, account))
else:
- remove(widget, account)
+ remove(account)
def on_rename_button_clicked(self, widget):
if gajim.connections[self.current_account].connected != 0:
@@ -2524,9 +2521,7 @@
self.window.show_all()
def on_remove_button_clicked(self, widget):
- def remove(widget):
- if self.dialog:
- self.dialog.destroy()
+ def remove():
if gajim.connections[self.account].connected and \
not self.remove_and_unregister_radiobutton.get_active():
# change status to offline only if we will not remove this JID from
@@ -2549,14 +2544,13 @@
else:
self._on_remove_success(True)
- self.dialog = None
if gajim.connections[self.account].connected:
- self.dialog = dialogs.ConfirmationDialog(
+ dialog = dialogs.ConfirmationDialog(
_('Account "%s" is connected to the server') % self.account,
_('If you remove it, the connection will be lost.'),
on_response_ok = remove)
else:
- remove(None)
+ remove()
def _on_remove_success(self, res):
# action of unregistration has failed, we don't remove the account
Modified: trunk/src/dialogs.py
===================================================================
--- trunk/src/dialogs.py 2007-10-07 14:26:25 UTC (rev 8887)
+++ trunk/src/dialogs.py 2007-10-07 17:22:47 UTC (rev 8888)
@@ -1016,20 +1016,56 @@
'''HIG compliant confirmation dialog.'''
def __init__(self, pritext, sectext='', on_response_ok = None,
on_response_cancel = None):
+ self.user_response_ok = on_response_ok
+ self.user_response_cancel = on_response_cancel
HigDialog.__init__(self, None,
gtk.MESSAGE_QUESTION, gtk.BUTTONS_OK_CANCEL, pritext, sectext,
- on_response_ok, on_response_cancel)
+ self.on_response_ok, self.on_response_cancel)
self.popup()
+ def on_response_ok(self, widget):
+ if self.user_response_ok:
+ if isinstance(self.user_response_ok, tuple):
+ self.user_response_ok[0](*self.user_response_ok[1:])
+ else:
+ self.user_response_ok()
+ self.destroy()
+
+ def on_response_cancel(self, widget):
+ if self.user_response_cancel:
+ if isinstance(self.user_response_cancel, tuple):
+ self.user_response_cancel[0](*self.user_response_ok[1:])
+ else:
+ self.user_response_cancel()
+ self.destroy()
+
class NonModalConfirmationDialog(HigDialog):
'''HIG compliant non modal confirmation dialog.'''
def __init__(self, pritext, sectext='', on_response_ok = None,
on_response_cancel = None):
+ self.user_response_ok = on_response_ok
+ self.user_response_cancel = on_response_cancel
HigDialog.__init__(self, None,
gtk.MESSAGE_QUESTION, gtk.BUTTONS_OK_CANCEL, pritext, sectext,
- on_response_ok, on_response_cancel)
+ self.on_response_ok, self.on_response_cancel)
self.set_modal(False)
+ def on_response_ok(self, widget):
+ if self.user_response_ok:
+ if isinstance(self.user_response_ok, tuple):
+ self.user_response_ok[0](*self.user_response_ok[1:])
+ else:
+ self.user_response_ok()
+ self.destroy()
+
+ def on_response_cancel(self, widget):
+ if self.user_response_cancel:
+ if isinstance(self.user_response_cancel, tuple):
+ self.user_response_cancel[0](*self.user_response_ok[1:])
+ else:
+ self.user_response_cancel()
+ self.destroy()
+
class WarningDialog(HigDialog):
def __init__(self, pritext, sectext=''):
'''HIG compliant warning dialog.'''
Modified: trunk/src/filetransfers_window.py
===================================================================
--- trunk/src/filetransfers_window.py 2007-10-07 14:26:25 UTC (rev 8887)
+++ trunk/src/filetransfers_window.py 2007-10-07 17:22:47 UTC (rev 8888)
@@ -294,8 +294,7 @@
prim_text = _('%s wants to send you a file:') % contact.jid
dialog, dialog2 = None, None
- def on_response_ok(widget, account, contact, file_props):
- dialog.destroy()
+ def on_response_ok(account, contact, file_props):
def on_ok(widget, account, contact, file_props):
file_path = dialog2.get_filename()
@@ -348,8 +347,7 @@
dialog2.connect('delete-event', lambda widget, event:
on_cancel(widget, account, contact, file_props))
- def on_response_cancel(widget, account, file_props):
- dialog.destroy()
+ def on_response_cancel(account, file_props):
gajim.connections[account].send_file_rejection(file_props)
dialog = dialogs.NonModalConfirmationDialog(prim_text, sec_text,
Modified: trunk/src/groupchat_control.py
===================================================================
--- trunk/src/groupchat_control.py 2007-10-07 14:26:25 UTC (rev 8887)
+++ trunk/src/groupchat_control.py 2007-10-07 17:22:47 UTC (rev 8888)
@@ -850,9 +850,7 @@
def on_send_file(self, widget, gc_contact):
'''sends a file to a contact in the room'''
- def _on_send_files(widget, gc_c):
- if widget:
- widget.destroy()
+ def _on_send_files(gc_c):
gajim.interface.instances['file_transfers'].show_file_send_request(
self.account, gc_c)
self_contact = gajim.contacts.get_gc_contact(self.account, self.room_jid,
@@ -865,7 +863,7 @@
on_response_ok = (_on_send_files, gc_contact))
dialog.popup()
else:
- _on_send_files(None, gc_contact)
+ _on_send_files(gc_contact)
def draw_contact(self, nick, selected=False, focus=False):
iter = self.get_contact_iter(nick)
Modified: trunk/src/gtkgui_helpers.py
===================================================================
--- trunk/src/gtkgui_helpers.py 2007-10-07 14:26:25 UTC (rev 8887)
+++ trunk/src/gtkgui_helpers.py 2007-10-07 17:22:47 UTC (rev 8888)
@@ -750,9 +750,8 @@
def on_avatar_save_as_menuitem_activate(widget, jid, account,
default_name = ''):
def on_ok(widget):
- def on_ok2(widget, file_path, pixbuf):
+ def on_ok2(file_path, pixbuf):
pixbuf.save(file_path, 'jpeg')
- dialog2.destroy()
dialog.destroy()
file_path = dialog.get_filename()
@@ -806,7 +805,7 @@
if os.path.exists(file_path):
os.remove(file_path)
new_file_path = '.'.join(file_path.split('.')[:-1]) + '.jpeg'
- dialog2 = dialogs.ConfirmationDialog(_('Extension not supported'),
+ dialogs.ConfirmationDialog(_('Extension not supported'),
_('Image cannot be saved in %(type)s format. Save as %(new_filename)s?') % {'type': type_, 'new_filename': new_file_path},
on_response_ok = (on_ok2, new_file_path, pixbuf))
else:
Modified: trunk/src/history_manager.py
===================================================================
--- trunk/src/history_manager.py 2007-10-07 14:26:25 UTC (rev 8887)
+++ trunk/src/history_manager.py 2007-10-07 17:22:47 UTC (rev 8888)
@@ -481,9 +481,8 @@
if paths_len == 0: # nothing is selected
return
- def on_ok(widget, liststore, list_of_paths):
+ def on_ok(liststore, list_of_paths):
# delete all rows from db that match jid_id
- self.dialog.destroy()
list_of_rowrefs = []
for path in list_of_paths: # make them treerowrefs (it's needed)
list_of_rowrefs.append(gtk.TreeRowReference(liststore, path))
@@ -514,7 +513,7 @@
'Do you really want to delete logs of the selected contact?',
'Do you really want to delete logs of the selected contacts?',
paths_len)
- self.dialog = dialogs.ConfirmationDialog(pri_text,
+ dialogs.ConfirmationDialog(pri_text,
_('This is an irreversible operation.'), on_response_ok = (on_ok,
liststore, list_of_paths))
@@ -523,8 +522,7 @@
if paths_len == 0: # nothing is selected
return
- def on_ok(widget, liststore, list_of_paths):
- self.dialog.destroy()
+ def on_ok(liststore, list_of_paths):
# delete rows from db that match log_line_id
list_of_rowrefs = []
for path in list_of_paths: # make them treerowrefs (it's needed)
@@ -550,7 +548,7 @@
pri_text = i18n.ngettext(
'Do you really want to delete the selected message?',
'Do you really want to delete the selected messages?', paths_len)
- self.dialog = dialogs.ConfirmationDialog(pri_text,
+ dialogs.ConfirmationDialog(pri_text,
_('This is an irreversible operation.'), on_response_ok = (on_ok,
liststore, list_of_paths))
Modified: trunk/src/roster_window.py
===================================================================
--- trunk/src/roster_window.py 2007-10-07 14:26:25 UTC (rev 8887)
+++ trunk/src/roster_window.py 2007-10-07 17:22:47 UTC (rev 8888)
@@ -1524,8 +1524,7 @@
gajim.contacts.remove_contact(account, contact)
return
- def remove(widget, list_):
- self.dialog.destroy()
+ def remove(list_):
for (contact, account) in list_:
full_jid = contact.get_full_jid()
gajim.connections[account].unsubscribe_agent(full_jid)
@@ -1557,7 +1556,7 @@
jids = jids[:-1] + '.'
sectext = _('You will no longer be able to send and receive messages '
'to contacts from these transports:%s') % jids
- self.dialog = dialogs.ConfirmationDialog(pritext, sectext,
+ dialogs.ConfirmationDialog(pritext, sectext,
on_response_ok = (remove, list_))
def on_block(self, widget, iter, group_list):
@@ -3345,18 +3344,22 @@
if _('Not in Roster') in contact.groups:
gajim.events.remove_events(account, contact.jid)
self.readd_if_needed(contact, account)
+
+ def on_ok2(list_):
+ on_ok(False, list_)
+
if len(list_) == 1:
contact = list_[0][0]
account = list_[0][1]
pritext = _('Contact "%s" will be removed from your roster') % \
contact.get_shown_name()
if contact.sub == 'to':
- self.dialog = dialogs.ConfirmationDialog(pritext,
+ dialogs.ConfirmationDialog(pritext,
_('By removing this contact you also remove authorization '
'resulting in him or her always seeing you as offline.'),
- on_response_ok = (on_ok, list_))
+ on_response_ok = (on_ok2, list_))
else:
- self.dialog = dialogs.ConfirmationDialogCheck(pritext,
+ dialogs.ConfirmationDialogCheck(pritext,
_('By removing this contact you also by default remove '
'authorization resulting in him or her always seeing you as '
'offline.'),
@@ -3371,7 +3374,7 @@
sectext = _('By removing these contacts:%s\nyou also remove '
'authorization resulting in them always seeing you as offline.') % \
jids
- self.dialog = dialogs.ConfirmationDialog(pritext, sectext,
+ dialogs.ConfirmationDialog(pritext, sectext,
on_response_ok = (on_ok, list_))
@@ -3530,24 +3533,21 @@
return False
def change_status(self, widget, account, status):
- def change(widget, account, status):
- if self.dialog:
- self.dialog.destroy()
+ def change(account, status):
message = self.get_status_message(status)
if message is None:
# user pressed Cancel to change status message dialog
return
self.send_status(account, status, message)
- self.dialog = None
if status == 'invisible' and self.connected_rooms(account):
- self.dialog = dialogs.ConfirmationDialog(
+ dialogs.ConfirmationDialog(
_('You are participating in one or more group chats'),
_('Changing your status to invisible will result in disconnection '
'from those group chats. Are you sure you want to go invisible?'),
on_response_ok = (change, account, status))
else:
- change(None, account, status)
+ change(account, status)
def on_send_custom_status(self, widget, contact_list, show, group=None):
'''send custom status'''
@@ -4936,8 +4936,7 @@
uri = data.strip()
uri_splitted = uri.split() # we may have more than one file dropped
nb_uri = len(uri_splitted)
- def _on_send_files(widget, account, jid, uris):
- dialog.destroy()
+ def _on_send_files(account, jid, uris):
c = gajim.contacts.get_contact_with_highest_priority(account, jid)
for uri in uris:
path = helpers.get_file_path_from_dnd_dropped_uri(uri)
@@ -4952,7 +4951,7 @@
for uri in uri_splitted:
path = helpers.get_file_path_from_dnd_dropped_uri(uri)
sec_text += '\n' + os.path.basename(path)
- dialog = dialogs.NonModalConfirmationDialog(prim_text, sec_text,
+ dialogs.NonModalConfirmationDialog(prim_text, sec_text,
on_response_ok = (_on_send_files, account_dest, jid_dest,
uri_splitted))
dialog.popup()