[Xfce4-commits] r23275 - in libfrap/trunk/libfrap/menu: . tests
Jannis Pohlmann
jannis at xfce.org
Tue Oct 3 19:26:39 UTC 2006
Author: jannis
Date: 2006-10-03 19:26:37 +0000 (Tue, 03 Oct 2006)
New Revision: 23275
Modified:
libfrap/trunk/libfrap/menu/ChangeLog
libfrap/trunk/libfrap/menu/STATUS
libfrap/trunk/libfrap/menu/tests/test-display-root-menu.c
Log:
* STATUS: Updated the implementation status.
* tests/test-display-root-menu.c: Improved loading / displaying of
application icons. It's still not perfect, but much better than
before.
Modified: libfrap/trunk/libfrap/menu/ChangeLog
===================================================================
--- libfrap/trunk/libfrap/menu/ChangeLog 2006-10-03 16:34:36 UTC (rev 23274)
+++ libfrap/trunk/libfrap/menu/ChangeLog 2006-10-03 19:26:37 UTC (rev 23275)
@@ -1,3 +1,10 @@
+2006-10-03 Jannis Pohlmann <jannis at xfce.org>
+
+ * STATUS: Updated the implementation status.
+ * tests/test-display-root-menu.c: Improved loading / displaying of
+ application icons. It's still not perfect, but much better than
+ before.
+
2006-10-01 Jannis Pohlmann <jannis at xfce.org>
* frap-menu-or-rules.c, frap-menu-and-rules.c, frap-menu-not-rules.c:
Modified: libfrap/trunk/libfrap/menu/STATUS
===================================================================
--- libfrap/trunk/libfrap/menu/STATUS 2006-10-03 16:34:36 UTC (rev 23274)
+++ libfrap/trunk/libfrap/menu/STATUS 2006-10-03 19:26:37 UTC (rev 23275)
@@ -20,10 +20,7 @@
[x] <DefaultDirectoryDirs>
- [-] <Name>
- The <Name> is parsed and implemented as a property of XfceMenu
- but there are no functions yet to parse menu paths, such as
- "/Applications/Graphics".
+ [x] <Name>
[x] <Directory>
Modified: libfrap/trunk/libfrap/menu/tests/test-display-root-menu.c
===================================================================
--- libfrap/trunk/libfrap/menu/tests/test-display-root-menu.c 2006-10-03 16:34:36 UTC (rev 23274)
+++ libfrap/trunk/libfrap/menu/tests/test-display-root-menu.c 2006-10-03 19:26:37 UTC (rev 23275)
@@ -32,6 +32,10 @@
+#define ICON_SIZE 22
+
+
+
static FrapMenu *root = NULL;
static GtkWidget *window = NULL;
@@ -59,6 +63,76 @@
+GdkPixbuf*
+create_icon_for_item (FrapMenuItem *item)
+{
+ GdkPixbuf *pixbuf = NULL;
+ const gchar *icon_name = frap_menu_item_get_icon_name (item);
+ const gchar *item_name = frap_menu_item_get_name (item);
+
+ if (icon_name == NULL)
+ return NULL;
+
+ /* Check if we have an absolute filename */
+ if (g_path_is_absolute (icon_name))
+ {
+ pixbuf = gdk_pixbuf_new_from_file_at_scale (icon_name, ICON_SIZE, ICON_SIZE, TRUE, NULL);
+ }
+ else
+ {
+ /* Try to directly load the icon name first */
+ pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), icon_name, ICON_SIZE, GTK_ICON_LOOKUP_USE_BUILTIN, NULL);
+
+ /* Afterwards try removing the filename extension if there is one */
+ if (!pixbuf)
+ {
+ /* Get basename (just to be sure) */
+ gchar *basename = g_path_get_basename (icon_name);
+
+ /* Determine position of the extension */
+ gchar *extension = g_utf8_strrchr (basename, -1, '.');
+
+ /* Make sure we (probably) found an extension */
+ if (extension != NULL)
+ {
+ /* Remove extension */
+ gchar *new_icon_name = g_utf8_strncpy (icon_name, basename, g_utf8_strlen (basename, -1) - g_utf8_strlen (extension, -1));
+
+ /* Try to load the pixbuf using the new icon name */
+ pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), new_icon_name, ICON_SIZE, GTK_ICON_LOOKUP_USE_BUILTIN, NULL);
+
+ /* Free new icon name */
+ g_free (new_icon_name);
+ }
+
+ /* Free basename */
+ g_free (basename);
+ }
+
+ /* Finally, we try to load the icon by lowercase item name */
+ if (!pixbuf && item_name != NULL)
+ {
+ gchar *new_item_name = g_utf8_strdown (item_name, -1);
+
+ pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), new_item_name, ICON_SIZE, GTK_ICON_LOOKUP_USE_BUILTIN, NULL);
+
+ g_free (new_item_name);
+ }
+ }
+
+ /* Scale pixbuf (if needed) */
+ if (pixbuf)
+ {
+ GdkPixbuf *old = pixbuf;
+ pixbuf = gdk_pixbuf_scale_simple (old, ICON_SIZE, ICON_SIZE, GDK_INTERP_BILINEAR);
+ gdk_pixbuf_unref (old);
+ }
+
+ return pixbuf;
+}
+
+
+
void
create_item_widgets_for_menu (const gchar *desktop_id,
FrapMenuItem *item,
@@ -66,9 +140,16 @@
{
GtkWidget *menu_item;
GtkWidget *image;
+ GdkPixbuf *pixbuf;
- image = gtk_image_new_from_icon_name (frap_menu_item_get_icon_name (item), GTK_ICON_SIZE_MENU);
+ /* Try to load the image */
+ pixbuf = create_icon_for_item (item);
+ if (pixbuf)
+ image = gtk_image_new_from_pixbuf (pixbuf);
+ else
+ image = gtk_image_new_from_icon_name ("applications-other", GTK_ICON_SIZE_SMALL_TOOLBAR);
+
menu_item = gtk_image_menu_item_new_with_label (frap_menu_item_get_name (item));
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image);
gtk_menu_shell_append (GTK_MENU_SHELL (widget), menu_item);
@@ -101,7 +182,7 @@
continue;
/* Create menu icon */
- image = gtk_image_new_from_icon_name (frap_menu_directory_get_icon (directory), GTK_ICON_SIZE_MENU);
+ image = gtk_image_new_from_icon_name (frap_menu_directory_get_icon (directory), GTK_ICON_SIZE_SMALL_TOOLBAR);
/* Create menu item */
menu_item = gtk_image_menu_item_new_with_label (frap_menu_directory_get_name (directory));
More information about the Xfce4-commits
mailing list