Bugfix: Correctly set focus when switching to a workspace with floating clients
This fixes ticket #45
This commit is contained in:
parent
b1eb93326f
commit
fccbdea925
|
@ -585,13 +585,15 @@ void show_workspace(xcb_connection_t *conn, int workspace) {
|
||||||
|
|
||||||
/* Check if we need to change something or if we’re already there */
|
/* Check if we need to change something or if we’re already there */
|
||||||
if (c_ws->screen->current_workspace == (workspace-1)) {
|
if (c_ws->screen->current_workspace == (workspace-1)) {
|
||||||
if (CUR_CELL->currently_focused != NULL) {
|
Client *last_focused = SLIST_FIRST(&(c_ws->focus_stack));
|
||||||
set_focus(conn, CUR_CELL->currently_focused, true);
|
if (last_focused != SLIST_END(&(c_ws->focus_stack))) {
|
||||||
|
set_focus(conn, last_focused, true);
|
||||||
if (need_warp) {
|
if (need_warp) {
|
||||||
client_warp_pointer_into(conn, CUR_CELL->currently_focused);
|
client_warp_pointer_into(conn, last_focused);
|
||||||
xcb_flush(conn);
|
xcb_flush(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -630,10 +632,11 @@ void show_workspace(xcb_connection_t *conn, int workspace) {
|
||||||
ignore_enter_notify_forall(conn, c_ws, false);
|
ignore_enter_notify_forall(conn, c_ws, false);
|
||||||
|
|
||||||
/* Restore focus on the new workspace */
|
/* Restore focus on the new workspace */
|
||||||
if (CUR_CELL->currently_focused != NULL) {
|
Client *last_focused = SLIST_FIRST(&(c_ws->focus_stack));
|
||||||
set_focus(conn, CUR_CELL->currently_focused, true);
|
if (last_focused != SLIST_END(&(c_ws->focus_stack))) {
|
||||||
|
set_focus(conn, last_focused, true);
|
||||||
if (need_warp) {
|
if (need_warp) {
|
||||||
client_warp_pointer_into(conn, CUR_CELL->currently_focused);
|
client_warp_pointer_into(conn, last_focused);
|
||||||
xcb_flush(conn);
|
xcb_flush(conn);
|
||||||
}
|
}
|
||||||
} else xcb_set_input_focus(conn, XCB_INPUT_FOCUS_POINTER_ROOT, root, XCB_CURRENT_TIME);
|
} else xcb_set_input_focus(conn, XCB_INPUT_FOCUS_POINTER_ROOT, root, XCB_CURRENT_TIME);
|
||||||
|
|
Loading…
Reference in New Issue