[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