diff --git a/src/chat_control.py b/src/chat_control.py index 8edfdc5b574ba76299e975d5404eaad333a10604..4e23ac032f40e170223ba711712093bbbfbac53d 100644 --- a/src/chat_control.py +++ b/src/chat_control.py @@ -181,6 +181,8 @@ class ChatControlBase(MessageControl): self.banner_status_label = gtk.Label() self.banner_status_label.set_selectable(True) self.banner_status_label.set_alignment(0,0.5) + self.banner_status_label.connect('populate_popup', + self.on_banner_label_populate_popup) banner_vbox = self.xml.get_widget('banner_vbox') banner_vbox.pack_start(self.banner_status_label) @@ -317,6 +319,20 @@ class ChatControlBase(MessageControl): except (gobject.GError, RuntimeError, TypeError, OSError): dialogs.AspellDictError(lang) + def on_banner_label_populate_popup(self, label, menu): + '''We override the default context menu and add our own menutiems''' + item = gtk.SeparatorMenuItem() + menu.prepend(item) + + menu2 = self.prepare_context_menu() + i = 0 + for item in menu2: + menu2.remove(item) + menu.prepend(item) + menu.reorder_child(item, i) + i += 1 + menu.show_all() + def on_msg_textview_populate_popup(self, textview, menu): '''we override the default context menu and we prepend an option to switch languages''' @@ -2205,10 +2221,14 @@ class ChatControl(ChatControlBase): convert_to_gc_menuitem, information_menuitem, history_menuitem): # destroy accelerators ag = gtk.accel_groups_from_object(self.parent_win.window)[0] - send_file_menuitem.remove_accelerator(ag, gtk.keysyms.f, gtk.gdk.CONTROL_MASK) - convert_to_gc_menuitem.remove_accelerator(ag, gtk.keysyms.g, gtk.gdk.CONTROL_MASK) - information_menuitem.remove_accelerator(ag, gtk.keysyms.i, gtk.gdk.CONTROL_MASK) - history_menuitem.remove_accelerator(ag, gtk.keysyms.h, gtk.gdk.CONTROL_MASK) + send_file_menuitem.remove_accelerator(ag, gtk.keysyms.f, + gtk.gdk.CONTROL_MASK) + convert_to_gc_menuitem.remove_accelerator(ag, gtk.keysyms.g, + gtk.gdk.CONTROL_MASK) + information_menuitem.remove_accelerator(ag, gtk.keysyms.i, + gtk.gdk.CONTROL_MASK) + history_menuitem.remove_accelerator(ag, gtk.keysyms.h, + gtk.gdk.CONTROL_MASK) # destroy menu menu.destroy() diff --git a/src/groupchat_control.py b/src/groupchat_control.py index 7d56130d595955c7cb14705300822f56a1fefaae..e2dd6ab87f4ecbe16621fedd834f8900b6a0209c 100644 --- a/src/groupchat_control.py +++ b/src/groupchat_control.py @@ -276,49 +276,6 @@ class GroupchatControl(ChatControlBase): self.number_of_colors = len(gajim.config.get('gc_nicknames_colors').\ split(':')) - # connect the menuitems to their respective functions - xm = gtkgui_helpers.get_glade('gc_control_popup_menu.glade') - - self.bookmark_room_menuitem = xm.get_widget('bookmark_room_menuitem') - id_ = self.bookmark_room_menuitem.connect('activate', - self._on_bookmark_room_menuitem_activate) - self.handlers[id_] = self.bookmark_room_menuitem - - self.change_nick_menuitem = xm.get_widget('change_nick_menuitem') - id_ = self.change_nick_menuitem.connect('activate', - self._on_change_nick_menuitem_activate) - self.handlers[id_] = self.change_nick_menuitem - - self.configure_room_menuitem = xm.get_widget('configure_room_menuitem') - id_ = self.configure_room_menuitem.connect('activate', - self._on_configure_room_menuitem_activate) - self.handlers[id_] = self.configure_room_menuitem - - self.destroy_room_menuitem = xm.get_widget('destroy_room_menuitem') - id_ = self.destroy_room_menuitem.connect('activate', - self._on_destroy_room_menuitem_activate) - self.handlers[id_] = self.destroy_room_menuitem - - self.change_subject_menuitem = xm.get_widget('change_subject_menuitem') - id_ = self.change_subject_menuitem.connect('activate', - self._on_change_subject_menuitem_activate) - self.handlers[id_] = self.change_subject_menuitem - - self.history_menuitem = xm.get_widget('history_menuitem') - id_ = self.history_menuitem.connect('activate', - self._on_history_menuitem_activate) - self.handlers[id_] = self.history_menuitem - - 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.bookmark_separator = xm.get_widget('bookmark_separator') - self.separatormenuitem2 = xm.get_widget('separatormenuitem2') - - self.gc_popup_menu = xm.get_widget('gc_control_popup_menu') - self.name_label = self.xml.get_widget('banner_name_label') self.event_box = self.xml.get_widget('banner_eventbox') @@ -645,62 +602,122 @@ class GroupchatControl(ChatControlBase): def prepare_context_menu(self, hide_buttonbar_entries=False): '''sets sensitivity state for configure_room''' - ag = gtk.accel_groups_from_object(self.parent_win.window)[0] - self.change_nick_menuitem.add_accelerator('activate', ag, gtk.keysyms.n, - gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) - self.change_subject_menuitem.add_accelerator('activate', ag, - gtk.keysyms.t, gtk.gdk.MOD1_MASK, gtk.ACCEL_VISIBLE) - self.bookmark_room_menuitem.add_accelerator('activate', ag, gtk.keysyms.b, - gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) - self.history_menuitem.add_accelerator('activate', ag, gtk.keysyms.h, - gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) + xml = gtkgui_helpers.get_glade('gc_control_popup_menu.glade') + menu = xml.get_widget('gc_control_popup_menu') + + bookmark_room_menuitem = xml.get_widget('bookmark_room_menuitem') + change_nick_menuitem = xml.get_widget('change_nick_menuitem') + configure_room_menuitem = xml.get_widget('configure_room_menuitem') + destroy_room_menuitem = xml.get_widget('destroy_room_menuitem') + change_subject_menuitem = xml.get_widget('change_subject_menuitem') + history_menuitem = xml.get_widget('history_menuitem') + minimize_menuitem = xml.get_widget('minimize_menuitem') + bookmark_separator = xml.get_widget('bookmark_separator') + separatormenuitem2 = xml.get_widget('separatormenuitem2') if hide_buttonbar_entries: - self.change_nick_menuitem.hide() - self.change_subject_menuitem.hide() - self.bookmark_room_menuitem.hide() - self.history_menuitem.hide() - self.bookmark_separator.hide() - self.separatormenuitem2.hide() + change_nick_menuitem.hide() + change_subject_menuitem.hide() + bookmark_room_menuitem.hide() + history_menuitem.hide() + bookmark_separator.hide() + separatormenuitem2.hide() else: - self.change_nick_menuitem.show() - self.change_subject_menuitem.show() - self.bookmark_room_menuitem.show() - self.history_menuitem.show() - self.bookmark_separator.show() - self.separatormenuitem2.show() + change_nick_menuitem.show() + change_subject_menuitem.show() + bookmark_room_menuitem.show() + history_menuitem.show() + bookmark_separator.show() + separatormenuitem2.show() for bm in gajim.connections[self.account].bookmarks: if bm['jid'] == self.room_jid: - self.bookmark_room_menuitem.hide() - self.bookmark_separator.hide() + bookmark_room_menuitem.hide() + bookmark_separator.hide() break + ag = gtk.accel_groups_from_object(self.parent_win.window)[0] + change_nick_menuitem.add_accelerator('activate', ag, gtk.keysyms.n, + gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) + change_subject_menuitem.add_accelerator('activate', ag, + gtk.keysyms.t, gtk.gdk.MOD1_MASK, gtk.ACCEL_VISIBLE) + bookmark_room_menuitem.add_accelerator('activate', ag, gtk.keysyms.b, + gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) + history_menuitem.add_accelerator('activate', ag, gtk.keysyms.h, + gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) + if self.contact.jid in gajim.config.get_per('accounts', self.account, 'minimized_gc').split(' '): - self.minimize_menuitem.set_active(True) + minimize_menuitem.set_active(True) if not gajim.connections[self.account].private_storage_supported: - self.bookmark_room_menuitem.set_sensitive(False) + bookmark_room_menuitem.set_sensitive(False) if gajim.gc_connected[self.account][self.room_jid]: c = gajim.contacts.get_gc_contact(self.account, self.room_jid, self.nick) if c.affiliation not in ('owner', 'admin'): - self.configure_room_menuitem.set_sensitive(False) + configure_room_menuitem.set_sensitive(False) else: - self.configure_room_menuitem.set_sensitive(True) + configure_room_menuitem.set_sensitive(True) if c.affiliation != 'owner': - self.destroy_room_menuitem.set_sensitive(False) + destroy_room_menuitem.set_sensitive(False) else: - self.destroy_room_menuitem.set_sensitive(True) - self.change_subject_menuitem.set_sensitive(True) - self.change_nick_menuitem.set_sensitive(True) + destroy_room_menuitem.set_sensitive(True) + change_subject_menuitem.set_sensitive(True) + change_nick_menuitem.set_sensitive(True) else: # We are not connected to this groupchat, disable unusable menuitems - self.configure_room_menuitem.set_sensitive(False) - self.destroy_room_menuitem.set_sensitive(False) - self.change_subject_menuitem.set_sensitive(False) - self.change_nick_menuitem.set_sensitive(False) + configure_room_menuitem.set_sensitive(False) + destroy_room_menuitem.set_sensitive(False) + change_subject_menuitem.set_sensitive(False) + change_nick_menuitem.set_sensitive(False) - return self.gc_popup_menu + # connect the menuitems to their respective functions + id_ = bookmark_room_menuitem.connect('activate', + self._on_bookmark_room_menuitem_activate) + self.handlers[id_] = bookmark_room_menuitem + + id_ = change_nick_menuitem.connect('activate', + self._on_change_nick_menuitem_activate) + self.handlers[id_] = change_nick_menuitem + + id_ = configure_room_menuitem.connect('activate', + self._on_configure_room_menuitem_activate) + self.handlers[id_] = configure_room_menuitem + + id_ = destroy_room_menuitem.connect('activate', + self._on_destroy_room_menuitem_activate) + self.handlers[id_] = destroy_room_menuitem + + id_ = change_subject_menuitem.connect('activate', + self._on_change_subject_menuitem_activate) + self.handlers[id_] = change_subject_menuitem + + id_ = history_menuitem.connect('activate', + self._on_history_menuitem_activate) + self.handlers[id_] = history_menuitem + + id_ = minimize_menuitem.connect('toggled', + self.on_minimize_menuitem_toggled) + self.handlers[id_] = minimize_menuitem + + menu.connect('selection-done', self.destroy_menu, + change_nick_menuitem, change_subject_menuitem, + bookmark_room_menuitem, history_menuitem) + return menu + + def destroy_menu(self, menu, change_nick_menuitem, change_subject_menuitem, + bookmark_room_menuitem, history_menuitem): + # destroy accelerators + ag = gtk.accel_groups_from_object(self.parent_win.window)[0] + change_nick_menuitem.remove_accelerator(ag, gtk.keysyms.n, + gtk.gdk.CONTROL_MASK) + change_subject_menuitem.remove_accelerator(ag, gtk.keysyms.t, + gtk.gdk.MOD1_MASK) + bookmark_room_menuitem.remove_accelerator(ag, gtk.keysyms.b, + gtk.gdk.CONTROL_MASK) + history_menuitem.remove_accelerator(ag, gtk.keysyms.h, + gtk.gdk.CONTROL_MASK) + # destroy menu + menu.destroy() def on_message(self, nick, msg, tim, has_timestamp=False, xhtml=None, status_code=[]):