ability to select status message and room subject in banner. Fixes #4879
This commit is contained in:
parent
412d9b4d87
commit
f74ec76e57
|
@ -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()
|
||||
|
||||
|
|
|
@ -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=[]):
|
||||
|
|
Loading…
Reference in New Issue