X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fmanage.c;h=06f4e664338f736dceca5034a1486c64cea13951;hb=6e5e2fe5ee7ea92c93207b8f5ff5f8b674d7a72e;hp=b14f73e8f36a420b268bb022aae19fcbab403017;hpb=c367eaa369c3fbea1964d858298e7aba35facc39;p=i3%2Fi3 diff --git a/src/manage.c b/src/manage.c index b14f73e8..06f4e664 100644 --- a/src/manage.c +++ b/src/manage.c @@ -272,12 +272,20 @@ 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 == NULL) + t_out = c_ws->output; + 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 +408,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 */