[Xfce4-commits] <xfce4-panel:devel> Use custom icon size names in various plugins.

Nick Schermer noreply at xfce.org
Mon Feb 15 15:34:05 CET 2010


Updating branch refs/heads/devel
         to d24e473e23f193c8619b00d9c1df3a2610bee0f2 (commit)
       from 73cfde852e5e8dc4053e1bdb10fd637f7b3d0d3b (commit)

commit d24e473e23f193c8619b00d9c1df3a2610bee0f2
Author: Nick Schermer <nick at xfce.org>
Date:   Mon Feb 15 15:18:26 2010 +0100

    Use custom icon size names in various plugins.
    
    Add panel-launcher-menu, panel-window-menu and panel-directory-menu
    icon size names for the plugins.

 docs/README.gtkrc-2.0                 |   19 +++++++++----
 plugins/directorymenu/directorymenu.c |    9 +++---
 plugins/launcher/launcher.c           |   48 +++++----------------------------
 plugins/windowmenu/windowmenu.c       |   47 +++++++++++++++++++++++++-------
 4 files changed, 62 insertions(+), 61 deletions(-)

diff --git a/docs/README.gtkrc-2.0 b/docs/README.gtkrc-2.0
index 46af292..ca1dfd7 100644
--- a/docs/README.gtkrc-2.0
+++ b/docs/README.gtkrc-2.0
@@ -41,12 +41,8 @@ class "XfceTasklist" style "xfce-tasklist-style"
 
 XfceLauncherPlugin
 ------------------
-style "xfce-launcher-plugin-style"
-{
-  # Size of the icons of the menu, in pixels.
-  XfceLauncherPlugin::menu-icon-size = 36
-}
-class "XfceLauncherPlugin" style "xfce-launcher-plugin-style"
+You can set a custom icon size in gtk-icon-sizes with the name
+panel-launcher-menu. The default icon size is 32px.
 
 
 
@@ -65,6 +61,10 @@ class "XfcePanelImage" style "xfce-panel-image-style"
 
 XfceWindowMenuPlugin
 --------------------
+You can set a custom icon size in gtk-icon-sizes with the name
+panel-window-menu. The default icon size is 16px. Note that the window
+icons are 16 or 32 pixels, all other sizes will result in scaling.
+
 style "xfce-window-menu-plugin-style"
 {
   # Ellipsizing used in the menu label.
@@ -79,3 +79,10 @@ style "xfce-window-menu-plugin-style"
   XfceWindowMenuPlugin::minimized-icon-lucency = 50
 }
 class "XfceWindowMenuPlugin" style "xfce-window-menu-plugin-style"
+
+
+
+XfceDirectoryMenuPlugin
+-----------------------
+You can set a custom icon size in gtk-icon-sizes with the name
+panel-directory-menu. The default icon size is 16px.
diff --git a/plugins/directorymenu/directorymenu.c b/plugins/directorymenu/directorymenu.c
index af088ce..0816554 100644
--- a/plugins/directorymenu/directorymenu.c
+++ b/plugins/directorymenu/directorymenu.c
@@ -100,7 +100,7 @@ XFCE_PANEL_DEFINE_PLUGIN (DirectoryMenuPlugin, directory_menu_plugin)
 
 
 static GQuark menu_file = 0;
-
+static GtkIconSize menu_icon_size = GTK_ICON_SIZE_INVALID;
 
 
 static void
@@ -148,6 +148,7 @@ directory_menu_plugin_class_init (DirectoryMenuPluginClass *klass)
                                                          EXO_PARAM_READWRITE));
 
   menu_file = g_quark_from_static_string ("dir-menu-file");
+  menu_icon_size = gtk_icon_size_register ("panel-directory-menu", 16, 16);
 }
 
 
@@ -757,7 +758,7 @@ directory_menu_plugin_menu_load (GtkWidget           *menu,
       g_object_ref (dir), (GClosureNotify) g_object_unref, 0);
   gtk_widget_show (mi);
 
-  image = gtk_image_new_from_stock (GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU);
+  image = gtk_image_new_from_stock (GTK_STOCK_OPEN, menu_icon_size);
   gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), image);
   gtk_widget_show (image);
 
@@ -768,7 +769,7 @@ directory_menu_plugin_menu_load (GtkWidget           *menu,
       g_object_ref (dir), (GClosureNotify) g_object_unref, 0);
   gtk_widget_show (mi);
 
