X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fcommands.c;h=2d8155f276a162494db56b6ce416566875b2861a;hb=479679807473d2c41b870f31b2f28b5a884157ab;hp=273f9d39c238052dd1e95b296ecce2dd794d1ad5;hpb=f7a1a9fb20b793a32dacdc8ca319952be31ace60;p=i3%2Fi3 diff --git a/src/commands.c b/src/commands.c index 273f9d39..2d8155f2 100644 --- a/src/commands.c +++ b/src/commands.c @@ -600,12 +600,30 @@ static void move_floating_window_to_workspace(xcb_connection_t *conn, Client *cl xcb_flush(conn); } + /* Configure the window above all tiling windows (or below a fullscreen + * window, if any) */ + if (t_ws->fullscreen_client != NULL) { + uint32_t values[] = { t_ws->fullscreen_client->frame, XCB_STACK_MODE_BELOW }; + xcb_configure_window(conn, client->frame, XCB_CONFIG_WINDOW_SIBLING | XCB_CONFIG_WINDOW_STACK_MODE, values); + } else { + Client *last_tiling; + SLIST_FOREACH(last_tiling, &(t_ws->focus_stack), focus_clients) + if (!client_is_floating(last_tiling)) + break; + if (last_tiling != SLIST_END(&(t_ws->focus_stack))) { + uint32_t values[] = { last_tiling->frame, XCB_STACK_MODE_ABOVE }; + xcb_configure_window(conn, client->frame, XCB_CONFIG_WINDOW_SIBLING | XCB_CONFIG_WINDOW_STACK_MODE, values); + } + } + DLOG("done\n"); render_layout(conn); - if (workspace_is_visible(t_ws)) + if (workspace_is_visible(t_ws)) { + client_warp_pointer_into(conn, client); set_focus(conn, client, true); + } } /* @@ -703,6 +721,7 @@ static void jump_to_window(xcb_connection_t *conn, const char *arguments) { } free(classtitle); + workspace_show(conn, client->workspace->num + 1); set_focus(conn, client, true); } @@ -1023,6 +1042,9 @@ void parse_command(xcb_connection_t *conn, const char *command) { /* Is it a ? */ if (STARTS_WITH(command, "reload")) { load_configuration(conn, NULL, true); + render_layout(conn); + /* Send an IPC event just in case the ws names have changed */ + ipc_send_event("workspace", I3_IPC_EVENT_WORKSPACE, "{\"change\":\"reload\"}"); return; } @@ -1149,6 +1171,9 @@ void parse_command(xcb_connection_t *conn, const char *command) { Workspace *ws = last_focused->workspace; + if (last_focused->fullscreen) + client_leave_fullscreen(conn, last_focused); + toggle_floating_mode(conn, last_focused, false); /* delete all empty columns/rows */ cleanup_table(conn, ws);