# HG changeset patch # User Paul Aurich # Date 1240982578 0 # Node ID c33f21f0a73e8fe6d9fda4cec9f7ef3fc131b81b # Parent b1f8cebaab1727278f062d404b1ac6f65bd6a12c# Parent 2c08e3e34e0294ccfb2a5726c9fd91a090c7891d merge of '2008f1bd77717e12b27397825b76c19de2fc7314' and '55cc6e317f8651055c17a031024f0304271311cb' diff -r b1f8cebaab17 -r c33f21f0a73e ChangeLog.API --- a/ChangeLog.API Wed Apr 29 05:21:42 2009 +0000 +++ b/ChangeLog.API Wed Apr 29 05:22:58 2009 +0000 @@ -83,6 +83,7 @@ * PidginIconTheme, PidginStatusIconTheme, PidginIconThemeLoader API * pidgin_stock_id_from_status_primitive + * pidgin_stock_id_from_presence libgnt: Added: diff -r b1f8cebaab17 -r c33f21f0a73e pidgin/gtkutils.c --- a/pidgin/gtkutils.c Wed Apr 29 05:21:42 2009 +0000 +++ b/pidgin/gtkutils.c Wed Apr 29 05:22:58 2009 +0000 @@ -1722,8 +1722,8 @@ return pixbuf; } -const char * -pidgin_stock_id_from_status_primitive(PurpleStatusPrimitive prim) +static const char * +stock_id_from_status_primitive_idle(PurpleStatusPrimitive prim, gboolean idle) { const char *stock = NULL; switch (prim) { @@ -1731,27 +1731,52 @@ stock = NULL; break; case PURPLE_STATUS_UNAVAILABLE: - stock = PIDGIN_STOCK_STATUS_BUSY; + stock = idle ? PIDGIN_STOCK_STATUS_BUSY_I : PIDGIN_STOCK_STATUS_BUSY; break; case PURPLE_STATUS_AWAY: - stock = PIDGIN_STOCK_STATUS_AWAY; + stock = idle ? PIDGIN_STOCK_STATUS_AWAY_I : PIDGIN_STOCK_STATUS_AWAY; break; case PURPLE_STATUS_EXTENDED_AWAY: - stock = PIDGIN_STOCK_STATUS_XA; + stock = idle ? PIDGIN_STOCK_STATUS_XA_I : PIDGIN_STOCK_STATUS_XA; break; case PURPLE_STATUS_INVISIBLE: stock = PIDGIN_STOCK_STATUS_INVISIBLE; break; case PURPLE_STATUS_OFFLINE: - stock = PIDGIN_STOCK_STATUS_OFFLINE; + stock = idle ? PIDGIN_STOCK_STATUS_OFFLINE_I : PIDGIN_STOCK_STATUS_OFFLINE; break; default: - stock = PIDGIN_STOCK_STATUS_AVAILABLE; + stock = idle ? PIDGIN_STOCK_STATUS_AVAILABLE_I : PIDGIN_STOCK_STATUS_AVAILABLE; break; } return stock; } +const char * +pidgin_stock_id_from_status_primitive(PurpleStatusPrimitive prim) +{ + return stock_id_from_status_primitive_idle(prim, FALSE); +} + +const char * +pidgin_stock_id_from_presence(PurplePresence *presence) +{ + PurpleStatus *status; + PurpleStatusType *type; + PurpleStatusPrimitive prim; + gboolean idle; + + g_return_val_if_fail(presence, NULL); + + status = purple_presence_get_active_status(presence); + type = purple_status_get_type(status); + prim = purple_status_type_get_primitive(type); + + idle = purple_presence_is_idle(presence); + + return stock_id_from_status_primitive_idle(prim, idle); +} + GdkPixbuf * pidgin_create_prpl_icon(PurpleAccount *account, PidginPrplIconSize size) { diff -r b1f8cebaab17 -r c33f21f0a73e pidgin/gtkutils.h --- a/pidgin/gtkutils.h Wed Apr 29 05:21:42 2009 +0000 +++ b/pidgin/gtkutils.h Wed Apr 29 05:22:58 2009 +0000 @@ -581,6 +581,17 @@ const char *pidgin_stock_id_from_status_primitive(PurpleStatusPrimitive prim); /** + * Returns an appropriate stock-id for a PurplePresence. + * + * @param presence The presence. + * + * @return The stock-id + * + * @since 2.6.0 + */ +const char *pidgin_stock_id_from_presence(PurplePresence *presence); + +/** * Append a PurpleMenuAction to a menu. * * @param menu The menu to append to. diff -r b1f8cebaab17 -r c33f21f0a73e pidgin/plugins/ticker/ticker.c --- a/pidgin/plugins/ticker/ticker.c Wed Apr 29 05:21:42 2009 +0000 +++ b/pidgin/plugins/ticker/ticker.c Wed Apr 29 05:22:58 2009 +0000 @@ -37,6 +37,7 @@ #include "gtkblist.h" #include "gtkplugin.h" #include "gtkutils.h" +#include "pidginstock.h" #include "gtkticker.h" @@ -53,7 +54,7 @@ guint timeout; } TickerData; -GList *tickerbuds = NULL; +static GList *tickerbuds = NULL; static void buddy_ticker_update_contact(PurpleContact *contact); @@ -91,9 +92,10 @@ PurpleContact *contact = user_data; PurpleBuddy *b = purple_contact_get_priority_buddy(contact); - purple_conversation_new(PURPLE_CONV_TYPE_IM, - purple_buddy_get_account(b), - purple_buddy_get_name(b)); + PurpleConversation *conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, + purple_buddy_get_account(b), + purple_buddy_get_name(b)); + purple_conversation_present(conv); return TRUE; } @@ -107,20 +109,27 @@ return NULL; } -static void buddy_ticker_set_pixmap(PurpleContact *c) { +static void buddy_ticker_set_pixmap(PurpleContact *c) +{ TickerData *td = buddy_ticker_find_contact(c); - GdkPixbuf *pixbuf; + PurpleBuddy *buddy; + PurplePresence *presence; + const char *stock; if(!td) return; - if(!td->icon) + buddy = purple_contact_get_priority_buddy(c); + presence = purple_buddy_get_presence(buddy); + stock = pidgin_stock_id_from_presence(presence); + if(!td->icon) { td->icon = gtk_image_new(); - - pixbuf = pidgin_blist_get_status_icon((PurpleBlistNode*)c, - PIDGIN_STATUS_ICON_SMALL); - gtk_image_set_from_pixbuf(GTK_IMAGE(td->icon), pixbuf); - g_object_unref(G_OBJECT(pixbuf)); + g_object_set(G_OBJECT(td->icon), "stock", stock, + "icon-size", gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_MICROSCOPIC), + NULL); + } else { + g_object_set(G_OBJECT(td->icon), "stock", stock, NULL); + } } static gboolean buddy_ticker_set_pixmap_cb(gpointer data) {