[commit-gajim] r11242 - trunk/src

asterix at gajim.org asterix at gajim.org
Sun Apr 26 20:57:18 CEST 2009


Author: asterix
Date: 2009-04-26 20:57:18 +0200 (Sun, 26 Apr 2009)
New Revision: 11242

Modified:
   trunk/src/chat_control.py
   trunk/src/groupchat_control.py
Log:
ability to select status message and room subject in banner. Fixes #4879


Modified: trunk/src/chat_control.py
===================================================================
--- trunk/src/chat_control.py	2009-04-25 22:29:22 UTC (rev 11241)
+++ trunk/src/chat_control.py	2009-04-26 18:57:18 UTC (rev 11242)
@@ -181,6 +181,8 @@
 			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 @@
 		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 @@
 	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()
 

Modified: trunk/src/groupchat_control.py
===================================================================
--- trunk/src/groupchat_control.py	2009-04-25 22:29:22 UTC (rev 11241)
+++ trunk/src/groupchat_control.py	2009-04-26 18:57:18 UTC (rev 11242)
@@ -276,49 +276,6 @@
 		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,63 +602,123 @@
 
 	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=[]):
 		if '100' in status_code:



More information about the Commits mailing list