add new option to show avatar in chat tabs and window icons instead of status icon. Fixes #8320
This commit is contained in:
		
							parent
							
								
									991df175d7
								
							
						
					
					
						commit
						997e686d57
					
				
					 6 changed files with 56 additions and 15 deletions
				
			
		| 
						 | 
				
			
			@ -531,6 +531,22 @@
 | 
			
		|||
                            <property name="top_attach">0</property>
 | 
			
		||||
                          </packing>
 | 
			
		||||
                        </child>
 | 
			
		||||
                        <child>
 | 
			
		||||
                          <object class="GtkCheckButton" id="show_avatar_in_tabs_checkbutton">
 | 
			
		||||
                            <property name="label" translatable="yes">Show avatar in chat tabs</property>
 | 
			
		||||
                            <property name="visible">True</property>
 | 
			
		||||
                            <property name="can_focus">True</property>
 | 
			
		||||
                            <property name="receives_default">False</property>
 | 
			
		||||
                            <property name="xalign">0</property>
 | 
			
		||||
                            <property name="draw_indicator">True</property>
 | 
			
		||||
                            <signal name="toggled" handler="on_show_avatar_in_tabs_checkbutton_toggled" swapped="no"/>
 | 
			
		||||
                          </object>
 | 
			
		||||
                          <packing>
 | 
			
		||||
                            <property name="left_attach">0</property>
 | 
			
		||||
                            <property name="top_attach">7</property>
 | 
			
		||||
                            <property name="width">2</property>
 | 
			
		||||
                          </packing>
 | 
			
		||||
                        </child>
 | 
			
		||||
                      </object>
 | 
			
		||||
                    </child>
 | 
			
		||||
                    <child type="label">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2591,6 +2591,14 @@ class ChatControl(ChatControlBase):
 | 
			
		|||
            jid = self.contact.get_full_jid()
 | 
			
		||||
        else:
 | 
			
		||||
            jid = self.contact.jid
 | 
			
		||||
 | 
			
		||||
        if gajim.config.get('show_avatar_in_tabs'):
 | 
			
		||||
            avatar_pixbuf = gtkgui_helpers.get_avatar_pixbuf_from_cache(jid)
 | 
			
		||||
            if avatar_pixbuf not in ('ask', None):
 | 
			
		||||
                avatar_pixbuf = gtkgui_helpers.get_scaled_pixbuf_by_size(
 | 
			
		||||
                    avatar_pixbuf, 16, 16)
 | 
			
		||||
                return avatar_pixbuf
 | 
			
		||||
 | 
			
		||||
        if count_unread:
 | 
			
		||||
            num_unread = len(gajim.events.get_events(self.account, jid,
 | 
			
		||||
                    ['printed_' + self.type_id, self.type_id]))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -317,6 +317,7 @@ class Config:
 | 
			
		|||
            'ignore_incoming_attention': [opt_bool, False, _('If True, Gajim will ignore incoming attention requestd ("wizz").')],
 | 
			
		||||
            'remember_opened_chat_controls': [ opt_bool, True, _('If enabled, Gajim will reopen chat windows that were opened last time Gajim was closed.')],
 | 
			
		||||
            'positive_184_ack': [ opt_bool, False, _('If enabled, Gajim will show an icon to show that sent message has been received by your contact')],
 | 
			
		||||
            'show_avatar_in_tabs': [ opt_bool, False, _('Show a mini avatar in chat window tabs and in window icon')],
 | 
			
		||||
    }, {})
 | 
			
		||||
 | 
			
		||||
    __options_per_key = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -209,6 +209,10 @@ class PreferencesWindow:
 | 
			
		|||
        st = gajim.config.get('positive_184_ack')
 | 
			
		||||
        self.xml.get_object('positive_184_ack_checkbutton').set_active(st)
 | 
			
		||||
 | 
			
		||||
        # Show avatar in tabs
 | 
			
		||||
        st = gajim.config.get('show_avatar_in_tabs')
 | 
			
		||||
        self.xml.get_object('show_avatar_in_tabs_checkbutton').set_active(st)
 | 
			
		||||
 | 
			
		||||
        ### Style tab ###
 | 
			
		||||
        # Themes
 | 
			
		||||
        theme_combobox = self.xml.get_object('theme_combobox')
 | 
			
		||||
