dont cause focus change with enter events when youre already in the window

This commit is contained in:
Dana Jansens 2007-04-24 20:39:59 +00:00
parent d19c184b2d
commit 79cd7b4b2c
2 changed files with 13 additions and 5 deletions

View file

@ -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",

View file

@ -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;