Author: jannis
Date: 2006-10-04 16:33:23 +0000 (Wed, 04 Oct 2006)
New Revision: 23280

Modified:
   libfrap/trunk/libfrap/menu/ChangeLog
   libfrap/trunk/libfrap/menu/frap-menu-item-pool.c
   libfrap/trunk/libfrap/menu/frap-menu-item-pool.h
   libfrap/trunk/libfrap/menu/frap-menu-item.c
   libfrap/trunk/libfrap/menu/frap-menu.c
   libfrap/trunk/libfrap/menu/tests/Makefile.am
   libfrap/trunk/libfrap/menu/tests/test-display-root-menu.c
Log:
        * frap-menu-item-pool.c: Add frap_menu_item_pool_get_empty function.
        * tests/Makefile.am, tests/test-display-root-menu.c: Link against
          libxfcegui4. Do not display empty menus. Improve icon loading again
          and execute item command when menu items are clicked.
        * frap-menu-item.c: Leave Exec/TryExec command as is (do not modify the
          url(s)/file(s) parameter. 
        * frap-menu.c: Respect <OnlyAllocated /> item when resolve menu items.

Modified: libfrap/trunk/libfrap/menu/ChangeLog
===================================================================
--- libfrap/trunk/libfrap/menu/ChangeLog        2006-10-04 10:25:00 UTC (rev 
23279)
+++ libfrap/trunk/libfrap/menu/ChangeLog        2006-10-04 16:33:23 UTC (rev 
23280)
@@ -1,3 +1,13 @@
+2006-10-04     Jannis Pohlmann <[EMAIL PROTECTED]>
+
+       * frap-menu-item-pool.c: Add frap_menu_item_pool_get_empty function.
+       * tests/Makefile.am, tests/test-display-root-menu.c: Link against
+         libxfcegui4. Do not display empty menus. Improve icon loading again
+         and execute item command when menu items are clicked.
+       * frap-menu-item.c: Leave Exec/TryExec command as is (do not modify the
+         url(s)/file(s) parameter. 
+       * frap-menu.c: Respect <OnlyAllocated /> item when resolve menu items.
+
 2006-10-03     Jannis Pohlmann <[EMAIL PROTECTED]>
 
        * STATUS: Updated the implementation status.

Modified: libfrap/trunk/libfrap/menu/frap-menu-item-pool.c
===================================================================
--- libfrap/trunk/libfrap/menu/frap-menu-item-pool.c    2006-10-04 10:25:00 UTC 
(rev 23279)
+++ libfrap/trunk/libfrap/menu/frap-menu-item-pool.c    2006-10-04 16:33:23 UTC 
(rev 23280)
@@ -152,6 +152,9 @@
   /* Insert into the hash table and remove old item (if any) */
   g_hash_table_replace (pool->priv->items, g_strdup 
(frap_menu_item_get_desktop_id (item)), item);
 
+  /* Set allocation state of the item */
+  frap_menu_item_set_allocated (item, TRUE);
+
   /* Grab a reference on the item */
   g_object_ref (G_OBJECT (item));
 }
@@ -226,3 +229,12 @@
   else
     return frap_menu_rules_match (rules, item);
 }
+
+
+
+gboolean
+frap_menu_item_pool_get_empty (FrapMenuItemPool *pool)
+{
+  g_return_val_if_fail (FRAP_IS_MENU_ITEM_POOL (pool), TRUE);
+  return (g_hash_table_size (pool->priv->items) == 0);
+}

Modified: libfrap/trunk/libfrap/menu/frap-menu-item-pool.h
===================================================================
--- libfrap/trunk/libfrap/menu/frap-menu-item-pool.h    2006-10-04 10:25:00 UTC 
(rev 23279)
+++ libfrap/trunk/libfrap/menu/frap-menu-item-pool.h    2006-10-04 16:33:23 UTC 
(rev 23280)
@@ -54,6 +54,7 @@
                                                    gpointer          
user_data);
 void              frap_menu_item_pool_apply_rules (FrapMenuItemPool *pool,
                                                    GSList           *rules);
+gboolean          frap_menu_item_pool_get_empty   (FrapMenuItemPool *pool);
 
 G_END_DECLS;
 

