summaryrefslogtreecommitdiff
path: root/root.c
diff options
context:
space:
mode:
Diffstat (limited to 'root.c')
-rw-r--r--root.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/root.c b/root.c
index 6f468c3..14ece34 100644
--- a/root.c
+++ b/root.c
@@ -129,11 +129,18 @@ static void root_destroy_notify( struct gwm_window *window,
static void root_reparent_notify( struct gwm_window *window,
xcb_reparent_notify_event_t *ev ) {
- if( ev->parent == window->w )
- stack_insert_above( &window_stack, ev->window,
- stack_lookup( &window_stack, window->w |
- STACK_END )->lower_window );
- else
+ if( ev->parent == window->w ) {
+ /* It's possible to reparent a window to its current parent,
+ so we can't assume the window is not already in the stack. */
+ if( stack_lookup( &window_stack, ev->window ) )
+ stack_move_above( &window_stack, ev->window,
+ stack_lookup( &window_stack, window->w |
+ STACK_END )->lower_window );
+ else
+ stack_insert_above( &window_stack, ev->window,
+ stack_lookup( &window_stack, window->w |
+ STACK_END )->lower_window );
+ } else
stack_remove( &window_stack, ev->window );
}