[Xfce4-commits] <xfdesktop:master> Simplefy the menu reloading.
Nick Schermer
noreply at xfce.org
Sat Apr 14 09:56:01 CEST 2012
Updating branch refs/heads/master
to b049c60daa57ff71afc5ea2730c33e56b59b5e1a (commit)
from 382e13d79a9f1fe2276c07cc6a69ccd083985dc7 (commit)
commit b049c60daa57ff71afc5ea2730c33e56b59b5e1a
Author: Nick Schermer <nick at xfce.org>
Date: Sat Apr 14 01:14:38 2012 +0200
Simplefy the menu reloading.
I think a limitation is that when the menu file is moved,
this is not picked up, but it improves the reload time of
a menu alot and avoids possible looping.
src/xfce-desktop-menu.c | 35 ++++++++---------------------------
1 files changed, 8 insertions(+), 27 deletions(-)
diff --git a/src/xfce-desktop-menu.c b/src/xfce-desktop-menu.c
index 2e3b1de..6837195 100644
--- a/src/xfce-desktop-menu.c
+++ b/src/xfce-desktop-menu.c
@@ -75,11 +75,10 @@ struct _XfceDesktopMenu
gboolean use_menu_icons; /* show menu icons? */
- gint idle_id; /* source id for idled generation */
+ guint idle_id; /* source id for idled generation */
};
-static void _xfce_desktop_menu_free_menudata(XfceDesktopMenu *desktop_menu);
static GtkIconTheme *_deskmenu_icon_theme = NULL;
static gboolean _generate_menu_idled(gpointer data);
@@ -184,38 +183,19 @@ desktop_menu_add_items(XfceDesktopMenu *desktop_menu,
static gboolean
_generate_menu(XfceDesktopMenu *desktop_menu)
{
- gboolean ret = TRUE;
GError *error = NULL;
- _xfce_desktop_menu_free_menudata(desktop_menu);
-
- /* allocate a menu for the ${XDG_MENU_PREFIX}applications.menu file */
- desktop_menu->garcon_menu = garcon_menu_new_applications();
-
- /* 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);
+ DBG("Load menu");
if(!garcon_menu_load (desktop_menu->garcon_menu, NULL, &error)) {
g_warning("Unable to load menu: %s", error->message);
g_error_free(error);
- _xfce_desktop_menu_free_menudata(desktop_menu);
return FALSE;
}
- g_signal_connect_swapped(desktop_menu->garcon_menu, "reload-required",
- G_CALLBACK(xfce_desktop_menu_reload), desktop_menu);
-
- return ret;
+ return TRUE;
}
-static void
-_xfce_desktop_menu_free_menudata(XfceDesktopMenu *desktop_menu)
-{
- if(desktop_menu->garcon_menu) {
- g_object_unref(G_OBJECT(desktop_menu->garcon_menu));
- }
-}
static gboolean
_generate_menu_idled(gpointer data)
@@ -235,10 +215,13 @@ xfce_desktop_menu_new(gboolean deferred)
{
XfceDesktopMenu *desktop_menu = g_new0(XfceDesktopMenu, 1);
- desktop_menu->use_menu_icons = TRUE;
-
garcon_set_environment("XFCE");
+ desktop_menu->use_menu_icons = TRUE;
+ desktop_menu->garcon_menu = garcon_menu_new_applications();
+ g_signal_connect_swapped(desktop_menu->garcon_menu, "reload-required",
+ G_CALLBACK(xfce_desktop_menu_reload), desktop_menu);
+
if(deferred)
desktop_menu->idle_id = g_idle_add(_generate_menu_idled, desktop_menu);
else {
@@ -340,8 +323,6 @@ xfce_desktop_menu_destroy(XfceDesktopMenu *desktop_menu)
G_CALLBACK(xfce_desktop_menu_reload),
desktop_menu);
- _xfce_desktop_menu_free_menudata(desktop_menu);
-
if(desktop_menu->garcon_menu) {
g_signal_handlers_disconnect_by_func(desktop_menu->garcon_menu,
G_CALLBACK(xfce_desktop_menu_reload), desktop_menu);
More information about the Xfce4-commits
mailing list