save opened chat controls when quitting and restore them on startup. Fixes #3803
This commit is contained in:
parent
b716b9aa5b
commit
aea75469a1
|
@ -397,6 +397,7 @@ class Config:
|
||||||
'oauth2_refresh_token': [ opt_str, '', _('Latest token for Oauth2 authentication.')],
|
'oauth2_refresh_token': [ opt_str, '', _('Latest token for Oauth2 authentication.')],
|
||||||
'oauth2_client_id': [ opt_str, '0000000044077801', _('client_id for Oauth2 authentication.')],
|
'oauth2_client_id': [ opt_str, '0000000044077801', _('client_id for Oauth2 authentication.')],
|
||||||
'oauth2_redirect_url': [ opt_str, 'https%3A%2F%2Fgajim.org%2Fmsnauth%2Findex.cgi', _('redirect_url for Oauth2 authentication.')],
|
'oauth2_redirect_url': [ opt_str, 'https%3A%2F%2Fgajim.org%2Fmsnauth%2Findex.cgi', _('redirect_url for Oauth2 authentication.')],
|
||||||
|
'opened_chat_controls': [opt_str, '', _('Space separated list of jid for which we want to re-open a chat window on next startup.')],
|
||||||
}, {}),
|
}, {}),
|
||||||
'statusmsg': ({
|
'statusmsg': ({
|
||||||
'message': [ opt_str, '' ],
|
'message': [ opt_str, '' ],
|
||||||
|
|
|
@ -1244,3 +1244,15 @@ class MessageWindowMgr(gobject.GObject):
|
||||||
ctrl.type_id)
|
ctrl.type_id)
|
||||||
ctrl.parent_win = mw
|
ctrl.parent_win = mw
|
||||||
mw.new_tab(ctrl)
|
mw.new_tab(ctrl)
|
||||||
|
|
||||||
|
def save_opened_controls(self):
|
||||||
|
chat_controls = {}
|
||||||
|
for acct in gajim.connections:
|
||||||
|
chat_controls[acct] = []
|
||||||
|
for ctrl in self.get_controls(type_=message_control.TYPE_CHAT):
|
||||||
|
acct = ctrl.account
|
||||||
|
if ctrl.contact.jid not in chat_controls[acct]:
|
||||||
|
chat_controls[acct].append(ctrl.contact.jid)
|
||||||
|
for acct in gajim.connections:
|
||||||
|
gajim.config.set_per('accounts', acct, 'opened_chat_controls',
|
||||||
|
','.join(chat_controls[acct]))
|
||||||
|
|
|
@ -2381,6 +2381,8 @@ class RosterWindow:
|
||||||
return True # do NOT destroy the window
|
return True # do NOT destroy the window
|
||||||
|
|
||||||
def prepare_quit(self):
|
def prepare_quit(self):
|
||||||
|
if self.save_done:
|
||||||
|
return
|
||||||
msgwin_width_adjust = 0
|
msgwin_width_adjust = 0
|
||||||
|
|
||||||
# in case show_roster_on_start is False and roster is never shown
|
# in case show_roster_on_start is False and roster is never shown
|
||||||
|
@ -2403,6 +2405,7 @@ class RosterWindow:
|
||||||
msgwin_width_adjust = -1 * width
|
msgwin_width_adjust = -1 * width
|
||||||
gajim.config.set('last_roster_visible',
|
gajim.config.set('last_roster_visible',
|
||||||
self.window.get_property('visible'))
|
self.window.get_property('visible'))
|
||||||
|
gajim.interface.msg_win_mgr.save_opened_controls()
|
||||||
gajim.interface.msg_win_mgr.shutdown(msgwin_width_adjust)
|
gajim.interface.msg_win_mgr.shutdown(msgwin_width_adjust)
|
||||||
|
|
||||||
gajim.config.set('collapsed_rows', '\t'.join(self.collapsed_rows))
|
gajim.config.set('collapsed_rows', '\t'.join(self.collapsed_rows))
|
||||||
|
@ -2412,6 +2415,7 @@ class RosterWindow:
|
||||||
self.close_all(account)
|
self.close_all(account)
|
||||||
if gajim.interface.systray_enabled:
|
if gajim.interface.systray_enabled:
|
||||||
gajim.interface.hide_systray()
|
gajim.interface.hide_systray()
|
||||||
|
self.save_done = True
|
||||||
|
|
||||||
def quit_gtkgui_interface(self):
|
def quit_gtkgui_interface(self):
|
||||||
"""
|
"""
|
||||||
|
@ -2573,6 +2577,14 @@ class RosterWindow:
|
||||||
self.add_account_contacts(obj.conn.name)
|
self.add_account_contacts(obj.conn.name)
|
||||||
self.fire_up_unread_messages_events(obj.conn.name)
|
self.fire_up_unread_messages_events(obj.conn.name)
|
||||||
else:
|
else:
|
||||||
|
account = obj.conn.name
|
||||||
|
controls = gajim.config.get_per('accounts', account,
|
||||||
|
'opened_chat_controls')
|
||||||
|
if controls:
|
||||||
|
for jid in controls.split(','):
|
||||||
|
contact = gajim.contacts.get_contact_with_highest_priority(
|
||||||
|
account, jid)
|
||||||
|
gajim.interface.on_open_chat_window(None, contact, account)
|
||||||
gobject.idle_add(self.refilter_shown_roster_items)
|
gobject.idle_add(self.refilter_shown_roster_items)
|
||||||
|
|
||||||
def _nec_anonymous_auth(self, obj):
|
def _nec_anonymous_auth(self, obj):
|
||||||
|
@ -6296,6 +6308,8 @@ class RosterWindow:
|
||||||
self.filtering = False
|
self.filtering = False
|
||||||
# Number of renderers plugins added
|
# Number of renderers plugins added
|
||||||
self.nb_ext_renderers = 0
|
self.nb_ext_renderers = 0
|
||||||
|
# When we quit, rememver if we already saved config once
|
||||||
|
self.save_done = False
|
||||||
# [icon, name, type, jid, account, editable, mood_pixbuf,
|
# [icon, name, type, jid, account, editable, mood_pixbuf,
|
||||||
# activity_pixbuf, tune_pixbuf, location_pixbuf, avatar_pixbuf,
|
# activity_pixbuf, tune_pixbuf, location_pixbuf, avatar_pixbuf,
|
||||||
# padlock_pixbuf]
|
# padlock_pixbuf]
|
||||||
|
|
Loading…
Reference in New Issue