-  image = gtk_image_new_from_icon_name ("terminal", GTK_ICON_SIZE_MENU);
+  image = gtk_image_new_from_icon_name ("terminal", menu_icon_size);
   gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), image);
   gtk_widget_show (image);
 
@@ -882,7 +883,7 @@ directory_menu_plugin_menu_load (GtkWidget           *menu,
             icon = g_file_info_get_icon (info);
           if (G_LIKELY (icon != NULL))
             {
-              image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU);
+              image = gtk_image_new_from_gicon (icon, menu_icon_size);
               gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), image);
               gtk_widget_show (image);
             }
diff --git a/plugins/launcher/launcher.c b/plugins/launcher/launcher.c
index c64efcc..0586012 100644
--- a/plugins/launcher/launcher.c
+++ b/plugins/launcher/launcher.c
@@ -39,7 +39,6 @@
 #include "launcher-dialog.h"
 
 #define ARROW_BUTTON_SIZE              (12)
-#define DEFAULT_MENU_ICON_SIZE         (GTK_ICON_SIZE_DND)
 #define MENU_POPUP_DELAY               (225)
 #define NO_ARROW_INSIDE_BUTTON(plugin) ((plugin)->arrow_position != LAUNCHER_ARROW_INTERNAL \
                                         || LIST_HAS_ONE_OR_NO_ENTRIES ((plugin)->items))
@@ -56,8 +55,6 @@ static void       launcher_plugin_set_property                  (GObject
                                                                  guint                 prop_id,
                                                                  const GValue         *value,
                                                                  GParamSpec           *pspec);
-static void       launcher_plugin_style_set                     (GtkWidget            *widget,
-                                                                 GtkStyle             *previous_style);
 static void       launcher_plugin_construct                     (XfcePanelPlugin      *panel_plugin);
 static void       launcher_plugin_free_data                     (XfcePanelPlugin      *panel_plugin);
 static void       launcher_plugin_removed                       (XfcePanelPlugin      *panel_plugin);
@@ -173,6 +170,10 @@ static void       launcher_plugin_uri_list_free                 (GSList
 
 
 
+static GtkIconSize menu_icon_size = GTK_ICON_SIZE_INVALID;
+
+
+
 struct _LauncherPluginClass
 {
   XfcePanelPluginClass __parent__;
@@ -193,7 +194,6 @@ struct _LauncherPlugin
   GdkPixbuf         *tooltip_cache;
 
   guint              menu_timeout_id;
-  GtkIconSize        menu_icon_size;
 
   guint              disable_tooltips : 1;
   guint              move_first : 1;
@@ -246,7 +246,6 @@ static const GtkTargetEntry drop_targets[] =
 static void
 launcher_plugin_class_init (LauncherPluginClass *klass)
 {
-  GtkWidgetClass       *gtkwidget_class;
   GObjectClass         *gobject_class;
   XfcePanelPluginClass *plugin_class;
 
@@ -254,9 +253,6 @@ launcher_plugin_class_init (LauncherPluginClass *klass)
   gobject_class->get_property = launcher_plugin_get_property;
   gobject_class->set_property = launcher_plugin_set_property;
 
-  gtkwidget_class = GTK_WIDGET_CLASS (klass);
-  gtkwidget_class->style_set = launcher_plugin_style_set;
-
   plugin_class = XFCE_PANEL_PLUGIN_CLASS (klass);
   plugin_class->construct = launcher_plugin_construct;
   plugin_class->free_data = launcher_plugin_free_data;
@@ -305,14 +301,6 @@ launcher_plugin_class_init (LauncherPluginClass *klass)
                                                       LAUNCHER_ARROW_DEFAULT,
                                                       EXO_PARAM_READWRITE));
 
-  gtk_widget_class_install_style_property (gtkwidget_class,
-                                           g_param_spec_enum ("menu-icon-size",
-                                                             NULL,
-                                                             "GtkIconSize used in the menu",
-                                                             GTK_TYPE_ICON_SIZE,
-                                                             DEFAULT_MENU_ICON_SIZE,
-                                                             EXO_PARAM_READABLE));
-
   launcher_signals[ITEMS_CHANGED] =
     g_signal_new (g_intern_static_string ("items-changed"),
                   G_TYPE_FROM_CLASS (klass),
@@ -323,6 +311,7 @@ launcher_plugin_class_init (LauncherPluginClass *klass)
 
   /* initialize the quark */
   launcher_plugin_quark = g_quark_from_static_string ("xfce-launcher-plugin");
+  menu_icon_size = gtk_icon_size_register ("panel-launcher-menu", 32, 32);
 }
 
 
@@ -341,7 +330,6 @@ launcher_plugin_init (LauncherPlugin *plugin)
   plugin->child = NULL;
   plugin->tooltip_cache = NULL;
   plugin->menu_timeout_id = 0;
-  plugin->menu_icon_size = DEFAULT_MENU_ICON_SIZE;
 
   /* monitor the default icon theme for changes */
   icon_theme = gtk_icon_theme_get_default ();
@@ -817,27 +805,6 @@ update_arrow:
 
 
 static void
-launcher_plugin_style_set (GtkWidget *widget,
-                           GtkStyle  *previous_style)
-{
-  LauncherPlugin *plugin = XFCE_LAUNCHER_PLUGIN (widget);
-  GtkIconSize     menu_icon_size;
-
-  /* let gtk update the widget style */
-  (*GTK_WIDGET_CLASS (launcher_plugin_parent_class)->style_set) (widget, previous_style);
-
-  /* read the style properties */
-  gtk_widget_style_get (widget, "menu-icon-size", &menu_icon_size, NULL);
-  if (plugin->menu_icon_size != menu_icon_size)
-    {
-      plugin->menu_icon_size = menu_icon_size;
-      launcher_plugin_menu_destroy (plugin);
-    }
-}
-
-
-
-static void
 launcher_plugin_file_changed (GFileMonitor      *monitor,
                               GFile             *changed_file,
                               GFile             *other_file,
@@ -1479,10 +1446,9 @@ launcher_plugin_menu_construct (LauncherPlugin *plugin)
 
       /* set the icon if one is set */
       icon_name = garcon_menu_item_get_icon_name (item);
-      if (!exo_str_is_empty (icon_name)
-          && plugin->menu_icon_size != GTK_ICON_SIZE_INVALID)
+      if (!exo_str_is_empty (icon_name))
         {
-          image = gtk_image_new_from_icon_name (icon_name, plugin->menu_icon_size);
+          image = gtk_image_new_from_icon_name (icon_name, menu_icon_size);
           gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), image);
           gtk_widget_show (image);
         }
