forked from mirror/dwm
made code more readable
This commit is contained in:
parent
48b6e9a396
commit
a05beb6585
5 changed files with 67 additions and 70 deletions
50
client.c
50
client.c
|
@ -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;
|
||||||
|
|
20
event.c
20
event.c
|
@ -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]) {
|
||||||
|
|
2
kb.c
2
kb.c
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
52
mouse.c
52
mouse.c
|
@ -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
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…
Reference in a new issue