summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-03-20 22:44:14 +0000
committerDana Jansens <danakj@orodu.net>2003-03-20 22:44:14 +0000
commit4f427471b862f2f547981878b1d088ac52929936 (patch)
treed829633b7d763dd8206e3f3af5848b4ce44e4487 /plugins
parente8ed8b3c2aa4304e218cce094b1aebe9368357fb (diff)
kill all enter events on a desktop switch
Diffstat (limited to 'plugins')
-rw-r--r--plugins/focus.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/plugins/focus.c b/plugins/focus.c
index 43f0ae8e..a00a0e93 100644
--- a/plugins/focus.c
+++ b/plugins/focus.c
@@ -46,18 +46,25 @@ static void focus_fallback(gboolean switching_desks)
XEvent e;
Client *c = it->data;
- /* skip the next enter event from the desktop switch so focus
+ /* XXX... not anymore
+ skip the next enter event from the desktop switch so focus
doesn't skip briefly to what was under the pointer */
- if (XCheckTypedEvent(ob_display, EnterNotify, &e)) {
- XPutBackEvent(ob_display, &e);
+
+ /* kill all enter events from prior to the desktop switch, we
+ aren't interested in them if we have found our own target
+ to focus.
+ XXX this is rude to other plugins...can this be done
+ better? count the events in the queue? */
+ while (XCheckTypedEvent(ob_display, EnterNotify, &e));
+/* XPutBackEvent(ob_display, &e);
+ g_message("skip");
++skip_enter;
- }
+ }*/
/* I have to do this warp twice! Otherwise windows dont get
Enter/Leave events when i warp on a desktop switch! */
XWarpPointer(ob_display, None, c->window, 0, 0, 0, 0,
c->area.width / 2, c->area.height / 2);
- ++skip_enter;
XWarpPointer(ob_display, None, c->window, 0, 0, 0, 0,
c->area.width / 2, c->area.height / 2);
}
@@ -93,10 +100,17 @@ static void events(ObEvent *e, void *foo)
break;
case Event_X_EnterNotify:
- if (skip_enter)
+ if (skip_enter) {
+ if (e->data.x.client != NULL)
+ g_message("skipped enter %lx", e->data.x.client->window);
+ else
+ g_message("skipped enter 'root'");
--skip_enter;
- else if (e->data.x.client && client_normal(e->data.x.client))
+ }
+ else if (e->data.x.client != NULL && client_normal(e->data.x.client)) {
+ g_message("enter %lx", e->data.x.client->window);
client_focus(e->data.x.client);
+ }
break;
default: