--- desktop-menu-plugin.c Thu Mar 3 00:01:00 2005 +++ ../../xfdesktop-4.2.1-new/panel-plugin/desktop-menu-plugin.c Thu May 5 12:06:20 2005 @@ -120,22 +120,58 @@ return xfce_expand_variables(raw_path, NULL); } +static GdkPixbuf * +dmp_get_icon (gchar *icon_file, int s, float *ar_p) +{ + GdkPixbuf *orig; + + orig = gdk_pixbuf_new_from_file(icon_file, NULL); + if(orig) { + GdkPixbuf *pix; + int w = gdk_pixbuf_get_width(orig); + int h = gdk_pixbuf_get_height(orig); + float ar = (float)w/(float)h; + + if (ar_p) + *ar_p = ar; + + pix = gdk_pixbuf_scale_simple(orig, (int)(s * ar), s, GDK_INTERP_BILINEAR); + g_object_unref(G_OBJECT(orig)); + if(pix) + return pix; + } + return NULL; +} + static void -dmp_set_size(Control *c, int size) +dmp_update_button(DMPlugin *dmp, int size) { - DMPlugin *dmp = c->data; GdkPixbuf *pix; - int s = icon_size[size] + border_width; + int w = -1; + int s; + if (size == -1) + s = icon_size[settings.size]; + else + s = icon_size[size]; if(dmp->icon_file) { - pix = xfce_themed_icon_load(dmp->icon_file, s - border_width); + float ar; + pix = dmp_get_icon(dmp->icon_file, s, &ar); if(pix) { + w = (int)(s * ar); xfce_scaled_image_set_from_pixbuf(XFCE_SCALED_IMAGE(dmp->image), pix); g_object_unref(G_OBJECT(pix)); } } - gtk_widget_set_size_request (c->base, s, s); + gtk_widget_set_size_request (gtk_widget_get_parent(dmp->button), w, s + border_width); +} + +static void +dmp_set_size(Control *c, int size) +{ + DMPlugin *dmp = c->data; + dmp_update_button(dmp, size); } static void @@ -361,16 +397,11 @@ value = xmlGetProp(node, (const xmlChar *)"icon_file"); if(value) { - pix = xfce_themed_icon_load(value, - icon_size[settings.size] - 2*border_width); - if(pix) { - if(dmp->icon_file) - g_free(dmp->icon_file); - dmp->icon_file = (gchar *)value; - xfce_scaled_image_set_from_pixbuf(XFCE_SCALED_IMAGE(dmp->image), pix); - g_object_unref(G_OBJECT(pix)); - } else - xmlFree(value); + if(dmp->icon_file) + g_free(dmp->icon_file); + dmp->icon_file = (gchar *)value; + + dmp_update_button(dmp, -1); } else { dmp->icon_file = g_strdup(DEFAULT_BUTTON_ICON); pix = xfce_themed_icon_load(dmp->icon_file, @@ -424,15 +455,9 @@ if(w == dmp->icon_entry) { if(dmp->icon_file) g_free(dmp->icon_file); - dmp->icon_file = gtk_editable_get_chars(GTK_EDITABLE(w), 0, -1); - pix = xfce_themed_icon_load(dmp->icon_file, - icon_size[settings.size] - 2*border_width); - if(pix) { - xfce_scaled_image_set_from_pixbuf(XFCE_SCALED_IMAGE(dmp->image), pix); - g_object_unref(G_OBJECT(pix)); - } else - xfce_scaled_image_set_from_pixbuf(XFCE_SCALED_IMAGE(dmp->image), NULL); + + dmp_update_button(dmp, -1); } else if(w == dmp->file_entry) { if(dmp->menu_file) g_free(dmp->menu_file);