| 
						 | 
				
			
			@ -763,6 +767,9 @@ class PreferencesWindow:
 | 
			
		|||
    def on_positive_184_ack_checkbutton_toggled(self, widget):
 | 
			
		||||
        self.on_checkbutton_toggled(widget, 'positive_184_ack')
 | 
			
		||||
 | 
			
		||||
    def on_show_avatar_in_tabs_checkbutton_toggled(self, widget):
 | 
			
		||||
        self.on_checkbutton_toggled(widget, 'show_avatar_in_tabs')
 | 
			
		||||
 | 
			
		||||
    def on_theme_combobox_changed(self, widget):
 | 
			
		||||
        model = widget.get_model()
 | 
			
		||||
        active = widget.get_active()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -570,18 +570,7 @@ def get_fade_color(treeview, selected, focused):
 | 
			
		|||
    return Gdk.RGBA(bg.red*p + fg.red*q, bg.green*p + fg.green*q,
 | 
			
		||||
        bg.blue*p + fg.blue*q)
 | 
			
		||||
 | 
			
		||||
def get_scaled_pixbuf(pixbuf, kind):
 | 
			
		||||
    """
 | 
			
		||||
    Return scaled pixbuf, keeping ratio etc or None kind is either "chat",
 | 
			
		||||
    "roster", "notification", "tooltip", "vcard"
 | 
			
		||||
    """
 | 
			
		||||
    # resize to a width / height for the avatar not to have distortion
 | 
			
		||||
    # (keep aspect ratio)
 | 
			
		||||
    width = gajim.config.get(kind + '_avatar_width')
 | 
			
		||||
    height = gajim.config.get(kind + '_avatar_height')
 | 
			
		||||
    if width < 1 or height < 1:
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
def get_scaled_pixbuf_by_size(pixbuf, width, height):
 | 
			
		||||
    # Pixbuf size
 | 
			
		||||
    pix_width = pixbuf.get_width()
 | 
			
		||||
    pix_height = pixbuf.get_height()
 | 
			
		||||
| 
						 | 
				
			
			@ -599,6 +588,20 @@ def get_scaled_pixbuf(pixbuf, kind):
 | 
			
		|||
    scaled_buf = pixbuf.scale_simple(w, h, GdkPixbuf.InterpType.HYPER)
 | 
			
		||||
    return scaled_buf
 | 
			
		||||
 | 
			
		||||
def get_scaled_pixbuf(pixbuf, kind):
 | 
			
		||||
    """
 | 
			
		||||
    Return scaled pixbuf, keeping ratio etc or None kind is either "chat",
 | 
			
		||||
    "roster", "notification", "tooltip", "vcard"
 | 
			
		||||
    """
 | 
			
		||||
    # resize to a width / height for the avatar not to have distortion
 | 
			
		||||
    # (keep aspect ratio)
 | 
			
		||||
    width = gajim.config.get(kind + '_avatar_width')
 | 
			
		||||
    height = gajim.config.get(kind + '_avatar_height')
 | 
			
		||||
    if width < 1 or height < 1:
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    return get_scaled_pixbuf_by_size(pixbuf, width, height)
 | 
			
		||||
 | 
			
		||||
def get_avatar_pixbuf_from_cache(fjid, use_local=True):
 | 
			
		||||
    """
 | 
			
		||||
    Check if jid has cached avatar and if that avatar is valid image (can be
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,6 +29,7 @@
 | 
			
		|||
 | 
			
		||||
from gi.repository import Gtk
 | 
			
		||||
from gi.repository import Gdk
 | 
			
		||||
from gi.repository import GdkPixbuf
 | 
			
		||||
from gi.repository import GObject
 | 
			
		||||
from gi.repository import GLib
 | 
			
		||||
import time
 | 
			
		||||
| 
						 | 
				
			
			@ -480,6 +481,9 @@ class MessageWindow(object):
 | 
			
		|||
                # chat, pm
 | 
			
		||||
                icon = gtkgui_helpers.load_icon('online')
 | 
			
		||||
        if icon:
 | 
			
		||||
            if isinstance(icon, GdkPixbuf.Pixbuf):
 | 
			
		||||
                self.window.set_icon(icon)
 | 
			
		||||
            else:
 | 
			
		||||
                self.window.set_icon(icon.get_pixbuf())
 | 
			
		||||
 | 
			
		||||
    def show_title(self, urgent=True, control=None):
 | 
			
		||||
| 
						 | 
				
			
			@ -658,7 +662,9 @@ class MessageWindow(object):
 | 
			
		|||
 | 
			
		||||
        tab_img = ctrl.get_tab_image()
 | 
			
		||||
        if tab_img:
 | 
			
		||||
            if tab_img.get_storage_type() == Gtk.ImageType.ANIMATION:
 | 
			
		||||
            if isinstance(tab_img, GdkPixbuf.Pixbuf):
 | 
			
		||||
                status_img.set_from_pixbuf(tab_img)
 | 
			
		||||
            elif tab_img.get_storage_type() == Gtk.ImageType.ANIMATION:
 | 
			
		||||
                status_img.set_from_animation(tab_img.get_animation())
 | 
			
		||||
            else:
 | 
			
		||||
                status_img.set_from_pixbuf(tab_img.get_pixbuf())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue