ability to select status message and room subject in banner. Fixes #4879

This commit is contained in:
Yann Leboulanger 2009-04-26 18:57:18 +00:00
parent 412d9b4d87
commit f74ec76e57
2 changed files with 120 additions and 83 deletions

View File

@ -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()

View File

@ -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=[]):