diff options
Diffstat (limited to 'libdbusmenu-gtk')
-rw-r--r-- | libdbusmenu-gtk/menuitem.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c index d2d0ee4..f3d9668 100644 --- a/libdbusmenu-gtk/menuitem.c +++ b/libdbusmenu-gtk/menuitem.c @@ -31,9 +31,34 @@ License version 3 and version 2.1 along with this program. If not, see gboolean dbusmenu_menuitem_property_set_image (DbusmenuMenuitem * menuitem, const gchar * property, const GdkPixbuf * data) { + g_return_val_if_fail(GDK_IS_PIXBUF(data), FALSE); + g_return_val_if_fail(DBUSMENU_IS_MENUITEM(menuitem), FALSE); + g_return_val_if_fail(property != NULL && property[0] != '\0', FALSE); + GError * error = NULL; + gchar * png_data; + gsize png_data_len; - return FALSE; + if (!gdk_pixbuf_save_to_buffer((GdkPixbuf *)data, &png_data, &png_data_len, "png", &error, NULL)) { + if (error == NULL) { + g_warning("Unable to create pixbuf data stream: %d", png_data_len); + } else { + g_warning("Unable to create pixbuf data stream: %s", error->message); + g_error_free(error); + error = NULL; + } + + return FALSE; + } + + gchar * prop_str = g_base64_encode((guchar *)png_data, png_data_len); + gboolean propreturn = FALSE; + propreturn = dbusmenu_menuitem_property_set(menuitem, property, prop_str); + + g_free(prop_str); + g_free(png_data); + + return propreturn; } GdkPixbuf * |