- wm_proto, wm_focus, net_strut, natoms
+ WM_PROTO, WM_FOCUS, NET_STRUT, NATOMS
- clr_focus, clr_unfocus, clr_urgent, ncolors
+ CLR_FOCUS, CLR_UNFOCUS, CLR_URGENT, NCOLORS
-static keymap_t key2sym[] = {
- {key_left , XK_Left },
- {key_right , XK_Right},
- {key_up , XK_Up },
- {key_down , XK_Down },
- {key_home , XK_Home },
- {key_end , XK_End },
- {key_pageup , XK_Prior},
- {key_pagedown, XK_Next },
- {key_f1 , XK_F1 },
- {key_f2 , XK_F2 },
- {key_f3 , XK_F3 },
- {key_f4 , XK_F4 },
- {key_f5 , XK_F5 },
- {key_f6 , XK_F6 },
- {key_f7 , XK_F7 },
- {key_f8 , XK_F8 },
- {key_f9 , XK_F9 },
- {key_f10 , XK_F10 },
- {key_f11 , XK_F11 },
- {key_f12 , XK_F12 },
+static event_map_t ev2sym[] = {
+ {EV_LEFT , XK_Left },
+ {EV_RIGHT , XK_Right},
+ {EV_UP , XK_Up },
+ {EV_DOWN , XK_Down },
+ {EV_HOME , XK_Home },
+ {EV_END , XK_End },
+ {EV_PAGEUP , XK_Prior},
+ {EV_PAGEDOWN, XK_Next },
+ {EV_F1 , XK_F1 },
+ {EV_F2 , XK_F2 },
+ {EV_F3 , XK_F3 },
+ {EV_F4 , XK_F4 },
+ {EV_F5 , XK_F5 },
+ {EV_F6 , XK_F6 },
+ {EV_F7 , XK_F7 },
+ {EV_F8 , XK_F8 },
+ {EV_F9 , XK_F9 },
+ {EV_F10 , XK_F10 },
+ {EV_F11 , XK_F11 },
+ {EV_F12 , XK_F12 },
- keymap_t *km = map_getr(key2sym,sym);
- return km ? km->key : sym;
+ event_map_t *em = map_getr(ev2sym,sym);
+ return em ? em->ev : sym;
- keymap_t *km = map_get(key2sym,key);
- return km ? km->sym : key;
+ event_map_t *em = map_get(ev2sym,ev);
+ return em ? em->sym : ev;
- XKeyEvent *ev = &_ev->xkey;
- return (ptr_t){ev->x, ev->y, ev->x_root, ev->y_root};
+ XKeyEvent *xke = &xe->xkey;
+ return (ptr_t){xke->x, xke->y, xke->x_root, xke->y_root};
XGetInputFocus(root->sys->dpy, &focus, &revert);
if (focus == PointerRoot)
XGetInputFocus(root->sys->dpy, &focus, &revert);
if (focus == PointerRoot)
unsigned long ret_items, bytes_left;
unsigned char *xdata;
int status = XGetWindowProperty(win->sys->dpy, win->sys->xid,
unsigned long ret_items, bytes_left;
unsigned char *xdata;
int status = XGetWindowProperty(win->sys->dpy, win->sys->xid,
- atoms[net_strut], 0L, 4L, False, XA_CARDINAL,
+ atoms[NET_STRUT], 0L, 4L, False, XA_CARDINAL,
&ret_type, &ret_size, &ret_items, &bytes_left, &xdata);
if (status != Success || ret_size != 32 || ret_items != 4)
return 0;
&ret_type, &ret_size, &ret_items, &bytes_left, &xdata);
if (status != Success || ret_size != 32 || ret_items != 4)
return 0;
win->sys->strut.right = ((int*)xdata)[1];
win->sys->strut.top = ((int*)xdata)[2];
win->sys->strut.bottom = ((int*)xdata)[3];
win->sys->strut.right = ((int*)xdata)[1];
win->sys->strut.top = ((int*)xdata)[2];
win->sys->strut.bottom = ((int*)xdata)[3];
for (list_t *cur = screens; cur; cur = cur->next)
strut_copy(cur->data, win, 1);
return strut_copy(root, win, 1);
for (list_t *cur = screens; cur; cur = cur->next)
strut_copy(cur->data, win, 1);
return strut_copy(root, win, 1);
for (list_t *cur = screens; cur; cur = cur->next)
strut_copy(cur->data, win, -1);
return strut_copy(root, win, -1);
for (list_t *cur = screens; cur; cur = cur->next)
strut_copy(cur->data, win, -1);
return strut_copy(root, win, -1);
- while (XCheckTypedEvent(dpy, KeyPress, ev));
- KeySym sym = XKeycodeToKeysym(dpy, ev->xkey.keycode, 0);
- printf("got key %c %hhx\n", x2key(sym), mod2int(mod));
- wm_handle_key(win, x2key(sym), mod, ptr);
+ while (XCheckTypedEvent(dpy, KeyPress, xe));
+ KeySym sym = XKeycodeToKeysym(dpy, xe->xkey.keycode, 0);
+ printf("got xe %c %hhx\n", xk2ev(sym), mod2int(mod));
+ wm_handle_event(win, xk2ev(sym), mod, ptr);
}
else if (type == KeyRelease) {
//printf("release: %d\n", type);
}
else if (type == ButtonPress) {
}
else if (type == KeyRelease) {
//printf("release: %d\n", type);
}
else if (type == ButtonPress) {
- if (wm_handle_key(win, x2btn(ev->xbutton.button), mod, ptr))
- XGrabPointer(dpy, ev->xbutton.root, True, PointerMotionMask|ButtonReleaseMask,
+ if (wm_handle_event(win, xb2ev(xe->xbutton.button), mod, ptr))
+ XGrabPointer(dpy, xe->xbutton.root, True, PointerMotionMask|ButtonReleaseMask,
GrabModeAsync, GrabModeAsync, None, None, CurrentTime);
else {
printf("resending event\n");
GrabModeAsync, GrabModeAsync, None, None, CurrentTime);
else {
printf("resending event\n");
- XSendEvent(win->sys->dpy, ev->xbutton.window, True, NoEventMask, ev);
- XSendEvent(win->sys->dpy, ev->xbutton.window, False, NoEventMask, ev);
- XSendEvent(win->sys->dpy, ev->xbutton.root, True, NoEventMask, ev);
- XSendEvent(win->sys->dpy, ev->xbutton.root, False, NoEventMask, ev);
- XSendEvent(win->sys->dpy, ev->xbutton.subwindow, True, NoEventMask, ev);
- XSendEvent(win->sys->dpy, ev->xbutton.subwindow, False, NoEventMask, ev);
+ XSendEvent(win->sys->dpy, xe->xbutton.window, True, NoEventMask, xe);
+ XSendEvent(win->sys->dpy, xe->xbutton.window, False, NoEventMask, xe);
+ XSendEvent(win->sys->dpy, xe->xbutton.root, True, NoEventMask, xe);
+ XSendEvent(win->sys->dpy, xe->xbutton.root, False, NoEventMask, xe);
+ XSendEvent(win->sys->dpy, xe->xbutton.subwindow, True, NoEventMask, xe);
+ XSendEvent(win->sys->dpy, xe->xbutton.subwindow, False, NoEventMask, xe);
}
}
else if (type == ButtonRelease) {
XUngrabPointer(dpy, CurrentTime);
}
}
else if (type == ButtonRelease) {
XUngrabPointer(dpy, CurrentTime);
- wm_handle_key(win, x2btn(ev->xbutton.button), mod, ptr);
+ wm_handle_event(win, xb2ev(xe->xbutton.button), mod, ptr);
wm_handle_ptr(win, ptr);
}
else if (type == EnterNotify || type == LeaveNotify) {
printf("enter: %d\n", type);
wm_handle_ptr(win, ptr);
}
else if (type == EnterNotify || type == LeaveNotify) {
printf("enter: %d\n", type);
- key_t key = EnterNotify ? key_enter : key_leave;
- if ((win = win_find(dpy,ev->xcrossing.window,0)))
- wm_handle_key(win, key, MOD(), PTR());
+ event_t ev = EnterNotify ? EV_ENTER : EV_LEAVE;
+ if ((win = win_find(dpy,xe->xcrossing.window,0)))
+ wm_handle_event(win, ev, MOD(), PTR());
}
else if (type == FocusIn || type == FocusOut) {
//printf("focus: %d\n", type);
}
else if (type == FocusIn || type == FocusOut) {
//printf("focus: %d\n", type);
- key_t key = FocusIn ? key_focus : key_unfocus;
- if ((win = win_find(dpy,ev->xfocus.window,0)))
- wm_handle_key(win, key, MOD(), PTR());
+ event_t ev = FocusIn ? EV_FOCUS : EV_UNFOCUS;
+ if ((win = win_find(dpy,xe->xfocus.window,0)))
+ wm_handle_event(win, ev, MOD(), PTR());
}
else if (type == ConfigureNotify) {
printf("configure: %d\n", type);
}
else if (type == ConfigureNotify) {
printf("configure: %d\n", type);
printf("map: %d\n", type);
}
else if (type == UnmapNotify) {
printf("map: %d\n", type);
}
else if (type == UnmapNotify) {
- if ((win = win_find(dpy,ev->xunmap.window,0)) &&
- win->sys->state == st_show) {
+ if ((win = win_find(dpy,xe->xunmap.window,0)) &&
+ win->sys->state != ST_HIDE) {
}
}
else if (type == DestroyNotify) {
//printf("destroy: %d\n", type);
}
}
else if (type == DestroyNotify) {
//printf("destroy: %d\n", type);
printf("configure_req: %d - %x, (0x%lx) %dx%d @ %d,%d\n",
type, (int)cre->window, cre->value_mask,
cre->height, cre->width, cre->x, cre->y);
printf("configure_req: %d - %x, (0x%lx) %dx%d @ %d,%d\n",
type, (int)cre->window, cre->value_mask,
cre->height, cre->width, cre->x, cre->y);
/* This seems necessary for, but causes flicker
* there could be a better way to do this */
/* This seems necessary for, but causes flicker
* there could be a better way to do this */
sys_move(win, win->x, win->y, win->w, win->h);
}
else if (type == MapRequest) {
printf("map_req: %d\n", type);
sys_move(win, win->x, win->y, win->w, win->h);
}
else if (type == MapRequest) {
printf("map_req: %d\n", type);
void sys_move(win_t *win, int x, int y, int w, int h)
{
//printf("sys_move: %p - %d,%d %dx%d\n", win, x, y, w, h);
void sys_move(win_t *win, int x, int y, int w, int h)
{
//printf("sys_move: %p - %d,%d %dx%d\n", win, x, y, w, h);
win->x = x; win->y = y;
win->w = MAX(w,1+b); win->h = MAX(h,1+b);
w = MAX(w-b,1); h = MAX(h-b,1);
win->x = x; win->y = y;
win->w = MAX(w,1+b); win->h = MAX(h,1+b);
w = MAX(w-b,1); h = MAX(h-b,1);
/* Flush events, so moving window doesn't cause re-focus
* There's probably a better way to do this */
/* Flush events, so moving window doesn't cause re-focus
* There's probably a better way to do this */
{
//printf("sys_raise: %p\n", win);
XRaiseWindow(win->sys->dpy, win->sys->xid);
{
//printf("sys_raise: %p\n", win);
XRaiseWindow(win->sys->dpy, win->sys->xid);
- XSetWindowBorder(last->sys->dpy, last->sys->xid, colors[clr_unfocus]);
- XSetWindowBorder(win->sys->dpy, win->sys->xid, colors[clr_focus]);
- XSetWindowBorderWidth(win->sys->dpy, win->sys->xid, BORDER);
+ XSetWindowBorder(last->sys->dpy, last->sys->xid, colors[CLR_UNFOCUS]);
+ XSetWindowBorder(win->sys->dpy, win->sys->xid, colors[CLR_FOCUS]);
+ XSetWindowBorderWidth(win->sys->dpy, win->sys->xid, border);
XSendEvent(win->sys->dpy, win->sys->xid, False, NoEventMask, &(XEvent){
.type = ClientMessage,
.xclient.window = win->sys->xid,
XSendEvent(win->sys->dpy, win->sys->xid, False, NoEventMask, &(XEvent){
.type = ClientMessage,
.xclient.window = win->sys->xid,
printf("sys_show: show\n");
XMapWindow(win->sys->dpy, win->sys->xid);
XSync(win->sys->dpy, False);
return;
printf("sys_show: show\n");
XMapWindow(win->sys->dpy, win->sys->xid);
XSync(win->sys->dpy, False);
return;
printf("sys_show: hide\n");
XUnmapWindow(win->sys->dpy, win->sys->xid);
return;
printf("sys_show: hide\n");
XUnmapWindow(win->sys->dpy, win->sys->xid);
return;
- //printf("sys_watch: %p - %x %hhx\n", win, key, mod);
+ //printf("sys_watch: %p - %x %hhx\n", win, ev, mod);
XWindowAttributes attr;
XGetWindowAttributes(win->sys->dpy, win->sys->xid, &attr);
long mask = attr.your_event_mask;
XWindowAttributes attr;
XGetWindowAttributes(win->sys->dpy, win->sys->xid, &attr);
long mask = attr.your_event_mask;
- if (key_mouse0 <= key && key <= key_mouse7)
- XGrabButton(win->sys->dpy, btn2x(key), mod2x(mod), win->sys->xid, False,
+ if (EV_MOUSE0 <= ev && ev <= EV_MOUSE7)
+ XGrabButton(win->sys->dpy, ev2xb(ev), mod2x(mod), win->sys->xid, False,
mod.up ? ButtonReleaseMask : ButtonPressMask,
GrabModeAsync, GrabModeAsync, None, None);
mod.up ? ButtonReleaseMask : ButtonPressMask,
GrabModeAsync, GrabModeAsync, None, None);
- XGrabKey(win->sys->dpy, XKeysymToKeycode(win->sys->dpy, key2x(key)),
+ XGrabKey(win->sys->dpy, XKeysymToKeycode(win->sys->dpy, ev2xk(ev)),
mod2x(mod), win->sys->xid, True, GrabModeAsync, GrabModeAsync);
}
mod2x(mod), win->sys->xid, True, GrabModeAsync, GrabModeAsync);
}
- if (key_mouse0 <= key && key <= key_mouse7)
- XUngrabButton(win->sys->dpy, btn2x(key), mod2x(mod), win->sys->xid);
+ if (EV_MOUSE0 <= ev && ev <= EV_MOUSE7)
+ XUngrabButton(win->sys->dpy, ev2xb(ev), mod2x(mod), win->sys->xid);
- BORDER = conf_get_int("main.border", BORDER);
- NO_CAPTURE = conf_get_int("main.no-capture", NO_CAPTURE);
+ border = conf_get_int("main.border", border);
+ no_capture = conf_get_int("main.no-capture", no_capture);
- atoms[wm_proto] = XInternAtom(dpy, "WM_PROTOCOLS", False);
- atoms[wm_focus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False);
- atoms[net_strut] = XInternAtom(dpy, "_NET_WM_STRUT", False);
+ atoms[WM_PROTO] = XInternAtom(dpy, "WM_PROTOCOLS", False);
+ atoms[WM_FOCUS] = XInternAtom(dpy, "WM_TAKE_FOCUS", False);
+ atoms[NET_STRUT] = XInternAtom(dpy, "_NET_WM_STRUT", False);
- colors[clr_focus] = get_color(dpy, "#a0a0ff");
- colors[clr_unfocus] = get_color(dpy, "#101066");
- colors[clr_urgent] = get_color(dpy, "#ff0000");
+ colors[CLR_FOCUS] = get_color(dpy, "#a0a0ff");
+ colors[CLR_UNFOCUS] = get_color(dpy, "#101066");
+ colors[CLR_URGENT] = get_color(dpy, "#ff0000");
printf("colors = #%06lx #%06lx #%06lx\n", colors[0], colors[1], colors[2]);
/* Select window management events */
XSelectInput(dpy, xid, SubstructureRedirectMask|SubstructureNotifyMask);
printf("colors = #%06lx #%06lx #%06lx\n", colors[0], colors[1], colors[2]);
/* Select window management events */
XSelectInput(dpy, xid, SubstructureRedirectMask|SubstructureNotifyMask);
xerrorxlib = XSetErrorHandler(xerror);
return win_find(dpy, xid, 1);
xerrorxlib = XSetErrorHandler(xerror);
return win_find(dpy, xid, 1);
unsigned int nkids;
Window par, xid, *kids = NULL;
if (XQueryTree(root->sys->dpy, root->sys->xid,
unsigned int nkids;
Window par, xid, *kids = NULL;
if (XQueryTree(root->sys->dpy, root->sys->xid,
- XEvent ev;
- XNextEvent(root->sys->dpy, &ev);
- process_event(ev.type, &ev, root);
+ XEvent xe;
+ XNextEvent(root->sys->dpy, &xe);
+ process_event(xe.type, &xe, root);