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;
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 */