ability to select status message and room subject in banner. Fixes #4879
This commit is contained in:
parent
412d9b4d87
commit
f74ec76e57
2 changed files with 120 additions and 83 deletions
|
@ -181,6 +181,8 @@ class ChatControlBase(MessageControl):
|
||||||
self.banner_status_label = gtk.Label()
|
self.banner_status_label = gtk.Label()
|
||||||
self.banner_status_label.set_selectable(True)
|
self.banner_status_label.set_selectable(True)
|
||||||
self.banner_status_label.set_alignment(0,0.5)
|
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 = self.xml.get_widget('banner_vbox')
|
||||||
banner_vbox.pack_start(self.banner_status_label)
|
banner_vbox.pack_start(self.banner_status_label)
|
||||||
|
@ -317,6 +319,20 @@ class ChatControlBase(MessageControl):
|
||||||
except (gobject.GError, RuntimeError, TypeError, OSError):
|
except (gobject.GError, RuntimeError, TypeError, OSError):
|
||||||
dialogs.AspellDictError(lang)
|
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):
|
def on_msg_textview_populate_popup(self, textview, menu):
|
||||||
'''we override the default context menu and we prepend an option to switch
|
'''we override the default context menu and we prepend an option to switch
|
||||||
languages'''
|
languages'''
|
||||||
|
@ -2205,10 +2221,14 @@ class ChatControl(ChatControlBase):
|
||||||
convert_to_gc_menuitem, information_menuitem, history_menuitem):
|
convert_to_gc_menuitem, information_menuitem, history_menuitem):
|
||||||
# destroy accelerators
|
# destroy accelerators
|
||||||
ag = gtk.accel_groups_from_object(self.parent_win.window)[0]
|
ag = gtk.accel_groups_from_object(self.parent_win.window)[0]
|
||||||
send_file_menuitem.remove_accelerator(ag, gtk.keysyms.f, gtk.gdk.CONTROL_MASK)
|
send_file_menuitem.remove_accelerator(ag, gtk.keysyms.f,
|
||||||
convert_to_gc_menuitem.remove_accelerator(ag, gtk.keysyms.g, gtk.gdk.CONTROL_MASK)
|
gtk.gdk.CONTROL_MASK)
|
||||||
information_menuitem.remove_accelerator(ag, gtk.keysyms.i, gtk.gdk.CONTROL_MASK)
|
convert_to_gc_menuitem.remove_accelerator(ag, gtk.keysyms.g,
|
||||||
history_menuitem.remove_accelerator(ag, gtk.keysyms.h, gtk.gdk.CONTROL_MASK)
|
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
|
# destroy menu
|
||||||
menu.destroy()
|
menu.destroy()
|
||||||
|
|
||||||
|
|
|
@ -276,49 +276,6 @@ class GroupchatControl(ChatControlBase):
|
||||||
self.number_of_colors = len(gajim.config.get('gc_nicknames_colors').\
|
self.number_of_colors = len(gajim.config.get('gc_nicknames_colors').\
|
||||||
split(':'))
|
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.name_label = self.xml.get_widget('banner_name_label')
|
||||||
self.event_box = self.xml.get_widget('banner_eventbox')
|
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):
|
def prepare_context_menu(self, hide_buttonbar_entries=False):
|
||||||
'''sets sensitivity state for configure_room'''
|
'''sets sensitivity state for configure_room'''
|
||||||
ag = gtk.accel_groups_from_object(self.parent_win.window)[0]
|
xml = gtkgui_helpers.get_glade('gc_control_popup_menu.glade')
|
||||||
self.change_nick_menuitem.add_accelerator('activate', ag, gtk.keysyms.n,
|
menu = xml.get_widget('gc_control_popup_menu')
|
||||||
gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
|
|
||||||
self.change_subject_menuitem.add_accelerator('activate', ag,
|
bookmark_room_menuitem = xml.get_widget('bookmark_room_menuitem')
|
||||||
gtk.keysyms.t, gtk.gdk.MOD1_MASK, gtk.ACCEL_VISIBLE)
|
change_nick_menuitem = xml.get_widget('change_nick_menuitem')
|
||||||
self.bookmark_room_menuitem.add_accelerator('activate', ag, gtk.keysyms.b,
|
configure_room_menuitem = xml.get_widget('configure_room_menuitem')
|
||||||
gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
|
destroy_room_menuitem = xml.get_widget('destroy_room_menuitem')
|
||||||
self.history_menuitem.add_accelerator('activate', ag, gtk.keysyms.h,
|
change_subject_menuitem = xml.get_widget('change_subject_menuitem')
|
||||||
gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
|
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:
|
if hide_buttonbar_entries:
|
||||||
self.change_nick_menuitem.hide()
|
change_nick_menuitem.hide()
|
||||||
self.change_subject_menuitem.hide()
|
change_subject_menuitem.hide()
|
||||||
self.bookmark_room_menuitem.hide()
|
bookmark_room_menuitem.hide()
|
||||||
self.history_menuitem.hide()
|
history_menuitem.hide()
|
||||||
self.bookmark_separator.hide()
|
bookmark_separator.hide()
|
||||||
self.separatormenuitem2.hide()
|
separatormenuitem2.hide()
|
||||||
else:
|
else:
|
||||||
self.change_nick_menuitem.show()
|
change_nick_menuitem.show()
|
||||||
self.change_subject_menuitem.show()
|
change_subject_menuitem.show()
|
||||||
self.bookmark_room_menuitem.show()
|
bookmark_room_menuitem.show()
|
||||||
self.history_menuitem.show()
|
history_menuitem.show()
|
||||||
self.bookmark_separator.show()
|
bookmark_separator.show()
|
||||||
self.separatormenuitem2.show()
|
separatormenuitem2.show()
|
||||||
for bm in gajim.connections[self.account].bookmarks:
|
for bm in gajim.connections[self.account].bookmarks:
|
||||||
if bm['jid'] == self.room_jid:
|
if bm['jid'] == self.room_jid:
|
||||||
self.bookmark_room_menuitem.hide()
|
bookmark_room_menuitem.hide()
|
||||||
self.bookmark_separator.hide()
|
bookmark_separator.hide()
|
||||||
break
|
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,
|
if self.contact.jid in gajim.config.get_per('accounts', self.account,
|
||||||
'minimized_gc').split(' '):
|
'minimized_gc').split(' '):
|
||||||
self.minimize_menuitem.set_active(True)
|
minimize_menuitem.set_active(True)
|
||||||
if not gajim.connections[self.account].private_storage_supported:
|
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]:
|
if gajim.gc_connected[self.account][self.room_jid]:
|
||||||
c = gajim.contacts.get_gc_contact(self.account, self.room_jid,
|
c = gajim.contacts.get_gc_contact(self.account, self.room_jid,
|
||||||
self.nick)
|
self.nick)
|
||||||
if c.affiliation not in ('owner', 'admin'):
|
if c.affiliation not in ('owner', 'admin'):
|
||||||
self.configure_room_menuitem.set_sensitive(False)
|
configure_room_menuitem.set_sensitive(False)
|
||||||
else:
|
else:
|
||||||
self.configure_room_menuitem.set_sensitive(True)
|
configure_room_menuitem.set_sensitive(True)
|
||||||
if c.affiliation != 'owner':
|
if c.affiliation != 'owner':
|
||||||
self.destroy_room_menuitem.set_sensitive(False)
|
destroy_room_menuitem.set_sensitive(False)
|
||||||
else:
|
else:
|
||||||
self.destroy_room_menuitem.set_sensitive(True)
|
destroy_room_menuitem.set_sensitive(True)
|
||||||
self.change_subject_menuitem.set_sensitive(True)
|
change_subject_menuitem.set_sensitive(True)
|
||||||
self.change_nick_menuitem.set_sensitive(True)
|
change_nick_menuitem.set_sensitive(True)
|
||||||
else:
|
else:
|
||||||
# We are not connected to this groupchat, disable unusable menuitems
|
# We are not connected to this groupchat, disable unusable menuitems
|
||||||
self.configure_room_menuitem.set_sensitive(False)
|
configure_room_menuitem.set_sensitive(False)
|
||||||
self.destroy_room_menuitem.set_sensitive(False)
|
destroy_room_menuitem.set_sensitive(False)
|
||||||
self.change_subject_menuitem.set_sensitive(False)
|
change_subject_menuitem.set_sensitive(False)
|
||||||
self.change_nick_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,
|
def on_message(self, nick, msg, tim, has_timestamp=False, xhtml=None,
|
||||||
status_code=[]):
|
status_code=[]):
|
||||||
|
|
Loading…
Add table
Reference in a new issue