void update_keys(void) { Key *k; char *l, *p; numlock_mask = numlockmask(); valid_mask = 0xff & ~(numlock_mask | LockMask); while((k = key)) { key = key->lnext; ungrabkey(k); freekey(k); } for(l = p = def.keys; p && *p; p++) { if(*p == '\n') { *p = 0; if((k = getkey(l))) grabkey(k); *p = '\n'; l = p + 1; } } if(l < p && strlen(l)) { if((k = getkey(l))) grabkey(k); } }
void client_select_events(struct WM_t *W, struct wmclient *C) { XSelectInput(W->XDisplay, C->win, StructureNotifyMask); /* Grab ALT+click events for moving windows */ XGrabButton(W->XDisplay, Button1, Mod1Mask, C->win, 0, ButtonPressMask | ButtonReleaseMask | ButtonMotionMask, GrabModeAsync, GrabModeSync, None, None); /* Grab Shift+alt+click events for moving windows */ XGrabButton(W->XDisplay, Button1, Mod1Mask | ShiftMask, C->win, 0, ButtonPressMask | ButtonReleaseMask | ButtonMotionMask, GrabModeAsync, GrabModeSync, None, None); /* Grab for any click so if it is clicked on it can be refocused */ XGrabButton(W->XDisplay, Button1, 0, C->win, 0, ButtonPressMask, GrabModeAsync, GrabModeSync, None, None); /* Alt-Tab */ grabkey(W, C, XK_Tab, Mod1Mask); /* Shift-alt-enter for menu */ grabkey(W, C, XK_Return, ShiftMask | Mod1Mask); /* Shift-alt-F for fullscreen */ grabkey(W, C, XK_f, ShiftMask | Mod1Mask); /* Shift-alt-arrows for tiling */ grabkey(W, C, XK_Up, ShiftMask | Mod1Mask); grabkey(W, C, XK_Down, ShiftMask | Mod1Mask); grabkey(W, C, XK_Left, ShiftMask | Mod1Mask); grabkey(W, C, XK_Right, ShiftMask | Mod1Mask); }
void setup() { int i, j; struct config *c; XSetWindowAttributes wattr; XModifierKeymap *modmap; xerrorxlib = XSetErrorHandler(handle_xerror); dpy = XOpenDisplay(NULL); root = DefaultRootWindow(dpy); screen = DefaultScreen(dpy); visual = DefaultVisual(dpy, screen); cmap = DefaultColormap(dpy, screen); gc = DefaultGC(dpy, screen); sw = DisplayWidth(dpy, screen); sh = DisplayHeight(dpy, screen); wattr.override_redirect = True; wattr.background_pixel = bgcol.pixel; wattr.border_pixel = fgcol.pixel; win = XCreateWindow(dpy, root, 0, 0, ww, wh, bw, CopyFromParent, InputOutput, CopyFromParent, CWOverrideRedirect | CWBackPixel | CWBorderPixel, &wattr); /* Grab keys */ /* modifier stuff taken from evilwm */ modmap = XGetModifierMapping(dpy); for (i = 0; i < 8; i++) { for (j = 0; j < modmap->max_keypermod; j++) { if (modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock)) { numlockmask = (1 << i); } } } for(c=config; c; c=c->next) grabkey(c->mod, c->key); XSelectInput(dpy, root, KeyPressMask | SubstructureNotifyMask); XSelectInput(dpy, win, ButtonPressMask); setup_font(&fontbig, fontstrbig); setup_font(&fontsmall, fontstrsmall); getcolor(fgcolor, &fgcol); getcolor(bgcolor, &bgcol); getcolor(errcolor, &errcol); NetWMWindowOpacity = XInternAtom(dpy, "_NET_WM_WINDOW_OPACITY", False); if(opacity > 1.0 || opacity < 0.0) opacity = 0.0; unsigned long real_opacity[] = { opacity * 0xffffffff }; XChangeProperty(dpy, win, NetWMWindowOpacity, XA_CARDINAL, 32, PropModeReplace, (unsigned char *)real_opacity, 1); draw = XftDrawCreate(dpy, win, visual, cmap); signal(SIGALRM, sigalrm); signal(SIGCHLD, sigchld); }