Mercurial > pidgin.yaz
diff pidgin/pidginstock.c @ 26043:adf153852bcf
propagate from branch 'im.pidgin.pidgin' (head df86c6f1de324e87828356aa8d5c369abd533b58)
to branch 'im.pidgin.pidgin.vv' (head 5bf87e309f2fee61842cccf4992de4866349570c)
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Mon, 24 Nov 2008 10:59:08 +0000 |
parents | f89bdd34c9f1 de3b12b70b5f |
children | 25e2ab1fff1d |
line wrap: on
line diff
--- a/pidgin/pidginstock.c Mon Nov 24 10:43:38 2008 +0000 +++ b/pidgin/pidginstock.c Mon Nov 24 10:59:08 2008 +0000 @@ -64,6 +64,7 @@ { PIDGIN_STOCK_IGNORE, NULL, GTK_STOCK_DIALOG_ERROR }, { PIDGIN_STOCK_INVITE, NULL, GTK_STOCK_JUMP_TO }, { PIDGIN_STOCK_MODIFY, NULL, GTK_STOCK_PREFERENCES }, + { PIDGIN_STOCK_ADD, NULL, GTK_STOCK_ADD }, #if GTK_CHECK_VERSION(2,6,0) { PIDGIN_STOCK_PAUSE, NULL, GTK_STOCK_MEDIA_PAUSE }, #else @@ -90,7 +91,8 @@ { PIDGIN_STOCK_TOOLBAR_MESSAGE_NEW, N_("I_M"), 0, 0, NULL }, { PIDGIN_STOCK_TOOLBAR_USER_INFO, N_("_Get Info"), 0, 0, NULL }, { PIDGIN_STOCK_INVITE, N_("_Invite"), 0, 0, NULL }, - { PIDGIN_STOCK_MODIFY, N_("_Modify"), 0, 0, NULL }, + { PIDGIN_STOCK_MODIFY, N_("_Modify..."), 0, 0, NULL }, + { PIDGIN_STOCK_ADD, N_("_Add..."), 0, 0, NULL }, { PIDGIN_STOCK_OPEN_MAIL, N_("_Open Mail"), 0, 0, NULL }, { PIDGIN_STOCK_PAUSE, N_("_Pause"), 0, 0, NULL }, { PIDGIN_STOCK_EDIT, N_("_Edit"), 0, 0, NULL } @@ -210,69 +212,64 @@ { PIDGIN_STOCK_TRAY_EMAIL, "tray", "tray-message.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL } }; +static void +add_sized_icon_common(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, + gboolean rtl, const char *size, const char *file, + gboolean translucent); + +static gchar * +find_file_common(const char *name) +{ + gchar *filename; +#if GLIB_CHECK_VERSION(2,6,0) + const gchar *userdir; + const gchar * const *sysdirs; + + userdir = g_get_user_data_dir(); + filename = g_build_filename(userdir, name, NULL); + if (g_file_test(filename, G_FILE_TEST_EXISTS)) + return filename; + g_free(filename); + + sysdirs = g_get_system_data_dirs(); + for (; *sysdirs; sysdirs++) { + filename = g_build_filename(*sysdirs, name, NULL); + if (g_file_test(filename, G_FILE_TEST_EXISTS)) + return filename; + g_free(filename); + } +#endif + filename = g_build_filename(DATADIR, name, NULL); + if (g_file_test(filename, G_FILE_TEST_EXISTS)) + return filename; + g_free(filename); + return NULL; +} + static gchar * find_file(const char *dir, const char *base) { char *filename; + char *ret; if (base == NULL) return NULL; if (!strcmp(dir, "pidgin")) - filename = g_build_filename(DATADIR, "pixmaps", "pidgin", base, NULL); + filename = g_build_filename("pixmaps", "pidgin", base, NULL); else - { - filename = g_build_filename(DATADIR, "pixmaps", "pidgin", dir, - base, NULL); - } + filename = g_build_filename("pixmaps", "pidgin", dir, base, NULL); - return filename; + ret = find_file_common(filename); + g_free(filename); + return ret; } static void -add_sized_icon(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, +add_sized_icon(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, gboolean rtl, const char *size, const char *file) { - char *filename; - GtkIconSource *source; - - 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(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); - gtk_icon_set_add_source(iconset, source); - gtk_icon_source_free(source); - - if (sizeid == gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL)) { - source = gtk_icon_source_new(); - gtk_icon_source_set_filename(source, filename); - 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_state_wildcarded(source, TRUE); - gtk_icon_set_add_source(iconset, source); - gtk_icon_source_free(source); - } - 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); - } - - + add_sized_icon_common(iconset, sizeid, dir, rtl, size, file, FALSE); } /* Altered from do_colorshift in gnome-panel */ @@ -311,64 +308,77 @@ } } -/* TODO: This is almost certainly not the best way to do this, but it's late, I'm tired, - * we're a few hours from getting this thing out, and copy/paste is EASY. - */ static void add_translucent_sized_icon(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, gboolean rtl, const char *size, const char *file) { - char *filename; - GtkIconSource *source; + add_sized_icon_common(iconset, sizeid, dir, rtl, size, file, TRUE); +} + +static void +add_sized_icon_common(GtkIconSet *iconset, GtkIconSize sizeid, const char *dir, + gboolean rtl, const char *size, const char *file, + gboolean translucent) +{ + char *filename, *subpath; + GtkIconSource *source; GdkPixbuf *pixbuf; - filename = g_build_filename(DATADIR, "pixmaps", "pidgin", dir, size, file, NULL); + subpath = g_build_filename("pixmaps", "pidgin", dir, size, file, NULL); + filename = find_file_common(subpath); + g_free(subpath); + if (!filename) + return; + pixbuf = gdk_pixbuf_new_from_file(filename, NULL); - do_alphashift(pixbuf, pixbuf); + if (translucent) + do_alphashift(pixbuf, pixbuf); source = gtk_icon_source_new(); - gtk_icon_source_set_pixbuf(source, pixbuf); + gtk_icon_source_set_pixbuf(source, pixbuf); gtk_icon_source_set_direction(source, GTK_TEXT_DIR_LTR); - gtk_icon_source_set_direction_wildcarded(source, !rtl); + 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); - gtk_icon_set_add_source(iconset, source); + gtk_icon_source_set_size_wildcarded(source, FALSE); + gtk_icon_source_set_state_wildcarded(source, TRUE); + gtk_icon_set_add_source(iconset, source); gtk_icon_source_free(source); if (sizeid == gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL)) { source = gtk_icon_source_new(); - 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_state_wildcarded(source, TRUE); - gtk_icon_set_add_source(iconset, source); - gtk_icon_source_free(source); + 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_state_wildcarded(source, TRUE); + gtk_icon_set_add_source(iconset, source); + gtk_icon_source_free(source); } - g_free(filename); + g_free(filename); g_object_unref(pixbuf); - if (rtl) { - filename = g_build_filename(DATADIR, "pixmaps", "pidgin", dir, size, "rtl", file, NULL); - pixbuf = gdk_pixbuf_new_from_file(filename, NULL); - do_alphashift(pixbuf, pixbuf); + if (rtl) { + subpath = g_build_filename("pixmaps", "pidgin", dir, size, "rtl", file, NULL); + filename = find_file_common(subpath); + g_free(subpath); + if (!filename) + return; + pixbuf = gdk_pixbuf_new_from_file(filename, NULL); + if (translucent) + do_alphashift(pixbuf, pixbuf); source = gtk_icon_source_new(); - gtk_icon_source_set_pixbuf(source, pixbuf); - 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); + gtk_icon_source_set_pixbuf(source, pixbuf); + 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); g_object_unref(pixbuf); gtk_icon_source_free(source); - } - - + } } - void pidgin_stock_init(void) { @@ -417,7 +427,6 @@ gtk_icon_source_set_size_wildcarded(source, TRUE); gtk_icon_source_set_state_wildcarded(source, TRUE); - iconset = gtk_icon_set_new(); gtk_icon_set_add_source(iconset, source);