Modified: libfrap/trunk/libfrap/menu/frap-menu-item.c
===================================================================
--- libfrap/trunk/libfrap/menu/frap-menu-item.c 2006-10-04 10:25:00 UTC (rev 
23279)
+++ libfrap/trunk/libfrap/menu/frap-menu-item.c 2006-10-04 16:33:23 UTC (rev 
23280)
@@ -473,11 +473,14 @@
   /* Validate Name and Exec fields */
   if (G_LIKELY (exec != NULL && name != NULL && g_utf8_validate (name, -1, 
NULL)))
     {
+#if 0
       /* Append %f to the exec command if the application hasn't set anything 
else */
       if (strstr (exec, "%f") == NULL && strstr (exec, "%F") == NULL && strstr 
(exec, "%u") == NULL && strstr (exec, "%U") == NULL)
-        command = g_strconcat (exec, "%f", NULL);
+        command = g_strconcat (exec, " %f", NULL);
       else
         command = g_strdup (exec);
+#endif
+      command = g_strdup (exec);
 
       /* Determine other application properties */
       terminal = xfce_rc_read_bool_entry (rc, "Terminal", FALSE);

Modified: libfrap/trunk/libfrap/menu/frap-menu.c
===================================================================
--- libfrap/trunk/libfrap/menu/frap-menu.c      2006-10-04 10:25:00 UTC (rev 
23279)
+++ libfrap/trunk/libfrap/menu/frap-menu.c      2006-10-04 16:33:23 UTC (rev 
23280)
@@ -1750,11 +1750,16 @@
 
           if (G_LIKELY (item != NULL))
             {
-              /* Assign the desktop id to the item */
-              frap_menu_item_set_desktop_id (item, desktop_id);
+              /* Only include item if menu not only includes unallocated items
+               * or if the item is not allocated yet */
+              if (!menu->priv->only_unallocated || 
frap_menu_item_get_allocated (item))
+                {
+                  /* Assign the desktop id to the item */
+                  frap_menu_item_set_desktop_id (item, desktop_id);
 
-              /* Add the new item to the pool (replace the old one if needed) 
*/
-              frap_menu_item_pool_insert (menu->priv->pool, item);
+                  /* Add the new item to the pool (replace the old one if 
needed) */
+                  frap_menu_item_pool_insert (menu->priv->pool, item);
+                }
             }
 
           /* Free desktop id */

Modified: libfrap/trunk/libfrap/menu/tests/Makefile.am
===================================================================
--- libfrap/trunk/libfrap/menu/tests/Makefile.am        2006-10-04 10:25:00 UTC 
(rev 23279)
+++ libfrap/trunk/libfrap/menu/tests/Makefile.am        2006-10-04 16:33:23 UTC 
(rev 23280)
@@ -7,6 +7,7 @@
        $(GLIB_CFLAGS)                                                  \
        $(GTHREAD_CFLAGS)                                               \
        $(LIBXFCE4UTIL_CFLAGS)                                          \
+       $(LIBXFCEGUI4_CFLAGS)                                           \
        $(GTK_CFLAGS)                                                   \
        -I$(top_builddir)/libfrap/menu/                                 \
        -DG_LOG_DOMAIN=\"tests\"
@@ -15,6 +16,7 @@
        $(GLIB_LIBS)                                                    \
        $(GTHREAD_LIBS)                                                 \
        $(LIBXFCE4UTIL_LIBS)                                            \
+       $(LIBXFCEGUI4_LIBS)                                             \
        $(GTK_LIBS)                                                     \
        $(top_builddir)/libfrap/menu/libfrapmenu.la                     
 

Modified: libfrap/trunk/libfrap/menu/tests/test-display-root-menu.c
===================================================================
--- libfrap/trunk/libfrap/menu/tests/test-display-root-menu.c   2006-10-04 
10:25:00 UTC (rev 23279)
+++ libfrap/trunk/libfrap/menu/tests/test-display-root-menu.c   2006-10-04 
16:33:23 UTC (rev 23280)
@@ -27,6 +27,7 @@
 
 #include <gtk/gtk.h>
 #include <libxfce4util/libxfce4util.h>
+#include <libxfcegui4/libxfcegui4.h>
 
 #include <libfrapmenu.h>
 
@@ -66,22 +67,21 @@
 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);
+  GtkIconTheme *icon_theme = gtk_icon_theme_get_default ();
+  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);
-    }
+    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);
+      pixbuf = gtk_icon_theme_load_icon (icon_theme, icon_name, ICON_SIZE, 
GTK_ICON_LOOKUP_USE_BUILTIN, NULL);
 
       /* Afterwards try removing the filename extension if there is one */
       if (!pixbuf)
@@ -99,7 +99,7 @@
               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);
+              pixbuf = gtk_icon_theme_load_icon (icon_theme, new_icon_name, 
ICON_SIZE, GTK_ICON_LOOKUP_USE_BUILTIN, NULL);
 
               /* Free new icon name */
               g_free (new_icon_name);
@@ -121,19 +121,48 @@
     }
 
   /* Scale pixbuf (if needed) */
-  if (pixbuf)
+  if (pixbuf != NULL)
     {
       GdkPixbuf *old = pixbuf;
       pixbuf = gdk_pixbuf_scale_simple (old, ICON_SIZE, ICON_SIZE, 
GDK_INTERP_BILINEAR);
       gdk_pixbuf_unref (old);
     }
 
+  /* Print icon name if icon could not be loaded */
+  if (pixbuf == NULL && icon_name != NULL)
+    g_debug ("%s could not be found", icon_name != NULL ? icon_name : 
"(null)");
+
   return pixbuf;
 }
 
 
 
 void
+execute_command_for_item (GtkWidget    *widget,
+                          FrapMenuItem *item)
+{
+  const gchar *command = frap_menu_item_get_command (item);
+  gboolean     terminal = frap_menu_item_requires_terminal (item);
+  gboolean     startup_notification = 
frap_menu_item_supports_startup_notification (item);
+  GError      *error = NULL;
+
+  /* Abort if no command was defined for this item */
+  if (G_UNLIKELY (command == NULL))
+    return;
+
+  /* Try to execute the command and display the error message if that failed */
+  if (!xfce_exec_on_screen (gdk_screen_get_default (), command, terminal, 
startup_notification, &error))
+    {
+      xfce_err (error->message);
+
+      /* Free the error */
+      g_error_free (error);
+    }
+}
+
+
+
+void
 create_item_widgets_for_menu (const gchar  *desktop_id,
                               FrapMenuItem *item,
                               GtkWidget    *widget)
@@ -154,6 +183,9 @@
   gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image);
   gtk_menu_shell_append (GTK_MENU_SHELL (widget), menu_item);
   gtk_widget_show (menu_item);
+
+  /* Execute command if item is clicked */
+  g_signal_connect (menu_item, "activate", G_CALLBACK 
(execute_command_for_item), item);
 }
 
 
@@ -169,6 +201,9 @@
   GtkWidget         *image;
   GSList            *iter;
   GSList            *menus;
+  GtkIconTheme      *icon_theme = gtk_icon_theme_get_default ();
+  const gchar       *icon_name;
+  GdkPixbuf         *pixbuf;
 
   /* Create sorted copy of the submenu list */
   menus = g_slist_sort (g_slist_copy (frap_menu_get_menus (menu)), 
(GCompareFunc) compare_menus);
@@ -178,12 +213,25 @@
       /* Get menu directory */
       directory = frap_menu_get_directory (FRAP_MENU (iter->data));
 
+      /* Skip if menu has no directory (and thus, no display information) */
       if (G_UNLIKELY (directory == NULL))
         continue;
 
-      /* Create menu icon */
-      image = gtk_image_new_from_icon_name (frap_menu_directory_get_icon 
(directory), GTK_ICON_SIZE_SMALL_TOOLBAR);
+      /* Skip if menu is empty */
+      if (frap_menu_item_pool_get_empty (frap_menu_get_item_pool (iter->data)))
+        continue;
 
+      /* Determine icon name */
+      icon_name = frap_menu_directory_get_icon (directory);
+
+      /* Load menu icon */
+      pixbuf = gtk_icon_theme_load_icon (icon_theme, icon_name, ICON_SIZE, 
GTK_ICON_LOOKUP_USE_BUILTIN, NULL);
+      if (G_UNLIKELY (pixbuf == NULL))
+        pixbuf = gtk_icon_theme_load_icon (icon_theme, "applications-other", 
ICON_SIZE, GTK_ICON_LOOKUP_USE_BUILTIN, NULL);
+
+      /* Create image widget */
+      image = gtk_image_new_from_pixbuf (pixbuf);
+
       /* Create menu item */
       menu_item = gtk_image_menu_item_new_with_label 
(frap_menu_directory_get_name (directory));
       gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image);

_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to