diff --git a/data/glade/roster_window.glade b/data/glade/roster_window.glade index 848bfa423..c480f6879 100644 --- a/data/glade/roster_window.glade +++ b/data/glade/roster_window.glade @@ -119,7 +119,7 @@ True _Quit True - + diff --git a/src/roster_window.py b/src/roster_window.py index 24d7e765a..786d4ec8f 100644 --- a/src/roster_window.py +++ b/src/roster_window.py @@ -3847,8 +3847,10 @@ class RosterWindow: self.set_account_status_icon(account) if status == 'offline': if self.quit_on_next_offline > -1: + # we want to quit, we are waiting for all accounts to be offline self.quit_on_next_offline -= 1 if self.quit_on_next_offline < 1: + # all accounts offline, quit self.quit_gtkgui_interface() else: # No need to redraw contacts if we're quitting @@ -4142,32 +4144,14 @@ class RosterWindow: force = force) def on_roster_window_delete_event(self, widget, event): - '''When we want to close the window''' + '''Main window X button was clicked''' if gajim.interface.systray_enabled and not gajim.config.get( 'quit_on_roster_x_button'): self.tooltip.hide_tooltip() self.window.hide() else: - accounts = gajim.connections.keys() - get_msg = False - self.quit_on_next_offline = 0 - for acct in accounts: - if gajim.connections[acct].connected: - get_msg = True - break - if get_msg: - message = self.get_status_message('offline') - if message is None: - # user pressed Cancel to change status message dialog - message = '' - - 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() - return True # do NOT destory the window + self.on_quit_request() + return True # do NOT destroy the window def on_roster_window_focus_in_event(self, widget, event): # roster received focus, so if we had urgency REMOVE IT @@ -4246,7 +4230,10 @@ class RosterWindow: gajim.interface.hide_systray() gtk.main_quit() - def on_quit_menuitem_activate(self, widget): + def on_quit_request(self, widget = None): + ''' user want to quit. Check if he should be warned about messages + pending. Send offline to all connected account. We do NOT really quit + gajim here ''' accounts = gajim.connections.keys() get_msg = False for acct in accounts: @@ -5414,8 +5401,12 @@ class RosterWindow: model.set_sort_func(1, self.compareIters) model.set_sort_column_id(1, gtk.SORT_ASCENDING) self.tree.set_model(model) - # when this value become 0 we quit main application + + # when this value become 0 we quit main application. If it's more than 0 + # it means we are waiting for this number of accounts to disconnect before + # quitting self.quit_on_next_offline = -1 + self.make_jabber_state_images() # uf_show, img, show, sensitive diff --git a/src/systray.py b/src/systray.py index 0afae5b4a..5133cc510 100644 --- a/src/systray.py +++ b/src/systray.py @@ -281,7 +281,7 @@ class Systray: gajim.interface.instances['preferences'] = config.PreferencesWindow() def on_quit_menuitem_activate(self, widget): - gajim.interface.roster.on_quit_menuitem_activate(widget) + gajim.interface.roster.on_quit_request() def on_left_click(self): win = gajim.interface.roster.window