aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--calmwm.h8
-rw-r--r--client.c4
-rw-r--r--conf.c56
-rw-r--r--xevents.c14
-rw-r--r--xutil.c17
5 files changed, 28 insertions, 71 deletions
diff --git a/calmwm.h b/calmwm.h
index b139795..a2f1e97 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -15,7 +15,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $OpenBSD: calmwm.h,v 1.209 2013/05/22 16:32:15 okan Exp $
+ * $OpenBSD: calmwm.h,v 1.210 2013/05/23 16:52:39 okan Exp $
*/
#ifndef _CALMWM_H_
@@ -435,13 +435,12 @@ void conf_bindname(struct conf *, char *, char *);
void conf_clear(struct conf *);
void conf_client(struct client_ctx *);
void conf_cmd_add(struct conf *, char *, char *);
-void conf_grab(struct conf *, struct keybinding *);
-void conf_grab_mouse(struct client_ctx *);
+void conf_grab_kbd(Window);
+void conf_grab_mouse(Window);
void conf_init(struct conf *);
void conf_ignore(struct conf *, char *);
int conf_mousebind(struct conf *, char *, char *);
void conf_screen(struct screen_ctx *);
-void conf_ungrab(struct conf *, struct keybinding *);
void xev_loop(void);
@@ -453,7 +452,6 @@ int xu_getprop(Window, Atom, Atom, long, u_char **);
int xu_get_wm_state(Window, int *);
int xu_getstrprop(Window, Atom, char **);
void xu_key_grab(Window, u_int, KeySym);
-void xu_key_ungrab(Window, u_int, KeySym);
void xu_ptr_getpos(Window, int *, int *);
int xu_ptr_grab(Window, u_int, Cursor);
int xu_ptr_regrab(u_int, Cursor);
diff --git a/client.c b/client.c
index ae4bb06..cb52c50 100644
--- a/client.c
+++ b/client.c
@@ -15,7 +15,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $OpenBSD: client.c,v 1.132 2013/05/20 21:13:58 okan Exp $
+ * $OpenBSD: client.c,v 1.133 2013/05/23 16:52:39 okan Exp $
*/
#include <sys/param.h>
@@ -213,7 +213,7 @@ client_setactive(struct client_ctx *cc, int fg)
XInstallColormap(X_Dpy, cc->colormap);
XSetInputFocus(X_Dpy, cc->win,
RevertToPointerRoot, CurrentTime);
- conf_grab_mouse(cc);
+ conf_grab_mouse(cc->win);
/*
* If we're in the middle of alt-tabbing, don't change
* the order please.
diff --git a/conf.c b/conf.c
index 8892a50..c0e6314 100644
--- a/conf.c
+++ b/conf.c
@@ -15,7 +15,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $OpenBSD: conf.c,v 1.132 2013/05/22 20:23:21 okan Exp $
+ * $OpenBSD: conf.c,v 1.133 2013/05/23 16:52:39 okan Exp $
*/
#include <sys/param.h>
@@ -98,7 +98,6 @@ static char *color_binds[CWM_COLOR_MAX] = {
void
conf_screen(struct screen_ctx *sc)
{
- struct keybinding *kb;
int i;
XftColor xc;
@@ -141,8 +140,7 @@ conf_screen(struct screen_ctx *sc)
if (sc->xftdraw == NULL)
errx(1, "XftDrawCreate");
- TAILQ_FOREACH(kb, &Conf.keybindingq, entry)
- xu_key_grab(sc->rootwin, kb->modmask, kb->keysym);
+ conf_grab_kbd(sc->rootwin);
}
static struct {
@@ -436,37 +434,6 @@ static struct {
{.i = CWM_TILE_VERT } },
};
-/*
- * The following two functions are used when grabbing and ungrabbing keys for
- * bindings
- */
-
-/*
- * Grab key combination on all screens and add to the global queue
- */
-void
-conf_grab(struct conf *c, struct keybinding *kb)
-{
- extern struct screen_ctx_q Screenq;
- struct screen_ctx *sc;
-
- TAILQ_FOREACH(sc, &Screenq, entry)
- xu_key_grab(sc->rootwin, kb->modmask, kb->keysym);
-}
-
-/*
- * Ungrab key combination from all screens and remove from global queue
- */
-void
-conf_ungrab(struct conf *c, struct keybinding *kb)
-{
- extern struct screen_ctx_q Screenq;
- struct screen_ctx *sc;
-
- TAILQ_FOREACH(sc, &Screenq, entry)
- xu_key_ungrab(sc->rootwin, kb->modmask, kb->keysym);
-}
-
static struct {
char chr;
int mask;
@@ -656,17 +623,26 @@ conf_mouseunbind(struct conf *c, struct mousebinding *unbind)
}
}
-/*
- * Grab the mouse buttons that we need for bindings for this client
- */
void
-conf_grab_mouse(struct client_ctx *cc)
+conf_grab_mouse(Window win)
{
struct mousebinding *mb;
TAILQ_FOREACH(mb, &Conf.mousebindingq, entry) {
if (mb->context != MOUSEBIND_CTX_WIN)
continue;
- xu_btn_grab(cc->win, mb->modmask, mb->button);
+ xu_btn_grab(win, mb->modmask, mb->button);
}
}
+
+void
+conf_grab_kbd(Window win)
+{
+ struct keybinding *kb;
+
+ XUngrabKey(X_Dpy, AnyKey, AnyModifier, win);
+
+ TAILQ_FOREACH(kb, &Conf.keybindingq, entry)
+ xu_key_grab(win, kb->modmask, kb->keysym);
+}
+
diff --git a/xevents.c b/xevents.c
index 65d7628..e9d819e 100644
--- a/xevents.c
+++ b/xevents.c
@@ -15,7 +15,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $OpenBSD: xevents.c,v 1.82 2013/05/21 00:29:20 okan Exp $
+ * $OpenBSD: xevents.c,v 1.83 2013/05/23 16:52:39 okan Exp $
*/
/*
@@ -389,15 +389,13 @@ static void
xev_handle_mappingnotify(XEvent *ee)
{
XMappingEvent *e = &ee->xmapping;
- struct keybinding *kb;
-
- TAILQ_FOREACH(kb, &Conf.keybindingq, entry)
- conf_ungrab(&Conf, kb);
+ struct screen_ctx *sc;
XRefreshKeyboardMapping(e);
-
- TAILQ_FOREACH(kb, &Conf.keybindingq, entry)
- conf_grab(&Conf, kb);
+ if (e->request == MappingKeyboard) {
+ TAILQ_FOREACH(sc, &Screenq, entry)
+ conf_grab_kbd(sc->rootwin);
+ }
}
static void
diff --git a/xutil.c b/xutil.c
index 7872ee9..b610659 100644
--- a/xutil.c
+++ b/xutil.c
@@ -15,7 +15,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $OpenBSD: xutil.c,v 1.66 2013/05/21 00:29:20 okan Exp $
+ * $OpenBSD: xutil.c,v 1.67 2013/05/23 16:52:39 okan Exp $
*/
#include <sys/param.h>
@@ -106,21 +106,6 @@ xu_key_grab(Window win, u_int mask, KeySym keysym)
}
void
-xu_key_ungrab(Window win, u_int mask, KeySym keysym)
-{
- KeyCode code;
- u_int i;
-
- code = XKeysymToKeycode(X_Dpy, keysym);
- if ((XkbKeycodeToKeysym(X_Dpy, code, 0, 0) != keysym) &&
- (XkbKeycodeToKeysym(X_Dpy, code, 0, 1) == keysym))
- mask |= ShiftMask;
-
- for (i = 0; i < nitems(ign_mods); i++)
- XUngrabKey(X_Dpy, code, (mask | ign_mods[i]), win);
-}
-
-void
xu_configure(struct client_ctx *cc)
{
XConfigureEvent ce;