add advanced option to position avatar in the roster left or right. fixes #2102
This commit is contained in:
parent
2ced6413f0
commit
9a7dafa802
|
@ -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…
Reference in New Issue