XGrabPointer(X.disp, ev->window, False,
ButtonPressMask | ButtonReleaseMask | ButtonMotionMask,
GrabModeAsync, GrabModeAsync, None, X.csr_move, CurrentTime);
- printf("BTN_DN(w: 0x%lx x: %d y: %d rx: %d ry: %d)\n", ev->window, ev->x, ev->y, ev->x_root, ev->y_root);
+ printf("BTN_DN(w: 0x%lx s: %d x: %d y: %d rx: %d ry: %d)\n", ev->window, ev->state, ev->x, ev->y, ev->x_root, ev->y_root);
X.start_x = ev->x_root, X.start_y = ev->y_root;
X.last_x = ev->x_root, X.last_y = ev->y_root;
- Location loc;
- Client* c = client_get(e->xbutton.window, &loc);
- if (c && (ev->window == c->frame))
+ Location loc = {0};
+ if (mons_find(ev->window, &loc) && (loc.client->frame == ev->window))
{
+ Client* c = loc.client;
if (ev->y < MIN_HEIGHT)
{
X.edge = E_TOP;
{
XButtonEvent* ev = &(e->xbutton);
printf("BTN_UP(w: 0x%lx x: %d y: %d rx: %d ry: %d)\n", ev->window, ev->x, ev->y, ev->x_root, ev->y_root);
- Location loc;
- Client* c = client_get(e->xbutton.window, &loc);
- if (c && (ev->window == c->frame))
+ Location loc = {0};
+ if (mons_find(ev->window, &loc) && (loc.client->frame == ev->window))
{
mouse_up(ev, &loc);
}
XMotionEvent *ev = &e->xmotion;
printf("BTN_MV(w: 0x%lx x: %d y: %d rx: %d ry: %d)\n", ev->window, ev->x, ev->y, ev->x_root, ev->y_root);
while (XCheckTypedWindowEvent(X.disp, ev->window, ev->type, e));
- Location loc;
- Client* c = client_get(ev->window, &loc);
- if (c && (ev->window == c->frame))
+ Location loc = {0};
+ if (mons_find(ev->window, &loc) && (loc.client->frame == ev->window))
{
mouse_drag(ev, &loc);
}
wc.border_width = ev->border_width;
wc.sibling = ev->above;
wc.stack_mode = ev->detail;
- Client* c = client_get(ev->window, NULL);
- if (c && c->win == ev->window)
+ Location loc = {0};
+ if (mons_find(ev->window, &loc) && (loc.client->win == ev->window))
{
- c->w = wc.width;
- c->h = wc.height;
- client_adjust(c);
- if (X.mode == M_RESIZE && Focused == c)
+ loc.client->w = wc.width;
+ loc.client->h = wc.height;
+ client_adjust(loc.client);
+ if (X.mode == M_RESIZE && Focused == loc.client)
{
- warp_mouse(c);
+ warp_mouse(loc.client);
}
}
else
XMapRequestEvent* ev = &(e->xmaprequest);
printf("MAP(w: 0x%lx)\n", ev->window);
XWindowAttributes attr;
- if (!client_get(ev->window, NULL))
+ Location loc = {0};
+ if (!mons_find(ev->window, &loc))
{
if (XGetWindowAttributes(X.disp, ev->window, &attr) && !attr.override_redirect)
{
static void xunmapnotify(XEvent* e)
{
XUnmapEvent* ev = &(e->xunmap);
- printf("UNMAP(w: 0x%lx)\n", ev->window);
- Client* c = client_get(ev->window, NULL);
- if (c && c->win == ev->window && !(c->flags & F_SHADED))
+ printf("UNMAP(e: 0x%lx w: 0x%lx %d)\n", ev->event, ev->window, ev->from_configure);
+ Location loc = {0};
+ if (mons_find(ev->window, &loc))// && loc.client->win == ev->window)
{
- XUnmapWindow(X.disp, c->frame);
+ if (ev->event == X.root && ev->window == loc.client->win)
+ {
+ mons_delclient(&loc);
+ }
+ else if ( !(loc.client->flags & F_SHADED) )
+ {
+ XUnmapWindow(X.disp, loc.client->frame);
+ }
}
}
Location loc = {0};
if (mons_find(ev->window, &loc))
{
- if (Focused == loc.client)
- {
- Focused = NULL;
- }
mons_delclient(&loc);
}
}
printf("CLIENT_MSG(w: 0x%lx a: '%s')\n", ev->window, XGetAtomName(X.disp, ev->message_type));
if (ev->message_type == atom("_NET_ACTIVE_WINDOW"))
{
- printf("ACTIVATE(w: %lx)\n", ev->window);
mons_activate(ev->window);
}
}
{
XPropertyEvent* ev = &(e->xproperty);
printf("PROP_NOTIFY(w: 0x%lx)\n", ev->window);
- Client* c = client_get(ev->window, NULL);
- if (c)
+ Location loc = {0};
+ if (mons_find(ev->window, &loc))
{
- client_readprops(c);
- client_draw(c);
+ client_readprops(loc.client);
+ client_draw(loc.client);
}
}
static void xenternotify(XEvent* e)
{
XCrossingEvent* ev = &(e->xcrossing);
- Client* c = client_get(ev->window, NULL);
- printf("ENTER(w: 0x%lx c: 0x%lx)\n", ev->window, c ? c->win : 0);
- if (c)
+ Location loc = {0};
+ if (mons_find(ev->window, &loc))
{
- client_focus(c);
+ printf("ENTER(w: 0x%lx c: 0x%lx)\n", ev->window, loc.client->win);
+ client_focus(loc.client);
}
}
if (ev->count == 0)
{
printf("EXPOSE(w: 0x%lx)\n", ev->window);
- Client* c = client_get(ev->window, NULL);
- if (c)
+ Location loc = {0};
+ if (mons_find(ev->window, &loc))
{
- client_draw(c);
+ client_draw(loc.client);
}
}
}
return ((mods & (1 << (btn + 7))) == (1 << (btn + 7)));
}
+static inline int FLAGS_SET(int state, int flags)
+{
+ return ((state & flags) == flags);
+}
+
static void float_click(XButtonEvent* ev, Location* loc)
{
if ((ev->button == Button1) && (ev->y > MIN_HEIGHT))
}
else if (ev->button == Button2)
{
- if (ev->state & MODKEY)
+ if (FLAGS_SET(ev->state, (MODKEY|ShiftMask)))
{
- client_close(loc->client);
+ mons_togglefloat(loc);
}
- else if (ev->state & (MODKEY|ShiftMask))
+ else if (FLAGS_SET(ev->state, MODKEY))
{
- mons_togglefloat(loc);
+ client_close(loc->client);
}
else
{
- puts("undefined");
+ /* nothing to do */
}
}
else if (ev->button == Button3)
}
else if (ev->button == Button2)
{
- if (ev->state & MODKEY)
+ if (FLAGS_SET(ev->state, (MODKEY|ShiftMask)))
{
- client_close(loc->client);
+ mons_togglefloat(loc);
}
- else if (ev->state & (MODKEY|ShiftMask))
+ else if (FLAGS_SET(ev->state, MODKEY))
{
- mons_togglefloat(loc);
+ client_close(loc->client);
}
- else
+ else
{
- puts("expand client");
+ /* nothing to do */
}
}
else if (ev->button == Button3)
}
else if (ev->button == Button2)
{
- if (ev->state & MODKEY)
+ if (FLAGS_SET(ev->state, (MODKEY|ShiftMask)))
{
- client_close(loc->client);
+ mons_togglefloat(loc);
}
- else if (ev->state & (MODKEY|ShiftMask))
+ else if (FLAGS_SET(ev->state, MODKEY))
{
- mons_togglefloat(loc);
+ client_close(loc->client);
}
else
{
float_drag(ev, loc);
}
}
-