]> Dogcows Code - chaz/openbox/blobdiff - openbox/openbox.c
Fix the delayed hiding of submenus, so that they don't end up hidden while the entry...
[chaz/openbox] / openbox / openbox.c
index 43549280b74979085ce85ea39524f282c3c06503..0e3397827f1fbac79206ffd41abeda4de12d2487 100644 (file)
@@ -85,7 +85,6 @@
 #include <X11/Xlib.h>
 #include <X11/keysym.h>
 
-
 RrInstance   *ob_rr_inst;
 RrImageCache *ob_rr_icons;
 RrTheme      *ob_rr_theme;
@@ -105,7 +104,7 @@ static gboolean  reconfigure = FALSE;
 static gboolean  restart = FALSE;
 static gchar    *restart_path = NULL;
 static Cursor    cursors[OB_NUM_CURSORS];
-static KeyCode   keys[OB_NUM_KEYS];
+static KeyCode  *keys[OB_NUM_KEYS];
 static gint      exitcode = 0;
 static guint     remote_control = 0;
 static gboolean  being_replaced = FALSE;
@@ -148,7 +147,6 @@ gint main(gint argc, gchar **argv)
         session_startup(argc, argv);
     }
 
-
     ob_display = XOpenDisplay(NULL);
     if (ob_display == NULL)
         ob_exit_with_error(_("Failed to open the display from the DISPLAY environment variable."));
@@ -223,12 +221,13 @@ gint main(gint argc, gchar **argv)
     cursors[OB_CURSOR_NORTHWEST] = load_cursor("top_left_corner",
                                                XC_top_left_corner);
 
-
     prop_startup(); /* get atoms values for the display */
     extensions_query_all(); /* find which extensions are present */
 
     if (screen_annex()) { /* it will be ours! */
         do {
+            ObPrompt *xmlprompt = NULL;
+
             modkeys_startup(reconfigure);
 
             /* get the keycodes for keys we use */
@@ -376,7 +375,8 @@ gint main(gint argc, gchar **argv)
                     gchar *m;
 
                     m = g_strdup_printf(_("One or more XML syntax errors were found while parsing the Openbox configuration files.  See stdout for more information.  The last error seen was in file \"%s\" line %d, with message: %s"), e->file, e->line, e->message);
-                    prompt_show_message(m, _("Close"));
+                    xmlprompt =
+                        prompt_show_message(m, _("Openbox Syntax Error"), _("Close"));
                     g_free(m);
                     xmlResetError(e);
                 }
@@ -386,6 +386,11 @@ gint main(gint argc, gchar **argv)
             ob_set_state(reconfigure ?
                          OB_STATE_RECONFIGURING : OB_STATE_EXITING);
 
+            if (xmlprompt) {
+                prompt_unref(xmlprompt);
+                xmlprompt = NULL;
+            }
+
             if (!reconfigure) {
                 dock_remove_all();
                 client_unmanage_all();
@@ -412,6 +417,17 @@ gint main(gint argc, gchar **argv)
             event_shutdown(reconfigure);
             config_shutdown();
             actions_shutdown(reconfigure);
+
+            /* Free the key codes for built in keys */
+            g_free(keys[OB_KEY_RETURN]);
+            g_free(keys[OB_KEY_ESCAPE]);
+            g_free(keys[OB_KEY_LEFT]);
+            g_free(keys[OB_KEY_RIGHT]);
+            g_free(keys[OB_KEY_UP]);
+            g_free(keys[OB_KEY_DOWN]);
+            g_free(keys[OB_KEY_TAB]);
+            g_free(keys[OB_KEY_SPACE]);
+
             modkeys_shutdown(reconfigure);
         } while (reconfigure);
     }
@@ -556,8 +572,21 @@ static void remove_args(gint *argc, gchar **argv, gint index, gint num)
 
 static void parse_env()
 {
+    const gchar *id;
+
     /* unset this so we don't pass it on unknowingly */
     unsetenv("DESKTOP_STARTUP_ID");
+
+    /* this is how gnome-session passes in a session client id */
+    id = g_getenv("DESKTOP_AUTOSTART_ID");
+    if (id) {
+        unsetenv("DESKTOP_AUTOSTART_ID");
+        if (ob_sm_id) g_free(ob_sm_id);
+        ob_sm_id = g_strdup(id);
+        ob_debug_type(OB_DEBUG_SM,
+                      "DESKTOP_AUTOSTART_ID %s supercedes --sm-client-id\n",
+                      ob_sm_id);
+    }
 }
 
 static void parse_args(gint *argc, gchar **argv)
@@ -714,10 +743,14 @@ Cursor ob_cursor(ObCursor cursor)
     return cursors[cursor];
 }
 
-KeyCode ob_keycode(ObKey key)
+gboolean ob_keycode_match(KeyCode code, ObKey key)
 {
+    KeyCode *k;
+    
     g_assert(key < OB_NUM_KEYS);
-    return keys[key];
+    for (k = keys[key]; *k; ++k)
+        if (*k == code) return TRUE;
+    return FALSE;
 }
 
 ObState ob_state()
This page took 0.027351 seconds and 4 git commands to generate.