summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-04-24 20:39:59 +0000
committerDana Jansens <danakj@orodu.net>2007-04-24 20:39:59 +0000
commit79cd7b4b2c21c975c441831760708d4919208f6d (patch)
tree7a911bad498b0123886cd9727d1f01d296d1c53a /openbox
parentd19c184b2d83e3f129a085dee721d3fd22b003f1 (diff)
dont cause focus change with enter events when youre already in the window
Diffstat (limited to 'openbox')
-rw-r--r--openbox/event.c10
-rw-r--r--openbox/frame.c8
2 files changed, 13 insertions, 5 deletions
diff --git a/openbox/event.c b/openbox/event.c
index 2d807aae..c3fab03e 100644
--- a/openbox/event.c
+++ b/openbox/event.c
@@ -761,9 +761,9 @@ static void event_handle_client(ObClient *client, XEvent *e)
if (keyboard_interactively_grabbed())
break;
if (config_focus_follow && config_focus_delay &&
- /* leaveinferior events can happen when the mouse goes onto the
- window's border and then into the window before the delay
- is up */
+ /* leave inferior events can happen when the mouse goes onto
+ the window's border and then into the window before the
+ delay is up */
e->xcrossing.detail != NotifyInferior)
{
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())
break;
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,
"%sNotify mode %d detail %d on %lx IGNORED\n",
diff --git a/openbox/frame.c b/openbox/frame.c
index eb223f64..cdacf101 100644
--- a/openbox/frame.c
+++ b/openbox/frame.c
@@ -36,6 +36,12 @@
#define ELEMENT_EVENTMASK (ButtonPressMask | ButtonReleaseMask | \
ButtonMotionMask | \
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 + \
f->cbwidth_y)
@@ -100,7 +106,7 @@ ObFrame *frame_new(ObClient *client)
self->window = createWindow(RootWindow(ob_display, ob_screen), visual,
mask, &attrib);
- attrib.event_mask = ELEMENT_EVENTMASK;
+ attrib.event_mask = INNER_EVENTMASK;
self->inner = createWindow(self->window, visual, mask, &attrib);
mask &= ~CWEventMask;