]> git.sur5r.net Git - i3/i3/blobdiff - src/manage.c
ipc: also send workspace event when initializing a workspace for an output
[i3/i3] / src / manage.c
index b14f73e8f36a420b268bb022aae19fcbab403017..10cf74c7eb612279a738dd46d68633a30c85edcf 100644 (file)
@@ -272,12 +272,18 @@ void reparent_window(xcb_connection_t *conn, xcb_window_t child,
                 for (int i = 0; i < xcb_get_property_value_length(preply); i++)
                         if (atom[i] == atoms[_NET_WM_WINDOW_TYPE_DOCK]) {
                                 DLOG("Window is a dock.\n");
+                                Output *t_out = get_output_containing(x, y);
+                                if (t_out != c_ws->output) {
+                                        DLOG("Dock client requested to be on output %s by geometry (%d, %d)\n",
+                                                        t_out->name, x, y);
+                                        new->workspace = t_out->current_workspace;
+                                }
                                 new->dock = true;
                                 new->borderless = true;
                                 new->titlebar_position = TITLEBAR_OFF;
                                 new->force_reconfigure = true;
                                 new->container = NULL;
-                                SLIST_INSERT_HEAD(&(c_ws->output->dock_clients), new, dock_clients);
+                                SLIST_INSERT_HEAD(&(t_out->dock_clients), new, dock_clients);
                                 /* If it’s a dock we can’t make it float, so we break */
                                 new->floating = FLOATING_AUTO_OFF;
                                 break;
@@ -400,9 +406,15 @@ void reparent_window(xcb_connection_t *conn, xcb_window_t child,
         if (new->workspace->fullscreen_client != NULL) {
                 DLOG("Setting below fullscreen window\n");
 
-                /* If we are in fullscreen, we should lower the window to not be annoying */
-                uint32_t values[] = { XCB_STACK_MODE_BELOW };
-                xcb_configure_window(conn, new->frame, XCB_CONFIG_WINDOW_STACK_MODE, values);
+                /* If we are in fullscreen, we should place the window below
+                 * the fullscreen window to not be annoying */
+                uint32_t values[] = {
+                        new->workspace->fullscreen_client->frame,
+                        XCB_STACK_MODE_BELOW
+                };
+                xcb_configure_window(conn, new->frame,
+                                     XCB_CONFIG_WINDOW_SIBLING |
+                                     XCB_CONFIG_WINDOW_STACK_MODE, values);
         }
 
         /* Insert into the currently active container, if it’s not a dock window */