[prev in list] [next in list] [prev in thread] [next in thread]
List: openbsd-tech
Subject: Re: Fix cwm cycle
From: Alexander Polakov <polachok () gmail ! com>
Date: 2011-12-31 11:41:04
Message-ID: 20111231114104.GA4921 () watashi ! plhk ! ru
[Download RAW message or body]
* Luis Henriques <henrix@camandro.org> [111230 02:21]:
> Hi,
>
> I have been using for a while a hack to fix cwm windows cycle (the traditional
> Alt-Tab). The problem is that I modified the default key binding but the
> code actually expects Alt to be the modifier. The result is that, in some
> situations (e.g., after moving to a new group), the window does not get
> keyboard input until I hit the Alt key.
>
> The code already uses some funny hack to handle this, but this hack does not
> work in my case (I'm using Mod4-Tab). I'm attaching the patch that seems to
> sort this out, but I am not sure if there are any side effects (any x11 expert
> around?).
We should fix the hack, I guess. I see more than one way to do that.
1) dumb: check for Alt, Ctrl and Super(aka Mod4 aka Win) keys release
diff --git a/calmwm.h b/calmwm.h
index 3aaac3e..d03956b 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -202,7 +202,7 @@ struct screen_ctx {
Window menuwin;
struct color color[CWM_COLOR_MAX];
GC gc;
- int altpersist;
+ int cycling;
int xmax;
int ymax;
struct gap gap;
diff --git a/client.c b/client.c
index 428b258..531432d 100644
--- a/client.c
+++ b/client.c
@@ -229,7 +229,7 @@ client_setactive(struct client_ctx *cc, int fg)
* If we're in the middle of alt-tabbing, don't change
* the order please.
*/
- if (!sc->altpersist)
+ if (!sc->cycling)
client_mtf(cc);
} else
client_leave(cc);
@@ -641,7 +641,7 @@ client_cycle(struct screen_ctx *sc, int flags)
}
/* reset when alt is released. XXX I hate this hack */
- sc->altpersist = 1;
+ sc->cycling = 1;
client_ptrsave(oldcc);
client_ptrwarp(newcc);
}
diff --git a/xevents.c b/xevents.c
index 2a3b49c..42feaa0 100644
--- a/xevents.c
+++ b/xevents.c
@@ -318,7 +318,7 @@ xev_handle_keypress(XEvent *ee)
}
/*
- * This is only used for the alt suppression detection.
+ * This is only used for the modifier suppression detection.
*/
static void
xev_handle_keyrelease(XEvent *ee)
@@ -332,10 +332,12 @@ xev_handle_keyrelease(XEvent *ee)
cc = client_current();
keysym = XKeycodeToKeysym(X_Dpy, e->keycode, 0);
- if (keysym != XK_Alt_L && keysym != XK_Alt_R)
+ if ((keysym != XK_Alt_L && keysym != XK_Alt_R) &&
+ (keysym != XK_Super_L && keysym != XK_Super_R) &&
+ (keysym != XK_Control_L && keysym != XK_Control_R))
return;
- sc->altpersist = 0;
+ sc->cycling = 0;
/*
* XXX - better interface... xevents should not know about
2) a little bit smarter: we can extract keybinding search code from
handle_keypress(), search for cycle keybinding and check for their
modifier keys only (I can cook a diff by request).
3) something really smart
Or we can kill the idea of "most recently used goes first".
--
Alexander Polakov | plhk.ru
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic