mirror of
https://github.com/leahneukirchen/cwm.git
synced 2023-08-10 21:13:12 +03:00
alter conf_grab(_kbd) to first ungrab AnyKey/AnyModifier, then proceed
to grab keys in keybindingq. we don't need to ungrab/grab on every addition to the queue, just once with a complete keybindingq; simplify grabbing keys per screen (during init) and during a MappingNotify. while here, change conf_grab_{kbd,mouse} to require only a Window.
This commit is contained in:
54
conf.c
54
conf.c
@ -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);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user