heapized global containers

This commit is contained in:
garbeam 2005-12-14 20:42:00 +02:00
parent eb05036a06
commit 398043dcd6
9 changed files with 64 additions and 64 deletions

View File

@ -34,7 +34,7 @@ Area *alloc_area(Page *p, char *layout)
a->layout = get_layout(layout);
a->layout->init(a);
cext_attach_item(&p->areas, a);
cext_attach_item(&areas, a);
cext_attach_item(areas, a);
p->file[P_SEL_AREA]->content = a->file[A_PREFIX]->content;
return a;
}
@ -45,10 +45,10 @@ void destroy_area(Area *a)
a->layout->deinit(a);
while ((c = cext_stack_get_top_item(&a->clients))) {
cext_detach_item(&a->clients, c);
cext_attach_item(&detached, c);
cext_attach_item(detached, c);
}
ixp_remove_file(ixps, a->file[A_PREFIX]);
cext_detach_item(&areas, a);
cext_detach_item(areas, a);
free(a);
}
@ -122,7 +122,7 @@ static void iter_after_write_area(void *item, void *aux)
}
static void handle_after_write_area(IXPServer *s, File *f) {
cext_list_iterate(&areas, f, iter_after_write_area);
cext_list_iterate(areas, f, iter_after_write_area);
}

View File

