Bugfix: Don’t warp the pointer if it already is on the target output (Thanks cls, pnutzh4x0r)
My testcase was putting a floating window on the left output, but overlapping a little to the right output. Then switch to a workspace on the right output.
This commit is contained in:
parent
18129cf0b0
commit
755c618cd4
19
src/x.c
19
src/x.c
|
@ -759,6 +759,12 @@ static void x_push_node_unmaps(Con *con) {
|
|||
*/
|
||||
void x_push_changes(Con *con) {
|
||||
con_state *state;
|
||||
xcb_query_pointer_cookie_t pointercookie;
|
||||
|
||||
/* If we need to warp later, we request the pointer position as soon as possible */
|
||||
if (warp_to) {
|
||||
pointercookie = xcb_query_pointer(conn, root);
|
||||
}
|
||||
|
||||
DLOG("-- PUSHING WINDOW STACK --\n");
|
||||
//DLOG("Disabling EnterNotify\n");
|
||||
|
@ -868,7 +874,18 @@ void x_push_changes(Con *con) {
|
|||
}
|
||||
|
||||
if (warp_to) {
|
||||
xcb_warp_pointer_rect(conn, warp_to);
|
||||
xcb_query_pointer_reply_t *pointerreply = xcb_query_pointer_reply(conn, pointercookie, NULL);
|
||||
if (!pointerreply) {
|
||||
ELOG("Could not query pointer position, not warping pointer\n");
|
||||
} else {
|
||||
int mid_x = warp_to->x + (warp_to->width / 2);
|
||||
int mid_y = warp_to->y + (warp_to->height / 2);
|
||||
|
||||
Output *current = get_output_containing(pointerreply->root_x, pointerreply->root_y);
|
||||
Output *target = get_output_containing(mid_x, mid_y);
|
||||
if (current != target)
|
||||
xcb_warp_pointer(conn, XCB_NONE, root, 0, 0, 0, 0, mid_x, mid_y);
|
||||
}
|
||||
warp_to = NULL;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue