g_message with variable
[mikachu/openbox.git] / openbox / openbox.c
index 4a49c80..12fb2f6 100644 (file)
@@ -104,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;
@@ -175,6 +175,8 @@ gint main(gint argc, gchar **argv)
     ob_main_loop_signal_add(ob_main_loop, SIGHUP, signal_handler, NULL, NULL);
     ob_main_loop_signal_add(ob_main_loop, SIGPIPE, signal_handler, NULL, NULL);
     ob_main_loop_signal_add(ob_main_loop, SIGCHLD, signal_handler, NULL, NULL);
+    ob_main_loop_signal_add(ob_main_loop, SIGTTIN, signal_handler, NULL,NULL);
+    ob_main_loop_signal_add(ob_main_loop, SIGTTOU, signal_handler, NULL,NULL);
 
     ob_screen = DefaultScreen(ob_display);
 
@@ -239,6 +241,8 @@ gint main(gint argc, gchar **argv)
             keys[OB_KEY_DOWN] = modkeys_sym_to_code(XK_Down);
             keys[OB_KEY_TAB] = modkeys_sym_to_code(XK_Tab);
             keys[OB_KEY_SPACE] = modkeys_sym_to_code(XK_space);
+            keys[OB_KEY_HOME] = modkeys_sym_to_code(XK_Home);
+            keys[OB_KEY_END] = modkeys_sym_to_code(XK_End);
 
             {
                 ObParseInst *i;
@@ -417,6 +421,19 @@ 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]);
+            g_free(keys[OB_KEY_HOME]);
+            g_free(keys[OB_KEY_END]);
+
             modkeys_shutdown(reconfigure);
         } while (reconfigure);
     }
@@ -505,6 +522,10 @@ static void signal_handler(gint signal, gpointer data)
         /* reap children */
         while (waitpid(-1, NULL, WNOHANG) > 0);
         break;
+    case SIGTTIN:
+    case SIGTTOU:
+        ob_debug("Caught signal %d. Ignoring.", signal);
+        break;
     default:
         ob_debug("Caught signal %d. Exiting.\n", signal);
         /* TERM and INT return a 0 code */
@@ -512,7 +533,7 @@ static void signal_handler(gint signal, gpointer data)
     }
 }
 
-static void print_version()
+static void print_version(void)
 {
     g_print("Openbox %s\n", PACKAGE_VERSION);
     g_print(_("Copyright (c)"));
@@ -524,7 +545,7 @@ static void print_version()
     g_print("under certain conditions. See the file COPYING for details.\n\n");
 }
 
-static void print_help()
+static void print_help(void)
 {
     g_print(_("Syntax: openbox [options]\n"));
     g_print(_("\nOptions:\n"));
@@ -559,10 +580,23 @@ static void remove_args(gint *argc, gchar **argv, gint index, gint num)
     *argc -= num;
 }
 
-static void parse_env()
+static void parse_env(void)
 {
+    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)
@@ -677,7 +711,7 @@ static Cursor load_cursor(const gchar *name, guint fontval)
 
 void ob_exit_with_error(const gchar *msg)
 {
-    g_message(msg);
+    g_message("%s", msg);
     session_shutdown(TRUE);
     exit(EXIT_FAILURE);
 }
@@ -688,13 +722,13 @@ void ob_restart_other(const gchar *path)
     ob_restart();
 }
 
-void ob_restart()
+void ob_restart(void)
 {
     restart = TRUE;
     ob_exit(0);
 }
 
-void ob_reconfigure()
+void ob_reconfigure(void)
 {
     reconfigure = TRUE;
     ob_exit(0);
@@ -706,7 +740,7 @@ void ob_exit(gint code)
     ob_main_loop_exit(ob_main_loop);
 }
 
-void ob_exit_replace()
+void ob_exit_replace(void)
 {
     exitcode = 0;
     being_replaced = TRUE;
@@ -719,13 +753,17 @@ 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()
+ObState ob_state(void)
 {
     return state;
 }