Began changes required for Xinerema support

This commit is contained in:
Kris Maglione 2006-06-29 20:02:52 -04:00
parent 0fd8d49ee8
commit f05e39aeed
11 changed files with 161 additions and 152 deletions

View File

@ -26,23 +26,23 @@ create_area(View *v, Area *pos, unsigned int w)
if(!w) {
if(area_size > 1)
w = rect.width / area_size - 1;
w = screen->rect.width / area_size - 1;
else
w = rect.width;
w = screen->rect.width;
}
if(w < MIN_COLWIDTH)
w = MIN_COLWIDTH;
if(area_size >= 2 && (area_size - 1) * MIN_COLWIDTH + w > rect.width)
if(area_size >= 2 && (area_size - 1) * MIN_COLWIDTH + w > screen->rect.width)
return nil;
if(area_size > 1)
scale_view(v, rect.width - w);
scale_view(v, screen->rect.width - w);
a = cext_emallocz(sizeof(Area));
a->view = v;
a->id = id++;
a->rect = rect;
a->rect.height = rect.height - brect.height;
a->rect = screen->rect;
a->rect.height = screen->rect.height - screen->brect.height;
a->mode = def.colmode;
a->rect.width = w;
a->frame = nil;
@ -91,7 +91,7 @@ place_client(Area *a, Client *c)
unsigned int i, j, x, y, maxx, maxy, dx, dy, cx, cy, diff, num = 0;
XPoint p1 = {0, 0}, p2 = {0, 0};
Frame *f = c->sel;
int snap = rect.height / 66;
int snap = screen->rect.height / 66;
XRectangle *rects;
if(c->trans)
@ -104,8 +104,8 @@ place_client(Area *a, Client *c)
rects = rects_of_view(a->view, &num);
if(!field) {
mx = rect.width / 8;
my = rect.height / 8;
mx = screen->rect.width / 8;
my = screen->rect.height / 8;
field = cext_emallocz(my * mx * sizeof(Bool));
}
@ -113,8 +113,8 @@ place_client(Area *a, Client *c)
for(x = 0; x < mx; x++)
field[y*mx + x] = True;
dx = rect.width / mx;
dy = rect.height / my;
dx = screen->rect.width / mx;
dy = screen->rect.height / my;
for(fr=a->frame; fr; fr=fr->anext) {
if(fr == f) {
cx = f->rect.width / dx;
@ -318,8 +318,8 @@ select_area(Area *a, char *arg)
if(p->anext == f) break;
a->sel = p;
arrange_column(a, False);
if(v == sel)
focus_view(v);
if(v == screen->sel)
focus_view(screen, v);
flush_masked_events(EnterWindowMask);
return nil;
}
@ -329,8 +329,8 @@ select_area(Area *a, char *arg)
p = f->anext ? f->anext : a->frame;
a->sel = p;
arrange_column(a, False);
if(v == sel)
focus_view(v);
if(v == screen->sel)
focus_view(screen, v);
flush_masked_events(EnterWindowMask);
return nil;
}

View File