@ -25,7 +25,7 @@ Client *alloc_client(Window w)
c->file[C_NAME] = wmii_create_ixpfile(ixps, buf, (char *)name.value);
free(name.value);
id++;
cext_attach_item(&clients, c);
cext_attach_item(clients, c);
return c;
}
@ -177,8 +177,8 @@ void handle_client_property(Client *c, XPropertyEvent *e)
void destroy_client(Client * c)
{
cext_detach_item(&detached, c);
cext_detach_item(&clients, c);
cext_detach_item(detached, c);
cext_detach_item(clients, c);
ixp_remove_file(ixps, c->file[C_PREFIX]);
free(c);
}
@ -294,7 +294,7 @@ void gravitate(Client * c, unsigned int tabh, unsigned int bw, int invert)
void attach_client(Client * c)
{
Area *a = 0;
if (!cext_sizeof_container(&pages))
if (!cext_sizeof_container(pages))
alloc_page();
/* transient stuff */
a = get_sel_area();

View File

@ -93,7 +93,7 @@ Frame *alloc_frame(XRectangle * r)
XDefineCursor(dpy, f->win, f->cursor);
f->gc = XCreateGC(dpy, f->win, 0, 0);
XSync(dpy, False);
cext_attach_item(&frames, f);
cext_attach_item(frames, f);
return f;
}
@ -107,12 +107,12 @@ static int comp_frame_win(void *pattern, void *frame)
Frame *win_to_frame(Window w)
{
return cext_find_item(&frames, &w, comp_frame_win);
return cext_find_item(frames, &w, comp_frame_win);
}
void destroy_frame(Frame * f)
{
cext_detach_item(&frames, f);
cext_detach_item(frames, f);
XFreeGC(dpy, f->gc);
XDestroyWindow(dpy, f->win);
ixp_remove_file(ixps, f->file[F_PREFIX]);
@ -318,7 +318,7 @@ void detach_client_from_frame(Client *c, Bool unmap)
cext_detach_item(&f->clients, c);
if (!c->destroyed) {
if (!unmap) {
cext_attach_item(&detached, c);
cext_attach_item(detached, c);
hide_client(c);
}
c->rect.x = f->rect.x;
@ -365,7 +365,7 @@ static void iter_before_read_frame(void *item, void *aux)
static void handle_before_read_frame(IXPServer *s, File *f)
{
cext_list_iterate(&frames, f, iter_before_read_frame);
cext_list_iterate(frames, f, iter_before_read_frame);
}
static void iter_after_write_frame(void *item, void *aux)
@ -391,7 +391,7 @@ static void iter_after_write_frame(void *item, void *aux)
static void handle_after_write_frame(IXPServer * s, File * f)
{
cext_list_iterate(&frames, f, iter_after_write_frame);
cext_list_iterate(frames, f, iter_after_write_frame);
}
Frame *get_sel_frame_of_area(Area *a)

View File

@ -17,5 +17,5 @@ static int comp_layout_name(void *name, void *layout)
Layout *get_layout(char *name)
{
return cext_find_item(&layouts, name, comp_layout_name);
return cext_find_item(layouts, name, comp_layout_name);
}

View File

@ -49,7 +49,7 @@ static Layout lcol = { "col", init_col, deinit_col, arrange_col, attach_col, det
void init_layout_column()
{
cext_attach_item(&layouts, &lcol);
cext_attach_item(layouts, &lcol);
}
static Column *get_sel_column(Acme *acme)

View File

@ -32,7 +32,7 @@ static Layout lfloat = { "float", init_float, deinit_float, arrange_float, attac
void init_layout_float()
{
cext_attach_item(&layouts, &lfloat);
cext_attach_item(layouts, &lfloat);
}
static void arrange_float(Area *a)

View File

@ -23,7 +23,7 @@ Page *alloc_page()
{
Page *p = cext_emallocz(sizeof(Page));
char buf[MAX_BUF], buf2[16];
size_t id = cext_sizeof_container(&pages);
size_t id = cext_sizeof_container(pages);
snprintf(buf2, sizeof(buf2), "%d", id);
p->areas.list = p->areas.stack = 0;
@ -41,7 +41,7 @@ Page *alloc_page()
p->file[P_CTL]->after_write = handle_after_write_page;
alloc_area(p, "float");
alloc_area(p, def[WM_LAYOUT]->content);
cext_attach_item(&pages, p);
cext_attach_item(pages, p);
def[WM_SEL_PAGE]->content = p->file[P_PREFIX]->content;
invoke_wm_event(def[WM_EVENT_PAGE_UPDATE]);
return p;
@ -57,7 +57,7 @@ void destroy_page(Page * p)
cext_list_iterate(&p->areas, nil, iter_destroy_area);
def[WM_SEL_PAGE]->content = 0;
ixp_remove_file(ixps, p->file[P_PREFIX]);
cext_detach_item(&pages, p);
cext_detach_item(pages, p);
free(p);
if ((p = get_sel_page()))
sel_page(p);
@ -72,7 +72,7 @@ void sel_page(Page * p)
return;
if (p != sel) {
hide_page(sel);
cext_stack_top_item(&pages, p);
cext_stack_top_item(pages, p);
show_page(p);
}
def[WM_SEL_PAGE]->content = p->file[P_PREFIX]->content;
@ -142,12 +142,12 @@ static void iter_after_write_page(void *item, void *aux)
static void handle_after_write_page(IXPServer *s, File *f)
{
cext_list_iterate(&pages, f, iter_after_write_page);
cext_list_iterate(pages, f, iter_after_write_page);
}
Page *get_sel_page()
{
return cext_stack_get_top_item(&pages);
return cext_stack_get_top_item(pages);
}
static void select_area(void *obj, char *arg)

View File

@ -142,7 +142,7 @@ static void draw_pager_page(Page *p, Draw *d)
{
char name[4];
initial_rect = d->rect;
if (p == cext_stack_get_top_item(&pages)) {
if (p == cext_stack_get_top_item(pages)) {
d->bg = blitz_loadcolor(dpy, screen_num, def[WM_SEL_BG_COLOR]->content);
d->fg = blitz_loadcolor(dpy, screen_num, def[WM_SEL_FG_COLOR]->content);
d->border = blitz_loadcolor(dpy, screen_num, def[WM_SEL_BORDER_COLOR]->content);
@ -151,7 +151,7 @@ static void draw_pager_page(Page *p, Draw *d)
d->fg = blitz_loadcolor(dpy, screen_num, def[WM_NORM_FG_COLOR]->content);
d->border = blitz_loadcolor(dpy, screen_num, def[WM_NORM_BORDER_COLOR]->content);
}
snprintf(name, sizeof(name), "%d", cext_list_get_item_index(&pages, p));
snprintf(name, sizeof(name), "%d", cext_list_get_item_index(pages, p));
d->data = name;
blitz_drawlabel(dpy, d);
XSync(dpy, False);
@ -166,7 +166,7 @@ static void draw_pager()
int dx;
Page *p;
blitz_getbasegeometry(&pages, &size, &cols, &rows);
blitz_getbasegeometry(pages, &size, &cols, &rows);
dx = (cols - 1) * GAP; /* GAPpx space */
tw = (rect.width - dx) / cols;
th = ((double) tw / rect.width) * rect.height;
@ -182,7 +182,7 @@ static void draw_pager()
else
d.rect.y = ir * (rect.height - th) / (rows - 1);
d.rect.height = th;
if (!(p = cext_list_get_item(&pages, i)))
if (!(p = cext_list_get_item(pages, i)))
return;
draw_pager_page(p, &d);
i++;
@ -198,9 +198,9 @@ static Page *xy_to_pager_page(int x, int y)
XRectangle r;
Page *p;
if (!cext_sizeof_container(&pages))
if (!cext_sizeof_container(pages))
return nil;
blitz_getbasegeometry(&pages, &size, &cols, &rows);
blitz_getbasegeometry(pages, &size, &cols, &rows);
dx = (cols - 1) * GAP; /* GAPpx space */
tw = (rect.width - dx) / cols;
th = ((double) tw / rect.width) * rect.height;
@ -214,7 +214,7 @@ static Page *xy_to_pager_page(int x, int y)
else
r.y = ir * (rect.height - th) / (rows - 1);
r.height = th;
if (!(p = cext_list_get_item(&pages, i)))
if (!(p = cext_list_get_item(pages, i)))
return nil;
if (blitz_ispointinrect(x, y, &r))
return p;
@ -241,7 +241,7 @@ static void pager(void *obj, char *arg)
XEvent ev;
int i;
if (!cext_sizeof_container(&pages))
if (!cext_sizeof_container(pages))
return;
XClearWindow(dpy, transient);
@ -265,8 +265,8 @@ static void pager(void *obj, char *arg)
case KeyPress:
XUnmapWindow(dpy, transient);
if ((i = handle_kpress(&ev.xkey)) != -1)
if (i < cext_sizeof_container(&pages))
sel_page(cext_list_get_item(&pages, i));
if (i < cext_sizeof_container(pages))
sel_page(cext_list_get_item(pages, i));
XUngrabKeyboard(dpy, CurrentTime);
XUngrabPointer(dpy, CurrentTime /* ev.xbutton.time */ );
return;
@ -291,9 +291,9 @@ static void draw_detached_clients()
unsigned int i, ic, ir, tw, th, rows, cols, size;
int dx, dy;
if (!cext_sizeof_container(&detached))
if (!cext_sizeof_container(detached))
return;
blitz_getbasegeometry(&detached, &size, &cols, &rows);
blitz_getbasegeometry(detached, &size, &cols, &rows);
dx = (cols - 1) * GAP; /* GAPpx space */
dy = (rows - 1) * GAP; /* GAPpx space */
tw = (rect.width - dx) / cols;
@ -304,7 +304,7 @@ static void draw_detached_clients()
i = 0;
for (ir = 0; ir < rows; ir++) {
for (ic = 0; ic < cols; ic++) {
Client *c = cext_list_get_item(&detached, i++);
Client *c = cext_list_get_item(detached, i++);
XRectangle cr;
if (!c)
return;
@ -335,7 +335,7 @@ static void detached_clients(void *obj, char *arg)
{
XEvent ev;
int i, n;
size_t size = cext_sizeof_container(&detached);
size_t size = cext_sizeof_container(detached);
Client *c;
if (!size)
@ -357,15 +357,15 @@ static void detached_clients(void *obj, char *arg)
XUnmapWindow(dpy, transient);
if ((n = handle_kpress(&ev.xkey)) != -1) {
for (i = 0; i < size; i++)
hide_client(cext_list_get_item(&detached, i));
hide_client(cext_list_get_item(detached, i));
if (n - 1 < i) {
c = cext_list_get_item(&detached, n);
cext_detach_item(&detached, c);
c = cext_list_get_item(detached, n);
cext_detach_item(detached, c);
attach_client(c);
}
} else {
for (i = 0; i < size; i++)
hide_client(cext_list_get_item(&detached, i));
hide_client(cext_list_get_item(detached, i));
}
XUngrabKeyboard(dpy, CurrentTime);
return;
@ -374,9 +374,9 @@ static void detached_clients(void *obj, char *arg)
if (ev.xbutton.button == Button1) {
XUnmapWindow(dpy, transient);
for (i = 0; i < size; i++)
hide_client(cext_list_get_item(&detached, i));
hide_client(cext_list_get_item(detached, i));
if ((c = win_to_client(ev.xbutton.window))) {
cext_detach_item(&detached, c);
cext_detach_item(detached, c);
attach_client(c);
}
}
@ -396,9 +396,9 @@ static void _close_client(void *obj, char *arg)
static void _attach_client(void *obj, char *arg)
{
if (cext_sizeof_container(&detached)) {
Client *c = cext_stack_get_top_item(&detached);
cext_detach_item(&detached, c);
if (cext_sizeof_container(detached)) {
Client *c = cext_stack_get_top_item(detached);
cext_detach_item(detached, c);
attach_client(c);
}
}
@ -416,11 +416,11 @@ static void _select_page(void *obj, char *arg)
if (!p || !arg)
return;
if (!strncmp(arg, "prev", 5))
p = cext_list_get_prev_item(&pages, p);
p = cext_list_get_prev_item(pages, p);
else if (!strncmp(arg, "next", 5))
p = cext_list_get_next_item(&pages, p);
p = cext_list_get_next_item(pages, p);
else
p = cext_list_get_item(&pages, blitz_strtonum(arg, 0, cext_sizeof_container(&pages) - 1));
p = cext_list_get_item(pages, blitz_strtonum(arg, 0, cext_sizeof_container(pages) - 1));
sel_page(p);
}
@ -449,7 +449,7 @@ static int comp_client_win(void *pattern, void *client)
Client *win_to_client(Window w)
{
return cext_find_item(&clients, &w, comp_client_win);
return cext_find_item(clients, &w, comp_client_win);
}
void scan_wins()
@ -576,7 +576,7 @@ void handle_after_write(IXPServer * s, File * f)
if (geom && strrchr(geom, ',')) {
area_rect = rect;
blitz_strtorect(&rect, &area_rect, geom);
cext_list_iterate(&pages, nil, iter_update_page);
cext_list_iterate(pages, nil, iter_update_page);
}
}
check_event(0);
@ -712,7 +712,7 @@ static void clean_client_up(void *item, void *aux)
static void cleanup()
{
cext_list_iterate(&clients, nil, clean_client_up);
cext_list_iterate(clients, nil, clean_client_up);
XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
}
@ -782,12 +782,12 @@ int main(int argc, char *argv[])
}
def[WM_CTL]->after_write = handle_after_write;
detached.list = detached.stack = 0;
pages.list = pages.stack = 0;
areas.list = areas.stack = 0;
frames.list = frames.stack = 0;
clients.list = clients.stack = 0;
layouts.list = layouts.stack = 0;
detached = cext_emallocz(sizeof(Container));
pages = cext_emallocz(sizeof(Container));
areas = cext_emallocz(sizeof(Container));
frames = cext_emallocz(sizeof(Container));
clients = cext_emallocz(sizeof(Container));
layouts = cext_emallocz(sizeof(Container));
init_atoms();
init_cursors();

View File

@ -164,12 +164,12 @@ Window root;
Window transient;
XRectangle rect;
XRectangle area_rect;
Container detached;
Container pages;
Container areas;
Container frames;
Container clients;
Container layouts;
Container *detached;
Container *pages;
Container *areas;
Container *frames;
Container *clients;
Container *layouts;
XFontStruct *font;
XColor xorcolor;
GC xorgc;