wmii

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

commit 55b6611a50504d8b00921453987ab37c9f7fc6d8
parent 304d22ed62a5087afb06cf03d30f3a899e2e46ef
Author: garbeam <garbeam@mmv.wmii.de>
Date:   Sun, 11 Dec 2005 16:47:23 +0200

fixed several issues


Diffstat:
cmd/wm/area.c | 4+++-
cmd/wm/client.c | 18+++++++++---------
cmd/wm/event.c | 14+++++++++++---
cmd/wm/frame.c | 16++++++++++------
cmd/wm/layout_column.c | 4+++-
cmd/wm/layout_float.c | 10++++------
cmd/wm/mouse.c | 8++++----
cmd/wm/wm.c | 3+--
cmd/wmibar.c | 4++--
cmd/wmikeys.c | 2+-
cmd/wmimenu.c | 2+-
liblitz/blitz.h | 3+--
liblitz/draw.c | 2+-
liblitz/geometry.c | 24++++++++++++------------
liblitz/mouse.c | 2+-
liblitz/util.c | 4++--
16 files changed, 66 insertions(+), 54 deletions(-)

diff --git a/cmd/wm/area.c b/cmd/wm/area.c @@ -47,8 +47,10 @@ void destroy_area(Area *a) { Client *c; a->layout->deinit(a); - while ((c = cext_stack_get_top_item(&a->clients))) + while ((c = cext_stack_get_top_item(&a->clients))) { cext_detach_item(&a->clients, c); + cext_attach_item(&detached, c); + } ixp_remove_file(ixps, a->file[A_PREFIX]); cext_detach_item(&areas, a); free(a); diff --git a/cmd/wm/client.c b/cmd/wm/client.c @@ -47,8 +47,7 @@ void set_client_state(Client * c, int state) data[0] = (long) state; data[1] = (long) None; - XChangeProperty(dpy, c->win, wm_state, wm_state, 32, - PropModeReplace, (unsigned char *) data, 2); + XChangeProperty(dpy, c->win, wm_state, wm_state, 32, PropModeReplace, (unsigned char *) data, 2); } void show_client(Client * c) @@ -83,12 +82,10 @@ void grab_client(Client * c, unsigned long mod, unsigned int button) XGrabButton(dpy, button, mod, c->win, False, ButtonPressMask, GrabModeAsync, GrabModeAsync, None, None); if ((mod != AnyModifier) && num_lock_mask) { - XGrabButton(dpy, button, mod | num_lock_mask, c->win, - False, ButtonPressMask, GrabModeAsync, GrabModeAsync, - None, None); - XGrabButton(dpy, button, mod | num_lock_mask | LockMask, - c->win, False, ButtonPressMask, GrabModeAsync, - GrabModeAsync, None, None); + XGrabButton(dpy, button, mod | num_lock_mask, c->win, False, ButtonPressMask, + GrabModeAsync, GrabModeAsync, None, None); + XGrabButton(dpy, button, mod | num_lock_mask | LockMask, c->win, False, ButtonPressMask, + GrabModeAsync, GrabModeAsync, None, None); } XSelectInput(dpy, c->win, CLIENT_MASK); XSync(dpy, False); @@ -198,6 +195,7 @@ void handle_client_property(Client * c, XPropertyEvent * e) void destroy_client(Client * c) { + cext_detach_item(&detached, c); cext_detach_item(&clients, c); ixp_remove_file(ixps, c->file[C_PREFIX]); free(c); @@ -341,8 +339,10 @@ void detach_client(Client *c) { } if (c->destroyed) destroy_client(c); - if ((p = get_sel_page())) + if ((p = get_sel_page())) { + sel_page(p); draw_page(p); + } } Client *get_sel_client() diff --git a/cmd/wm/event.c b/cmd/wm/event.c @@ -63,6 +63,7 @@ static void handle_buttonpress(XEvent * e) Client *c; XButtonPressedEvent *ev = &e->xbutton; Frame *f = win_to_frame(ev->window); + fprintf(stderr, "%s\n", "handle_buttonpress"); if (f) { handle_frame_buttonpress(ev, f); @@ -104,7 +105,8 @@ static void handle_configurerequest(XEvent * e) unsigned int bw = 0, tabh = 0; Frame *f = 0; - /* fprintf(stderr, "%s", "configure request\n"); */ + + fprintf(stderr, "%s\n", "handle_configurerequest"); c = win_to_client(ev->window); ev->value_mask &= ~CWSibling; @@ -167,7 +169,7 @@ static void handle_destroynotify(XEvent * e) { XDestroyWindowEvent *ev = &e->xdestroywindow; Client *c = win_to_client(ev->window); - /* fprintf(stderr, "destroy: client 0x%x\n", (int)ev->window); */ + fprintf(stderr, "%s\n", "handle_destroynotify"); if (c) { c->destroyed = True; detach_client(c); @@ -177,6 +179,7 @@ static void handle_destroynotify(XEvent * e) static void handle_expose(XEvent * e) { static Frame *f; + fprintf(stderr, "%s\n", "handle_expose"); if (e->xexpose.count == 0) { f = win_to_frame(e->xbutton.window); if (f) @@ -190,7 +193,7 @@ static void handle_maprequest(XEvent * e) static XWindowAttributes wa; static Client *c; - /* fprintf(stderr, "map: window 0x%x\n", (int)ev->window); */ + fprintf(stderr, "%s\n", "handle_maprequest"); if (!XGetWindowAttributes(dpy, ev->window, &wa)) return; if (wa.override_redirect) @@ -209,6 +212,7 @@ static void handle_motionnotify(XEvent * e) { Frame *f = win_to_frame(e->xmotion.window); Cursor cursor; + fprintf(stderr, "%s\n", "handle_motionnotify"); if (f) { cursor = cursor_for_motion(f, e->xmotion.x, e->xmotion.y); if (cursor != f->cursor) { @@ -223,6 +227,7 @@ static void handle_propertynotify(XEvent * e) XPropertyEvent *ev = &e->xproperty; Client *c = win_to_client(ev->window); + fprintf(stderr, "%s\n", "handle_propertynotify"); if (c) handle_client_property(c, ev); } @@ -231,6 +236,7 @@ static void handle_unmapnotify(XEvent * e) { XUnmapEvent *ev = &e->xunmap; Client *c; + fprintf(stderr, "%s\n", "handle_unmapnotify"); handle_ignore_enternotify_crap(e); if ((c = win_to_client(ev->window))) detach_client(c); @@ -244,6 +250,7 @@ static void handle_enternotify(XEvent * e) if ((ev->mode != NotifyNormal) || (ev->detail == NotifyInferior)) return; + fprintf(stderr, "%s\n", "handle_enternotify"); c = win_to_client(ev->window); if (c && c->frame && (ev->serial != ignore_enternotify_crap)) { Frame *old = get_sel_frame(); @@ -257,6 +264,7 @@ static void handle_enternotify(XEvent * e) static void handle_ignore_enternotify_crap(XEvent *e) { + fprintf(stderr, "%s\n", "handle_ignore_enternotify_crap"); ignore_enternotify_crap = e->xany.serial; XSync(dpy, False); } diff --git a/cmd/wm/frame.c b/cmd/wm/frame.c @@ -123,14 +123,14 @@ void destroy_frame(Frame * f) unsigned int tab_height(Frame * f) { - if (_strtonum(f->file[F_TAB]->content, 1, 1)) + if (blitz_strtonum(f->file[F_TAB]->content, 0, 1)) return font->ascent + font->descent + 4; return 0; } unsigned int border_width(Frame * f) { - if (_strtonum(f->file[F_BORDER]->content, 0, 1)) + if (blitz_strtonum(f->file[F_BORDER]->content, 0, 1)) return BORDER_WIDTH; return 0; } @@ -305,7 +305,9 @@ void attach_client_to_frame(Frame *f, Client *c) f->file[F_SEL_CLIENT]->content = c->file[C_PREFIX]->content; cext_attach_item(&f->clients, c); c->frame = f; - reparent_client(c, f->win, border_width(f), tab_height(f)); + c->rect.x = border_width(f); + c->rect.y = tab_height(f); + reparent_client(c, f->win, c->rect.x, c->rect.y); resize_frame(f, &f->rect, 0); show_client(c); sel_client(c); @@ -320,10 +322,12 @@ void detach_client_from_frame(Client *c) wmii_move_ixpfile(c->file[C_PREFIX], def[WM_DETACHED_CLIENT]); cext_detach_item(&f->clients, c); if (!c->destroyed) { + cext_attach_item(&detached, c); hide_client(c); - c->rect.x += f->rect.x; - c->rect.y += f->rect.y; + c->rect.x = f->rect.x; + c->rect.y = f->rect.y; reparent_client(c, root, c->rect.x, c->rect.y); + XSync(dpy, False); } if ((client = cext_stack_get_top_item(&f->clients))) { sel_client(client); @@ -344,7 +348,7 @@ static void select_client(void *obj, char *arg) else if (!strncmp(arg, "next", 5)) c = cext_list_get_next_item(&f->clients, c); else - c = cext_list_get_item(&f->clients, _strtonum(arg, 0, cext_sizeof(&f->clients) - 1)); + c = cext_list_get_item(&f->clients, blitz_strtonum(arg, 0, cext_sizeof(&f->clients) - 1)); sel_client(c); draw_frame(f, nil); } diff --git a/cmd/wm/layout_column.c b/cmd/wm/layout_column.c @@ -285,6 +285,8 @@ static void select_col(Frame *f, Bool raise) cext_stack_top_item(&col->frames, f); cext_stack_top_item(&acme->frames, f); a->file[A_SEL_FRAME]->content = f->file[F_PREFIX]->content; + if (raise) + center_pointer(f); } static Container *get_frames_col(Area *a) @@ -317,7 +319,7 @@ static void select_frame(void *obj, char *arg) else if (!strncmp(arg, "east", 5)) f = cext_stack_get_top_item(&((Column *)cext_list_get_next_item(&acme->columns, col))->frames); else - f = cext_list_get_item(&col->frames, _strtonum(arg, 0, cext_sizeof(&col->frames) - 1)); + f = cext_list_get_item(&col->frames, blitz_strtonum(arg, 0, cext_sizeof(&col->frames) - 1)); if (old != f) { select_col(f, True); center_pointer(f); diff --git a/cmd/wm/layout_float.c b/cmd/wm/layout_float.c @@ -66,7 +66,6 @@ static void deinit_float(Area *a) static Bool attach_float(Area *a, Client *c) { Frame *f = get_sel_frame_of_area(a); - Bool center = False; /* check for tabbing? */ if (f && (((char *) f->file[F_LOCKED]->content)[0] == '1')) @@ -75,13 +74,10 @@ static Bool attach_float(Area *a, Client *c) f = alloc_frame(&c->rect); attach_frame_to_area(a, f); cext_attach_item((Container *)a->aux, f); - center = True; } attach_client_to_frame(f, c); if (a->page == get_sel_page()) XMapWindow(dpy, f->win); - if (center) - center_pointer(f); select_float(f, True); draw_frame(f, nil); return True; @@ -109,8 +105,10 @@ static void select_float(Frame *f, Bool raise) sel_client(cext_stack_get_top_item(&f->clients)); cext_stack_top_item(a->aux, f); a->file[A_SEL_FRAME]->content = f->file[F_PREFIX]->content; - if (raise) + if (raise) { XRaiseWindow(dpy, f->win); + center_pointer(f); + } } static Container *get_frames_float(Area *a) @@ -132,7 +130,7 @@ static void select_frame(void *obj, char *arg) else if (!strncmp(arg, "next", 5)) f = cext_list_get_next_item(c, f); else - f = cext_list_get_item(c, _strtonum(arg, 0, cext_sizeof(c) - 1)); + f = cext_list_get_item(c, blitz_strtonum(arg, 0, cext_sizeof(c) - 1)); if (old != f) { select_float(f, True); center_pointer(f); diff --git a/cmd/wm/mouse.c b/cmd/wm/mouse.c @@ -295,8 +295,8 @@ void mouse_move(Frame * f) Window dummy; XEvent ev; /* borders */ - int snapw = rect.width * _strtonum(def[WM_SNAP_VALUE]->content, 0, 1000) / 1000; - int snaph = rect.height * _strtonum(def[WM_SNAP_VALUE]->content, 0, 1000) / 1000; + int snapw = rect.width * blitz_strtonum(def[WM_SNAP_VALUE]->content, 0, 1000) / 1000; + int snaph = rect.height * blitz_strtonum(def[WM_SNAP_VALUE]->content, 0, 1000) / 1000; unsigned int num; unsigned int dmask; XRectangle *rects = rectangles(&num); @@ -538,8 +538,8 @@ void mouse_resize(Frame * f, Align align) Window dummy; XEvent ev; /* borders */ - int snapw = rect.width * _strtonum(def[WM_SNAP_VALUE]->content, 0, 1000) / 1000; - int snaph = rect.height * _strtonum(def[WM_SNAP_VALUE]->content, 0, 1000) / 1000; + int snapw = rect.width * blitz_strtonum(def[WM_SNAP_VALUE]->content, 0, 1000) / 1000; + int snaph = rect.height * blitz_strtonum(def[WM_SNAP_VALUE]->content, 0, 1000) / 1000; unsigned int dmask; unsigned int num; XRectangle *rects = rectangles(&num); diff --git a/cmd/wm/wm.c b/cmd/wm/wm.c @@ -395,7 +395,6 @@ static void _detach_client(void *obj, char *cmd) return; c = cext_stack_get_top_item(&f->clients); f->area->layout->detach(f->area, c); - cext_attach_item(&detached, c); } static void _select_page(void *obj, char *cmd) @@ -408,7 +407,7 @@ static void _select_page(void *obj, char *cmd) else if (!strncmp(cmd, "next", 5)) p = cext_list_get_next_item(&pages, p); else - p = cext_list_get_item(&pages, _strtonum(cmd, 0, cext_sizeof(&pages) - 1)); + p = cext_list_get_item(&pages, blitz_strtonum(cmd, 0, cext_sizeof(&pages) - 1)); sel_page(p); } diff --git a/cmd/wmibar.c b/cmd/wmibar.c @@ -144,7 +144,7 @@ static void display(void *obj, char *arg) { if (!arg) return; - displayed = _strtonum(arg, 0, 1); + displayed = blitz_strtonum(arg, 0, 1); if (displayed) { XMapRaised(dpy, win); draw_bar(0, 0); @@ -202,7 +202,7 @@ static void draw() if (!size) return; - expandable = _strtonum(file[B_EXPANDABLE]->content, 0, size); + expandable = blitz_strtonum(file[B_EXPANDABLE]->content, 0, size); snprintf(buf, sizeof(buf), "/%d", expandable); if (!ixp_walk(ixps, buf)) expandable = 0; diff --git a/cmd/wmikeys.c b/cmd/wmikeys.c @@ -367,7 +367,7 @@ static void handle_after_write(IXPServer * s, File * f) } } } else if (f == files[K_GRAB_KB]) { - grabkb = _strtonum(files[K_GRAB_KB]->content, 0, 1); + grabkb = blitz_strtonum(files[K_GRAB_KB]->content, 0, 1); if (!grabkb) { XUngrabKeyboard(dpy, CurrentTime); XUnmapWindow(dpy, win); diff --git a/cmd/wmimenu.c b/cmd/wmimenu.c @@ -146,7 +146,7 @@ static void display(void *obj, char *arg) { if (!arg) return; - if (_strtonum(arg, 0, 1)) + if (blitz_strtonum(arg, 0, 1)) show(); else hide(); diff --git a/liblitz/blitz.h b/liblitz/blitz.h @@ -56,5 +56,4 @@ char *blitz_modtostr(unsigned long mod); unsigned long blitz_strtomod(char *val); /* util.c */ -long long -_strtonum(const char *numstr, long long minval, long long maxval); +long long blitz_strtonum(const char *numstr, long long minval, long long maxval); diff --git a/liblitz/draw.c b/liblitz/draw.c @@ -139,7 +139,7 @@ void blitz_drawmeter(Display * dpy, Draw * d) if (!d->data || strncmp(d->data, "%m:", 3)) return; - val = _strtonum(&d->data[3], 0, 100); + val = blitz_strtonum(&d->data[3], 0, 100); draw_bg(dpy, d); _draw_border(dpy, d); diff --git a/liblitz/geometry.c b/liblitz/geometry.c @@ -69,13 +69,13 @@ int blitz_strtorect(XRectangle * root, XRectangle * r, char *val) } } if (x && (sx = (x[0] >= '0') && (x[0] <= '9'))) - r->x = _strtonum(x, 0, 65535); + r->x = blitz_strtonum(x, 0, 65535); if (y && (sy = (y[0] >= '0') && (y[0] <= '9'))) - r->y = _strtonum(y, 0, 65535); + r->y = blitz_strtonum(y, 0, 65535); if (w && (sw = (w[0] >= '0') && (w[0] <= '9'))) - r->width = _strtonum(w, 0, 65535); + r->width = blitz_strtonum(w, 0, 65535); if (h && (sh = (h[0] >= '0') && (h[0] <= '9'))) - r->height = _strtonum(h, 0, 65535); + r->height = blitz_strtonum(h, 0, 65535); if (!sx && !sw && x && w && x[0] != '-' && x[0] != '+' && w[0] != '-' && w[0] != '+') { @@ -151,34 +151,34 @@ int blitz_strtorect(XRectangle * root, XRectangle * r, char *val) if (x) { p = strchr(x, '-'); if (p) - r->x -= _strtonum(++p, 0, 65535); + r->x -= blitz_strtonum(++p, 0, 65535); p = strchr(x, '+'); if (p) - r->x += _strtonum(++p, 0, 65535); + r->x += blitz_strtonum(++p, 0, 65535); } if (y) { p = strchr(y, '-'); if (p) - r->y -= _strtonum(++p, 0, 65535); + r->y -= blitz_strtonum(++p, 0, 65535); p = strchr(y, '+'); if (p) - r->y += _strtonum(++p, 0, 65535); + r->y += blitz_strtonum(++p, 0, 65535); } if (w) { p = strchr(w, '-'); if (p) - r->width -= _strtonum(++p, 0, 65535); + r->width -= blitz_strtonum(++p, 0, 65535); p = strchr(w, '+'); if (p) - r->width += _strtonum(++p, 0, 65535); + r->width += blitz_strtonum(++p, 0, 65535); } if (h) { p = strchr(h, '-'); if (p) - r->height -= _strtonum(++p, 0, 65535); + r->height -= blitz_strtonum(++p, 0, 65535); p = strchr(h, '+'); if (p) - r->height += _strtonum(++p, 0, 65535); + r->height += blitz_strtonum(++p, 0, 65535); } return TRUE; } diff --git a/liblitz/mouse.c b/liblitz/mouse.c @@ -22,6 +22,6 @@ unsigned int blitz_strtobutton(char *val) { unsigned int res = 0; if (val && strlen(val) > 6 && !strncmp(val, "Button", 6)) - res = _strtonum(&val[6], 1, 5) + Button1; + res = blitz_strtonum(&val[6], 1, 5) + Button1; return res; } diff --git a/liblitz/util.c b/liblitz/util.c @@ -7,11 +7,11 @@ #include "blitz.h" -long long _strtonum(const char *numstr, long long minval, long long maxval) +long long blitz_strtonum(const char *numstr, long long minval, long long maxval) { const char *errstr; long long ret = cext_strtonum(numstr, minval, maxval, &errstr); if (errstr) - fprintf(stderr, "liblitz: cannot convert '%s' into integer: %s\n", numstr, errstr); + fprintf(stderr, "liblitz: cannot convert '%s' into integer: %s [%lld..%lld]\n", numstr, errstr, minval, maxval); return ret; }