wmii

git clone git://oldgit.suckless.org/wmii/
Log | Files | Refs | README | LICENSE

commit d2683b3e4b8cde0c2a41acaaa09262b335a23b1f
parent 3ce3f784ea0bd170e4ab4e8f839a1d555184ab94
Author: garbeam <garbeam@mmv.wmii.de>
Date:   Tue, 13 Dec 2005 23:48:52 +0200

fixed several frame rectangle based issues


Diffstat:
cmd/wm/frame.c | 3+--
cmd/wm/layout_column.c | 1+
cmd/wm/wm.c | 12++----------
libixp/ixp.h | 34++++++++++------------------------
libixp/ramfs.c | 14++------------
libixp/server.c | 28+++++++---------------------
rc/wmiirc | 22++++++++++------------
7 files changed, 33 insertions(+), 81 deletions(-)

diff --git a/cmd/wm/frame.c b/cmd/wm/frame.c @@ -385,12 +385,11 @@ static void iter_after_write_frame(void *item, void *aux) } else if (file == f->file[F_GEOMETRY]) { char *geom = f->file[F_GEOMETRY]->content; if (geom && strrchr(geom, ',')) { - XRectangle frect; + XRectangle frect = f->rect; blitz_strtorect(&rect, &frect, geom); resize_frame(f, &frect, 0); draw_page(f->area->page); } - return; } } diff --git a/cmd/wm/layout_column.c b/cmd/wm/layout_column.c @@ -71,6 +71,7 @@ static void iter_arrange_column_frame(void *frame, void *height) f->rect.height = area_rect.height - f->rect.y + area_rect.y; else f->rect.height = h; + resize_frame(f, &f->rect, 0); } diff --git a/cmd/wm/wm.c b/cmd/wm/wm.c @@ -707,15 +707,7 @@ static int startup_error_handler(Display * dpy, XErrorEvent * error) static void clean_client_up(void *item, void *aux) { - Client *c = item; - Frame *f = c->frame; - if (f) { - XWindowChanges wc; - gravitate(c, tab_height(f), border_width(f), 1); - XReparentWindow(dpy, c->win, root, f->rect.x + c->rect.x, f->rect.y + c->rect.y); - wc.border_width = c->border; - XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); - } + detach_client(item, False); } static void cleanup() @@ -809,7 +801,7 @@ int main(int argc, char *argv[]) /* main event loop */ run_server_with_fd_support(ixps, ConnectionNumber(dpy), check_event, 0); cleanup(); - deinit_server(ixps); +/* deinit_server(ixps);*/ XCloseDisplay(dpy); return 0; diff --git a/libixp/ixp.h b/libixp/ixp.h @@ -91,7 +91,6 @@ struct File { char *name; void *content; size_t size; - int lock; int bind; File *parent; File *next; @@ -110,8 +109,7 @@ struct IXPClient { void (*remove) (IXPClient *, char *path); int (*open) (IXPClient *, char *path); void (*close) (IXPClient *, int fd); - size_t(*read) (IXPClient *, int fd, void *out_buf, - size_t out_buf_len); + size_t(*read) (IXPClient *, int fd, void *out_buf, size_t out_buf_len); void (*write) (IXPClient *, int fd, void *content, size_t in_len); }; @@ -126,7 +124,7 @@ struct IXPServer { * operations */ File *(*create) (IXPServer *, char *); File *(*open) (IXPServer *, char *); - size_t(*read) (IXPServer *, int, size_t, void *, size_t); + size_t(*read) (IXPServer *, int, size_t, void *, size_t); void (*write) (IXPServer *, int, size_t, void *, size_t); void (*close) (IXPServer *, int); void (*remove) (IXPServer *, char *); @@ -135,20 +133,14 @@ struct IXPServer { /* client.c, implements client stub functions for fs access */ IXPClient *init_ixp_client(char *sockfile); void deinit_client(IXPClient * c); -size_t -seek_read(IXPClient * c, int fd, size_t offset, void *out_buf, - size_t out_buf_len); -void -seek_write(IXPClient * c, int fd, size_t offset, - void *content, size_t in_len); +size_t seek_read(IXPClient * c, int fd, size_t offset, void *out_buf, size_t out_buf_len); +void seek_write(IXPClient * c, int fd, size_t offset, void *content, size_t in_len); /* message.c */ void *tcreate_message(char *path, size_t * msg_len); void *topen_message(char *path, size_t * msg_len); -void *tread_message(int fd, size_t offset, size_t buf_len, - size_t * msg_len); -void *twrite_message(int fd, size_t offset, void *msg, size_t in_len, - size_t * msg_len); +void *tread_message(int fd, size_t offset, size_t buf_len, size_t * msg_len); +void *twrite_message(int fd, size_t offset, void *msg, size_t in_len, size_t * msg_len); void *tclose_message(int fd, size_t * msg_len); void *tremove_message(char *path, size_t * msg_len); void *rcreate_message(size_t * msg_len); @@ -164,12 +156,8 @@ int is_directory(File * f); File *ixp_walk(IXPServer * s, char *path); File *ixp_create(IXPServer * s, char *path); File *ixp_open(IXPServer * s, char *path); -size_t -ixp_read(IXPServer * s, int fd, size_t offset, void *out_buf, - size_t out_buf_len); -void -ixp_write(IXPServer * s, int fd, size_t offset, - void *content, size_t in_len); +size_t ixp_read(IXPServer * s, int fd, size_t offset, void *out_buf, size_t out_buf_len); +void ixp_write(IXPServer * s, int fd, size_t offset, void *content, size_t in_len); void ixp_close(IXPServer * s, int fd); void ixp_remove(IXPServer * s, char *path); void ixp_remove_file(IXPServer * s, File * f); @@ -179,8 +167,6 @@ IXPServer *init_server(char *sockfile, void (*cleanup) (void)); void deinit_server(IXPServer * s); File *fd_to_file(IXPServer * s, int fd); void run_server(IXPServer * s); -void run_server_with_fd_support(IXPServer * s, int fd, void (*fd_read) (Connection *), /* callback for read on - * fd */ - void (*fd_write) (Connection *)); /* callback for write on - * fd */ +void run_server_with_fd_support(IXPServer * s, int fd, void (*fd_read) (Connection *), /* callback for read on fd */ + void (*fd_write) (Connection *)); /* callback for write on fd */ void set_error(IXPServer * s, char *errstr); diff --git a/libixp/ramfs.c b/libixp/ramfs.c @@ -115,9 +115,8 @@ File *ixp_open(IXPServer * s, char *path) f = ixp_walk(s, path); if (!f) { set_error(s, "file does not exist"); - return 0; + return nil; } - f->lock++; return f; } @@ -126,8 +125,6 @@ void ixp_close(IXPServer * s, int fd) File *f = fd_to_file(s, fd); if (!f) set_error(s, "invalid file descriptor"); - else if (f->lock > 0) - f->lock--; } size_t @@ -209,15 +206,12 @@ static void _ixp_remove(IXPServer * s, File * f) { if (!f) return; + fprintf(stderr, "ixp_remove: %s\n", f->name); if (f->next) { _ixp_remove(s, f->next); if (s->errstr) return; } - if (f->lock) { - set_error(s, "cannot remove opened file"); - return; /* a file is opened, so stop removing tree */ - } if (!f->bind && is_directory(f)) { _ixp_remove(s, f->content); if (s->errstr) @@ -242,10 +236,6 @@ void ixp_remove_file(IXPServer * s, File * f) set_error(s, "file does not exist"); return; } - if (f->lock) { - set_error(s, "cannot remove opened file"); - return; - } /* detach */ p = f->parent; n = f->next; diff --git a/libixp/server.c b/libixp/server.c @@ -75,19 +75,15 @@ static void handle_ixp_open(Connection * c) static void handle_ixp_read(Connection * c, ReqHeader * h) { - int fidx = h->fd - (c->index * MAX_CONN); void *data = 0; size_t out_len; data = cext_emallocz(h->buf_len); out_len = c->s->read(c->s, h->fd, h->offset, data, h->buf_len); free(c->data); - if (c->s->errstr) { + if (c->s->errstr) c->data = rerror_message(c->s->errstr, &c->len); - if (c->files[fidx] && c->files[fidx]->lock > 0) - c->files[fidx]->lock--; - - } else + else c->data = rread_message(data, out_len, &c->len); c->remain = c->len; free(data); @@ -95,16 +91,12 @@ static void handle_ixp_read(Connection * c, ReqHeader * h) static void handle_ixp_write(Connection * c, ReqHeader * h) { - int fidx = h->fd - (c->index * MAX_CONN); c->s->write(c->s, h->fd, h->offset, ((char *) c->data) + sizeof(ReqHeader), h->buf_len); free(c->data); - if (c->s->errstr) { + if (c->s->errstr) c->data = rerror_message(c->s->errstr, &c->len); - if (c->files[fidx] && c->files[fidx]->lock > 0) - c->files[fidx]->lock--; - - } else + else c->data = rwrite_message(&c->len); c->remain = c->len; } @@ -116,12 +108,9 @@ static void handle_ixp_close(Connection * c, ReqHeader * h) c->s->close(c->s, h->fd); c->files[fidx] = 0; free(c->data); - if (c->s->errstr) { + if (c->s->errstr) c->data = rerror_message(c->s->errstr, &c->len); - if (c->files[fidx] && c->files[fidx]->lock > 0) - c->files[fidx]->lock--; - - } else + else c->data = rclose_message(&c->len); c->remain = c->len; } @@ -198,11 +187,8 @@ static void close_conn(Connection * c) c->fd = -1; c->mode = 0; for (i = 0; i < MAX_OPEN_FILES; i++) { - if (c->files[i]) { - if (c->files[i]->lock > 0) - c->files[i]->lock--; + if (c->files[i]) c->files[i] = 0; - } } } diff --git a/rc/wmiirc b/rc/wmiirc @@ -2,6 +2,7 @@ # configure wmii TAB=0 +HANDLEINC=0 BAR_ALIGN=south #BAR_ALIGN=north @@ -58,6 +59,7 @@ fn frameconf { normstyle $1/nstyle selstyle $1/sstyle wmiir write $1/tab $TAB + wmiir write $1/handleinc $HANDLEINC if(~ $2 refresh) wmiir write $1/geometry +0,+0,+0,+0 # causes refresh } @@ -78,14 +80,10 @@ fn barsucks { } wmiir write /bar/geometry $BAR_ALIGN -if (~ $BAR_ALIGN south) { - wmiir write /bar/event/resize \ - 'val=`{wmiir read /bar/geometry|sed ''s/,/ /g''|awk ''{print $4}''} wmiir write /wm/default/area/geometry ''+0,+0,+0,-''^$val' -} -if not { - wmiir write /bar/event/resize \ - 'val=`{wmiir read /bar/geometry|sed ''s/,/ /g''|awk ''{print $4}''} wmiir write /wm/default/area/geometry ''+0,+''^$val^'',+0,-''^$val' -} +if (~ $BAR_ALIGN south) + wmiir write /bar/event/resize 'val=`{wmiir read /bar/geometry|sed ''s/,/ /g''|awk ''{print $4}''} wmiir write /wm/default/area/geometry ''+0,+0,+0,-''^$val' +if not + wmiir write /bar/event/resize 'val=`{wmiir read /bar/geometry|sed ''s/,/ /g''|awk ''{print $4}''} wmiir write /wm/default/area/geometry ''+0,+''^$val^'',+0,-''^$val' wmiir write /bar/ctl reset wmiir write /bar/font $FONT @@ -113,7 +111,7 @@ wmiir write /bar/ctl 'display 1' wmiir write /wm/default/font $FONT wmiir write /wm/default/transcolor $SEL_BORDER_COLOR -wmiir write /wm/default/handleinc 0 +wmiir write /wm/default/handleinc $HANDLEINC wmiir write /wm/default/border 1 wmiir write /wm/event/clientupdate \ @@ -123,8 +121,8 @@ wmiir write /wm/event/pageupdate \ 'wmiir write /bar/'^$plab^'/data `{wmiir read /wm/sel/name} &&' ^ \ 'wmiir write /bar/'^$llab^'/data `{wmiir read /wm/sel/layout/sel/name}' -for(frame in `{wmiir read /wm/sel/layout/sel | grep '^[0-9]'}) - framesconf /wm/sel/layout/sel/$frame refresh +for(layout in `{wmiir read /wm/sel/layout/ | grep '^[0-9]'}) + framesconf /wm/sel/layout/$layout/frame refresh frameconf /wm/default norefresh @@ -143,7 +141,7 @@ kbind normal $MODKEY-d 'wmiir write /wm/ctl detach' kbind normal $MODKEY-a 'wmiir write /wm/ctl attach' kbind normal $MODKEY-S-a 'wmiir write /wm/ctl detached_clients' kbind normal $MODKEY-S-c 'wmiir write /wm/sel/layout/1/name column' -kbind normal $MODKEY-S-n 'wmiir write /wm/sel/layout/sel/ctl new' +kbind normal $MODKEY-n 'wmiir write /wm/sel/layout/sel/ctl new' kbind normal $MODKEY-S-f 'wmiir write /wm/sel/layout/sel/name float' kbind normal $MODKEY-Return 'wmiir write /wm/sel/layout/sel/ctl ''swap west''' kbind normal $MODKEY-S-Return 'wmiir write /wm/sel/layout/sel/ctl ''swap east'''