dont cause focus change with enter events when youre already in the window
This commit is contained in:
parent
d19c184b2d
commit
79cd7b4b2c
2 changed files with 13 additions and 5 deletions
|
@ -761,9 +761,9 @@ static void event_handle_client(ObClient *client, XEvent *e)
|
||||||
if (keyboard_interactively_grabbed())
|
if (keyboard_interactively_grabbed())
|
||||||
break;
|
break;
|
||||||
if (config_focus_follow && config_focus_delay &&
|
if (config_focus_follow && config_focus_delay &&
|
||||||
/* leaveinferior events can happen when the mouse goes onto the
|
/* leave inferior events can happen when the mouse goes onto
|
||||||
window's border and then into the window before the delay
|
the window's border and then into the window before the
|
||||||
is up */
|
delay is up */
|
||||||
e->xcrossing.detail != NotifyInferior)
|
e->xcrossing.detail != NotifyInferior)
|
||||||
{
|
{
|
||||||
ob_main_loop_timeout_remove_data(ob_main_loop,
|
ob_main_loop_timeout_remove_data(ob_main_loop,
|
||||||
|
@ -810,7 +810,9 @@ static void event_handle_client(ObClient *client, XEvent *e)
|
||||||
if (keyboard_interactively_grabbed())
|
if (keyboard_interactively_grabbed())
|
||||||
break;
|
break;
|
||||||
if (e->xcrossing.mode == NotifyGrab ||
|
if (e->xcrossing.mode == NotifyGrab ||
|
||||||
e->xcrossing.mode == NotifyUngrab)
|
e->xcrossing.mode == NotifyUngrab ||
|
||||||
|
/*ignore enters when we're already in the window */
|
||||||
|
e->xcrossing.detail == NotifyInferior)
|
||||||
{
|
{
|
||||||
ob_debug_type(OB_DEBUG_FOCUS,
|
ob_debug_type(OB_DEBUG_FOCUS,
|
||||||
"%sNotify mode %d detail %d on %lx IGNORED\n",
|
"%sNotify mode %d detail %d on %lx IGNORED\n",
|
||||||
|
|
|
@ -36,6 +36,12 @@
|
||||||
#define ELEMENT_EVENTMASK (ButtonPressMask | ButtonReleaseMask | \
|
#define ELEMENT_EVENTMASK (ButtonPressMask | ButtonReleaseMask | \
|
||||||
ButtonMotionMask | \
|
ButtonMotionMask | \
|
||||||
EnterWindowMask | LeaveWindowMask)
|
EnterWindowMask | LeaveWindowMask)
|
||||||
|
/* The inner window does not need enter/leave events.
|
||||||
|
If it does get them, then it needs its own context for enter events
|
||||||
|
because sloppy focus will focus the window when you enter the inner window
|
||||||
|
from the frame. */
|
||||||
|
#define INNER_EVENTMASK (ButtonPressMask | ButtonReleaseMask | \
|
||||||
|
ButtonMotionMask)
|
||||||
|
|
||||||
#define FRAME_HANDLE_Y(f) (f->innersize.top + f->client->area.height + \
|
#define FRAME_HANDLE_Y(f) (f->innersize.top + f->client->area.height + \
|
||||||
f->cbwidth_y)
|
f->cbwidth_y)
|
||||||
|
@ -100,7 +106,7 @@ ObFrame *frame_new(ObClient *client)
|
||||||
self->window = createWindow(RootWindow(ob_display, ob_screen), visual,
|
self->window = createWindow(RootWindow(ob_display, ob_screen), visual,
|
||||||
mask, &attrib);
|
mask, &attrib);
|
||||||
|
|
||||||
attrib.event_mask = ELEMENT_EVENTMASK;
|
attrib.event_mask = INNER_EVENTMASK;
|
||||||
self->inner = createWindow(self->window, visual, mask, &attrib);
|
self->inner = createWindow(self->window, visual, mask, &attrib);
|
||||||
|
|
||||||
mask &= ~CWEventMask;
|
mask &= ~CWEventMask;
|
||||||
|
|
Loading…
Reference in a new issue