new TimeoutDialog class: to be derivated for dialogs that need a timeout.
Resource conflict dialog has now a timeout. Fixes #4590
This commit is contained in:
parent
7e137adfd1
commit
0aa8856b6c
|
@ -522,15 +522,50 @@ class ChangeMoodDialog:
|
||||||
def on_cancel_button_clicked(self, widget):
|
def on_cancel_button_clicked(self, widget):
|
||||||
self.window.destroy()
|
self.window.destroy()
|
||||||
|
|
||||||
class ChangeStatusMessageDialog:
|
class TimeoutDialog:
|
||||||
|
'''
|
||||||
|
Class designed to be derivated to create timeout'd dialogs (dialogs that
|
||||||
|
closes automatically after a timeout)
|
||||||
|
'''
|
||||||
|
def __init__(self, timeout, on_timeout):
|
||||||
|
self.countdown_left = timeout
|
||||||
|
self.countdown_enabled = True
|
||||||
|
self.title_text = ''
|
||||||
|
self.on_timeout = on_timeout
|
||||||
|
|
||||||
|
def run_timeout(self):
|
||||||
|
if self.countdown_left > 0:
|
||||||
|
self.countdown()
|
||||||
|
gobject.timeout_add_seconds(1, self.countdown)
|
||||||
|
|
||||||
|
def on_timeout():
|
||||||
|
'''To be implemented in derivated classes'''
|
||||||
|
pass
|
||||||
|
|
||||||
|
def countdown(self):
|
||||||
|
if self.countdown_enabled:
|
||||||
|
if self.countdown_left <= 0:
|
||||||
|
self.on_timeout()
|
||||||
|
return False
|
||||||
|
self.dialog.set_title('%s [%s]' % (self.title_text,
|
||||||
|
str(self.countdown_left)))
|
||||||
|
self.countdown_left -= 1
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
self.dialog.set_title(self.title_text)
|
||||||
|
return False
|
||||||
|
|
||||||
|
class ChangeStatusMessageDialog(TimeoutDialog):
|
||||||
def __init__(self, on_response, show=None, show_pep=True):
|
def __init__(self, on_response, show=None, show_pep=True):
|
||||||
|
countdown_time = gajim.config.get('change_status_window_timeout')
|
||||||
|
TimeoutDialog.__init__(self, countdown_time, self.on_timeout)
|
||||||
self.show = show
|
self.show = show
|
||||||
self.pep_dict = {}
|
self.pep_dict = {}
|
||||||
self.show_pep = show_pep
|
self.show_pep = show_pep
|
||||||
self.on_response = on_response
|
self.on_response = on_response
|
||||||
self.xml = gtkgui_helpers.get_glade('change_status_message_dialog.glade')
|
self.xml = gtkgui_helpers.get_glade('change_status_message_dialog.glade')
|
||||||
self.window = self.xml.get_widget('change_status_message_dialog')
|
self.dialog = self.xml.get_widget('change_status_message_dialog')
|
||||||
self.window.set_transient_for(gajim.interface.roster.window)
|
self.dialog.set_transient_for(gajim.interface.roster.window)
|
||||||
msg = None
|
msg = None
|
||||||
if show:
|
if show:
|
||||||
uf_show = helpers.get_uf_show(show)
|
uf_show = helpers.get_uf_show(show)
|
||||||
|
@ -549,7 +584,7 @@ class ChangeStatusMessageDialog:
|
||||||
'_last_' + self.show, 'mood_text')
|
'_last_' + self.show, 'mood_text')
|
||||||
else:
|
else:
|
||||||
self.title_text = _('Status Message')
|
self.title_text = _('Status Message')
|
||||||
self.window.set_title(self.title_text)
|
self.dialog.set_title(self.title_text)
|
||||||
|
|
||||||
message_textview = self.xml.get_widget('message_textview')
|
message_textview = self.xml.get_widget('message_textview')
|
||||||
self.message_buffer = message_textview.get_buffer()
|
self.message_buffer = message_textview.get_buffer()
|
||||||
|
@ -572,10 +607,6 @@ class ChangeStatusMessageDialog:
|
||||||
self.preset_messages_dict[msg_name] = opts
|
self.preset_messages_dict[msg_name] = opts
|
||||||
sorted_keys_list = helpers.get_sorted_keys(self.preset_messages_dict)
|
sorted_keys_list = helpers.get_sorted_keys(self.preset_messages_dict)
|
||||||
|
|
||||||
countdown_time = gajim.config.get('change_status_window_timeout')
|
|
||||||
self.countdown_left = countdown_time
|
|
||||||
self.countdown_enabled = True
|
|
||||||
|
|
||||||
self.message_liststore = gtk.ListStore(str) # msg_name
|
self.message_liststore = gtk.ListStore(str) # msg_name
|
||||||
self.message_combobox = self.xml.get_widget('message_combobox')
|
self.message_combobox = self.xml.get_widget('message_combobox')
|
||||||
self.message_combobox.set_model(self.message_liststore)
|
self.message_combobox.set_model(self.message_liststore)
|
||||||
|
@ -600,12 +631,10 @@ class ChangeStatusMessageDialog:
|
||||||
self.xml.get_widget('mood_button').hide()
|
self.xml.get_widget('mood_button').hide()
|
||||||
|
|
||||||
self.xml.signal_autoconnect(self)
|
self.xml.signal_autoconnect(self)
|
||||||
if countdown_time > 0:
|
self.run_timeout()
|
||||||
self.countdown()
|
self.dialog.connect('response', self.on_dialog_response)
|
||||||
gobject.timeout_add(1000, self.countdown)
|
self.dialog.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
|
||||||
self.window.connect('response', self.on_dialog_response)
|
self.dialog.show_all()
|
||||||
self.window.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
|
|
||||||
self.window.show_all()
|
|
||||||
|
|
||||||
def draw_activity(self):
|
def draw_activity(self):
|
||||||
'''Set activity button'''
|
'''Set activity button'''
|
||||||
|
@ -645,20 +674,10 @@ class ChangeStatusMessageDialog:
|
||||||
img.set_from_pixbuf(None)
|
img.set_from_pixbuf(None)
|
||||||
label.set_text('')
|
label.set_text('')
|
||||||
|
|
||||||
def countdown(self):
|
def on_timeout(self):
|
||||||
if self.countdown_enabled:
|
|
||||||
if self.countdown_left <= 0:
|
|
||||||
# Prevent GUI freeze when the combobox menu is opened on close
|
# Prevent GUI freeze when the combobox menu is opened on close
|
||||||
self.message_combobox.popdown()
|
self.message_combobox.popdown()
|
||||||
self.window.response(gtk.RESPONSE_OK)
|
self.dialog.response(gtk.RESPONSE_OK)
|
||||||
return False
|
|
||||||
self.window.set_title('%s [%s]' % (self.title_text,
|
|
||||||
str(self.countdown_left)))
|
|
||||||
self.countdown_left -= 1
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
self.window.set_title(self.title_text)
|
|
||||||
return False
|
|
||||||
|
|
||||||
def on_dialog_response(self, dialog, response):
|
def on_dialog_response(self, dialog, response):
|
||||||
if response == gtk.RESPONSE_OK:
|
if response == gtk.RESPONSE_OK:
|
||||||
|
@ -683,7 +702,7 @@ class ChangeStatusMessageDialog:
|
||||||
'mood_text', self.pep_dict['mood_text'])
|
'mood_text', self.pep_dict['mood_text'])
|
||||||
else:
|
else:
|
||||||
message = None # user pressed Cancel button or X wm button
|
message = None # user pressed Cancel button or X wm button
|
||||||
self.window.destroy()
|
self.dialog.destroy()
|
||||||
self.on_response(message, self.pep_dict)
|
self.on_response(message, self.pep_dict)
|
||||||
|
|
||||||
def on_message_combobox_changed(self, widget):
|
def on_message_combobox_changed(self, widget):
|
||||||
|
@ -707,7 +726,7 @@ class ChangeStatusMessageDialog:
|
||||||
if event.keyval == gtk.keysyms.Return or \
|
if event.keyval == gtk.keysyms.Return or \
|
||||||
event.keyval == gtk.keysyms.KP_Enter: # catch CTRL+ENTER
|
event.keyval == gtk.keysyms.KP_Enter: # catch CTRL+ENTER
|
||||||
if (event.state & gtk.gdk.CONTROL_MASK):
|
if (event.state & gtk.gdk.CONTROL_MASK):
|
||||||
self.window.response(gtk.RESPONSE_OK)
|
self.dialog.response(gtk.RESPONSE_OK)
|
||||||
# Stop the event
|
# Stop the event
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -4495,4 +4514,15 @@ class GPGInfoWindow:
|
||||||
def on_close_button_clicked(self, widget):
|
def on_close_button_clicked(self, widget):
|
||||||
self.window.destroy()
|
self.window.destroy()
|
||||||
|
|
||||||
|
class ResourceConflictDialog(TimeoutDialog, InputDialog):
|
||||||
|
def __init__(self, title, text, resource, ok_handler):
|
||||||
|
TimeoutDialog.__init__(self, 15, self.on_timeout)
|
||||||
|
InputDialog.__init__(self, title, text, input_str=resource,
|
||||||
|
is_modal=False, ok_handler=ok_handler)
|
||||||
|
self.title_text = title
|
||||||
|
self.run_timeout()
|
||||||
|
|
||||||
|
def on_timeout(self):
|
||||||
|
self.on_okbutton_clicked(None)
|
||||||
|
|
||||||
# vim: se ts=3:
|
# vim: se ts=3:
|
||||||
|
|
|
@ -2097,9 +2097,11 @@ class Interface:
|
||||||
gajim.config.set_per('accounts', account, 'resource', new_resource)
|
gajim.config.set_per('accounts', account, 'resource', new_resource)
|
||||||
self.roster.send_status(account, gajim.connections[account].old_show,
|
self.roster.send_status(account, gajim.connections[account].old_show,
|
||||||
gajim.connections[account].status)
|
gajim.connections[account].status)
|
||||||
dlg = dialogs.InputDialog(_('Resource Conflict'),
|
proposed_resource = gajim.connections[account].server_resource
|
||||||
_('You are already connected to this account with the same resource. Please type a new one'), input_str = gajim.connections[account].server_resource,
|
proposed_resource += gajim.config.get('gc_proposed_nick_char')
|
||||||
is_modal = False, ok_handler = on_ok)
|
dlg = dialogs.ResourceConflictDialog(_('Resource Conflict'),
|
||||||
|
_('You are already connected to this account with the same resource. '
|
||||||
|
'Please type a new one'), resource=proposed_resource, ok_handler=on_ok)
|
||||||
|
|
||||||
def handle_event_pep_config(self, account, data):
|
def handle_event_pep_config(self, account, data):
|
||||||
# ('PEP_CONFIG', account, (node, form))
|
# ('PEP_CONFIG', account, (node, form))
|
||||||
|
|
|
@ -2156,7 +2156,7 @@ class RosterWindow:
|
||||||
return
|
return
|
||||||
|
|
||||||
dlg = dialogs.ChangeStatusMessageDialog(on_response, show, show_pep)
|
dlg = dialogs.ChangeStatusMessageDialog(on_response, show, show_pep)
|
||||||
dlg.window.present() # show it on current workspace
|
dlg.dialog.present() # show it on current workspace
|
||||||
|
|
||||||
def change_status(self, widget, account, status):
|
def change_status(self, widget, account, status):
|
||||||
def change(account, status):
|
def change(account, status):
|
||||||
|
|
Loading…
Reference in New Issue