From b6eb2f94c91ec58e8e7f99eab82918929e439d28 Mon Sep 17 00:00:00 2001 From: Yann Leboulanger Date: Thu, 14 Jun 2007 17:44:24 +0000 Subject: [PATCH] minimize menuitem -> minimize on close checkbutton. see #3034 --- data/glade/gc_control_popup_menu.glade | 11 ++------ src/chat_control.py | 35 +++++++++++--------------- src/common/config.py | 1 + src/groupchat_control.py | 35 +++++++++++++++++++++++--- 4 files changed, 50 insertions(+), 32 deletions(-) diff --git a/data/glade/gc_control_popup_menu.glade b/data/glade/gc_control_popup_menu.glade index 777c45733..4ad9f1fb0 100644 --- a/data/glade/gc_control_popup_menu.glade +++ b/data/glade/gc_control_popup_menu.glade @@ -90,17 +90,10 @@ - + True - _Minimize + _Minimize on close True - - - True - gtk-goto-bottom - 1 - - diff --git a/src/chat_control.py b/src/chat_control.py index dfb1fb7b3..f8f60aca6 100644 --- a/src/chat_control.py +++ b/src/chat_control.py @@ -670,25 +670,21 @@ class ChatControlBase(MessageControl): isactive = widget.get_active() self.chat_buttons_set_visible(isactive) - def _on_minimize_menuitem_activate(self, widget): + def on_minimize_menuitem_toggled(self, widget): '''When a grouchat is minimized, unparent the tab, put it in roster etc''' - win = gajim.interface.msg_win_mgr.get_window(self.contact.jid, self.account) - ctrl = win.get_control(self.contact.jid, self.account) - - ctrl_page = win.notebook.page_num(ctrl.widget) - control = win.notebook.get_nth_page(ctrl_page) - - win.notebook.remove_page(ctrl_page) - control.unparent() - ctrl.parent_win = None - - gajim.interface.minimized_controls[self.account][self.contact.jid] = ctrl - - del win._controls[self.account][self.contact.jid] - - win.check_tabs() - gajim.interface.roster.add_groupchat_to_roster(self.account, - self.contact.jid, status = self.subject) + old_value = False + minimized_gc = gajim.config.get_per('accounts', self.account, + 'minimized_gc').split() + if self.contact.jid in minimized_gc: + old_value = True + minimize = widget.get_active() + if minimize and not self.contact.jid in minimized_gc: + minimized_gc.append(self.contact.jid) + if not minimize and self.contact.jid in minimized_gc: + minimized_gc.remove(self.contact.jid) + if old_value != minimize: + gajim.config.set_per('accounts', self.account, 'minimized_gc', + ' '.join(minimized_gc)) def set_control_active(self, state): if state: @@ -1515,7 +1511,7 @@ class ChatControl(ChatControlBase): # compact_view_menuitem compact_view_menuitem.set_active(self.hide_chat_buttons_current) - + # add_to_roster_menuitem if _('Not in Roster') in contact.groups: add_to_roster_menuitem.show() @@ -1653,7 +1649,6 @@ class ChatControl(ChatControlBase): del self.handlers[i] self.conv_textview.del_handlers() self.msg_textview.destroy() - def allow_shutdown(self, method): if time.time() - gajim.last_message_time[self.account]\ diff --git a/src/common/config.py b/src/common/config.py index 4b164d56a..a218baeda 100644 --- a/src/common/config.py +++ b/src/common/config.py @@ -259,6 +259,7 @@ class Config: 'gpgpassword': [ opt_str, '' ], 'sync_with_global_status': [ opt_bool, False, ], 'no_log_for': [ opt_str, '' ], + 'minimized_gc': [ opt_str, '' ], 'attached_gpg_keys': [ opt_str, '' ], 'keep_alives_enabled': [ opt_bool, True], # send keepalive every N seconds of inactivity diff --git a/src/groupchat_control.py b/src/groupchat_control.py index 9e2b528f3..9fb48ae34 100644 --- a/src/groupchat_control.py +++ b/src/groupchat_control.py @@ -248,9 +248,10 @@ class GroupchatControl(ChatControlBase): id = widget.connect('activate', self._on_history_menuitem_activate) self.handlers[id] = widget - widget = xm.get_widget('minimize_menuitem') - id = widget.connect('activate', self._on_minimize_menuitem_activate) - self.handlers[id] = widget + self.minimize_menuitem = xm.get_widget('minimize_menuitem') + id = self.minimize_menuitem.connect('toggled', + self.on_minimize_menuitem_toggled) + self.handlers[id] = self.minimize_menuitem self.gc_popup_menu = xm.get_widget('gc_control_popup_menu') @@ -491,6 +492,9 @@ class GroupchatControl(ChatControlBase): sets sensitivity state for configure_room''' # Check compact view menuitem self.compact_view_menuitem.set_active(self.hide_chat_buttons_current) + if self.contact.jid in gajim.config.get_per('accounts', self.account, + 'minimized_gc').split(' '): + self.minimize_menuitem.set_active(True) if gajim.gc_connected[self.account][self.room_jid]: c = gajim.contacts.get_gc_contact(self.account, self.room_jid, self.nick) @@ -1431,6 +1435,28 @@ class GroupchatControl(ChatControlBase): is_modal = False, ok_handler = on_ok) def shutdown(self, status='offline'): + if self.contact.jid in gajim.config.get_per('accounts', self.account, + 'minimized_gc').split(' '): + # Minimize it + win = gajim.interface.msg_win_mgr.get_window(self.contact.jid, + self.account) + ctrl = win.get_control(self.contact.jid, self.account) + + ctrl_page = win.notebook.page_num(ctrl.widget) + control = win.notebook.get_nth_page(ctrl_page) + + win.notebook.remove_page(ctrl_page) + control.unparent() + ctrl.parent_win = None + + gajim.interface.minimized_controls[self.account][self.contact.jid] = \ + ctrl + + del win._controls[self.account][self.contact.jid] + + gajim.interface.roster.add_groupchat_to_roster(self.account, + self.contact.jid, status = self.subject) + return gajim.connections[self.account].send_gc_status(self.nick, self.room_jid, show='offline', status=status) nick_list = gajim.contacts.get_nick_list(self.account, self.room_jid) @@ -1461,6 +1487,9 @@ class GroupchatControl(ChatControlBase): def allow_shutdown(self, method): '''If check_selection is True, ''' + if self.contact.jid in gajim.config.get_per('accounts', self.account, + 'minimized_gc').split(' '): + return True if method == self.parent_win.CLOSE_ESC: model, iter = self.list_treeview.get_selection().get_selected() if iter: