Author: jannis
Date: 2007-10-21 11:56:29 +0000 (Sun, 21 Oct 2007)
New Revision: 26170

Modified:
   libxfce4menu/trunk/ChangeLog
   libxfce4menu/trunk/libxfce4menu/xfce-menu-item.c
   libxfce4menu/trunk/libxfce4menu/xfce-menu-item.h
Log:
        * libxfce4menu/xfce-menu-item.{c,h}: Add support for the "Path" 
          key of the .desktop entries. This makes it possible to start
          menu items in a special working directory. Will make fixing
          bug #3472 easier.

Modified: libxfce4menu/trunk/ChangeLog
===================================================================
--- libxfce4menu/trunk/ChangeLog        2007-10-21 09:42:43 UTC (rev 26169)
+++ libxfce4menu/trunk/ChangeLog        2007-10-21 11:56:29 UTC (rev 26170)
@@ -1,3 +1,10 @@
+2007-10-21     Jannis Pohlmann <[EMAIL PROTECTED]>
+
+       * libxfce4menu/xfce-menu-item.{c,h}: Add support for the "Path" 
+         key of the .desktop entries. This makes it possible to start
+         menu items in a special working directory. Will make fixing
+         bug #3472 easier.
+
 2007-10-20     Jannis Pohlmann <[EMAIL PROTECTED]>
 
        * libxfce4menu/xfce-menu-monitor.c: No, let's do it 

Modified: libxfce4menu/trunk/libxfce4menu/xfce-menu-item.c
===================================================================
--- libxfce4menu/trunk/libxfce4menu/xfce-menu-item.c    2007-10-21 09:42:43 UTC 
(rev 26169)
+++ libxfce4menu/trunk/libxfce4menu/xfce-menu-item.c    2007-10-21 11:56:29 UTC 
(rev 26170)
@@ -49,6 +49,7 @@
   PROP_ICON_NAME,
   PROP_COMMAND,
   PROP_TRY_EXEC,
+  PROP_PATH,
 };
 
 
@@ -113,6 +114,9 @@
   /* Environments in which the menu item should be hidden */
   gchar   **not_show_in;
 
+  /* Working directory */
+  gchar    *path;
+
   /* Counter keeping the number of menus which use this item. This works
    * like a reference counter and should be increased / decreased by XfceMenu
    * items whenever the item is added to or removed from the menu. */
@@ -302,6 +306,19 @@
                                                         "Name of the 
application icon",
                                                         NULL,
                                                         G_PARAM_READWRITE));
+
+  /**
+   * XfceMenuItem:path:
+   *
+   * Working directory the application should be started in.
+   **/
+  g_object_class_install_property (gobject_class,
+                                   PROP_PATH,
+                                   g_param_spec_string ("path",
+                                                        "Path",
+                                                        "Working directory 
path",
+                                                        NULL,
+                                                        G_PARAM_READWRITE));
 }
 
 
@@ -328,6 +345,7 @@
   item->priv->icon_name = NULL;
   item->priv->only_show_in = NULL;
   item->priv->not_show_in = NULL;
+  item->priv->path = NULL;
   item->priv->num_allocated = 0;
 }
 
@@ -347,6 +365,8 @@
 
   g_strfreev (item->priv->only_show_in);
   g_strfreev (item->priv->not_show_in);
+  
+  g_free (item->priv->path);
 
   g_list_foreach (item->priv->categories, (GFunc) g_free, NULL);
   g_list_free (item->priv->categories);
@@ -383,6 +403,10 @@
     case PROP_TRY_EXEC:
       break;
 
+    case PROP_PATH:
+      g_value_set_string (value, xfce_menu_item_get_path (item));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -437,6 +461,10 @@
       xfce_menu_item_set_icon_name (item, g_value_get_string (value));
       break;
 
+    case PROP_PATH:
+      xfce_menu_item_set_path (item, g_value_get_string (value));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -450,6 +478,7 @@
 {
   XfceMenuItem *item = NULL;
   XfceRc       *rc;
+  const gchar  *path;
   const gchar  *name;
   const gchar  *exec;
   const gchar  *try_exec;
@@ -485,6 +514,7 @@
   exec = xfce_rc_read_entry (rc, "Exec", NULL);
   try_exec = xfce_rc_read_entry (rc, "TryExec", NULL);
   icon = xfce_rc_read_entry (rc, "Icon", NULL);
+  path = xfce_rc_read_entry (rc, "Path", NULL);
 
   /* Validate Name and Exec fields */
   if (G_LIKELY (exec != NULL && name != NULL && g_utf8_validate (name, -1, 
NULL)))
@@ -504,6 +534,7 @@
                            "requires-terminal", terminal, 
                            "no-display", no_display, 
                            "supports-startup-notification", startup_notify, 
+                           "path", path,
                            NULL);
 
       /* Determine the categories this application should be shown in */
@@ -778,6 +809,40 @@
 
 
 
+const gchar*
+xfce_menu_item_get_path (XfceMenuItem *item)
+{
+  g_return_val_if_fail (XFCE_IS_MENU_ITEM (item), NULL);
+  return item->priv->path;
+}
+
+
+
+void        
+xfce_menu_item_set_path (XfceMenuItem *item,
+                         const gchar  *path)
+{
+  g_return_if_fail (XFCE_IS_MENU_ITEM (item));
+
+  if (G_UNLIKELY (item->priv->path != NULL))
+    {
+      /* Abort if old and new path are equal */
+      if (G_UNLIKELY (g_utf8_collate (item->priv->path, path) == 0))
+        return;
+
+      /* Otherwise free old path */
+      g_free (item->priv->path);
+    }
+
+  /* Assign new path */
+  item->priv->path = g_strdup (path);
+
+  /* Notify listeners */
+  g_object_notify (G_OBJECT (item), "path");
+}
+
+
+
 gboolean
 xfce_menu_item_requires_terminal (XfceMenuItem *item)
 {

Modified: libxfce4menu/trunk/libxfce4menu/xfce-menu-item.h
===================================================================
--- libxfce4menu/trunk/libxfce4menu/xfce-menu-item.h    2007-10-21 09:42:43 UTC 
(rev 26169)
+++ libxfce4menu/trunk/libxfce4menu/xfce-menu-item.h    2007-10-21 11:56:29 UTC 
(rev 26170)
@@ -65,6 +65,9 @@
 const gchar  *xfce_menu_item_get_icon_name                     (XfceMenuItem 
*item);
 void          xfce_menu_item_set_icon_name                     (XfceMenuItem 
*item,
                                                                 const gchar  
*icon_name);
+const gchar  *xfce_menu_item_get_path                          (XfceMenuItem 
*item);
+void          xfce_menu_item_set_path                          (XfceMenuItem 
*item,
+                                                                const gchar  
*path);
 gboolean      xfce_menu_item_requires_terminal                 (XfceMenuItem 
*item);
 void          xfce_menu_item_set_requires_terminal             (XfceMenuItem 
*item,
                                                                 gboolean      
requires_terminal);

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

Reply via email to