add advanced option to position avatar in the roster left or right. fixes #2102
This commit is contained in:
		
							parent
							
								
									2ced6413f0
								
							
						
					
					
						commit
						9a7dafa802
					
				
					 2 changed files with 32 additions and 12 deletions
				
			
		| 
						 | 
				
			
			@ -214,6 +214,7 @@ class Config:
 | 
			
		|||
		'show_unread_tab_icon': [opt_bool, False, _('If True, Gajim will display an icon on each tab containing unread messages. Depending on the theme, this icon may be animated.')],
 | 
			
		||||
		'show_status_msgs_in_roster': [opt_bool, True, _('If True, Gajim will display the status message, if not empty, for every contact under the contact name in roster window.'), True],
 | 
			
		||||
		'show_avatars_in_roster': [opt_bool, True, '', True],
 | 
			
		||||
		'avatar_position_in_roster': [opt_str, 'right', _('Define the position of the avatar in roster. Can be left or right'), True],
 | 
			
		||||
		'ask_avatars_on_startup': [opt_bool, True, _('If True, Gajim will ask for avatar each contact that did not have an avatar last time or has one cached that is too old.')],
 | 
			
		||||
		'print_status_in_chats': [opt_bool, True, _('If False, Gajim will no longer print status line in chats when a contact changes his or her status and/or his or her status message.')],
 | 
			
		||||
		'print_status_in_muc': [opt_str, 'in_and_out', _('can be "none", "all" or "in_and_out". If "none", Gajim will no longer print status line in groupchats when a member changes his or her status and/or his or her status message. If "all" Gajim will print all status messages. If "in_and_out", Gajim will only print FOO enters/leaves group chat.')],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3384,11 +3384,17 @@ class RosterWindow:
 | 
			
		|||
		elif event.button == 1: # Left click
 | 
			
		||||
			model = self.tree.get_model()
 | 
			
		||||
			type_ = model[path][C_TYPE]
 | 
			
		||||
			# x_min is the x start position of status icon column
 | 
			
		||||
			if gajim.config.get('avatar_position_in_roster') == 'left':
 | 
			
		||||
				x_min = gajim.config.get('roster_avatar_width')
 | 
			
		||||
			else:
 | 
			
		||||
				x_min = 0
 | 
			
		||||
			if gajim.single_click and not event.state & gtk.gdk.SHIFT_MASK and \
 | 
			
		||||
			not event.state & gtk.gdk.CONTROL_MASK:
 | 
			
		||||
				# Don't handle dubble click if we press icon of a metacontact
 | 
			
		||||
				iter = model.get_iter(path)
 | 
			
		||||
				if x < 27 and type_ == 'contact' and model.iter_has_child(iter):
 | 
			
		||||
				if x > xmin and x < x_min + 27 and type_ == 'contact' and \
 | 
			
		||||
				model.iter_has_child(iter):
 | 
			
		||||
					account = model[path][C_ACCOUNT].decode('utf-8')
 | 
			
		||||
					jid = model[path][C_JID].decode('utf-8')
 | 
			
		||||
					# first cell in 1st column (the arrow SINGLE clicked)
 | 
			
		||||
| 
						 | 
				
			
			@ -3406,14 +3412,14 @@ class RosterWindow:
 | 
			
		|||
				self.on_row_activated(widget, path)
 | 
			
		||||
				return
 | 
			
		||||
			else:
 | 
			
		||||
				if type_ == 'group' and x < 27:
 | 
			
		||||
				if type_ == 'group' and x > x_min and x < x_min + 27:
 | 
			
		||||
					# first cell in 1st column (the arrow SINGLE clicked)
 | 
			
		||||
					if (self.tree.row_expanded(path)):
 | 
			
		||||
						self.tree.collapse_row(path)
 | 
			
		||||
					else:
 | 
			
		||||
						self.tree.expand_row(path, False)
 | 
			
		||||
 | 
			
		||||
				elif type_ == 'contact' and x < 27:
 | 
			
		||||
				elif type_ == 'contact' and x > x_min and x < x_min + 27:
 | 
			
		||||
					account = model[path][C_ACCOUNT].decode('utf-8')
 | 
			
		||||
					jid = model[path][C_JID].decode('utf-8')
 | 
			
		||||
					# first cell in 1st column (the arrow SINGLE clicked)
 | 
			
		||||
| 
						 | 
				
			
			@ -4819,7 +4825,8 @@ class RosterWindow:
 | 
			
		|||
		theme = gajim.config.get('roster_theme')
 | 
			
		||||
		type_ = model[iter][C_TYPE]
 | 
			
		||||
		# allocate space for the icon only if needed
 | 
			
		||||
		if model[iter][C_SECPIXBUF]:
 | 
			
		||||
		if model[iter][C_SECPIXBUF] or \
 | 
			
		||||
		gajim.config.get('avatar_position_in_roster') == 'left':
 | 
			
		||||
			renderer.set_property('visible', True)
 | 
			
		||||
		else:
 | 
			
		||||
			renderer.set_property('visible', False)
 | 
			
		||||
