Mercurial > pidgin
changeset 15735:cf58d8ec3b0d
merge of '943e1b86728490e22c089e8aba18e950e8a726c2'
and 'ec0240858e45006ba6bc6bf78be7edaeeffa963a'
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Mon, 26 Feb 2007 06:24:41 +0000 |
parents | 72d66bc51c43 (diff) 427ca6a0aa87 (current diff) |
children | dad514810a45 |
files | pidgin/gtkaccount.c |
diffstat | 31 files changed, 278 insertions(+), 94 deletions(-) [+] |
line wrap: on
line diff
--- a/configure.ac Mon Feb 26 06:34:08 2007 +0000 +++ b/configure.ac Mon Feb 26 06:24:41 2007 +0000 @@ -1929,11 +1929,16 @@ pidgin/pixmaps/protocols/48/scalable/Makefile pidgin/pixmaps/status/Makefile pidgin/pixmaps/status/16/Makefile + pidgin/pixmaps/status/16/rtl/Makefile pidgin/pixmaps/status/16/scalable/Makefile pidgin/pixmaps/status/22/Makefile + pidgin/pixmaps/status/22/rtl/Makefile pidgin/pixmaps/status/22/scalable/Makefile pidgin/pixmaps/status/32/Makefile + pidgin/pixmaps/status/32/rtl/Makefile pidgin/pixmaps/status/32/scalable/Makefile + pidgin/pixmaps/status/48/Makefile + pidgin/pixmaps/status/48/rtl/Makefile pidgin/pixmaps/toolbar/Makefile pidgin/pixmaps/toolbar/16/Makefile pidgin/pixmaps/toolbar/16/scalable/Makefile
--- a/pidgin/gaimstock.c Mon Feb 26 06:34:08 2007 +0000 +++ b/pidgin/gaimstock.c Mon Feb 26 06:24:41 2007 +0000 @@ -105,72 +105,74 @@ gboolean extra_small; gboolean small; gboolean medium; + gboolean large; gboolean huge; + gboolean rtl; } const sized_stock_icons [] = { - { PIDGIN_STOCK_STATUS_AVAILABLE, "status", "available.png", TRUE, TRUE, TRUE, FALSE }, - { PIDGIN_STOCK_STATUS_AVAILABLE_I, "status", "available_i.png", TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_AWAY, "status", "away.png", TRUE, TRUE, TRUE, FALSE }, - { PIDGIN_STOCK_STATUS_AWAY_I, "status", "away_i.png", TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_BUSY, "status", "busy.png", TRUE, TRUE, TRUE, FALSE }, - { PIDGIN_STOCK_STATUS_BUSY_I, "status", "busy_i.png", TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_CHAT, "status", "chat.png", TRUE, TRUE, TRUE, FALSE }, - { PIDGIN_STOCK_STATUS_XA, "status", "extended-away.png", TRUE, TRUE, TRUE, FALSE }, - { PIDGIN_STOCK_STATUS_XA_I, "status", "extended-away_i.png",TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_LOGIN, "status", "log-in.png", TRUE, TRUE, TRUE, FALSE }, - { PIDGIN_STOCK_STATUS_LOGOUT, "status", "log-out.png", TRUE, TRUE, TRUE, FALSE }, - { PIDGIN_STOCK_STATUS_OFFLINE, "status", "offline.png", TRUE, TRUE, TRUE, FALSE }, - { PIDGIN_STOCK_STATUS_PERSON, "status", "person.png", TRUE, TRUE, TRUE, FALSE }, - { PIDGIN_STOCK_STATUS_MESSAGE, "status", "message-pending.png",TRUE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_STATUS_AVAILABLE, "status", "available.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE }, + { PIDGIN_STOCK_STATUS_AVAILABLE_I, "status", "available_i.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_STATUS_AWAY, "status", "away.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE }, + { PIDGIN_STOCK_STATUS_AWAY_I, "status", "away_i.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_STATUS_BUSY, "status", "busy.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE }, + { PIDGIN_STOCK_STATUS_BUSY_I, "status", "busy_i.png", TRUE, FALSE, FALSE, FALSE, FALSE,FALSE }, + { PIDGIN_STOCK_STATUS_CHAT, "status", "chat.png", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE }, + { PIDGIN_STOCK_STATUS_XA, "status", "extended-away.png", TRUE, TRUE, TRUE, TRUE, FALSE, TRUE }, + { PIDGIN_STOCK_STATUS_XA_I, "status", "extended-away_i.png",TRUE, FALSE, FALSE, FALSE, FALSE, TRUE }, + { PIDGIN_STOCK_STATUS_LOGIN, "status", "log-in.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE }, + { PIDGIN_STOCK_STATUS_LOGOUT, "status", "log-out.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE }, + { PIDGIN_STOCK_STATUS_OFFLINE, "status", "offline.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE }, + { PIDGIN_STOCK_STATUS_PERSON, "status", "person.png", TRUE, TRUE, TRUE, TRUE, FALSE, FALSE }, + { PIDGIN_STOCK_STATUS_MESSAGE, "status", "message-pending.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_IGNORED, "emblems", "blocked.png", TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_FOUNDER, "emblems", "founder.png", TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_OPERATOR, "emblems", "operator.png", TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_HALFOP, "emblems", "half-operator.png", TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_STATUS_VOICE, "emblems", "voice.png", TRUE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_STATUS_IGNORED, "emblems", "blocked.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_STATUS_FOUNDER, "emblems", "founder.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_STATUS_OPERATOR, "emblems", "operator.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_STATUS_HALFOP, "emblems", "half-operator.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_STATUS_VOICE, "emblems", "voice.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_DIALOG_AUTH, "dialogs", "auth.png", TRUE, FALSE, FALSE, TRUE }, - { PIDGIN_STOCK_DIALOG_COOL, "dialogs", "cool.png", FALSE, FALSE, FALSE, TRUE }, - { PIDGIN_STOCK_DIALOG_ERROR, "dialogs", "error.png", TRUE, FALSE, FALSE, TRUE }, - { PIDGIN_STOCK_DIALOG_INFO, "dialogs", "info.png", TRUE, FALSE, FALSE, TRUE }, - { PIDGIN_STOCK_DIALOG_MAIL, "dialogs", "mail.png", TRUE, FALSE, FALSE, TRUE }, - { PIDGIN_STOCK_DIALOG_QUESTION, "dialogs", "question.png", TRUE, FALSE, FALSE, TRUE }, - { PIDGIN_STOCK_DIALOG_WARNING, "dialogs", "warning.png", FALSE, FALSE, FALSE, TRUE }, + { PIDGIN_STOCK_DIALOG_AUTH, "dialogs", "auth.png", TRUE, FALSE, FALSE, FALSE, TRUE, FALSE }, + { PIDGIN_STOCK_DIALOG_COOL, "dialogs", "cool.png", FALSE, FALSE, FALSE, FALSE, TRUE, FALSE }, + { PIDGIN_STOCK_DIALOG_ERROR, "dialogs", "error.png", TRUE, FALSE, FALSE, FALSE, TRUE, FALSE }, + { PIDGIN_STOCK_DIALOG_INFO, "dialogs", "info.png", TRUE, FALSE, FALSE, FALSE, TRUE, FALSE }, + { PIDGIN_STOCK_DIALOG_MAIL, "dialogs", "mail.png", TRUE, FALSE, FALSE, FALSE, TRUE, FALSE }, + { PIDGIN_STOCK_DIALOG_QUESTION, "dialogs", "question.png", TRUE, FALSE, FALSE, FALSE, TRUE, FALSE }, + { PIDGIN_STOCK_DIALOG_WARNING, "dialogs", "warning.png", FALSE, FALSE, FALSE, FALSE, TRUE, FALSE }, - { PIDGIN_STOCK_ANIMATION_CONNECT0, "animations", "connect0.png",TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_CONNECT1, "animations", "connect1.png",TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_CONNECT2, "animations", "connect2.png",TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_CONNECT3, "animations", "connect3.png",TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_CONNECT4, "animations", "connect4.png",TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_CONNECT5, "animations", "connect5.png",TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_CONNECT6, "animations", "connect6.png",TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_CONNECT7, "animations", "connect7.png",TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_CONNECT8, "animations", "connect8.png",TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_TYPING0, "animations", "typing0.png",TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_TYPING1, "animations", "typing1.png",TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_TYPING2, "animations", "typing2.png",TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_TYPING3, "animations", "typing3.png",TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_ANIMATION_TYPING4, "animations", "typing4.png",TRUE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_ANIMATION_CONNECT0, "animations", "connect0.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_ANIMATION_CONNECT1, "animations", "connect1.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_ANIMATION_CONNECT2, "animations", "connect2.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_ANIMATION_CONNECT3, "animations", "connect3.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_ANIMATION_CONNECT4, "animations", "connect4.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_ANIMATION_CONNECT5, "animations", "connect5.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_ANIMATION_CONNECT6, "animations", "connect6.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_ANIMATION_CONNECT7, "animations", "connect7.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_ANIMATION_CONNECT8, "animations", "connect8.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_ANIMATION_TYPING0, "animations", "typing0.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_ANIMATION_TYPING1, "animations", "typing1.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_ANIMATION_TYPING2, "animations", "typing2.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_ANIMATION_TYPING3, "animations", "typing3.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_ANIMATION_TYPING4, "animations", "typing4.png",TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_ACCOUNTS, "toolbar", "accounts.png", TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_BGCOLOR, "toolbar", "change-bgcolor.png", TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_FGCOLOR, "toolbar", "change-fgcolor.png", TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_SMILEY, "toolbar", "emote-select.png", TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_TEXT_SMALLER, "toolbar", "font-size-down.png", TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_TEXT_LARGER, "toolbar", "font-size-up.png", TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE, "toolbar", "insert-image.png", TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_INSERT_LINK, "toolbar", "insert-link.png", TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, "toolbar", "message-new.png", TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_PLUGINS, "toolbar", "plugins.png", TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_TYPING, "toolbar", "typing.png", TRUE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TOOLBAR_PENDING, "status", "message-pending.png", TRUE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_TOOLBAR_ACCOUNTS, "toolbar", "accounts.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_TOOLBAR_BGCOLOR, "toolbar", "change-bgcolor.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_TOOLBAR_FGCOLOR, "toolbar", "change-fgcolor.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_TOOLBAR_SMILEY, "toolbar", "emote-select.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_TOOLBAR_TEXT_SMALLER, "toolbar", "font-size-down.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_TOOLBAR_TEXT_LARGER, "toolbar", "font-size-up.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_TOOLBAR_INSERT_IMAGE, "toolbar", "insert-image.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_TOOLBAR_INSERT_LINK, "toolbar", "insert-link.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, "toolbar", "message-new.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_TOOLBAR_PLUGINS, "toolbar", "plugins.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_TOOLBAR_TYPING, "toolbar", "typing.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_TOOLBAR_PENDING, "status", "message-pending.png", TRUE, FALSE, FALSE, FALSE, FALSE, FALSE }, - { PIDGIN_STOCK_TRAY_AVAILABLE, "tray", "tray-online.png", FALSE, TRUE, FALSE, FALSE }, - { PIDGIN_STOCK_TRAY_AWAY, "tray", "tray-away.png", FALSE, TRUE, FALSE, FALSE }, - { PIDGIN_STOCK_TRAY_BUSY, "tray", "tray-busy.png", FALSE, TRUE, FALSE, FALSE }, - { PIDGIN_STOCK_TRAY_XA, "tray", "tray-extended-away.png", FALSE, TRUE, FALSE, FALSE }, - { PIDGIN_STOCK_TRAY_OFFLINE, "tray", "tray-offline.png", FALSE, TRUE, FALSE, FALSE }, - { PIDGIN_STOCK_TRAY_CONNECT, "tray", "tray-connecting.png", FALSE, TRUE, FALSE, FALSE }, - { PIDGIN_STOCK_TRAY_PENDING, "tray", "tray-message.png", FALSE, TRUE, FALSE, FALSE } + { PIDGIN_STOCK_TRAY_AVAILABLE, "tray", "tray-online.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_TRAY_AWAY, "tray", "tray-away.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_TRAY_BUSY, "tray", "tray-busy.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_TRAY_XA, "tray", "tray-extended-away.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_TRAY_OFFLINE, "tray", "tray-offline.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_TRAY_CONNECT, "tray", "tray-connecting.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE }, + { PIDGIN_STOCK_TRAY_PENDING, "tray", "tray-message.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE } }; static gchar * @@ -194,7 +196,7 @@ static void add_sized_icon(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, - const char *size, const char *file) + gboolean rtl, const char *size, const char *file) { char *filename; GtkIconSource *source; @@ -202,7 +204,8 @@ filename = g_build_filename(DATADIR, "pixmaps", "pidgin", dir, size, file, NULL); source = gtk_icon_source_new(); gtk_icon_source_set_filename(source, filename); - gtk_icon_source_set_direction_wildcarded(source, TRUE); + gtk_icon_source_set_direction(source, GTK_TEXT_DIR_LTR); + gtk_icon_source_set_direction_wildcarded(source, !rtl); gtk_icon_source_set_size(source, sizeid); gtk_icon_source_set_size_wildcarded(source, FALSE); gtk_icon_source_set_state_wildcarded(source, TRUE); @@ -219,8 +222,22 @@ gtk_icon_set_add_source(iconset, source); gtk_icon_source_free(source); } + g_free(filename); - g_free(filename); + if (rtl) { + filename = g_build_filename(DATADIR, "pixmaps", "pidgin", dir, size, "rtl", file, NULL); + source = gtk_icon_source_new(); + 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_state_wildcarded(source, TRUE); + gtk_icon_set_add_source(iconset, source); + g_free(filename); + gtk_icon_source_free(source); + } + + } void @@ -230,7 +247,7 @@ GtkIconFactory *icon_factory; size_t i; GtkWidget *win; - GtkIconSize extra_small, small, medium, huge; + GtkIconSize extra_small, small, medium, large, huge; if (stock_initted) return; @@ -288,6 +305,7 @@ extra_small = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL, 16, 16); small = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_SMALL, 22, 22); medium = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_MEDIUM, 32, 32); + large = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_LARGE, 48, 48); huge = gtk_icon_size_register(PIDGIN_ICON_SIZE_TANGO_HUGE, 64, 64); for (i = 0; i < G_N_ELEMENTS(sized_stock_icons); i++) @@ -297,19 +315,23 @@ iconset = gtk_icon_set_new(); if (sized_stock_icons[i].extra_small) add_sized_icon(iconset, extra_small, - sized_stock_icons[i].dir, + sized_stock_icons[i].dir, sized_stock_icons[i].rtl, "16", sized_stock_icons[i].filename); if (sized_stock_icons[i].small) add_sized_icon(iconset, small, - sized_stock_icons[i].dir, + sized_stock_icons[i].dir, sized_stock_icons[i].rtl, "22", sized_stock_icons[i].filename); if (sized_stock_icons[i].medium) add_sized_icon(iconset, medium, - sized_stock_icons[i].dir, + sized_stock_icons[i].dir, sized_stock_icons[i].rtl, "32", sized_stock_icons[i].filename); + if (sized_stock_icons[i].large) + add_sized_icon(iconset, large, + sized_stock_icons[i].dir, sized_stock_icons[i].rtl, + "48", sized_stock_icons[i].filename); if (sized_stock_icons[i].huge) add_sized_icon(iconset, huge, - sized_stock_icons[i].dir, + sized_stock_icons[i].dir, sized_stock_icons[i].rtl, "64", sized_stock_icons[i].filename); gtk_icon_factory_add(icon_factory, sized_stock_icons[i].name, iconset);
--- a/pidgin/gaimstock.h Mon Feb 26 06:34:08 2007 +0000 +++ b/pidgin/gaimstock.h Mon Feb 26 06:24:41 2007 +0000 @@ -142,6 +142,7 @@ #define PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL "pidgin-icon-size-tango-extra-small" #define PIDGIN_ICON_SIZE_TANGO_SMALL "pidgin-icon-size-tango-small" #define PIDGIN_ICON_SIZE_TANGO_MEDIUM "pidgin-icon-size-tango-medium" +#define PIDGIN_ICON_SIZE_TANGO_LARGE "pidgin-icon-size-tango-large" #define PIDGIN_ICON_SIZE_TANGO_HUGE "pidgin-icon-size-tango-huge" /** * Sets up the gaim stock repository.
--- a/pidgin/gtkconv.c Mon Feb 26 06:34:08 2007 +0000 +++ b/pidgin/gtkconv.c Mon Feb 26 06:24:41 2007 +0000 @@ -146,6 +146,15 @@ static PidginWindow *hidden_convwin = NULL; static GList *window_list = NULL; +/* Lists of status icons at all available sizes for use as window icons */ +static GList *available_list = NULL; +static GList *away_list = NULL; +static GList *busy_list = NULL; +static GList *xa_list = NULL; +static GList *login_list = NULL; +static GList *logout_list = NULL; +static GList *offline_list = NULL; +static GHashTable *prpl_lists = NULL; static gboolean update_send_to_selection(PidginWindow *win); static void generate_send_to_items(PidginWindow *win); @@ -2204,13 +2213,46 @@ /************************************************************************** * A bunch of buddy icon functions **************************************************************************/ -GdkPixbuf * -pidgin_conv_get_tab_icon(GaimConversation *conv, gboolean small_icon) + +static GList *get_prpl_icon_list(GaimAccount *account) +{ + GList *l = NULL; + GdkPixbuf *pixbuf; + GaimPluginProtocolInfo *prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gaim_find_prpl(gaim_account_get_protocol_id(account))); + const char *prpl = prpl_info->list_icon(account, NULL); + char *filename, *path; + l = g_hash_table_lookup(prpl_lists, prpl); + if (l) + return l; + filename = g_strdup_printf("%s.png", prpl); + + path = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols", "16", filename, NULL); + pixbuf = gdk_pixbuf_new_from_file(path, NULL); + if (pixbuf) + l = g_list_append(l, pixbuf); + g_free(path); + + path = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols", "22", filename, NULL); + pixbuf = gdk_pixbuf_new_from_file(path, NULL); + if (pixbuf) + l = g_list_append(l, pixbuf); + g_free(path); + + path = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols", "48", filename, NULL); + pixbuf = gdk_pixbuf_new_from_file(path, NULL); + if (pixbuf) + l = g_list_append(l, pixbuf); + g_free(path); + + g_hash_table_insert(prpl_lists, g_strdup(prpl), l); + return l; +} + +static GList * +pidgin_conv_get_tab_icons(GaimConversation *conv) { GaimAccount *account = NULL; const char *name = NULL; - GdkPixbuf *status = NULL; - GaimBlistUiOps *ops = gaim_blist_get_ui_ops(); g_return_val_if_fail(conv != NULL, NULL); @@ -2224,29 +2266,69 @@ if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) { GaimBuddy *b = gaim_find_buddy(account, name); if (b != NULL) { - /* 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. */ - if (ops && ops->update) - ops->update(NULL, (GaimBlistNode*)b); - - status = pidgin_blist_get_status_icon((GaimBlistNode*)b, - (small_icon ? PIDGIN_STATUS_ICON_SMALL : PIDGIN_STATUS_ICON_LARGE)); + GaimPresence *p; + p = gaim_buddy_get_presence(b); + if (gaim_presence_is_status_primitive_active(p, GAIM_STATUS_AWAY)) + return away_list; + if (gaim_presence_is_status_primitive_active(p, GAIM_STATUS_UNAVAILABLE)) + return busy_list; + if (gaim_presence_is_status_primitive_active(p, GAIM_STATUS_EXTENDED_AWAY)) + return xa_list; + if (gaim_presence_is_status_primitive_active(p, GAIM_STATUS_OFFLINE)) + return offline_list; + else + return available_list; } } - /* If they don't have a buddy icon, then use the PRPL icon */ - if (status == NULL) - status = pidgin_create_prpl_icon(account, small_icon ? PIDGIN_PRPL_ICON_SMALL : PIDGIN_PRPL_ICON_LARGE); - - return status; -} + return get_prpl_icon_list(account); +} + +GdkPixbuf * +pidgin_conv_get_tab_icon(GaimConversation *conv, gboolean small_icon) +{ + GaimAccount *account = NULL; + const char *name = NULL; + GdkPixbuf *status = NULL; + GaimBlistUiOps *ops = gaim_blist_get_ui_ops(); + + g_return_val_if_fail(conv != NULL, NULL); + + account = gaim_conversation_get_account(conv); + name = gaim_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 (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) { + GaimBuddy *b = gaim_find_buddy(account, name); + if (b != NULL) { + /* 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. */ + if (ops && ops->update) + ops->update(NULL, (GaimBlistNode*)b); + + status = pidgin_blist_get_status_icon((GaimBlistNode*)b, + (small_icon ? PIDGIN_STATUS_ICON_SMALL : PIDGIN_STATUS_ICON_LARGE)); + } + } + + /* If they don't have a buddy icon, then use the PRPL icon */ + if (status == NULL) + status = pidgin_create_prpl_icon(account, small_icon ? PIDGIN_PRPL_ICON_SMALL : PIDGIN_PRPL_ICON_LARGE); + + return status; +} + static void update_tab_icon(GaimConversation *conv) { PidginConversation *gtkconv; PidginWindow *win; + GList *l; GdkPixbuf *status = NULL; g_return_if_fail(conv != NULL); @@ -2270,9 +2352,9 @@ (gaim_conversation_get_type(conv) != GAIM_CONV_TYPE_IM || gtkconv->u.im->anim == NULL)) { - status = pidgin_conv_get_tab_icon(conv, FALSE); - - gtk_window_set_icon(GTK_WINDOW(win->window), status); + l = pidgin_conv_get_tab_icons(conv); + + gtk_window_set_icon_list(GTK_WINDOW(win->window), l); if (status != NULL) g_object_unref(status); @@ -5745,16 +5827,18 @@ */ if (pidgin_conv_window_is_active_conversation(conv)) { + GList *l = NULL; if ((gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) && (gtkconv->u.im->anim)) { window_icon = gdk_pixbuf_animation_get_static_image(gtkconv->u.im->anim); g_object_ref(window_icon); + l = g_list_append(l, window_icon); } else { - window_icon = pidgin_conv_get_tab_icon(conv, FALSE); + l = pidgin_conv_get_tab_icons(conv); } - gtk_window_set_icon(GTK_WINDOW(win->window), window_icon); + gtk_window_set_icon_list(GTK_WINDOW(win->window), l); if (window_icon != NULL) g_object_unref(G_OBJECT(window_icon)); } @@ -7653,6 +7737,34 @@ return window_list; } +static GList* +make_status_icon_list(const char *stock, GtkWidget *w) +{ + GList *l = NULL; + l = g_list_append(l, gtk_widget_render_icon (w, stock, + gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL), "GtkWindow")); + l = g_list_append(l, gtk_widget_render_icon (w, stock, + gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_SMALL), "GtkWindow")); + l = g_list_append(l, gtk_widget_render_icon (w, stock, + gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_MEDIUM), "GtkWindow")); + l = g_list_append(l, gtk_widget_render_icon (w, stock, + gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_LARGE), "GtkWindow")); + return l; +} + +static void +create_icon_lists(GtkWidget *w) +{ + available_list = make_status_icon_list(PIDGIN_STOCK_STATUS_AVAILABLE, w); + busy_list = make_status_icon_list(PIDGIN_STOCK_STATUS_BUSY, w); + xa_list = make_status_icon_list(PIDGIN_STOCK_STATUS_XA, w); + login_list = make_status_icon_list(PIDGIN_STOCK_STATUS_LOGIN, w); + logout_list = make_status_icon_list(PIDGIN_STOCK_STATUS_LOGOUT, w); + offline_list = make_status_icon_list(PIDGIN_STOCK_STATUS_OFFLINE, w); + away_list = make_status_icon_list(PIDGIN_STOCK_STATUS_AWAY, w); + prpl_lists = g_hash_table_new(g_str_hash, g_str_equal); +} + PidginWindow * pidgin_conv_window_new() { @@ -7672,6 +7784,10 @@ gtk_container_set_border_width(GTK_CONTAINER(win->window), 0); GTK_WINDOW(win->window)->allow_shrink = TRUE; + if (available_list == NULL) { + create_icon_lists(win->window); + } + g_signal_connect(G_OBJECT(win->window), "delete_event", G_CALLBACK(close_win_cb), win);
--- a/pidgin/pixmaps/status/16/Makefile.am Mon Feb 26 06:34:08 2007 +0000 +++ b/pidgin/pixmaps/status/16/Makefile.am Mon Feb 26 06:24:41 2007 +0000 @@ -1,4 +1,4 @@ -SUBDIRS = scalable +SUBDIRS = rtl scalable EXTRA_DIST = available.png \ available_i.png \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/pixmaps/status/16/rtl/Makefile.am Mon Feb 26 06:24:41 2007 +0000 @@ -0,0 +1,6 @@ +EXTRA_DIST = chat.png extended-away.png extended-away_i.png + +pidginstatuspixdir = $(datadir)/pixmaps/pidgin/status/16/rtl + +pidginstatuspix_DATA = $(EXTRA_DIST) +
--- a/pidgin/pixmaps/status/22/Makefile.am Mon Feb 26 06:34:08 2007 +0000 +++ b/pidgin/pixmaps/status/22/Makefile.am Mon Feb 26 06:24:41 2007 +0000 @@ -1,4 +1,4 @@ -SUBDIRS = scalable +SUBDIRS = rtl scalable EXTRA_DIST = available.png \ away.png \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/pixmaps/status/22/rtl/Makefile.am Mon Feb 26 06:24:41 2007 +0000 @@ -0,0 +1,6 @@ +EXTRA_DIST = chat.png extended-away.png + +pidginstatuspixdir = $(datadir)/pixmaps/pidgin/status/22/rtl + +pidginstatuspix_DATA = $(EXTRA_DIST) +
--- a/pidgin/pixmaps/status/32/Makefile.am Mon Feb 26 06:34:08 2007 +0000 +++ b/pidgin/pixmaps/status/32/Makefile.am Mon Feb 26 06:24:41 2007 +0000 @@ -1,4 +1,4 @@ -SUBDIRS = scalable +SUBDIRS = rtl scalable EXTRA_DIST = available.png \ away.png \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/pixmaps/status/32/rtl/Makefile.am Mon Feb 26 06:24:41 2007 +0000 @@ -0,0 +1,6 @@ +EXTRA_DIST = chat.png extended-away.png + +pidginstatuspixdir = $(datadir)/pixmaps/pidgin/status/32/rtl + +pidginstatuspix_DATA = $(EXTRA_DIST) +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/pixmaps/status/48/Makefile.am Mon Feb 26 06:24:41 2007 +0000 @@ -0,0 +1,16 @@ +SUBDIRS = rtl + +EXTRA_DIST = available.png \ + away.png \ + busy.png \ + chat.png \ + extended-away.png \ + log-in.png \ + log-out.png \ + offline.png \ + person.png + +pidginstatuspixdir = $(datadir)/pixmaps/pidgin/status/48 + +pidginstatuspix_DATA = $(EXTRA_DIST) +