--- a/ChangeLog.API Sat Nov 14 03:15:43 2020 -0600
+++ b/ChangeLog.API Sat Nov 14 03:39:06 2020 -0600
@@ -632,6 +632,7 @@
* PidginConvPlacementFunc
+ * pidgin_conv_get_tab_icon, use PidginPresenceIcon instead. * pidgin_conv_placement_get_name
* pidgin_conv_placement_add_fnc
* pidgin_conv_placement_remove_fnc
--- a/doc/reference/pidgin/pidgin-docs.xml Sat Nov 14 03:15:43 2020 -0600
+++ b/doc/reference/pidgin/pidgin-docs.xml Sat Nov 14 03:39:06 2020 -0600
@@ -77,6 +77,7 @@
<xi:include href="xml/pidginplugininfo.xml" />
<xi:include href="xml/pidginpluginsdialog.xml" />
<xi:include href="xml/pidginpluginsmenu.xml" />
+ <xi:include href="xml/pidginpresenceicon.xml" /> <xi:include href="xml/pidginstock.xml" />
<xi:include href="xml/pidginstyle.xml" />
<xi:include href="xml/pidgintalkatu.xml" />
--- a/pidgin/glade/pidgin3.xml.in Sat Nov 14 03:15:43 2020 -0600
+++ b/pidgin/glade/pidgin3.xml.in Sat Nov 14 03:39:06 2020 -0600
@@ -13,6 +13,7 @@
<glade-widget-class name="PidginInviteDialog" generic-name="invite_dialog" title="InviteDialog"/>
<glade-widget-class name="PidginMenuTray" generic-name="menu_tray" title="MenuTray"/>
<glade-widget-class name="PidginPluginsMenu" generic-name="plugins_menu" title="PluginsMenu"/>
+ <glade-widget-class name="PidginPresenceIcon" generic-name="presence_icon" title="PresenceIcon"/> <glade-widget-class name="PidginScrollBook" generic-name="scroll_book" title="ScrollBook"/>
<glade-widget-class name="PidginStatusBox" generic-name="status_box" title="StatusBox"/>
<glade-widget-class name="PidginWindow" generic-name="window" title="Window"/>
@@ -30,6 +31,7 @@
<glade-widget-class-ref name="PidginInviteDialog"/>
<glade-widget-class-ref name="PidginMenuTray"/>
<glade-widget-class-ref name="PidginPluginsMenu"/>
+ <glade-widget-class-ref name="PidginPresenceIcon"/> <glade-widget-class-ref name="PidginScrollBook"/>
<glade-widget-class-ref name="PidginStatusBox"/>
<glade-widget-class-ref name="PidginWindow"/>
--- a/pidgin/gtkconv.c Sat Nov 14 03:15:43 2020 -0600
+++ b/pidgin/gtkconv.c Sat Nov 14 03:39:06 2020 -0600
@@ -58,6 +58,7 @@
#include "pidginmenutray.h"
#include "pidginmessage.h"
+#include "pidginpresenceicon.h" #include "pidgintooltip.h"
@@ -1871,89 +1872,11 @@
/**************************************************************************
* A bunch of buddy icon functions
**************************************************************************/
-pidgin_conv_get_icon_stock(PurpleConversation *conv)
- PurpleAccount *account = NULL;
- const char *stock = NULL;
- g_return_val_if_fail(conv != NULL, NULL);
- account = purple_conversation_get_account(conv);
- g_return_val_if_fail(account != NULL, NULL);
- /* Use the buddy icon, if possible */
- if (PURPLE_IS_IM_CONVERSATION(conv)) {
- const char *name = NULL;
- name = purple_conversation_get_name(conv);
- b = purple_blist_find_buddy(account, name);
- PurplePresence *p = purple_buddy_get_presence(b);
- PurpleStatus *active = purple_presence_get_active_status(p);
- PurpleStatusType *type = purple_status_get_status_type(active);
- PurpleStatusPrimitive prim = purple_status_type_get_primitive(type);
- stock = pidgin_stock_id_from_status_primitive(prim);
- stock = PIDGIN_STOCK_STATUS_PERSON;
- stock = PIDGIN_STOCK_STATUS_CHAT;
-pidgin_conv_get_icon(PurpleConversation *conv, GtkWidget *parent, const char *icon_size)
- PurpleAccount *account = NULL;
- const char *name = NULL;
- const char *stock = NULL;
- GdkPixbuf *status = NULL;
- g_return_val_if_fail(conv != NULL, NULL);
- account = purple_conversation_get_account(conv);
- name = purple_conversation_get_name(conv);
- g_return_val_if_fail(account != NULL, NULL);
- g_return_val_if_fail(name != NULL, NULL);
- /* Use the buddy icon, if possible */
- if (PURPLE_IS_IM_CONVERSATION(conv)) {
- PurpleBuddy *b = purple_blist_find_buddy(account, name);
- /* I hate this hack. It fixes a bug where the pending message icon
- * displays in the conv tab even though it shouldn't.
- * A better solution would be great. */
- purple_blist_update_node(NULL, PURPLE_BLIST_NODE(b));
- stock = pidgin_conv_get_icon_stock(conv);
- size = gtk_icon_size_from_name(icon_size);
- status = gtk_widget_render_icon (parent, stock, size, "GtkWidget");
-pidgin_conv_get_tab_icon(PurpleConversation *conv, gboolean small_icon)
- const char *icon_size = small_icon ? PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC : PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL;
- return pidgin_conv_get_icon(conv, PIDGIN_CONVERSATION(conv)->icon, icon_size);
update_tab_icon(PurpleConversation *conv)
PidginConversation *gtkconv;
GdkPixbuf *emblem = NULL;
- const char *status = NULL;
- const char *infopane_status = NULL;
g_return_if_fail(conv != NULL);
@@ -1961,22 +1884,21 @@
if (conv != gtkconv->active_conv)
- status = infopane_status = pidgin_conv_get_icon_stock(conv);
if (PURPLE_IS_IM_CONVERSATION(conv)) {
PurpleBuddy *b = purple_blist_find_buddy(purple_conversation_get_account(conv), purple_conversation_get_name(conv));
emblem = pidgin_blist_get_emblem((PurpleBlistNode*)b);
- g_return_if_fail(status != NULL);
- g_object_set(G_OBJECT(gtkconv->icon), "stock", status, NULL);
- g_object_set(G_OBJECT(gtkconv->menu_icon), "stock", status, NULL);
+ /* This was purposely left busted rather than providing an intermitent fix, + * as the infopane will be split out and rewritten as a proper widget gtk_list_store_set(GTK_LIST_STORE(gtkconv->infopane_model),
&(gtkconv->infopane_iter),
CONV_ICON_COLUMN, infopane_status, -1);
gtk_list_store_set(GTK_LIST_STORE(gtkconv->infopane_model),
&(gtkconv->infopane_iter),
@@ -2440,14 +2362,15 @@
for (l = convs; l != NULL ; l = l->next) {
PurpleConversation *conv = (PurpleConversation*)l->data;
PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv);
- GtkWidget *icon = gtk_image_new_from_stock(pidgin_conv_get_icon_stock(conv),
- gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC));
+ GtkWidget *icon = NULL; gchar *text = g_strdup_printf("%s (%d)",
gtk_label_get_text(GTK_LABEL(gtkconv->tab_label)),
+ icon = pidgin_presence_icon_new(NULL, "chat", item = gtk_image_menu_item_new_with_label(text);
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), icon);
g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(unseen_conv_menu_cb), conv);
@@ -7857,16 +7780,28 @@
g_signal_connect(gtkconv->close, "clicked", G_CALLBACK (close_conv_cb), gtkconv);
- gtkconv->icon = gtk_image_new();
- gtkconv->menu_icon = gtk_image_new();
- g_object_set(G_OBJECT(gtkconv->icon),
- "icon-size", gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC),
- g_object_set(G_OBJECT(gtkconv->menu_icon),
- "icon-size", gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC),
+ if(PURPLE_IS_IM_CONVERSATION(conv)) { + PurpleBuddy *buddy = NULL; + PurplePresence *presence = NULL; + buddy = purple_blist_find_buddy(purple_conversation_get_account(conv), + purple_conversation_get_name(conv)); + if(PURPLE_IS_BUDDY(buddy)) { + presence = purple_buddy_get_presence(buddy); + gtkconv->icon = pidgin_presence_icon_new(presence, "person", + gtkconv->menu_icon = pidgin_presence_icon_new(presence, "person", + gtkconv->icon = pidgin_presence_icon_new(NULL, "chat", + gtkconv->menu_icon = pidgin_presence_icon_new(NULL, "chat", gtk_widget_show(gtkconv->icon);
gtkconv->tab_label = gtk_label_new(tmp_lab = purple_conversation_get_title(conv));
--- a/pidgin/gtkconv.h Sat Nov 14 03:15:43 2020 -0600
+++ b/pidgin/gtkconv.h Sat Nov 14 03:39:06 2020 -0600
@@ -298,15 +298,6 @@
PidginConvWindow *pidgin_conv_get_window(PidginConversation *gtkconv);
- * pidgin_conv_get_tab_icon:
- * @conv: The conversation.
- * @small_icon: Whether to get the small icon.
- * Returns: (transfer full): The tab icon.
-GdkPixbuf *pidgin_conv_get_tab_icon(PurpleConversation *conv, gboolean small_icon);
* @conv: The conversation.
--- a/pidgin/libpidgin.c Sat Nov 14 03:15:43 2020 -0600
+++ b/pidgin/libpidgin.c Sat Nov 14 03:39:06 2020 -0600
@@ -168,7 +168,8 @@
path = g_build_filename(PURPLE_DATADIR, "pidgin", "icons", NULL);
- gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(), path);
+ gtk_icon_theme_prepend_search_path(gtk_icon_theme_get_default(), path); + gtk_icon_theme_add_resource_path(gtk_icon_theme_get_default(), path); --- a/pidgin/meson.build Sat Nov 14 03:15:43 2020 -0600
+++ b/pidgin/meson.build Sat Nov 14 03:39:06 2020 -0600
@@ -57,6 +57,7 @@
+ 'pidginpresenceicon.c', 'pidginprotocolchooser.c',
@@ -127,6 +128,7 @@
+ 'pidginpresenceicon.h', 'pidginprotocolchooser.h',