before leaning things up
This commit is contained in:
61
client.c
61
client.c
@ -11,6 +11,8 @@
|
||||
#include "util.h"
|
||||
#include "wm.h"
|
||||
|
||||
void (*arrange)(void *aux);
|
||||
|
||||
void
|
||||
max(void *aux)
|
||||
{
|
||||
@ -25,12 +27,24 @@ max(void *aux)
|
||||
}
|
||||
|
||||
void
|
||||
arrange(void *aux)
|
||||
floating(void *aux)
|
||||
{
|
||||
Client *c;
|
||||
|
||||
arrange = floating;
|
||||
for(c = stack; c; c = c->snext)
|
||||
resize(c);
|
||||
discard_events(EnterWindowMask);
|
||||
}
|
||||
|
||||
void
|
||||
grid(void *aux)
|
||||
{
|
||||
Client *c;
|
||||
int n, cols, rows, gw, gh, i, j;
|
||||
float rt, fd;
|
||||
|
||||
arrange = grid;
|
||||
if(!clients)
|
||||
return;
|
||||
for(n = 0, c = clients; c; c = c->next, n++);
|
||||
@ -95,7 +109,13 @@ kill(void *aux)
|
||||
static void
|
||||
resize_title(Client *c)
|
||||
{
|
||||
c->tw = textw(&brush.font, c->name) + bh;
|
||||
int i;
|
||||
|
||||
c->tw = 0;
|
||||
for(i = 0; i < TLast; i++)
|
||||
if(c->tags[i])
|
||||
c->tw += textw(&brush.font, c->tags[i]) + bh;
|
||||
c->tw += textw(&brush.font, c->name) + bh;
|
||||
if(c->tw > c->w)
|
||||
c->tw = c->w + 2;
|
||||
c->tx = c->x + c->w - c->tw + 2;
|
||||
@ -190,8 +210,8 @@ focus(Client *c)
|
||||
|
||||
old = stack;
|
||||
for(l = &stack; *l && *l != c; l = &(*l)->snext);
|
||||
eassert(*l == c);
|
||||
*l = c->snext;
|
||||
if(*l)
|
||||
*l = c->snext;
|
||||
c->snext = stack;
|
||||
stack = c;
|
||||
if(old && old != c) {
|
||||
@ -230,17 +250,16 @@ manage(Window w, XWindowAttributes *wa)
|
||||
twa.background_pixmap = ParentRelative;
|
||||
twa.event_mask = ExposureMask;
|
||||
|
||||
c->tags[tsel] = tags[tsel];
|
||||
c->title = XCreateWindow(dpy, root, c->tx, c->ty, c->tw, c->th,
|
||||
0, DefaultDepth(dpy, screen), CopyFromParent,
|
||||
DefaultVisual(dpy, screen),
|
||||
CWOverrideRedirect | CWBackPixmap | CWEventMask, &twa);
|
||||
update_name(c);
|
||||
|
||||
update_name(c);
|
||||
for(l=&clients; *l; l=&(*l)->next);
|
||||
c->next = *l; /* *l == nil */
|
||||
*l = c;
|
||||
c->snext = stack;
|
||||
stack = c;
|
||||
XMapRaised(dpy, c->win);
|
||||
XMapRaised(dpy, c->title);
|
||||
XGrabButton(dpy, Button1, Mod1Mask, c->win, False, ButtonPressMask,
|
||||
@ -249,7 +268,7 @@ manage(Window w, XWindowAttributes *wa)
|
||||
GrabModeAsync, GrabModeSync, None, None);
|
||||
XGrabButton(dpy, Button3, Mod1Mask, c->win, False, ButtonPressMask,
|
||||
GrabModeAsync, GrabModeSync, None, None);
|
||||
resize(c);
|
||||
arrange(NULL);
|
||||
focus(c);
|
||||
}
|
||||
|
||||
@ -308,11 +327,24 @@ gravitate(Client *c, Bool invert)
|
||||
c->y += dy;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
resize(Client *c)
|
||||
{
|
||||
XConfigureEvent e;
|
||||
|
||||
if(c->incw)
|
||||
c->w -= (c->w - c->basew) % c->incw;
|
||||
if(c->inch)
|
||||
c->h -= (c->h - c->baseh) % c->inch;
|
||||
if(c->minw && c->w < c->minw)
|
||||
c->w = c->minw;
|
||||
if(c->minh && c->h < c->minh)
|
||||
c->h = c->minh;
|
||||
if(c->maxw && c->w > c->maxw)
|
||||
c->w = c->maxw;
|
||||
if(c->maxh && c->h > c->maxh)
|
||||
c->h = c->maxh;
|
||||
resize_title(c);
|
||||
XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h);
|
||||
e.type = ConfigureNotify;
|
||||
@ -357,6 +389,7 @@ unmanage(Client *c)
|
||||
XFlush(dpy);
|
||||
XSetErrorHandler(error_handler);
|
||||
XUngrabServer(dpy);
|
||||
arrange(NULL);
|
||||
if(stack)
|
||||
focus(stack);
|
||||
}
|
||||
@ -384,15 +417,25 @@ getclient(Window w)
|
||||
void
|
||||
draw_client(Client *c)
|
||||
{
|
||||
int i;
|
||||
if(c == stack) {
|
||||
draw_bar();
|
||||
return;
|
||||
}
|
||||
|
||||
brush.x = brush.y = 0;
|
||||
brush.w = c->tw;
|
||||
brush.h = c->th;
|
||||
|
||||
brush.w = 0;
|
||||
for(i = 0; i < TLast; i++) {
|
||||
if(c->tags[i]) {
|
||||
brush.x += brush.w;
|
||||
brush.w = textw(&brush.font, c->tags[i]) + bh;
|
||||
draw(dpy, &brush, True, c->tags[i]);
|
||||
}
|
||||
}
|
||||
brush.x += brush.w;
|
||||
brush.w = textw(&brush.font, c->name) + bh;
|
||||
draw(dpy, &brush, True, c->name);
|
||||
XCopyArea(dpy, brush.drawable, c->title, brush.gc,
|
||||
0, 0, c->tw, c->th, 0, 0);
|
||||
|
Reference in New Issue
Block a user