mirror of
https://github.com/0intro/wmii
synced 2024-11-22 22:02:30 +03:00
Began changes required for Xinerema support
This commit is contained in:
parent
0fd8d49ee8
commit
f05e39aeed
@ -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;
|
||||
}
|
||||
|
44
cmd/wm/bar.c
44
cmd/wm/bar.c
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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];
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
24
cmd/wm/fs.c
24
cmd/wm/fs.c
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
96
cmd/wm/wm.c
96
cmd/wm/wm.c
@ -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();
|
||||
|
||||
|
15
cmd/wm/wm.h
15
cmd/wm/wm.h
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user