Mercurial > pidgin
diff pidgin/gtkrequest.c @ 29790:d0588e403877
Show thumbnail in ft request dialog
New function to create an action request with a PRPL-supplied icon.
Perhaps all macros in request.h should be augmented to supply versions for
_with_icon
As of now, there is only one, needed for file transfers...
author | Marcus Lundblad <ml@update.uu.se> |
---|---|
date | Sat, 04 Jul 2009 21:45:19 +0000 |
parents | 2cf7d6a20e68 |
children | 8b452039c329 |
line wrap: on
line diff
--- a/pidgin/gtkrequest.c Sat Jul 04 07:18:19 2009 +0000 +++ b/pidgin/gtkrequest.c Sat Jul 04 21:45:19 2009 +0000 @@ -26,6 +26,7 @@ #include "internal.h" #include "pidgin.h" +#include "debug.h" #include "prefs.h" #include "util.h" @@ -561,9 +562,11 @@ } static void * -pidgin_request_action(const char *title, const char *primary, +pidgin_request_action_with_icon(const char *title, const char *primary, const char *secondary, int default_action, - PurpleAccount *account, const char *who, PurpleConversation *conv, + PurpleAccount *account, const char *who, + PurpleConversation *conv, gconstpointer icon_data, + gsize icon_size, void *user_data, size_t action_count, va_list actions) { PidginRequestData *data; @@ -571,7 +574,7 @@ GtkWidget *vbox; GtkWidget *hbox; GtkWidget *label; - GtkWidget *img; + GtkWidget *img = NULL; void **buttons; char *label_text; char *primary_esc, *secondary_esc; @@ -630,8 +633,25 @@ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hbox); /* Dialog icon. */ - img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, + if (icon_data) { + GdkPixbufLoader *loader = gdk_pixbuf_loader_new(); + GdkPixbuf *pixbuf = NULL; + if (gdk_pixbuf_loader_write(loader, icon_data, icon_size, NULL)) { + pixbuf = gdk_pixbuf_loader_get_pixbuf(loader); + if (pixbuf) { + img = gtk_image_new_from_pixbuf(pixbuf); + } + } else { + purple_debug_info("pidgin", "failed to parse dialog icon\n"); + } + gdk_pixbuf_loader_close(loader, NULL); + g_object_unref(loader); + } + + if (!img) { + img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); + } gtk_misc_set_alignment(GTK_MISC(img), 0, 0); gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); @@ -681,6 +701,16 @@ return data; } +static void * +pidgin_request_action(const char *title, const char *primary, + const char *secondary, int default_action, + PurpleAccount *account, const char *who, PurpleConversation *conv, + void *user_data, size_t action_count, va_list actions) +{ + pidgin_request_action_with_icon(title, primary, secondary, default_action, + account, who, conv, NULL, 0, user_data, action_count, actions); +} + static void req_entry_field_changed_cb(GtkWidget *entry, PurpleRequestField *field) { @@ -1717,7 +1747,7 @@ pidgin_request_file, pidgin_close_request, pidgin_request_folder, - NULL, + pidgin_request_action_with_icon, NULL, NULL, NULL