Updating branch refs/heads/nick/gtk3 to 24d5634f2d13d1ff44dbbdf6dbf34d2ea27dd1ea (commit) from fb747e80da2bdc568354c8090ca0c9d05acace2c (commit)
commit 24d5634f2d13d1ff44dbbdf6dbf34d2ea27dd1ea Author: Andrzej <ndrwr...@gmail.com> Date: Wed Apr 3 23:58:19 2013 +0100 ApplicationsMenu: support for non-square icons and layout fixes Switched to GtkImage for the button icon. It works better with non-square icons. Slightly adjusted the button layout (spacing) to match other plugins&HIG. It might be a good idea to move contents of the _size_changed method to a timeout event (loading icon etc.). plugins/applicationsmenu/applicationsmenu.c | 90 ++++++++++++--------------- 1 files changed, 41 insertions(+), 49 deletions(-) diff --git a/plugins/applicationsmenu/applicationsmenu.c b/plugins/applicationsmenu/applicationsmenu.c index bf28607..b86e438 100644 --- a/plugins/applicationsmenu/applicationsmenu.c +++ b/plugins/applicationsmenu/applicationsmenu.c @@ -237,11 +237,12 @@ applications_menu_plugin_init (ApplicationsMenuPlugin *plugin) g_signal_connect (G_OBJECT (plugin->button), "button-press-event", G_CALLBACK (applications_menu_plugin_menu), plugin); - plugin->box = xfce_hvbox_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 1); + plugin->box = xfce_hvbox_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 2); + gtk_container_set_border_width (GTK_CONTAINER (plugin->box), 0); gtk_container_add (GTK_CONTAINER (plugin->button), plugin->box); gtk_widget_show (plugin->box); - plugin->icon = xfce_panel_image_new_from_source (DEFAULT_ICON_NAME); + plugin->icon = gtk_image_new (); gtk_box_pack_start (GTK_BOX (plugin->box), plugin->icon, FALSE, FALSE, 0); gtk_widget_show (plugin->icon); @@ -360,8 +361,6 @@ applications_menu_plugin_set_property (GObject *object, case PROP_BUTTON_ICON: g_free (plugin->button_icon); plugin->button_icon = g_value_dup_string (value); - xfce_panel_image_set_from_source (XFCE_PANEL_IMAGE (plugin->icon), - exo_str_is_empty (plugin->button_icon) ? DEFAULT_ICON_NAME : plugin->button_icon); force_a_resize = TRUE; break; @@ -444,16 +443,17 @@ applications_menu_plugin_size_changed (XfcePanelPlugin *panel_plugin, { ApplicationsMenuPlugin *plugin = XFCE_APPLICATIONS_MENU_PLUGIN (panel_plugin); gint row_size; - gint icon_size; GtkStyle *style; XfcePanelPluginMode mode; GtkRequisition label_size; GtkOrientation orientation; gint border_thickness; - gdouble icon_wh_ratio; GdkPixbuf *icon; - - row_size = size / xfce_panel_plugin_get_nrows (panel_plugin); + gint icon_width_max, icon_height_max; + gint icon_width = 0; + GdkScreen *screen; + GtkIconTheme *icon_theme = NULL; + gchar *icon_name; gtk_box_set_child_packing (GTK_BOX (plugin->box), plugin->icon, !plugin->show_button_title, @@ -467,50 +467,42 @@ applications_menu_plugin_size_changed (XfcePanelPlugin *panel_plugin, else orientation = GTK_ORIENTATION_VERTICAL; - if (!plugin->show_button_title) + row_size = size / xfce_panel_plugin_get_nrows (panel_plugin); + style = gtk_widget_get_style (plugin->button); + border_thickness = 2 * MAX (style->xthickness, style->ythickness) + 2; + + /* arbitrary limit on non-square icon width in horizontal panel */ + icon_width_max = (mode == XFCE_PANEL_PLUGIN_MODE_HORIZONTAL) ? + 6 * row_size - border_thickness : + size - border_thickness; + icon_height_max = row_size - border_thickness; + + screen = gtk_widget_get_screen (GTK_WIDGET (plugin)); + if (G_LIKELY (screen != NULL)) + icon_theme = gtk_icon_theme_get_for_screen (screen); + + icon_name = exo_str_is_empty (plugin->button_icon) ? + DEFAULT_ICON_NAME : plugin->button_icon; + + icon = xfce_panel_pixbuf_from_source_at_size (icon_name, + icon_theme, + icon_width_max, + icon_height_max); + + if (G_LIKELY (icon != NULL)) { - xfce_panel_image_set_size (XFCE_PANEL_IMAGE (plugin->icon), -1); - - /* get scale of the icon for non-squared custom files */ - if (mode != XFCE_PANEL_PLUGIN_MODE_DESKBAR - && plugin->button_icon != NULL - && g_path_is_absolute (plugin->button_icon)) - { - icon = gdk_pixbuf_new_from_file (plugin->button_icon, NULL); - if (G_LIKELY (icon != NULL)) - { - icon_wh_ratio = (gdouble) gdk_pixbuf_get_width (icon) / (gdouble) gdk_pixbuf_get_height (icon); - g_object_unref (G_OBJECT (icon)); - } - } - else - { - icon_wh_ratio = 1.0; - } - - if (mode == XFCE_PANEL_PLUGIN_MODE_HORIZONTAL) - gtk_widget_set_size_request (GTK_WIDGET (panel_plugin), row_size * icon_wh_ratio, size); - else if (mode == XFCE_PANEL_PLUGIN_MODE_VERTICAL) - gtk_widget_set_size_request (GTK_WIDGET (panel_plugin), size, row_size / icon_wh_ratio); - else - gtk_widget_set_size_request (GTK_WIDGET (panel_plugin), size, row_size); + gtk_image_set_from_pixbuf (GTK_IMAGE (plugin->icon), icon); + icon_width = gdk_pixbuf_get_width (icon); + g_object_unref (G_OBJECT (icon)); } - else - { - style = gtk_widget_get_style (plugin->button); - border_thickness = 2 * MAX (style->xthickness, style->ythickness) + 2; - - icon_size = row_size - border_thickness; - xfce_panel_image_set_size (XFCE_PANEL_IMAGE (plugin->icon), icon_size); - gtk_widget_set_size_request (GTK_WIDGET (panel_plugin), -1, -1); - if (mode == XFCE_PANEL_PLUGIN_MODE_DESKBAR) - { - /* check if the label fits next to the icon */ - gtk_widget_size_request (GTK_WIDGET (plugin->label), &label_size); - if (label_size.width <= size - border_thickness - icon_size) - orientation = GTK_ORIENTATION_HORIZONTAL; - } + if (plugin->show_button_title && + mode == XFCE_PANEL_PLUGIN_MODE_DESKBAR) + { + /* check if the label fits next to the icon */ + gtk_widget_size_request (GTK_WIDGET (plugin->label), &label_size); + if (label_size.width <= size - border_thickness - icon_width) + orientation = GTK_ORIENTATION_HORIZONTAL; } gtk_orientable_set_orientation (GTK_ORIENTABLE (plugin->box), orientation); _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits