X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fclick.c;h=5eedd00041f250b978798649bc8cf503dbbcb0f8;hb=71ccb4bef2850bd5beab8a4ef4669bf53b5a9781;hp=a1da00ac90296758e4deafa32ca8be1bc0467da5;hpb=2252b4f5b956551ad4844deabee0ab38ccc73c99;p=i3%2Fi3 diff --git a/src/click.c b/src/click.c index a1da00ac..5eedd000 100644 --- a/src/click.c +++ b/src/click.c @@ -179,6 +179,22 @@ static int route_click(Con *con, xcb_button_press_event_t *event, const bool mod DLOG("--> OUTCOME = %p\n", con); DLOG("type = %d, name = %s\n", con->type, con->name); + /* Any click in a workspace should focus that workspace. If the + * workspace is on another output we need to do a workspace_show in + * order for i3bar (and others) to notice the change in workspace. */ + Con *ws = con_get_workspace(con); + Con *focused_workspace = con_get_workspace(focused); + + if (!ws) { + ws = TAILQ_FIRST(&(output_get_content(con_get_output(con))->focus_head)); + if (!ws) + goto done; + } + + if (ws != focused_workspace) + workspace_show(ws); + focused_id = XCB_NONE; + /* don’t handle dockarea cons, they must not be focused */ if (con->parent->type == CT_DOCKAREA) goto done; @@ -207,21 +223,13 @@ static int route_click(Con *con, xcb_button_press_event_t *event, const bool mod goto done; } - /* 2: focus this con. If the workspace is on another output we need to - * do a workspace_show in order for i3bar (and others) to notice the - * change in workspace. */ - Con *ws = con_get_workspace(con); - Con *focused_workspace = con_get_workspace(focused); - - if (ws != focused_workspace) - workspace_show(ws); - focused_id = XCB_NONE; + /* 2: focus this con. */ con_focus(con); /* 3: For floating containers, we also want to raise them on click. * We will skip handling events on floating cons in fullscreen mode */ Con *fs = (ws ? con_get_fullscreen_con(ws, CF_OUTPUT) : NULL); - if (floatingcon != NULL && fs == NULL) { + if (floatingcon != NULL && fs != con) { floating_raise_con(floatingcon); /* 4: floating_modifier plus left mouse button drags */