made code more readable

keyboard
Anselm R. Garbe 19 years ago
parent 48b6e9a396
commit a05beb6585
  1. 50
      client.c
  2. 20
      event.c
  3. 2
      kb.c
  4. 52
      mouse.c
  5. 13
      wm.h

@ -43,6 +43,24 @@ update_name(Client *c)
draw_client(c); draw_client(c);
} }
void
update_size(Client *c)
{
XSizeHints size;
long msize;
if(!XGetWMNormalHints(dpy, c->win, &size, &msize) || !size.flags)
size.flags = PSize;
c->flags = size.flags;
c->basew = size.base_width;
c->baseh = size.base_height;
c->incw = size.width_inc;
c->inch = size.height_inc;
c->maxw = size.max_width;
c->maxh = size.max_height;
c->minw = size.min_width;
c->minh = size.min_height;
}
void void
focus(Client *c) focus(Client *c)
{ {
@ -62,31 +80,24 @@ manage(Window w, XWindowAttributes *wa)
{ {
Client *c, **l; Client *c, **l;
XSetWindowAttributes twa; XSetWindowAttributes twa;
long msize;
c = emallocz(sizeof(Client)); c = emallocz(sizeof(Client));
c->win = w; c->win = w;
c->r[RFloat].x = wa->x; c->x = wa->x;
c->r[RFloat].y = wa->y; c->y = wa->y;
c->r[RFloat].width = wa->width; c->w = wa->width;
c->r[RFloat].height = wa->height; c->h = wa->height;
update_size(c);
XSetWindowBorderWidth(dpy, c->win, 1); XSetWindowBorderWidth(dpy, c->win, 1);
XSelectInput(dpy, c->win, CLIENT_MASK); XSelectInput(dpy, c->win, CLIENT_MASK);
XGetTransientForHint(dpy, c->win, &c->trans); XGetTransientForHint(dpy, c->win, &c->trans);
if(!XGetWMNormalHints(dpy, c->win, &c->size, &msize) || !c->size.flags)
c->size.flags = PSize;
c->fixedsize =
(c->size.flags & PMinSize && c->size.flags & PMaxSize
&& c->size.min_width == c->size.max_width
&& c->size.min_height == c->size.max_height);
update_name(c); update_name(c);
twa.override_redirect = 1; twa.override_redirect = 1;
twa.background_pixmap = ParentRelative; twa.background_pixmap = ParentRelative;
twa.event_mask = ExposureMask; twa.event_mask = ExposureMask;
c->title = XCreateWindow(dpy, root, c->r[RFloat].x, c->r[RFloat].y, c->title = XCreateWindow(dpy, root, c->x, c->y, c->w, barrect.height,
c->r[RFloat].width, barrect.height, 0, 0, DefaultDepth(dpy, screen), CopyFromParent,
DefaultDepth(dpy, screen), CopyFromParent,
DefaultVisual(dpy, screen), DefaultVisual(dpy, screen),
CWOverrideRedirect | CWBackPixmap | CWEventMask, &twa); CWOverrideRedirect | CWBackPixmap | CWEventMask, &twa);
@ -110,15 +121,14 @@ resize(Client *c)
{ {
XConfigureEvent e; XConfigureEvent e;
XMoveResizeWindow(dpy, c->win, c->r[RFloat].x, c->r[RFloat].y, XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h);
c->r[RFloat].width, c->r[RFloat].height);
e.type = ConfigureNotify; e.type = ConfigureNotify;
e.event = c->win; e.event = c->win;
e.window = c->win; e.window = c->win;
e.x = c->r[RFloat].x; e.x = c->x;
e.y = c->r[RFloat].y; e.y = c->y;
e.width = c->r[RFloat].width; e.width = c->w;
e.height = c->r[RFloat].height; e.height = c->h;
e.border_width = 0; e.border_width = 0;
e.above = None; e.above = None;
e.override_redirect = False; e.override_redirect = False;

@ -79,13 +79,13 @@ configurerequest(XEvent *e)
ev->value_mask &= ~CWSibling; ev->value_mask &= ~CWSibling;
if((c = getclient(ev->window))) { if((c = getclient(ev->window))) {
if(ev->value_mask & CWX) if(ev->value_mask & CWX)
c->r[RFloat].x = ev->x; c->x = ev->x;
if(ev->value_mask & CWY) if(ev->value_mask & CWY)
c->r[RFloat].y = ev->y; c->y = ev->y;
if(ev->value_mask & CWWidth) if(ev->value_mask & CWWidth)
c->r[RFloat].width = ev->width; c->w = ev->width;
if(ev->value_mask & CWHeight) if(ev->value_mask & CWHeight)
c->r[RFloat].height = ev->height; c->h = ev->height;
} }
wc.x = ev->x; wc.x = ev->x;
@ -179,7 +179,6 @@ static void
propertynotify(XEvent *e) propertynotify(XEvent *e)
{ {
XPropertyEvent *ev = &e->xproperty; XPropertyEvent *ev = &e->xproperty;
long msize;
Client *c; Client *c;
if(ev->state == PropertyDelete) if(ev->state == PropertyDelete)
@ -195,16 +194,9 @@ propertynotify(XEvent *e)
case XA_WM_TRANSIENT_FOR: case XA_WM_TRANSIENT_FOR:
XGetTransientForHint(dpy, c->win, &c->trans); XGetTransientForHint(dpy, c->win, &c->trans);
break; break;
update_size(c);
case XA_WM_NORMAL_HINTS: case XA_WM_NORMAL_HINTS:
if(!XGetWMNormalHints(dpy, c->win, &c->size, &msize) update_size(c);
|| !c->size.flags)
c->size.flags = PSize;
if(c->size.flags & PMinSize && c->size.flags & PMaxSize
&& c->size.min_width == c->size.max_width
&& c->size.min_height == c->size.max_height)
c->fixedsize = True;
else
c->fixedsize = False;
break; break;
} }
if(ev->atom == XA_WM_NAME || ev->atom == net_atom[NetWMName]) { if(ev->atom == XA_WM_NAME || ev->atom == net_atom[NetWMName]) {

@ -8,7 +8,7 @@
#include <X11/keysym.h> #include <X11/keysym.h>
static const char *term[] = { static const char *term[] = {
"xterm", "-u8", "-bg", "black", "-fg", "white", "-fn", "xterm", "-bg", "black", "-fg", "white", "-fn",
"-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*", 0 "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*", 0
}; };

@ -16,22 +16,22 @@
static void static void
mmatch(Client *c, int x1, int y1, int x2, int y2) mmatch(Client *c, int x1, int y1, int x2, int y2)
{ {
c->r[RFloat].width = abs(x1 - x2); c->w = abs(x1 - x2);
c->r[RFloat].height = abs(y1 - y2); c->h = abs(y1 - y2);
c->r[RFloat].width -= if(c->incw)
(c->r[RFloat].width - c->size.base_width) % c->size.width_inc; c->w -= (c->w - c->basew) % c->incw;
c->r[RFloat].height -= if(c->inch)
(c->r[RFloat].height - c->size.base_height) % c->size.height_inc; c->h -= (c->h - c->baseh) % c->inch;
if(c->size.min_width && c->r[RFloat].width < c->size.min_width) if(c->minw && c->w < c->minw)
c->r[RFloat].width = c->size.min_width; c->w = c->minw;
if(c->size.min_height && c->r[RFloat].height < c->size.min_height) if(c->minh && c->h < c->minh)
c->r[RFloat].height = c->size.min_height; c->h = c->minh;
if(c->size.max_width && c->r[RFloat].width > c->size.max_width) if(c->maxw && c->w > c->maxw)
c->r[RFloat].width = c->size.max_width; c->w = c->maxw;
if(c->size.max_height && c->r[RFloat].height > c->size.max_height) if(c->maxh && c->h > c->maxh)
c->r[RFloat].height = c->size.max_height; c->h = c->maxh;
c->r[RFloat].x = (x1 <= x2) ? x1 : x1 - c->r[RFloat].width; c->x = (x1 <= x2) ? x1 : x1 - c->w;
c->r[RFloat].y = (y1 <= y2) ? y1 : y1 - c->r[RFloat].height; c->y = (y1 <= y2) ? y1 : y1 - c->h;
} }
void void
@ -40,14 +40,13 @@ mresize(Client *c)
XEvent ev; XEvent ev;
int old_cx, old_cy; int old_cx, old_cy;
old_cx = c->r[RFloat].x; old_cx = c->x;
old_cy = c->r[RFloat].y; old_cy = c->y;
if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync, if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
None, cursor[CurResize], CurrentTime) != GrabSuccess) None, cursor[CurResize], CurrentTime) != GrabSuccess)
return; return;
XGrabServer(dpy); XGrabServer(dpy);
XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h);
c->r[RFloat].width, c->r[RFloat].height);
for(;;) { for(;;) {
XMaskEvent(dpy, MouseMask, &ev); XMaskEvent(dpy, MouseMask, &ev);
switch(ev.type) { switch(ev.type) {
@ -55,7 +54,7 @@ mresize(Client *c)
case MotionNotify: case MotionNotify:
XUngrabServer(dpy); XUngrabServer(dpy);
mmatch(c, old_cx, old_cy, ev.xmotion.x, ev.xmotion.y); mmatch(c, old_cx, old_cy, ev.xmotion.x, ev.xmotion.y);
XResizeWindow(dpy, c->win, c->r[RFloat].width, c->r[RFloat].height); XResizeWindow(dpy, c->win, c->w, c->h);
XGrabServer(dpy); XGrabServer(dpy);
break; break;
case ButtonRelease: case ButtonRelease:
@ -75,8 +74,8 @@ mmove(Client *c)
unsigned int dui; unsigned int dui;
Window dummy; Window dummy;
old_cx = c->r[RFloat].x; old_cx = c->x;
old_cy = c->r[RFloat].y; old_cy = c->y;
if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync, if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
None, cursor[CurMove], CurrentTime) != GrabSuccess) None, cursor[CurMove], CurrentTime) != GrabSuccess)
return; return;
@ -88,10 +87,9 @@ mmove(Client *c)
default: break; default: break;
case MotionNotify: case MotionNotify:
XUngrabServer(dpy); XUngrabServer(dpy);
c->r[RFloat].x = old_cx + (ev.xmotion.x - x1); c->x = old_cx + (ev.xmotion.x - x1);
c->r[RFloat].y = old_cy + (ev.xmotion.y - y1); c->y = old_cy + (ev.xmotion.y - y1);
XMoveResizeWindow(dpy, c->win, c->r[RFloat].x, c->r[RFloat].y, XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h);
c->r[RFloat].width, c->r[RFloat].height);
XGrabServer(dpy); XGrabServer(dpy);
break; break;
case ButtonRelease: case ButtonRelease:

13
wm.h

@ -21,19 +21,15 @@ enum { NetSupported, NetWMName, NetLast };
/* cursor */ /* cursor */
enum { CurNormal, CurResize, CurMove, CurInput, CurLast }; enum { CurNormal, CurResize, CurMove, CurInput, CurLast };
/* rects */
enum { RFloat, RGrid, RLast };
struct Client { struct Client {
char name[256]; char name[256], tag[256];
char tag[256];
int proto; int proto;
Bool fixedsize; int x, y, w, h;
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
long flags;
Window win; Window win;
Window trans; Window trans;
Window title; Window title;
XSizeHints size;
XRectangle r[RLast];
Client *next; Client *next;
Client *snext; Client *snext;
}; };
@ -75,6 +71,7 @@ extern void focus(Client *c);
extern void update_name(Client *c); extern void update_name(Client *c);
extern void draw_client(Client *c); extern void draw_client(Client *c);
extern void resize(Client *c); extern void resize(Client *c);
extern void update_size(Client *c);
/* event.c */ /* event.c */
extern unsigned int discard_events(long even_mask); extern unsigned int discard_events(long even_mask);

Loading…
Cancel
Save