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:
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'''