# HG changeset patch # User Elliott Sales de Andrade # Date 1257668601 0 # Node ID 1446436616d41ac2c52869ba1ce9ffff76964353 # Parent 4f325adb8ced5a7427485fdc79bd76fa34231667 Use GtkStatusIcon on GTK+ 2.10+. That's actually the required version for next minor, but I'm leaving in the rest of the code until all the kinks are worked out. I still need to figure out how to properly move the icons so that they scale nicely. The code is done, just the files need proper placement. References #2629. diff -r 4f325adb8ced -r 1446436616d4 ChangeLog --- a/ChangeLog Sun Nov 08 04:40:35 2009 +0000 +++ b/ChangeLog Sun Nov 08 08:23:21 2009 +0000 @@ -12,6 +12,8 @@ box to a "Developer Information" dialog accessible on the Help menu. * Moved the Translator information from the About box to a "Translator Information" dialog accessible on the Help menu. + * Use GtkStatusIcon for the docklet, providing better integration in + notification area. version 2.6.4 (??/??/20??): libpurple: diff -r 4f325adb8ced -r 1446436616d4 pidgin/Makefile.am --- a/pidgin/Makefile.am Sun Nov 08 04:40:35 2009 +0000 +++ b/pidgin/Makefile.am Sun Nov 08 08:23:21 2009 +0000 @@ -87,6 +87,7 @@ gtkdialogs.c \ gtkdnd-hints.c \ gtkdocklet.c \ + gtkdocklet-gtk.c \ gtkdocklet-x11.c \ gtkeventloop.c \ gtkft.c \ diff -r 4f325adb8ced -r 1446436616d4 pidgin/gtkdocklet-x11.c --- a/pidgin/gtkdocklet-x11.c Sun Nov 08 04:40:35 2009 +0000 +++ b/pidgin/gtkdocklet-x11.c Sun Nov 08 08:23:21 2009 +0000 @@ -34,6 +34,8 @@ #include "gtkdocklet.h" #include +#if !GTK_CHECK_VERSION(2,10,0) + #define SHORT_EMBED_TIMEOUT 5000 #define LONG_EMBED_TIMEOUT 15000 @@ -352,3 +354,6 @@ purple_prefs_add_none(PIDGIN_PREFS_ROOT "/docklet/x11"); purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/docklet/x11/embedded", FALSE); } + +#endif /* !GTK_CHECK_VERSION(2,10,0) */ + diff -r 4f325adb8ced -r 1446436616d4 pidgin/gtkdocklet.h --- a/pidgin/gtkdocklet.h Sun Nov 08 04:40:35 2009 +0000 +++ b/pidgin/gtkdocklet.h Sun Nov 08 08:23:21 2009 +0000 @@ -49,7 +49,7 @@ void pidgin_docklet_uninit(void); void*pidgin_docklet_get_handle(void); -/* function in gtkdocklet-{x11,win32}.c */ +/* function in gtkdocklet-{gtk,x11,win32}.c */ void docklet_ui_init(void); #endif /* _GTKDOCKLET_H_ */ diff -r 4f325adb8ced -r 1446436616d4 pidgin/pidginstock.c --- a/pidgin/pidginstock.c Sun Nov 08 04:40:35 2009 +0000 +++ b/pidgin/pidginstock.c Sun Nov 08 08:23:21 2009 +0000 @@ -198,7 +198,10 @@ { PIDGIN_STOCK_STATUS_LOGOUT, "status", "log-out.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, NULL }, { PIDGIN_STOCK_STATUS_OFFLINE, "status", "offline.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, PIDGIN_STOCK_STATUS_OFFLINE_I }, { PIDGIN_STOCK_STATUS_PERSON, "status", "person.png", TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, - { PIDGIN_STOCK_STATUS_MESSAGE, "toolbar", "message-new.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_STATUS_MESSAGE, "toolbar", "message-new.png", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL } +}; + +const SizedStockIcon sized_tray_icons [] = { { PIDGIN_STOCK_TRAY_AVAILABLE, "tray", "tray-online.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, { PIDGIN_STOCK_TRAY_INVISIBLE, "tray", "tray-invisible.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, @@ -332,7 +335,8 @@ static void add_sized_icon(GtkIconSet *iconset, GtkIconSize sizeid, PidginIconTheme *theme, - const char *size, SizedStockIcon sized_icon, gboolean translucent) + const char *size, SizedStockIcon sized_icon, gboolean translucent, + gboolean size_wildcarded) { char *filename; GtkIconSource *source; @@ -349,7 +353,7 @@ gtk_icon_source_set_direction(source, GTK_TEXT_DIR_LTR); gtk_icon_source_set_direction_wildcarded(source, !sized_icon.rtl); gtk_icon_source_set_size(source, sizeid); - gtk_icon_source_set_size_wildcarded(source, FALSE); + gtk_icon_source_set_size_wildcarded(source, size_wildcarded); gtk_icon_source_set_state_wildcarded(source, TRUE); gtk_icon_set_add_source(iconset, source); gtk_icon_source_free(source); @@ -359,7 +363,7 @@ gtk_icon_source_set_pixbuf(source, pixbuf); gtk_icon_source_set_direction_wildcarded(source, TRUE); gtk_icon_source_set_size(source, GTK_ICON_SIZE_MENU); - gtk_icon_source_set_size_wildcarded(source, FALSE); + gtk_icon_source_set_size_wildcarded(source, size_wildcarded); gtk_icon_source_set_state_wildcarded(source, TRUE); gtk_icon_set_add_source(iconset, source); gtk_icon_source_free(source); @@ -379,7 +383,7 @@ gtk_icon_source_set_filename(source, filename); gtk_icon_source_set_direction(source, GTK_TEXT_DIR_RTL); gtk_icon_source_set_size(source, sizeid); - gtk_icon_source_set_size_wildcarded(source, FALSE); + gtk_icon_source_set_size_wildcarded(source, size_wildcarded); gtk_icon_source_set_state_wildcarded(source, TRUE); gtk_icon_set_add_source(iconset, source); g_free(filename); @@ -435,9 +439,9 @@ #define ADD_SIZED_ICON(name, size) \ if (sized_status_icons[i].name) { \ - add_sized_icon(normal, name, PIDGIN_ICON_THEME(theme), size, sized_status_icons[i], FALSE); \ + add_sized_icon(normal, name, PIDGIN_ICON_THEME(theme), size, sized_status_icons[i], FALSE, FALSE); \ if (sized_status_icons[i].translucent_name) \ - add_sized_icon(translucent, name, PIDGIN_ICON_THEME(theme), size, sized_status_icons[i], TRUE); \ + add_sized_icon(translucent, name, PIDGIN_ICON_THEME(theme), size, sized_status_icons[i], TRUE, FALSE); \ } ADD_SIZED_ICON(microscopic, "11"); ADD_SIZED_ICON(extra_small, "16"); @@ -456,6 +460,35 @@ } } + for (i = 0; i < G_N_ELEMENTS(sized_tray_icons); i++) + { + normal = gtk_icon_set_new(); + if (sized_tray_icons[i].translucent_name) + translucent = gtk_icon_set_new(); + +#define ADD_SIZED_ICON(name, size) \ + if (sized_tray_icons[i].name) { \ + add_sized_icon(normal, name, PIDGIN_ICON_THEME(theme), size, sized_tray_icons[i], FALSE, TRUE); \ + if (sized_tray_icons[i].translucent_name) \ + add_sized_icon(translucent, name, PIDGIN_ICON_THEME(theme), size, sized_tray_icons[i], TRUE, TRUE); \ + } + ADD_SIZED_ICON(microscopic, "11"); + ADD_SIZED_ICON(extra_small, "16"); + ADD_SIZED_ICON(small, "22"); + ADD_SIZED_ICON(medium, "32"); + ADD_SIZED_ICON(large, "48"); + ADD_SIZED_ICON(huge, "64"); +#undef ADD_SIZED_ICON + + gtk_icon_factory_add(icon_factory, sized_tray_icons[i].name, normal); + gtk_icon_set_unref(normal); + + if (sized_tray_icons[i].translucent_name) { + gtk_icon_factory_add(icon_factory, sized_tray_icons[i].translucent_name, translucent); + gtk_icon_set_unref(translucent); + } + } + gtk_widget_destroy(win); g_object_unref(G_OBJECT(icon_factory)); reload_settings(); @@ -527,7 +560,7 @@ #define ADD_SIZED_ICON(name, size) \ if (sized_stock_icons[i].name) \ - add_sized_icon(iconset, name, PIDGIN_ICON_THEME(theme), size, sized_stock_icons[i], FALSE); + add_sized_icon(iconset, name, PIDGIN_ICON_THEME(theme), size, sized_stock_icons[i], FALSE, FALSE); ADD_SIZED_ICON(microscopic, "11"); ADD_SIZED_ICON(extra_small, "16"); ADD_SIZED_ICON(small, "22"); diff -r 4f325adb8ced -r 1446436616d4 pidgin/pidginstock.h --- a/pidgin/pidginstock.h Sun Nov 08 04:40:35 2009 +0000 +++ b/pidgin/pidginstock.h Sun Nov 08 08:23:21 2009 +0000 @@ -161,7 +161,7 @@ #endif /* Tray icons */ -#define PIDGIN_STOCK_TRAY_AVAILABLE "pidgin-tray-available" +#define PIDGIN_STOCK_TRAY_AVAILABLE "pidgin-tray-online" #define PIDGIN_STOCK_TRAY_INVISIBLE "pidgin-tray-invisible" #define PIDGIN_STOCK_TRAY_AWAY "pidgin-tray-away" #define PIDGIN_STOCK_TRAY_BUSY "pidgin-tray-busy"