summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2008-03-02 15:37:07 -0500
committerDana Jansens <danakj@orodu.net>2008-03-02 15:40:11 -0500
commit7ea56abf05b9e6cd4e806dbfa1146562378edc7b (patch)
tree8875e2fdc795cd3c291fba0b06f3ba94d196acf4 /openbox
parent8562034e30e8b319a746009859cbefc1f41b41f5 (diff)
add a RECONFIGURING state, and enter that when doing reconfiguring
Diffstat (limited to 'openbox')
-rw-r--r--openbox/event.c2
-rw-r--r--openbox/misc.h3
-rw-r--r--openbox/openbox.c12
-rw-r--r--openbox/openbox.h1
-rw-r--r--openbox/screen.c2
5 files changed, 15 insertions, 5 deletions
diff --git a/openbox/event.c b/openbox/event.c
index 5c4700ae..a7f65fcb 100644
--- a/openbox/event.c
+++ b/openbox/event.c
@@ -652,9 +652,11 @@ static void event_process(const XEvent *ec, gpointer data)
/* keyboard layout changes for modifier mapping changes. reload the
modifier map, and rebind all the key bindings as appropriate */
ob_debug("Kepboard map changed. Reloading keyboard bindings.\n");
+ ob_set_state(OB_STATE_RECONFIGURING);
modkeys_shutdown(TRUE);
modkeys_startup(TRUE);
keyboard_rebind();
+ ob_set_state(OB_STATE_RUNNING);
}
else if (e->type == ClientMessage) {
/* This is for _NET_WM_REQUEST_FRAME_EXTENTS messages. They come for
diff --git a/openbox/misc.h b/openbox/misc.h
index c73c9265..c1ec4075 100644
--- a/openbox/misc.h
+++ b/openbox/misc.h
@@ -60,7 +60,8 @@ typedef enum
{
OB_STATE_STARTING,
OB_STATE_RUNNING,
- OB_STATE_EXITING
+ OB_STATE_EXITING,
+ OB_STATE_RECONFIGURING
} ObState;
typedef enum
diff --git a/openbox/openbox.c b/openbox/openbox.c
index fb1e75d0..eb7934e0 100644
--- a/openbox/openbox.c
+++ b/openbox/openbox.c
@@ -121,7 +121,7 @@ gint main(gint argc, gchar **argv)
{
gchar *program_name;
- state = OB_STATE_STARTING;
+ ob_set_state(OB_STATE_STARTING);
/* initialize the locale */
if (!setlocale(LC_ALL, ""))
@@ -367,9 +367,10 @@ gint main(gint argc, gchar **argv)
reconfigure = FALSE;
- state = OB_STATE_RUNNING;
+ ob_set_state(OB_STATE_RUNNING);
ob_main_loop_run(ob_main_loop);
- state = OB_STATE_EXITING;
+ ob_set_state(reconfigure ?
+ OB_STATE_RECONFIGURING : OB_STATE_EXITING);
if (!reconfigure) {
dock_remove_all();
@@ -709,3 +710,8 @@ ObState ob_state()
{
return state;
}
+
+void ob_set_state(ObState s)
+{
+ state = s;
+}
diff --git a/openbox/openbox.h b/openbox/openbox.h
index 4f2310f8..06d38297 100644
--- a/openbox/openbox.h
+++ b/openbox/openbox.h
@@ -52,6 +52,7 @@ extern gboolean ob_debug_xinerama;
/* The state of execution of the window manager */
ObState ob_state();
+void ob_set_state(ObState state);
void ob_restart_other(const gchar *path);
void ob_restart();
diff --git a/openbox/screen.c b/openbox/screen.c
index 2e48f85c..15b3c8d8 100644
--- a/openbox/screen.c
+++ b/openbox/screen.c
@@ -492,7 +492,7 @@ void screen_resize(void)
PROP_SETA32(RootWindow(ob_display, ob_screen),
net_desktop_geometry, cardinal, geometry, 2);
- if (ob_state() == OB_STATE_STARTING)
+ if (ob_state() != OB_STATE_RUNNING)
return;
screen_update_areas();