]> Dogcows Code - chaz/openbox/blobdiff - openbox/menu.c
dont impose staying on-screen for non-normal windows like kicker
[chaz/openbox] / openbox / menu.c
index 286434cf09218672055ff94513c7d122b02f1a53..cd4b5cb168fe2e2d79563b5adb1ac2f7efcf1aef 100644 (file)
@@ -39,20 +39,27 @@ static gboolean menu_open(gchar *file, xmlDocPtr *doc, xmlNodePtr *node)
     gboolean loaded = TRUE;
     gchar *p;
 
-    p = g_build_filename(g_get_home_dir(), ".openbox", file, NULL);
-    if (!parse_load(p, "openbox_menu", doc, node)) {
-        g_free(p);
-        p = g_build_filename(RCDIR, file, NULL);
+    if (file[0] == '/') {
+        if (!parse_load(file, "openbox_menu", doc, node)) {
+            g_warning("Failed to load menu from '%s'", file);
+            loaded = FALSE;
+        }
+    } else {
+        p = g_build_filename(g_get_home_dir(), ".openbox", file, NULL);
         if (!parse_load(p, "openbox_menu", doc, node)) {
             g_free(p);
-            p = g_strdup(file);
+            p = g_build_filename(RCDIR, file, NULL);
             if (!parse_load(p, "openbox_menu", doc, node)) {
-                g_warning("Failed to load menu from '%s'", file);
-                loaded = FALSE;
+                g_free(p);
+                p = g_strdup(file);
+                if (!parse_load(p, "openbox_menu", doc, node)) {
+                    g_warning("Failed to load menu from '%s'", file);
+                    loaded = FALSE;
+                }
             }
         }
+        g_free(p);
     }
-    g_free(p);
     return loaded;
 }
 
@@ -276,6 +283,8 @@ void menu_show(gchar *name, gint x, gint y, ObClient *client)
 
     if (!(self = menu_from_name(name))) return;
 
+    menu_frame_hide_all();
+
     frame = menu_frame_new(self, client);
     menu_frame_move(frame, x, y);
     menu_frame_show(frame, NULL);
This page took 0.023567 seconds and 4 git commands to generate.