]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Insert windows at correct position/set focus correctly when moving between...
authorMichael Stapelberg <michael+x200@stapelberg.de>
Sun, 3 May 2009 14:24:12 +0000 (16:24 +0200)
committerMichael Stapelberg <michael+x200@stapelberg.de>
Sun, 3 May 2009 14:24:12 +0000 (16:24 +0200)
debian/changelog
src/commands.c
src/handlers.c

index d5f767d0c9ef5b1297a0e0414ff229bfe7adec9d..16c5af8ff7f453031690c099c2cce3966f3af9e5 100644 (file)
@@ -31,6 +31,9 @@ i3-wm (3.a-bf1-1) unstable; urgency=low
   * Bugfix: Correctly restore focus when leaving fullscreen mode
   * Bugfix: Re-distribute free space when closing customly resized containers,
     re-evaluate for other containers
+  * Bugfix: When moving windows into different containers, insert them at the
+    correct position.
+  * Bugfix: Correctly set focus when moving windows into other containers
   * Implement scrolling on stack windows and on the bottom bar.
   * Create i3-wm-dbg with debug symbols
   * Don't rely on libxcb-wm any longer, as it got removed in libxcb 0.3.4.
index f3e31a3a349c68ab7e07a1c0b987f8f9e56a2ffe..09c21b3488e23861df77c391700118451d6340ae 100644 (file)
@@ -221,7 +221,10 @@ static void move_current_window(xcb_connection_t *conn, direction_t direction) {
 
         /* Remove it from the old container and put it into the new one */
         remove_client_from_container(conn, current_client, container);
-        CIRCLEQ_INSERT_TAIL(&(new->clients), current_client, clients);
+
+        if (new->currently_focused != NULL)
+                CIRCLEQ_INSERT_AFTER(&(new->clients), new->currently_focused, current_client, clients);
+        else CIRCLEQ_INSERT_TAIL(&(new->clients), current_client, clients);
         SLIST_INSERT_HEAD(&(new->workspace->focus_stack), current_client, focus_clients);
 
         /* Update data structures */
index 1113b82656a0714ddede36fda7c303b3ee02fc0c..d2eec97811f9245b15aa30923b36ca0cfcfa0b19 100644 (file)
@@ -589,6 +589,9 @@ int handle_configure_event(void *prophs, xcb_connection_t *conn, xcb_configure_n
         LOG("handle_configure_event for window %08x\n", event->window);
         LOG("event->type = %d, \n", event->response_type);
         LOG("event->x = %d, ->y = %d, ->width = %d, ->height = %d\n", event->x, event->y, event->width, event->height);
+
+        /* We ignore this sequence twice because events for child and frame should be ignored */
+        add_ignore_event(event->sequence);
         add_ignore_event(event->sequence);
 
         if (event->event == root) {