less and less blocking dialogs
This commit is contained in:
parent
cb0049a1cb
commit
9329bcc4c1
|
@ -632,11 +632,7 @@ class ChangeStatusMessageDialog:
|
|||
start_iter, finish_iter = self.message_buffer.get_bounds()
|
||||
status_message_to_save_as_preset = self.message_buffer.get_text(
|
||||
start_iter, finish_iter)
|
||||
dlg = InputDialog(_('Save as Preset Status Message'),
|
||||
_('Please type a name for this status message'), is_modal = True)
|
||||
response = dlg.get_response()
|
||||
if response == gtk.RESPONSE_OK:
|
||||
msg_name = dlg.input_entry.get_text()
|
||||
def on_ok(msg_name):
|
||||
msg_text = status_message_to_save_as_preset.decode('utf-8')
|
||||
msg_text_1l = helpers.to_one_line(msg_text)
|
||||
if not msg_name: # msg_name was ''
|
||||
|
@ -644,13 +640,13 @@ class ChangeStatusMessageDialog:
|
|||
msg_name = msg_name.decode('utf-8')
|
||||
|
||||
if msg_name in self.preset_messages_dict:
|
||||
def on_ok():
|
||||
def on_ok2():
|
||||
self.preset_messages_dict[msg_name] = msg_text
|
||||
gajim.config.set_per('statusmsg', msg_name, 'message',
|
||||
msg_text_1l)
|
||||
dlg2 = ConfirmationDialog(_('Overwrite Status Message?'),
|
||||
_('This name is already used. Do you want to overwrite this '
|
||||
'status message?'), on_response_ok=on_ok)
|
||||
'status message?'), on_response_ok=on_ok2)
|
||||
return
|
||||
self.preset_messages_dict[msg_name] = msg_text
|
||||
iter_ = self.message_liststore.append((msg_name,))
|
||||
|
@ -658,6 +654,9 @@ class ChangeStatusMessageDialog:
|
|||
# select in combobox the one we just saved
|
||||
self.message_combobox.set_active_iter(iter_)
|
||||
gajim.config.set_per('statusmsg', msg_name, 'message', msg_text_1l)
|
||||
InputDialog(_('Save as Preset Status Message'),
|
||||
_('Please type a name for this status message'), is_modal=False,
|
||||
ok_handler=on_ok)
|
||||
|
||||
class AddNewContactWindow:
|
||||
'''Class for AddNewContactWindow'''
|
||||
|
@ -1435,6 +1434,12 @@ class ConfirmationDialogDubbleCheck(ConfirmationDialog):
|
|||
class FTOverwriteConfirmationDialog(ConfirmationDialog):
|
||||
'''HIG compliant confirmation dialog to overwrite or resume a file transfert'''
|
||||
def __init__(self, pritext, sectext='', propose_resume=True):
|
||||
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,
|
||||
self.on_response_ok, self.on_response_cancel)
|
||||
self.popup()
|
||||
HigDialog.__init__(self, None, gtk.MESSAGE_QUESTION, gtk.BUTTONS_CANCEL,
|
||||
pritext, sectext)
|
||||
|
||||
|
@ -1455,6 +1460,22 @@ class FTOverwriteConfirmationDialog(ConfirmationDialog):
|
|||
label.set_use_underline(True)
|
||||
self.add_action_widget(b, 200)
|
||||
|
||||
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 CommonInputDialog:
|
||||
'''Common Class for Input dialogs'''
|
||||
def __init__(self, title, label_str, is_modal, ok_handler, cancel_handler):
|
||||
|
@ -3831,11 +3852,11 @@ class ESessionInfoWindow:
|
|||
sectext = _('''To prevent a man-in-the-middle attack, you should speak to %(jid)s directly (in person or on the phone) and verify that they see the same Short Authentication String (SAS) as you.\n\nThis session's Short Authentication String: <b>%(sas)s</b>''') % {'jid': self.session.jid, 'sas': self.session.sas}
|
||||
sectext += '\n\n' + _('Did you talk to the remote contact and verify the SAS?')
|
||||
|
||||
dialog = YesNoDialog(pritext, sectext)
|
||||
|
||||
if dialog.get_response() == gtk.RESPONSE_YES:
|
||||
def on_yes(checked):
|
||||
self.session._verified_srs_cb()
|
||||
self.session.verified_identity = True
|
||||
self.update_info()
|
||||
|
||||
YesNoDialog(pritext, sectext, on_response_yes=on_yes)
|
||||
|
||||
# vim: se ts=3:
|
||||
|
|
|
@ -327,16 +327,21 @@ _('Connection with peer cannot be established.'))
|
|||
dl_size = stat.st_size
|
||||
file_size = file_props['size']
|
||||
dl_finished = dl_size >= file_size
|
||||
dialog = dialogs.FTOverwriteConfirmationDialog(
|
||||
_('This file already exists'), _('What do you want to do?'),
|
||||
not dl_finished)
|
||||
dialog.set_transient_for(dialog2)
|
||||
dialog.set_destroy_with_parent(True)
|
||||
response = dialog.get_response()
|
||||
|
||||
def on_response(response):
|
||||
if response < 0:
|
||||
return
|
||||
elif response == 100:
|
||||
file_props['offset'] = dl_size
|
||||
dialog2.destroy()
|
||||
self._start_receive(file_path, account, contact, file_props)
|
||||
|
||||
dialog = dialogs.FTOverwriteConfirmationDialog(
|
||||
_('This file already exists'), _('What do you want to do?'),
|
||||
propose_resume=not dl_finished, on_response=on_response)
|
||||
dialog.set_transient_for(dialog2)
|
||||
dialog.set_destroy_with_parent(True)
|
||||
return
|
||||
else:
|
||||
dirname = os.path.dirname(file_path)
|
||||
if not os.access(dirname, os.W_OK) and os.name != 'nt':
|
||||
|
|
|
@ -769,38 +769,9 @@ def destroy_widget(widget):
|
|||
|
||||
def on_avatar_save_as_menuitem_activate(widget, jid, account,
|
||||
default_name = ''):
|
||||
def on_ok(widget):
|
||||
def on_ok2(file_path, pixbuf):
|
||||
pixbuf.save(file_path, 'jpeg')
|
||||
dialog.destroy()
|
||||
|
||||
file_path = dialog.get_filename()
|
||||
file_path = decode_filechooser_file_paths((file_path,))[0]
|
||||
if os.path.exists(file_path):
|
||||
# check if we have write permissions
|
||||
if not os.access(file_path, os.W_OK):
|
||||
file_name = os.path.basename(file_path)
|
||||
dialogs.ErrorDialog(_('Cannot overwrite existing file "%s"' %
|
||||
file_name),
|
||||
_('A file with this name already exists and you do not have '
|
||||
'permission to overwrite it.'))
|
||||
return
|
||||
dialog2 = dialogs.FTOverwriteConfirmationDialog(
|
||||
_('This file already exists'), _('What do you want to do?'),
|
||||
False)
|
||||
dialog2.set_transient_for(dialog)
|
||||
dialog2.set_destroy_with_parent(True)
|
||||
response = dialog2.get_response()
|
||||
def on_continue(response):
|
||||
if response < 0:
|
||||
return
|
||||
else:
|
||||
dirname = os.path.dirname(file_path)
|
||||
if not os.access(dirname, os.W_OK):
|
||||
dialogs.ErrorDialog(_('Directory "%s" is not writable') % \
|
||||
dirname, _('You do not have permission to create files in this'
|
||||
' directory.'))
|
||||
return
|
||||
|
||||
# Get pixbuf
|
||||
pixbuf = None
|
||||
is_fake = False
|
||||
|
@ -831,17 +802,45 @@ default_name = ''):
|
|||
else:
|
||||
dialog.destroy()
|
||||
|
||||
def on_ok(widget):
|
||||
def on_ok2(file_path, pixbuf):
|
||||
pixbuf.save(file_path, 'jpeg')
|
||||
dialog.destroy()
|
||||
|
||||
file_path = dialog.get_filename()
|
||||
file_path = decode_filechooser_file_paths((file_path,))[0]
|
||||
if os.path.exists(file_path):
|
||||
# check if we have write permissions
|
||||
if not os.access(file_path, os.W_OK):
|
||||
file_name = os.path.basename(file_path)
|
||||
dialogs.ErrorDialog(_('Cannot overwrite existing file "%s"' %
|
||||
file_name),
|
||||
_('A file with this name already exists and you do not have '
|
||||
'permission to overwrite it.'))
|
||||
return
|
||||
dialog2 = dialogs.FTOverwriteConfirmationDialog(
|
||||
_('This file already exists'), _('What do you want to do?'),
|
||||
propose_resume=False, on_response=on_continue)
|
||||
dialog2.set_transient_for(dialog)
|
||||
dialog2.set_destroy_with_parent(True)
|
||||
else:
|
||||
dirname = os.path.dirname(file_path)
|
||||
if not os.access(dirname, os.W_OK):
|
||||
dialogs.ErrorDialog(_('Directory "%s" is not writable') % \
|
||||
dirname, _('You do not have permission to create files in this'
|
||||
' directory.'))
|
||||
return
|
||||
|
||||
on_continue(0)
|
||||
|
||||
def on_cancel(widget):
|
||||
dialog.destroy()
|
||||
|
||||
dialog = dialogs.FileChooserDialog(
|
||||
title_text = _('Save Image as...'),
|
||||
action = gtk.FILE_CHOOSER_ACTION_SAVE,
|
||||
buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
|
||||
gtk.STOCK_SAVE, gtk.RESPONSE_OK),
|
||||
dialog = dialogs.FileChooserDialog(title_text=_('Save Image as...'),
|
||||
action=gtk.FILE_CHOOSER_ACTION_SAVE, buttons=(gtk.STOCK_CANCEL,
|
||||
gtk.RESPONSE_CANCEL, gtk.STOCK_SAVE, gtk.RESPONSE_OK),
|
||||
default_response=gtk.RESPONSE_OK,
|
||||
current_folder = gajim.config.get('last_save_dir'),
|
||||
on_response_ok = on_ok,
|
||||
current_folder=gajim.config.get('last_save_dir'), on_response_ok=on_ok,
|
||||
on_response_cancel=on_cancel)
|
||||
|
||||
dialog.set_current_name(default_name)
|
||||
|
|
|
@ -206,16 +206,23 @@ class HistoryManager:
|
|||
|
||||
def on_history_manager_window_delete_event(self, widget, event):
|
||||
if self.AT_LEAST_ONE_DELETION_DONE:
|
||||
def on_yes(clicked):
|
||||
self.cur.execute('VACUUM')
|
||||
self.con.commit()
|
||||
gtk.main_quit()
|
||||
|
||||
def on_no():
|
||||
gtk.main_quit()
|
||||
|
||||
dialog = dialogs.YesNoDialog(
|
||||
_('Do you want to clean up the database? '
|
||||
'(STRONGLY NOT RECOMMENDED IF GAJIM IS RUNNING)'),
|
||||
_('Normally allocated database size will not be freed, '
|
||||
'it will just become reusable. If you really want to reduce '
|
||||
'database filesize, click YES, else click NO.'
|
||||
'\n\nIn case you click YES, please wait...'))
|
||||
if dialog.get_response() == gtk.RESPONSE_YES:
|
||||
self.cur.execute('VACUUM')
|
||||
self.con.commit()
|
||||
'\n\nIn case you click YES, please wait...'),
|
||||
on_response_yes=on_yes, on_response_no=on_no)
|
||||
return
|
||||
|
||||
gtk.main_quit()
|
||||
|
||||
|
|
|
@ -2210,6 +2210,16 @@ class RosterWindow:
|
|||
get_msg = True
|
||||
break
|
||||
|
||||
def on_continue2(message):
|
||||
self.quit_on_next_offline = 0
|
||||
for acct in accounts:
|
||||
if gajim.connections[acct].connected:
|
||||
self.quit_on_next_offline += 1
|
||||
self.send_status(acct, 'offline', message)
|
||||
|
||||
if not self.quit_on_next_offline:
|
||||
self.quit_gtkgui_interface()
|
||||
|
||||
def on_continue(message):
|
||||
if message is None:
|
||||
# user pressed Cancel to change status message dialog
|
||||
|
@ -2227,7 +2237,8 @@ class RosterWindow:
|
|||
for ctrl in win.controls():
|
||||
fjid = ctrl.get_full_jid()
|
||||
if gajim.last_message_time[ctrl.account].has_key(fjid):
|
||||
if time.time() - gajim.last_message_time[ctrl.account][fjid] < 2:
|
||||
if time.time() - gajim.last_message_time[ctrl.account][fjid] \
|
||||
< 2:
|
||||
recent = True
|
||||
break
|
||||
if recent:
|
||||
|
@ -2236,18 +2247,10 @@ class RosterWindow:
|
|||
if unread or recent:
|
||||
dialog = dialogs.ConfirmationDialog(_('You have unread messages'),
|
||||
_('Messages will only be available for reading them later if you'
|
||||
' have history enabled and contact is in your roster.'))
|
||||
if dialog.get_response() != gtk.RESPONSE_OK:
|
||||
' have history enabled and contact is in your roster.'),
|
||||
on_response_ok=(on_continue2, message))
|
||||
return
|
||||
|
||||
self.quit_on_next_offline = 0
|
||||
for acct in accounts:
|
||||
if gajim.connections[acct].connected:
|
||||
self.quit_on_next_offline += 1
|
||||
self.send_status(acct, 'offline', message)
|
||||
|
||||
if not self.quit_on_next_offline:
|
||||
self.quit_gtkgui_interface()
|
||||
on_continue2(message)
|
||||
|
||||
if get_msg:
|
||||
self.get_status_message('offline', on_continue)
|
||||
|
@ -3217,26 +3220,6 @@ class RosterWindow:
|
|||
# we can return to this show
|
||||
self.previous_status_combobox_active = active
|
||||
connected_accounts = gajim.get_number_of_connected_accounts()
|
||||
if status == 'invisible':
|
||||
bug_user = False
|
||||
for account in accounts:
|
||||
if connected_accounts < 1 or gajim.account_is_connected(account):
|
||||
if not gajim.config.get_per('accounts', account,
|
||||
'sync_with_global_status'):
|
||||
continue
|
||||
# We're going to change our status to invisible
|
||||
if self.connected_rooms(account):
|
||||
bug_user = True
|
||||
break
|
||||
if bug_user:
|
||||
dialog = 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?'))
|
||||
if dialog.get_response() != gtk.RESPONSE_OK:
|
||||
self.update_status_combobox()
|
||||
return
|
||||
|
||||
def on_continue(message):
|
||||
if message is None:
|
||||
|
@ -3263,6 +3246,32 @@ class RosterWindow:
|
|||
self.send_status(account, status, message)
|
||||
self.update_status_combobox()
|
||||
|
||||
if status == 'invisible':
|
||||
bug_user = False
|
||||
for account in accounts:
|
||||
if connected_accounts < 1 or gajim.account_is_connected(account):
|
||||
if not gajim.config.get_per('accounts', account,
|
||||
'sync_with_global_status'):
|
||||
continue
|
||||
# We're going to change our status to invisible
|
||||
if self.connected_rooms(account):
|
||||
bug_user = True
|
||||
break
|
||||
if bug_user:
|
||||
def on_ok():
|
||||
self.get_status_message(status, on_continue)
|
||||
|
||||
def on_cancel():
|
||||
self.update_status_combobox()
|
||||
|
||||
dialog = 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_reponse_ok=on_ok,
|
||||
on_response_cancel=on_cancel)
|
||||
return
|
||||
|
||||
self.get_status_message(status, on_continue)
|
||||
|
||||
def on_preferences_menuitem_activate(self, widget):
|
||||
|
|
Loading…
Reference in New Issue