Using HAVE_MENU_CACHE_DIR_LIST_CHILDREN requires #include <config.h>
[lxde/lxpanel.git] / src / menu-policy.c
index 43bbccf..3a56238 100644 (file)
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#include <menu-cache.h>
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <glib.h>
 
 #include "menu-policy.h"
-#include "panel.h"
+#include "private.h"
+
+/* support for libmenu-cache 0.4.x */
+#ifndef MENU_CACHE_CHECK_VERSION
+# ifdef HAVE_MENU_CACHE_DIR_LIST_CHILDREN
+#  define MENU_CACHE_CHECK_VERSION(_a,_b,_c) (_a == 0 && _b < 5) /* < 0.5.0 */
+# else
+#  define MENU_CACHE_CHECK_VERSION(_a,_b,_c) 0 /* not even 0.4.0 */
+# endif
+#endif
+
+guint32 visibility_flags = 0;
 
 /* Allocate a menu cache. */
-MenuCache * panel_menu_cache_new(void)
+MenuCache * panel_menu_cache_new(guint32* visibility_flags)
 {
+    MenuCache* cache;
     if (g_getenv("XDG_MENU_PREFIX") == NULL)
         g_setenv("XDG_MENU_PREFIX", "lxde-", TRUE);
-    return menu_cache_lookup("applications.menu");
+#if MENU_CACHE_CHECK_VERSION(0, 5, 0)
+    /* do it the same way menu:// VFS plugin in libfm does */
+    cache = menu_cache_lookup("applications.menu+hidden");
+#else
+    cache = menu_cache_lookup("applications.menu");
+#endif
+    if(visibility_flags)
+    {
+        if(is_in_lxde)
+            *visibility_flags = SHOW_IN_LXDE;
+        else
+        {
+            const char* de_name = g_getenv("XDG_CURRENT_DESKTOP");
+            if(de_name)
+                *visibility_flags = menu_cache_get_desktop_env_flag(cache, de_name);
+            else
+                *visibility_flags = SHOW_IN_LXDE|SHOW_IN_GNOME|SHOW_IN_KDE|SHOW_IN_XFCE;
+        }
+    }
+    return cache;
 }
 
 /* Evaluate the visibility of a menu item. */
-gboolean panel_menu_item_evaluate_visibility(MenuCacheItem * item)
+gboolean panel_menu_item_evaluate_visibility(MenuCacheItem * item, guint32 visibility_flags)
 {
-    return menu_cache_app_get_is_visible(
-        MENU_CACHE_APP(item),
-        ((is_in_lxde) ? SHOW_IN_LXDE : SHOW_IN_LXDE | SHOW_IN_GNOME | SHOW_IN_KDE | SHOW_IN_XFCE));
+    return menu_cache_app_get_is_visible(MENU_CACHE_APP(item), visibility_flags);
 }