| 
						 | 
				
			
			@ -4853,7 +4860,11 @@ class RosterWindow:
 | 
			
		|||
					renderer.set_property('cell-background', color)
 | 
			
		||||
				else:
 | 
			
		||||
					renderer.set_property('cell-background', None)
 | 
			
		||||
		renderer.set_property('xalign', 1) # align pixbuf to the right
 | 
			
		||||
		if gajim.config.get('avatar_position_in_roster') == 'left':
 | 
			
		||||
			renderer.set_property('width', gajim.config.get('roster_avatar_width'))
 | 
			
		||||
			renderer.set_property('xalign', 0.5)
 | 
			
		||||
		else:
 | 
			
		||||
			renderer.set_property('xalign', 1) # align pixbuf to the right
 | 
			
		||||
 | 
			
		||||
	def get_show(self, lcontact):
 | 
			
		||||
		prio = lcontact[0].priority
 | 
			
		||||
| 
						 | 
				
			
			@ -5515,6 +5526,13 @@ class RosterWindow:
 | 
			
		|||
		# first one img, second one text, third is sec pixbuf
 | 
			
		||||
		col = gtk.TreeViewColumn()
 | 
			
		||||
 | 
			
		||||
		if gajim.config.get('avatar_position_in_roster') == 'left':
 | 
			
		||||
			render_pixbuf = gtk.CellRendererPixbuf() # tls or avatar img
 | 
			
		||||
			col.pack_start(render_pixbuf, expand = False)
 | 
			
		||||
			col.add_attribute(render_pixbuf, 'pixbuf', C_SECPIXBUF)
 | 
			
		||||
			col.set_cell_data_func(render_pixbuf,
 | 
			
		||||
				self.fill_secondary_pixbuf_rederer, None)
 | 
			
		||||
 | 
			
		||||
		render_image = cell_renderer_image.CellRendererImage(0, 0)
 | 
			
		||||
		# show img or +-
 | 
			
		||||
		col.pack_start(render_image, expand = False)
 | 
			
		||||
| 
						 | 
				
			
			@ -5527,15 +5545,16 @@ class RosterWindow:
 | 
			
		|||
		col.add_attribute(render_text, 'markup', C_NAME) # where we hold the name
 | 
			
		||||
		col.set_cell_data_func(render_text, self.nameCellDataFunc, None)
 | 
			
		||||
 | 
			
		||||
		render_pixbuf = gtk.CellRendererPixbuf() # tls or avatar img
 | 
			
		||||
		col.pack_start(render_pixbuf, expand = False)
 | 
			
		||||
		col.add_attribute(render_pixbuf, 'pixbuf', C_SECPIXBUF)
 | 
			
		||||
		col.set_cell_data_func(render_pixbuf, self.fill_secondary_pixbuf_rederer,
 | 
			
		||||
			None)
 | 
			
		||||
		if gajim.config.get('avatar_position_in_roster') == 'right':
 | 
			
		||||
			render_pixbuf = gtk.CellRendererPixbuf() # tls or avatar img
 | 
			
		||||
			col.pack_start(render_pixbuf, expand = False)
 | 
			
		||||
			col.add_attribute(render_pixbuf, 'pixbuf', C_SECPIXBUF)
 | 
			
		||||
			col.set_cell_data_func(render_pixbuf,
 | 
			
		||||
				self.fill_secondary_pixbuf_rederer, None)
 | 
			
		||||
 | 
			
		||||
		self.tree.append_column(col)
 | 
			
		||||
 | 
			
		||||
		#do not show gtk arrows workaround
 | 
			
		||||
		# do not show gtk arrows workaround
 | 
			
		||||
		col = gtk.TreeViewColumn()
 | 
			
		||||
		render_pixbuf = gtk.CellRendererPixbuf()
 | 
			
		||||
		col.pack_start(render_pixbuf, expand = False)
 | 
			
		||||
| 
						 | 
				
			
			@ -5543,7 +5562,7 @@ class RosterWindow:
 | 
			
		|||
		col.set_visible(False)
 | 
			
		||||
		self.tree.set_expander_column(col)
 | 
			
		||||
 | 
			
		||||
		#signals
 | 
			
		||||
		# signals
 | 
			
		||||
		self.TARGET_TYPE_URI_LIST = 80
 | 
			
		||||
		TARGETS = [('MY_TREE_MODEL_ROW', gtk.TARGET_SAME_APP | gtk.TARGET_SAME_WIDGET,
 | 
			
		||||
			0)]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue