diff --git a/data/gui/gc_control_popup_menu.ui b/data/gui/gc_control_popup_menu.ui index e6023d0c2..35bc6e2b3 100644 --- a/data/gui/gc_control_popup_menu.ui +++ b/data/gui/gc_control_popup_menu.ui @@ -107,5 +107,12 @@ True + + + False + _Disconnect + True + + diff --git a/src/conversation_textview.py b/src/conversation_textview.py index e2e0c58d1..46279b9e2 100644 --- a/src/conversation_textview.py +++ b/src/conversation_textview.py @@ -1494,6 +1494,8 @@ class ConversationTextview(GObject.GObject): text, text_tags, graphics, iter_, additional_data) if self.plugin_modified: return self.tv.get_buffer().get_end_iter() + #needed, if buffer is manipulated by plugins without setting plugin_modified to True + iter_ = self.tv.get_buffer().get_end_iter() # detect urls formatting and if the user has it on emoticons return self.detect_and_print_special_text(text, text_tags, graphics=graphics, diff --git a/src/groupchat_control.py b/src/groupchat_control.py index f2fa58ce0..1d77f40f5 100644 --- a/src/groupchat_control.py +++ b/src/groupchat_control.py @@ -301,6 +301,7 @@ class GroupchatControl(ChatControlBase): ChatControlBase.__init__(self, self.TYPE_ID, parent_win, 'groupchat_control', contact, acct) + self.force_non_minimizable = False self.is_continued = is_continued self.is_anonymous = True @@ -829,6 +830,7 @@ class GroupchatControl(ChatControlBase): destroy_room_menuitem = xml.get_object('destroy_room_menuitem') change_subject_menuitem = xml.get_object('change_subject_menuitem') history_menuitem = xml.get_object('history_menuitem') + disconnect_menuitem = xml.get_object('disconnect_menuitem') minimize_menuitem = xml.get_object('minimize_menuitem') request_voice_menuitem = xml.get_object('request_voice_menuitem') bookmark_separator = xml.get_object('bookmark_separator') @@ -921,6 +923,10 @@ class GroupchatControl(ChatControlBase): id_ = history_menuitem.connect('activate', self._on_history_menuitem_activate) self.handlers[id_] = history_menuitem + + id_ = disconnect_menuitem.connect('activate', + self._on_disconnect_menuitem_activate) + self.handlers[id_] = disconnect_menuitem id_ = request_voice_menuitem.connect('activate', self._on_request_voice_menuitem_activate) @@ -2038,6 +2044,8 @@ class GroupchatControl(ChatControlBase): return 'visitor' def minimizable(self): + if self.force_non_minimizable: + return False if self.contact.jid not in gajim.config.get_per('accounts', self.account, 'non_minimized_gc').split(' '): return True @@ -2219,6 +2227,11 @@ class GroupchatControl(ChatControlBase): _('Please specify the new subject:'), input_str=self.subject, ok_handler=on_ok) + def _on_disconnect_menuitem_activate(self, widget): + self.force_non_minimizable = True + self.parent_win.remove_tab(self, self.parent_win.CLOSE_COMMAND) + self.force_non_minimizable = False + def _on_change_nick_menuitem_activate(self, widget): if 'change_nick_dialog' in gajim.interface.instances: gajim.interface.instances['change_nick_dialog'].dialog.present()