diff --git a/plugins/windowmenu/windowmenu.c b/plugins/windowmenu/windowmenu.c
index e9673ea..a83000a 100644
--- a/plugins/windowmenu/windowmenu.c
+++ b/plugins/windowmenu/windowmenu.c
@@ -140,6 +140,7 @@ XFCE_PANEL_DEFINE_PLUGIN_RESIDENT (WindowMenuPlugin, window_menu_plugin)
 
 
 static GQuark window_quark = 0;
+static GtkIconSize menu_icon_size = GTK_ICON_SIZE_INVALID;
 
 
 
@@ -227,6 +228,7 @@ window_menu_plugin_class_init (WindowMenuPluginClass *klass)
                                                              EXO_PARAM_READABLE));
 
   window_quark = g_quark_from_static_string ("window-list-window-quark");
+  menu_icon_size = gtk_icon_size_register ("panel-window-menu", 16, 16);
 }
 
 
@@ -625,10 +627,10 @@ window_menu_plugin_active_window_changed (WnckScreen       *screen,
             goto show_desktop_icon;
 
           /* get the window icon and set the tooltip */
-          pixbuf = wnck_window_get_icon (window);
           gtk_widget_set_tooltip_text (GTK_WIDGET (icon),
                                        wnck_window_get_name (window));
 
+          pixbuf = wnck_window_get_icon (window);
           if (G_LIKELY (pixbuf != NULL))
             xfce_panel_image_set_from_pixbuf (icon, pixbuf);
           else
@@ -964,13 +966,15 @@ static GtkWidget *
 window_menu_plugin_menu_window_item_new (WnckWindow           *window,
                                          WindowMenuPlugin     *plugin,
                                          PangoFontDescription *italic,
-                                         PangoFontDescription *bold)
+                                         PangoFontDescription *bold,
+                                         gint                  icon_w,
+                                         gint                  icon_h)
 {
   const gchar *name, *tooltip;
   gchar       *utf8 = NULL;
   gchar       *decorated = NULL;
   GtkWidget   *mi, *label, *image;
-  GdkPixbuf   *pixbuf, *lucent = NULL;
+  GdkPixbuf   *pixbuf, *lucent = NULL, *scaled = NULL;
 
   panel_return_val_if_fail (WNCK_IS_WINDOW (window), NULL);
 
@@ -1015,15 +1019,32 @@ window_menu_plugin_menu_window_item_new (WnckWindow           *window,
 
   if (plugin->minimized_icon_lucency > 0)
     {
-      /* get the window mini icon */
+      /* get the window icon */
       pixbuf = wnck_window_get_mini_icon (window);
+      if (pixbuf != NULL
+          && (gdk_pixbuf_get_width (pixbuf) < icon_w
+              || gdk_pixbuf_get_height (pixbuf) < icon_h))
+        pixbuf = wnck_window_get_icon (window);
+
       if (pixbuf != NULL)
         {
+          /* scle the icon if needed */
+          if (gdk_pixbuf_get_width (pixbuf) > icon_w
+              || gdk_pixbuf_get_height (pixbuf) > icon_h)
+            {
+              scaled = gdk_pixbuf_scale_simple (pixbuf, icon_w, icon_h, GDK_INTERP_BILINEAR);
+              if (G_LIKELY (scaled != NULL))
+                pixbuf = scaled;
+            }
+
           /* dimm the icon if the window is minimized */
           if (wnck_window_is_minimized (window)
               && plugin->minimized_icon_lucency < 100)
-            pixbuf = lucent = exo_gdk_pixbuf_lucent (pixbuf,
-                plugin->minimized_icon_lucency);
+            {
+              lucent = exo_gdk_pixbuf_lucent (pixbuf, plugin->minimized_icon_lucency);
+              if (G_LIKELY (lucent != NULL))
+                pixbuf = lucent;
+            }
 
           /* set the menu item label */
           image = gtk_image_new_from_pixbuf (pixbuf);
@@ -1032,6 +1053,8 @@ window_menu_plugin_menu_window_item_new (WnckWindow           *window,
 
           if (lucent != NULL)
             g_object_unref (G_OBJECT (lucent));
+          if (scaled != NULL)
+            g_object_unref (G_OBJECT (scaled));
         }
     }
 
@@ -1137,6 +1160,7 @@ window_menu_plugin_menu_new (WindowMenuPlugin *plugin)
   guint                 n_workspaces = 0;
   const gchar          *name = NULL;
   gchar                *utf8 = NULL, *label;
+  gint                  w, h;
 
   panel_return_val_if_fail (XFCE_IS_WINDOW_MENU_PLUGIN (plugin), NULL);
   panel_return_val_if_fail (WNCK_IS_SCREEN (plugin->screen), NULL);
@@ -1144,6 +1168,9 @@ window_menu_plugin_menu_new (WindowMenuPlugin *plugin)
   italic = pango_font_description_from_string ("italic");
   bold = pango_font_description_from_string ("bold");
 
+  if (!gtk_icon_size_lookup (menu_icon_size, &w, &h))
+    w = h = 16;
+
   menu = gtk_menu_new ();
   g_signal_connect (G_OBJECT (menu), "selection-done",
       G_CALLBACK (window_menu_plugin_menu_selection_done), plugin->button);
@@ -1207,7 +1234,7 @@ window_menu_plugin_menu_new (WindowMenuPlugin *plugin)
             continue;
 
           /* create the menu item */
-          mi = window_menu_plugin_menu_window_item_new (window, plugin, italic, bold);
+          mi = window_menu_plugin_menu_window_item_new (window, plugin, italic, bold, w, h);
           gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
           gtk_widget_show (mi);
 
@@ -1282,7 +1309,7 @@ window_menu_plugin_menu_new (WindowMenuPlugin *plugin)
             continue;
 
           /* create the menu item */
-          mi = window_menu_plugin_menu_window_item_new (window, plugin, italic, bold);
+          mi = window_menu_plugin_menu_window_item_new (window, plugin, italic, bold, w, h);
           gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
           gtk_widget_show (mi);
         }
@@ -1300,7 +1327,7 @@ window_menu_plugin_menu_new (WindowMenuPlugin *plugin)
           G_CALLBACK (window_menu_plugin_workspace_add), plugin);
       gtk_widget_show (mi);
 
-      image = gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_MENU);
+      image = gtk_image_new_from_stock (GTK_STOCK_ADD, menu_icon_size);
       gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), image);
       gtk_widget_show (mi);
 
@@ -1328,7 +1355,7 @@ window_menu_plugin_menu_new (WindowMenuPlugin *plugin)
       g_free (label);
       g_free (utf8);
 
-      image = gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU);
+      image = gtk_image_new_from_stock (GTK_STOCK_REMOVE, menu_icon_size);
       gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), image);
       gtk_widget_show (mi);
     }



More information about the Xfce4-commits mailing list