Bugfix: Don’t change focus after (graphical) resizing
This commit is contained in:
parent
422846e1c5
commit
664e30903c
|
@ -117,4 +117,12 @@ void x_set_i3_atoms();
|
||||||
*/
|
*/
|
||||||
void x_set_warp_to(Rect *rect);
|
void x_set_warp_to(Rect *rect);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Applies the given mask to the event mask of every i3 window decoration X11
|
||||||
|
* window. This is useful to disable EnterNotify while resizing so that focus
|
||||||
|
* is untouched.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void x_mask_event_mask(uint32_t mask);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -58,6 +58,9 @@ int resize_graphical_handler(Con *first, Con *second, orientation_t orientation,
|
||||||
Con *output = con_get_output(first);
|
Con *output = con_get_output(first);
|
||||||
DLOG("x = %d, width = %d\n", output->rect.x, output->rect.width);
|
DLOG("x = %d, width = %d\n", output->rect.x, output->rect.width);
|
||||||
|
|
||||||
|
x_mask_event_mask(~XCB_EVENT_MASK_ENTER_WINDOW);
|
||||||
|
xcb_flush(conn);
|
||||||
|
|
||||||
uint32_t mask = 0;
|
uint32_t mask = 0;
|
||||||
uint32_t values[2];
|
uint32_t values[2];
|
||||||
|
|
||||||
|
|
16
src/x.c
16
src/x.c
|
@ -964,3 +964,19 @@ void x_set_warp_to(Rect *rect)
|
||||||
{
|
{
|
||||||
warp_to = rect;
|
warp_to = rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Applies the given mask to the event mask of every i3 window decoration X11
|
||||||
|
* window. This is useful to disable EnterNotify while resizing so that focus
|
||||||
|
* is untouched.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void x_mask_event_mask(uint32_t mask) {
|
||||||
|
uint32_t values[] = { FRAME_EVENT_MASK & mask };
|
||||||
|
|
||||||
|
con_state *state;
|
||||||
|
CIRCLEQ_FOREACH_REVERSE(state, &state_head, state) {
|
||||||
|
if (state->mapped)
|
||||||
|
xcb_change_window_attributes(conn, state->id, XCB_CW_EVENT_MASK, values);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue