[Xfce4-commits] <xfdesktop:master> Let Garcon decide what menu file to choose. Drop UserMenu kiosk option.

Jannis Pohlmann noreply at xfce.org
Sat Dec 4 13:26:01 CET 2010


Updating branch refs/heads/master
         to 7749a45105e9437403e953c1be947e8752ea0420 (commit)
       from 2fb8c140ad2d4913f45d4774690f08f6f70de944 (commit)

commit 7749a45105e9437403e953c1be947e8752ea0420
Author: Jannis Pohlmann <jannis at xfce.org>
Date:   Sat Dec 4 13:21:30 2010 +0100

    Let Garcon decide what menu file to choose. Drop UserMenu kiosk option.
    
    Garcon now supports XDG_MENU_PREFIX which we can use to make
    xfce-applications.menu the default menu file in all our applications.
    This way, xfdesktop no longer needs to decide which file to pick on
    its own. The bad news is that this makes the UserMenu kiosk option
    nearly impossible. Therefor I decided to drop it; we don't restrict
    the application menu in the panel either, so why should we do here?

 src/menu.c              |    2 +-
 src/xfce-desktop-menu.c |   86 ++++------------------------------------------
 src/xfce-desktop-menu.h |    3 +-
 3 files changed, 10 insertions(+), 81 deletions(-)

diff --git a/src/menu.c b/src/menu.c
index 6e67394..4cc0af3 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -57,7 +57,7 @@ _stop_menu_module(void) {
 static gboolean
 _start_menu_module(void)
 {
-    desktop_menu = xfce_desktop_menu_new(NULL, TRUE);
+    desktop_menu = xfce_desktop_menu_new(TRUE);
     if(desktop_menu) {
         xfce_desktop_menu_set_show_icons(desktop_menu, show_desktop_menu_icons);
         return TRUE;
diff --git a/src/xfce-desktop-menu.c b/src/xfce-desktop-menu.c
index f0615ef..2e3b1de 100644
--- a/src/xfce-desktop-menu.c
+++ b/src/xfce-desktop-menu.c
@@ -4,7 +4,7 @@
  *                     2003 Biju Chacko (botsie at users.sourceforge.net)
  *                     2004 Danny Milosavljevic <danny.milo at gmx.net>
  *                2004-2008 Brian Tarricone <bjt23 at cornell.edu>
- *                     2009 Jannis Pohlmann <jannis at xfce.org>
+ *                2009-2010 Jannis Pohlmann <jannis at xfce.org>
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -185,31 +185,19 @@ static gboolean
 _generate_menu(XfceDesktopMenu *desktop_menu)
 {
     gboolean ret = TRUE;
-    XfceKiosk *kiosk;
-    gboolean user_menu;
     GError *error = NULL;
 
     _xfce_desktop_menu_free_menudata(desktop_menu);
 
-    if(!desktop_menu->filename) {
-        g_critical("%s: can't load menu: no menu file found", PACKAGE);
-        return FALSE;
-    }
-
-    kiosk = xfce_kiosk_new("xfdesktop");
-    user_menu = xfce_kiosk_query(kiosk, "UserMenu");
-    xfce_kiosk_free(kiosk);
-
-    DBG("menu file name is %s", desktop_menu->filename);
-
-    if(desktop_menu->garcon_menu)
-        g_object_unref(G_OBJECT(desktop_menu->garcon_menu));
+    /* allocate a menu for the ${XDG_MENU_PREFIX}applications.menu file */
+    desktop_menu->garcon_menu = garcon_menu_new_applications();
 
-    desktop_menu->garcon_menu = garcon_menu_new_for_path(desktop_menu->filename);
+    /* make sure the member variable is set to NULL when the object is destroyed */
+    g_object_add_weak_pointer (G_OBJECT (desktop_menu->garcon_menu), 
+                               (gpointer) &desktop_menu->garcon_menu);
 
     if(!garcon_menu_load (desktop_menu->garcon_menu, NULL, &error)) {
-        g_critical("Unable to create GarconMenu from file '%s': %s",
-                   desktop_menu->filename, error->message);
+        g_warning("Unable to load menu: %s", error->message);
         g_error_free(error);
         _xfce_desktop_menu_free_menudata(desktop_menu);
         return FALSE;
@@ -226,10 +214,7 @@ _xfce_desktop_menu_free_menudata(XfceDesktopMenu *desktop_menu)
 {
     if(desktop_menu->garcon_menu) {
         g_object_unref(G_OBJECT(desktop_menu->garcon_menu));
-        desktop_menu->garcon_menu = NULL;
     }
-
-    desktop_menu->garcon_menu = NULL;
 }
 
 static gboolean
@@ -245,56 +230,8 @@ _generate_menu_idled(gpointer data)
     return FALSE;
 }
 
-static gchar *
-xfce_desktop_get_menufile(void)
-{
-    XfceKiosk *kiosk;
-    gboolean user_menu;
-    gchar *menu_file = NULL;
-    gchar **all_dirs;
-    const gchar *userhome = xfce_get_homedir();
-    gint i;
-
-    kiosk = xfce_kiosk_new("xfdesktop");
-    user_menu = xfce_kiosk_query(kiosk, "UserMenu");
-    xfce_kiosk_free(kiosk);
-
-    if(user_menu) {
-        gchar *file = xfce_resource_save_location(XFCE_RESOURCE_CONFIG,
-                                                  "menus/xfce-applications.menu",
-                                                  FALSE);
-        if(file) {
-            DBG("checking %s", file);
-            if(g_file_test(file, G_FILE_TEST_IS_REGULAR))
-                return file;
-            else
-                g_free(file);
-        }
-    }
-
-    all_dirs = xfce_resource_lookup_all(XFCE_RESOURCE_CONFIG,
-                                        "menus/xfce-applications.menu");
-    for(i = 0; all_dirs[i]; i++) {
-        DBG("checking %s", all_dirs[i]);
-        if(user_menu || strstr(all_dirs[i], userhome) != all_dirs[i]) {
-            if(g_file_test(all_dirs[i], G_FILE_TEST_IS_REGULAR)) {
-                menu_file = g_strdup(all_dirs[i]);
-                break;
-            }
-        }
-    }
-    g_strfreev(all_dirs);
-
-    if(!menu_file)
-        g_warning("%s: Could not locate a menu definition file", PACKAGE);
-
-    return menu_file;
-}
-
-
 XfceDesktopMenu *
-xfce_desktop_menu_new(const gchar *menu_file,
-                           gboolean deferred)
+xfce_desktop_menu_new(gboolean deferred)
 {
     XfceDesktopMenu *desktop_menu = g_new0(XfceDesktopMenu, 1);
 
@@ -302,11 +239,6 @@ xfce_desktop_menu_new(const gchar *menu_file,
 
     garcon_set_environment("XFCE");
 
-    if(menu_file)
-        desktop_menu->filename = g_strdup(menu_file);
-    else
-        desktop_menu->filename = xfce_desktop_get_menufile();
-
     if(deferred)
         desktop_menu->idle_id = g_idle_add(_generate_menu_idled, desktop_menu);
     else {
@@ -410,8 +342,6 @@ xfce_desktop_menu_destroy(XfceDesktopMenu *desktop_menu)
 
     _xfce_desktop_menu_free_menudata(desktop_menu);
 
-    g_free(desktop_menu->filename);
-
     if(desktop_menu->garcon_menu) {
         g_signal_handlers_disconnect_by_func(desktop_menu->garcon_menu,
             G_CALLBACK(xfce_desktop_menu_reload), desktop_menu);
diff --git a/src/xfce-desktop-menu.h b/src/xfce-desktop-menu.h
index 71e8dc6..e215182 100644
--- a/src/xfce-desktop-menu.h
+++ b/src/xfce-desktop-menu.h
@@ -26,8 +26,7 @@ G_BEGIN_DECLS
 
 typedef struct _XfceDesktopMenu XfceDesktopMenu;
 
-XfceDesktopMenu *xfce_desktop_menu_new(const gchar *menu_file,
-                                            gboolean deferred);
+XfceDesktopMenu *xfce_desktop_menu_new(gboolean deferred);
 void xfce_desktop_menu_populate_menu(XfceDesktopMenu *desktop_menu,
                                           GtkWidget *menu);
 GtkWidget *xfce_desktop_menu_get_widget(XfceDesktopMenu *desktop_menu);



More information about the Xfce4-commits mailing list