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.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…
	
	Add table
		
		Reference in a new issue