@ -28,7 +28,7 @@ create_bar(Bar **b_link, char *name)
b->id = id++;
cext_strlcpy(b->name, name, sizeof(b->name));
b->brush = bbrush;
b->brush = screen->bbrush;
b->brush.color = def.normcolor;
for(i=b_link; *i; i=&(*i)->next)
@ -59,22 +59,22 @@ height_of_bar()
}
void
resize_bar()
resize_bar(WMScreen *s)
{
View *v;
Area *a;
Frame *f;
brect = rect;
brect.height = height_of_bar();
brect.y = rect.height - brect.height;
XMoveResizeWindow(blz.display, barwin, brect.x, brect.y, brect.width, brect.height);
s->brect = s->rect;
s->brect.height = height_of_bar();
s->brect.y = s->rect.height - s->brect.height;
XMoveResizeWindow(blz.display, s->barwin, s->brect.x, s->brect.y, s->brect.width, s->brect.height);
XSync(blz.display, False);
draw_bar();
draw_bar(s);
for(v=view; v; v=v->next) {
for(a = v->area; a; a=a->next) {
a->rect.height = rect.height - brect.height;
a->rect.height = s->rect.height - s->brect.height;
arrange_column(a, False);
}
for(f=v->area->frame; f; f=f->anext) {
@ -84,33 +84,33 @@ resize_bar()
}
void
draw_bar()
draw_bar(WMScreen *s)
{
unsigned int width, tw, nb, size;
float shrink;
Bar *b, *tb, *largest, **pb;
blitz_draw_tile(&bbrush);
blitz_draw_tile(&s->bbrush);
if(!lbar && !rbar)
if(!s->lbar && !s->rbar)
goto MapBar;
largest = b = tb = nil;
tw = width = nb = size = 0;
for(b=lbar, nb=2 ;nb; --nb && (b = rbar))
for(b=s->lbar, nb=2 ;nb; --nb && (b = s->rbar))
for(; b; b=b->next) {
b->brush.rect.x = b->brush.rect.y = 0;
b->brush.rect.width = brect.height;
b->brush.rect.width = s->brect.height;
if(b->text && strlen(b->text))
b->brush.rect.width += blitz_textwidth(b->brush.font, b->text);
b->brush.rect.height = brect.height;
b->brush.rect.height = s->brect.height;
width += b->brush.rect.width;
}
/* Not enough room. Shrink bars until they all fit */
if(width > brect.width) {
for(b=lbar, nb=2 ;nb; --nb && (b = rbar))
if(width > s->brect.width) {
for(b=s->lbar, nb=2 ;nb; --nb && (b = s->rbar))
for(; b; b=b->next) {
for(pb=&largest; *pb; pb=&(*pb)->smaller)
if((*pb)->brush.rect.width < b->brush.rect.width) break;
@ -120,7 +120,7 @@ draw_bar()
for(tb=largest; tb; tb=tb->smaller) {
width -= tb->brush.rect.width;
tw += tb->brush.rect.width;
shrink = (brect.width - width) / (float)tw;
shrink = (s->brect.width - width) / (float)tw;
if(tb->smaller)
if(tb->brush.rect.width * shrink >= tb->smaller->brush.rect.width)
break;
@ -131,11 +131,11 @@ draw_bar()
tb=nil;
}
for(b=lbar, nb=2 ;nb; b=rbar, nb--)
for(b=s->lbar, nb=2 ;nb; b=s->rbar, nb--)
for(; b; tb = b, b=b->next) {
if(b == rbar) {
if(b == s->rbar) {
b->brush.align = EAST;
rbar->brush.rect.width += (brect.width - width);
s->rbar->brush.rect.width += (s->brect.width - width);
}else
b->brush.align = CENTER;
if(tb)
@ -143,8 +143,8 @@ draw_bar()
blitz_draw_label(&b->brush, b->text);
}
MapBar:
XCopyArea(blz.display, bbrush.drawable, barwin, bbrush.gc, 0, 0,
brect.width, brect.height, 0, 0);
XCopyArea(blz.display, s->bbrush.drawable, s->barwin, s->bbrush.gc, 0, 0,
s->brect.width, s->brect.height, 0, 0);
XSync(blz.display, False);
}

View File

@ -17,7 +17,7 @@ static char *Ebadcmd = "bad command",
Client *
sel_client()
{
return sel && sel->sel->sel ? sel->sel->sel->client : nil;
return screen->sel && screen->sel->sel->sel ? screen->sel->sel->sel->client : nil;
}
int
@ -395,7 +395,7 @@ manage_client(Client *c)
map_client(c);
XMapWindow(blz.display, c->framewin);
XSync(blz.display, False);
if(c->sel->area->view == sel)
if(c->sel->area->view == screen->sel)
focus_client(c, False);
flush_masked_events(EnterWindowMask);
}
@ -531,17 +531,17 @@ resize_client(Client *c, XRectangle *r, Bool ignore_xcall)
if(!ignore_xcall) {
if(floating &&
(c->rect.width >= rect.width) &&
(c->rect.height >= rect.height))
(c->rect.width >= screen->rect.width) &&
(c->rect.height >= screen->rect.height))
{
f->rect.x = -def.border;
f->rect.y = -height_of_bar();
}
if(f->area->view == sel)
if(f->area->view == screen->sel)
XMoveResizeWindow(blz.display, c->framewin, f->rect.x,
f->rect.y, f->rect.width, f->rect.height);
else
XMoveResizeWindow(blz.display, c->framewin, 2 * rect.width + f->rect.x,
XMoveResizeWindow(blz.display, c->framewin, 2 * screen->rect.width + f->rect.x,
f->rect.y, f->rect.width, f->rect.height);
}
@ -701,7 +701,7 @@ focus(Client *c, Bool restack)
arrange_column(f->area, False);
focus_client(c, restack);
focus_view(v);
focus_view(screen, v);
}
void
@ -723,7 +723,7 @@ update_client_views(Client *c, char **tags)
if(*tags) {
if(!*fp || cmp > 0) {
f = create_frame(c, get_view(*tags));
if(f->view == sel || !c->sel)
if(f->view == screen->sel || !c->sel)
c->sel = f;
attach_to_view(f->view, f);
f->cnext = *fp;
@ -756,7 +756,7 @@ apply_tags(Client *c, const char *tags)
if(!strncmp(toks[i], "~", 2))
c->floating = True;
else if(!strncmp(toks[i], "!", 2))
toks[j++] = view ? sel->name : "nil";
toks[j++] = view ? screen->sel->name : "nil";
else if(strncmp(toks[i], "sel", 4))
toks[j++] = toks[i];
}

View File

@ -194,7 +194,7 @@ Fallthrough:
case Colmax:
for(f=a->frame; f; f=f->anext) {
f->rect = a->rect;
if(f != a->sel) f->rect.x = rect.width * 2;
if(f != a->sel) f->rect.x = screen->rect.width * 2;
resize_client(f->client, &f->rect, True);
}
break;
@ -203,6 +203,7 @@ Fallthrough:
}
relax_column(a);
focus_view(screen, v);
flush_masked_events(EnterWindowMask);
}
@ -319,15 +320,15 @@ AfterHorizontal:
AfterVertical:
relax_column(a);
focus_view(v);
focus_view(screen, v);
}
static Frame *
frame_of_point(XPoint *pt)
{
Frame *f = nil;
Area *a;
View *v = sel;
View *v = screen->sel;
Frame *f = nil;
if(!v)
return nil;
@ -343,9 +344,13 @@ frame_of_point(XPoint *pt)
static void
drop_move(Frame *f, XRectangle *new, XPoint *pt)
{
Area *tgt = nil, *src = f->area;
View *v = src->view;
Area *tgt, *src;
Frame *ft, *tf;
View *v;
tgt = nil;
src = f->area;
v = src->view;
if(!pt)
return;
@ -359,7 +364,7 @@ drop_move(Frame *f, XRectangle *new, XPoint *pt)
send_to_area(tgt, src, f);
}
}
else if(pt->x >= rect.width - 16) {
else if(pt->x >= screen->rect.width - 16) {
if((src->frame && src->frame->anext) || src->next) {
for(tgt=src; tgt->next; tgt=tgt->next);
tgt = new_column(v, tgt, 0);

View File

@ -67,12 +67,12 @@ handle_buttonrelease(XEvent *e)
Frame *f;
Bar *b;
XButtonPressedEvent *ev = &e->xbutton;
if(ev->window == barwin) {
for(b=lbar; b; b=b->next)
if(ev->window == screen->barwin) {
for(b=screen->lbar; b; b=b->next)
if(blitz_ispointinrect(ev->x, ev->y, &b->brush.rect))
return write_event("LeftBarClick %d %s\n",
ev->button, b->name);
for(b=rbar; b; b=b->next)
for(b=screen->rbar; b; b=b->next)
if(blitz_ispointinrect(ev->x, ev->y, &b->brush.rect))
return write_event("RightBarClick %d %s\n",
ev->button, b->name);
@ -155,7 +155,7 @@ handle_configurerequest(XEvent *e)
else
frect=&c->sel->revert;
if(c->rect.width >= rect.width && c->rect.height >= rect.height) {
if(c->rect.width >= screen->rect.width && c->rect.height >= screen->rect.height) {
frect->y = wc.y = -height_of_bar();
frect->x = wc.x = -def.border;
}
@ -169,8 +169,8 @@ handle_configurerequest(XEvent *e)
wc.border_width = 1;
wc.sibling = None;
wc.stack_mode = ev->detail;
if(c->sel->area->view != sel)
wc.x += 2 * rect.width;
if(c->sel->area->view != screen->sel)
wc.x += 2 * screen->rect.width;
if(c->sel->area->floating) {
XConfigureWindow(blz.display, c->framewin, ev->value_mask, &wc);
configure_client(c);
@ -249,8 +249,8 @@ handle_expose(XEvent *e)
XExposeEvent *ev = &e->xexpose;
static Frame *f;
if(ev->count == 0) {
if(ev->window == barwin)
draw_bar();
if(ev->window == screen->barwin)
draw_bar(screen);
else if((f = frame_of_win(ev->window)))
draw_frame(f);
}

View File

@ -139,7 +139,7 @@ draw_frames()
{
Client *c;
for(c=client; c; c=c->next)
if(c->sel && (c->sel->area->view == sel)) {
if(c->sel && (c->sel->area->view == screen->sel)) {
update_frame_widget_colors(c->sel);
draw_frame(c->sel);
}

View File

@ -88,7 +88,7 @@ P9Srv p9srv = {
.freefid=fs_freefid
};
/* ad-hoc file tree. Empty names ("") indicate a dynamic entry to be filled
/* ad-hoc file tree. Empty names ("") indicate dynamic entries to be filled
* in by lookup_file */
static Dirtab
dirtab_root[]= {{".", P9QTDIR, FsRoot, 0500|P9DMDIR },
@ -166,7 +166,7 @@ free_file(FileId *f) {
}
/* This function's name belies it's true purpose. It increases
* the reference count of the FileId list */
* the reference counts of the FileId list */
static void
clone_files(FileId *f) {
for(; f; f=f->next)
@ -287,7 +287,7 @@ message_root(char *message)
cext_strlcpy(def.grabmod, message, sizeof(def.grabmod));
def.mod = mod;
if(view)
restack_view(sel);
restack_view(screen->sel);
}else
return Ebadcmd;
@ -298,8 +298,8 @@ char *
read_root_ctl()
{
unsigned int i = 0;
if(sel)
i += snprintf(&buffer[i], (BUFFER_SIZE - i), "view %s\n", sel->name);
if(screen->sel)
i += snprintf(&buffer[i], (BUFFER_SIZE - i), "view %s\n", screen->sel->name);
i += snprintf(&buffer[i], (BUFFER_SIZE - i), "selcolors %s\n", def.selcolor.colstr);
i += snprintf(&buffer[i], (BUFFER_SIZE - i), "normcolors %s\n", def.normcolor.colstr);
i += snprintf(&buffer[i], (BUFFER_SIZE - i), "font %s\n", def.font.fontstr);
@ -427,12 +427,12 @@ lookup_file(FileId *parent, char *name)
break;
case FsDTags:
if(!name || !strncmp(name, "sel", 4)) {
if(sel) {
if(screen->sel) {
file = get_file();
*last = file;
last = &file->next;
file->ref = sel;
file->id = sel->id;
file->ref = screen->sel;
file->id = screen->sel->id;
file->tab = *dir;
file->tab.name = strdup("sel");
}if(name) goto LastItem;
@ -480,9 +480,9 @@ lookup_file(FileId *parent, char *name)
switch(file->tab.type) {
case FsDBars:
if(!strncmp(file->tab.name, "lbar", 5))
file->ref = &lbar;
file->ref = &screen[0].lbar;
else
file->ref = &rbar;
file->ref = &screen[0].rbar;
break;
case FsFColRules:
file->ref = &def.colrules;
@ -816,7 +816,7 @@ fs_remove(P9Req *r) {
return respond(r, Enoperm);
case FsFBar:
destroy_bar(f->next->bar_p, f->bar);
draw_bar();
draw_bar(screen);
respond(r, nil);
break;
}
@ -855,7 +855,7 @@ fs_clunk(P9Req *r) {
while(i > 0 && buf[i - 1] == '\n')
buf[--i] = '\0';
cext_strlcpy(f->bar->text, buf, sizeof(f->bar->text));
draw_bar();
draw_bar(screen);
break;
case FsFEvent:
for(fl=&pending_event_fids; *fl; fl=&(*fl)->next)

View File

@ -180,7 +180,7 @@ do_mouse_resize(Client *c, BlitzAlign align)
unsigned int num = 0, di;
Frame *f = c->sel;
Bool floating = f->area->floating;
int snap = floating ? rect.height / 66 : 0;
int snap = floating ? screen->rect.height / 66 : 0;
XRectangle *rects = floating ? rects_of_view(f->area->view, &num) : nil;
XRectangle frect = f->rect, ofrect;
XRectangle origin = frect;

View File

@ -32,11 +32,11 @@ clientframe_of_view(View *v, Client *c)
static void
assign_sel_view(View *v)
{
if(sel != v) {
if(sel)
write_event("UnfocusTag %s\n", sel->name);
sel = v;
write_event("FocusTag %s\n", sel->name);
if(screen->sel != v) {
if(screen->sel)
write_event("UnfocusTag %s\n",screen->sel->name);
screen->sel = v;
write_event("FocusTag %s\n", screen->sel->name);
}
}
@ -76,7 +76,7 @@ create_view(const char *name)
*i = v;
write_event("CreateTag %s\n", v->name);
if(!sel)
if(!screen->sel)
assign_sel_view(v);
return v;
@ -97,9 +97,9 @@ destroy_view(View *v)
if(*i == v) break;
*i = v->next;
if(sel == v)
for(sel=view; sel && sel->next; sel=sel->next)
if(sel->next == *i) break;
if(screen->sel == v)
for(screen->sel=view; screen->sel && screen->sel->next; screen->sel=screen->sel->next)
if(screen->sel->next == *i) break;
write_event("DestroyTag %s\n", v->name);
free(v);
@ -116,7 +116,7 @@ update_frame_selectors(View *v)
}
void
focus_view(View *v)
focus_view(WMScreen *s, View *v)
{
Frame *f;
Client *c;
@ -133,7 +133,8 @@ focus_view(View *v)
XMoveWindow(blz.display, c->framewin, f->rect.x, f->rect.y);
resize_client(c, &f->rect, False);
}else
XMoveWindow(blz.display, c->framewin, 2 * rect.width + f->rect.x, f->rect.y);
XMoveWindow(blz.display, c->framewin, 2 * s->rect.width + f->rect.x,
f->rect.y);
}
if((c = sel_client()))
@ -166,7 +167,7 @@ attach_to_view(View *v, Frame *f)
c->revert = nil;
if(c->trans || c->floating || c->fixedsize
|| (c->rect.width == rect.width && c->rect.height == rect.height))
|| (c->rect.width == screen->rect.width && c->rect.height == screen->rect.height))
a = v->area;
else if(starting && v->sel->floating)
a = v->area->next;
@ -257,11 +258,11 @@ arrange_view(View *v)
if(!v->area->next)
return;
scale_view(v, rect.width);
scale_view(v, screen->rect.width);
for(a=v->area->next; a; a=a->next) {
a->rect.x = xoff;
a->rect.y = 0;
a->rect.height = rect.height - brect.height;
a->rect.height = screen->rect.height - screen->brect.height;
xoff += a->rect.width;
arrange_column(a, False);
}
@ -279,8 +280,8 @@ rects_of_view(View *v, unsigned int *num)
result = cext_emallocz(*num * sizeof(XRectangle));
for(f=v->area->frame; f; f=f->anext)
*result++ = f->rect;
*result++ = rect;
*result++ = brect;
*result++ = screen->rect;
*result++ = screen->brect;
return result - *num;
}
@ -378,8 +379,8 @@ message_view(View *v, char *message) {
a->mode = i;
arrange_column(a, True);
restack_view(v);
if(v == sel)
focus_view(v);
if(v == screen->sel)
focus_view(screen, v);
draw_frames();
return nil;
}
@ -390,7 +391,7 @@ void
update_views()
{
View *n, *v;
View *old = sel;
View *old = screen->sel;
for(v=view; v; v=v->next)
update_frame_selectors(v);
@ -403,9 +404,9 @@ update_views()
destroy_view(v);
if(old)
focus_view(old);
else if(sel)
focus_view(sel);
focus_view(screen, old);
else if(screen->sel)
focus_view(screen, screen->sel);
}
unsigned int
@ -425,7 +426,7 @@ newcolw_of_view(View *v)
for(a=v->area, i=0; a; a=a->next, i++);
if(n && n >= i) {
if(sscanf(toks[i - 1], "%u", &n) == 1)
return (rect.width * n) / 100;
return (screen->rect.width * n) / 100;
}
break;
}

View File

@ -150,7 +150,7 @@ init_cursors()
}
static void
init_screen()
init_screen(WMScreen *screen)
{
Window w;
int ret;
@ -165,10 +165,10 @@ init_screen()
xorgc = XCreateGC(blz.display, blz.root, GCForeground | GCGraphicsExposures |
GCFunction | GCSubwindowMode | GCPlaneMask, &gcv);
rect.x = rect.y = 0;
rect.width = DisplayWidth(blz.display, blz.screen);
rect.height = DisplayHeight(blz.display, blz.screen);
def.snap = rect.height / 63;
screen->rect.x = screen->rect.y = 0;
screen->rect.width = DisplayWidth(blz.display, blz.screen);
screen->rect.height = DisplayHeight(blz.display, blz.screen);
def.snap = screen->rect.height / 63;
sel_screen = XQueryPointer(blz.display, blz.root, &w, &w, &ret, &ret, &ret, &ret, &mask);
}
@ -225,8 +225,9 @@ cleanup()
int
main(int argc, char *argv[])
{
int i, j;
int i;
char *address = nil, *wmiirc = nil, *namespace, *errstr;
WMScreen *s;
struct passwd *passwd;
XSetWindowAttributes wa;
@ -312,11 +313,8 @@ main(int argc, char *argv[])
case 0:
if(setsid() == -1)
error("wmiim: can't setsid: %s\n", strerror(errno));
/* This is only necessary because I can't get the fileno of
* the X socket */
j = getdtablesize();
for(i = 3; i < j; i++)
close(i);
close(i);
close(ConnectionNumber(blz.display));
snprintf(execstr, name_len, "exec %s", wmiirc);
execl("/bin/sh", "sh", "-c", execstr, nil);
error("wmiiwm: can't exec \"%s\": %s\n", wmiirc, strerror(errno));
@ -333,9 +331,8 @@ main(int argc, char *argv[])
/* X server */
ixp_server_open_conn(&srv, ConnectionNumber(blz.display), nil, check_x_event, nil);
sel = view = nil;
view = nil;
client = nil;
lbar = nil;
key = nil;
passwd = getpwuid(getuid());
@ -361,41 +358,56 @@ main(int argc, char *argv[])
init_cursors();
blitz_loadfont(&blz, &def.font);
init_lock_keys();
init_screen();
pmap = XCreatePixmap(blz.display, blz.root, rect.width, rect.height,
DefaultDepth(blz.display, blz.screen));
num_screens = 1;
screens = cext_emallocz(num_screens * sizeof(*screens));
wa.event_mask = SubstructureRedirectMask | EnterWindowMask | LeaveWindowMask;
wa.cursor = cursor[CurNormal];
XChangeWindowAttributes(blz.display, blz.root, CWEventMask | CWCursor, &wa);
for(i = 0; i < num_screens; i++) {
s = &screens[i];
s->lbar = nil;
s->rbar = nil;
s->sel = nil;
wa.override_redirect = 1;
wa.background_pixmap = ParentRelative;
wa.event_mask = ExposureMask | ButtonReleaseMask
| SubstructureRedirectMask | SubstructureNotifyMask;
init_screen(s);
brect = rect;
brect.height = height_of_bar();
brect.y = rect.height - brect.height;
barwin = XCreateWindow(blz.display, RootWindow(blz.display, blz.screen), brect.x, brect.y,
brect.width, brect.height, 0, DefaultDepth(blz.display, blz.screen),
CopyFromParent, DefaultVisual(blz.display, blz.screen),
CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
XSync(blz.display, False);
pmap = XCreatePixmap(blz.display, blz.root, s->rect.width, s->rect.height,
DefaultDepth(blz.display, blz.screen));
bbrush.blitz = &blz;
bbrush.gc = XCreateGC(blz.display, barwin, 0, 0);
bbrush.drawable = pmap;
bbrush.rect = brect;
bbrush.rect.x = 0;
bbrush.rect.y = 0;
bbrush.color = def.normcolor;
bbrush.font = &def.font;
bbrush.border = True;
wa.event_mask = SubstructureRedirectMask | EnterWindowMask | LeaveWindowMask;
wa.cursor = cursor[CurNormal];
XChangeWindowAttributes(blz.display, blz.root, CWEventMask | CWCursor, &wa);
XMapRaised(blz.display, barwin);
draw_bar();
wa.override_redirect = 1;
wa.background_pixmap = ParentRelative;
wa.event_mask = ExposureMask | ButtonReleaseMask
| SubstructureRedirectMask | SubstructureNotifyMask;
s->brect = s->rect;
s->brect.height = height_of_bar();
s->brect.y = s->rect.height - s->brect.height;
s->barwin = XCreateWindow(blz.display, RootWindow(blz.display, blz.screen),
s->brect.x, s->brect.y,
s->brect.width, s->brect.height, 0,
DefaultDepth(blz.display, blz.screen),
CopyFromParent, DefaultVisual(blz.display, blz.screen),
CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
XSync(blz.display, False);
s->bbrush.blitz = &blz;
s->bbrush.gc = XCreateGC(blz.display, s->barwin, 0, 0);
s->bbrush.drawable = pmap;
s->bbrush.rect = s->brect;
s->bbrush.rect.x = 0;
s->bbrush.rect.y = 0;
s->bbrush.color = def.normcolor;
s->bbrush.font = &def.font;
s->bbrush.border = True;
draw_bar(s);
XMapRaised(blz.display, s->barwin);
}
screen = &screens[0];
scan_wins();
update_views();

View File

@ -169,16 +169,7 @@ struct WMScreen {
XRectangle rect;
XRectangle brect;
BlitzBrush bbrush;
} *screens;
/* to be removed */
Bar *lbar;
Bar *rbar;
View *sel;
Window barwin;
XRectangle rect;
XRectangle brect;
BlitzBrush bbrush;
} *screens, *screen;
Client *client;
View *view;
@ -225,7 +216,7 @@ Client *sel_client_of_area(Area *a);
/* bar.c */
Bar *create_bar(Bar **b_link, char *name);
void destroy_bar(Bar **b_link, Bar *b);
void draw_bar();
void draw_bar(WMScreen *s);
void resize_bar();
unsigned int height_of_bar();
Bar *bar_of_name(Bar *b_link, const char *name);
@ -317,7 +308,7 @@ void arrange_view(View *v);
void scale_view(View *v, float w);
View *get_view(const char *name);
View *create_view(const char *name);
void focus_view(View *v);
void focus_view(WMScreen *s, View *v);
void update_client_views(Client *c, char **tags);
XRectangle *rects_of_view(View *v, unsigned int *num);
View *view_of_id(unsigned short id);