wmii

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

commit 61db1178987bb108fd9593cb51abce163b77b8df
parent 9d0cdd5ca2906d09d0815d7a210114bdaafe6947
Author: Kris Maglione <jg@suckless.org>
Date:   Sat, 14 Apr 2007 08:06:23 -0400

Cleanup.

Diffstat:
cmd/wmii/column.c | 196+++++++++++++++++++++++++++++++++++++++----------------------------------------
cmd/wmii/fns.h | 231++++++++++++++++++++++++++++++++++++++++---------------------------------------
cmd/wmii/mouse.c | 7++-----
3 files changed, 214 insertions(+), 220 deletions(-)

diff --git a/cmd/wmii/column.c b/cmd/wmii/column.c @@ -2,7 +2,9 @@ * Copyright ©2006-2007 Kris Maglione <fbsdaemon@gmail.com> * See LICENSE file for license details. */ +#include <assert.h> #include <math.h> +#include <stdio.h> #include <string.h> #include <X11/extensions/shape.h> #include <util.h> @@ -342,6 +344,7 @@ arrange_column(Area *a, Bool dirty) { } goto resize; default: + assert(!"Can't happen"); break; } scale_column(a); @@ -359,119 +362,112 @@ resize: } } +void +resize_column(Area *a, int w) { + Area *an; + int dw; + + an = a->next; + assert(an != nil); + + dw = w - a->rect.width; + a->rect.width += dw; + an->rect.width -= dw; + + arrange_view(a->view); + focus_view(screen, a->view); +} + static void -match_horiz(Area *a, XRectangle *r) { - Frame *f; +resize_colframeh(Frame *f, XRectangle *r) { + Area *a; + Frame *fa, *fb; + uint minh; + int dy, dh, maxy; - for(f=a->frame; f; f=f->anext) { - f->rect.x = r->x; - f->rect.width = r->width; - resize_frame(f, &f->rect); + a = f->area; + maxy = r_south(r); + + minh = 2 * labelh(&def.font); + + fa = f->anext; + for(fb = a->frame; fb; fb = fb->anext) + if(fb->anext == f) break; + + if(fb) + r->y = max(r->y, fb->rect.y + minh); + else + r->y = a->rect.y; + + if(fa) { + if(maxy > r_south(&fa->rect) - minh) + maxy = r_south(&fa->rect) - minh; + } + else + if(r_south(r) >= r_south(&a->rect)) + maxy = r_south(&a->rect) - 1; + + dy = f->rect.y - r->y; + dh = maxy - r_south(&f->rect); + if(fb) { + fb->rect.height -= dy; + resize_frame(fb, &fb->rect); + } + if(fa) { + fa->rect.height -= dh; + resize_frame(fa, &fa->rect); } + + f->rect.height = maxy - r->y; + resize_frame(f, &f->rect); } void -resize_column(Frame *f, XRectangle *new) { - Area *west, *east, *a; - Frame *north, *south; +resize_colframe(Frame *f, XRectangle *r) { + Area *a, *al, *ar; View *v; - BlitzAlign sticky; - uint min_height; - uint min_width; + uint minw; + int dx, dw, maxx; a = f->area; v = a->view; - min_height = 2 * labelh(&def.font); - min_width = screen->rect.width/NCOL; - - for(west=v->area->next; west; west=west->next) - if(west->next == a) break; - east = a->next; - for(north=a->frame; north; north=north->anext) - if(north->anext == f) break; - south = f->anext; - /* validate (and trim if necessary) horizontal resize */ - sticky = get_sticky(&f->rect, new); - if(new->width < min_width) { - if(sticky & EAST) - new->x = r_east(&a->rect) - min_width; - new->width = min_width; - } - if(west && !(sticky & WEST)) { - if(new->x < 0 || new->x < (west->rect.x + min_width)) { - new->width -= (west->rect.x + min_width) - new->x; - new->x = west->rect.x + min_width; - } - } else { - new->width += new->x - a->rect.x; - new->x = a->rect.x; - } - if(east && !(sticky & EAST)) { - if(r_east(new) > r_east(&east->rect) - min_width) - new->width = r_east(&east->rect) - min_width - new->x; - } else - new->width = r_east(&a->rect) - new->x; - if(new->width < min_width) - goto AfterHorizontal; - /* horizontal resize */ - sticky = get_sticky(&a->rect, new); - if(west && !(sticky & WEST)) { - west->rect.width = new->x - west->rect.x; - a->rect.width += a->rect.x - new->x; - a->rect.x = new->x; - match_horiz(a, &a->rect); - match_horiz(west, &west->rect); - //relax_column(west); - } - if(east && !(sticky & EAST)) { - east->rect.width -= r_east(new) - east->rect.x; - east->rect.x = r_east(new); - a->rect.width = r_east(new) - a->rect.x; - match_horiz(a, &a->rect); - match_horiz(east, &east->rect); - } -AfterHorizontal: - /* skip vertical resize unless the column is in equal mode */ - if(a->mode != Coldefault) - goto AfterVertical; - /* validate (and trim if necessary) vertical resize */ - sticky = get_sticky(&f->rect, new); - if(new->height < min_height) { - if((f->rect.height < min_height) && sticky & (NORTH|SOUTH)) - goto AfterVertical; - if(sticky & SOUTH) - new->y = r_south(&f->rect) - min_height; - new->height = min_height; - } - if(north && !(sticky & NORTH)) - if(new->y < 0 || new->y < (north->rect.y + min_height)) { - new->height -= (north->rect.y + min_height) - new->y; - new->y = north->rect.y + min_height; - } - if(south && !(sticky & SOUTH)) { - if(r_south(new) > r_south(&south->rect) - min_height) - new->height = r_south(&south->rect) - min_height - new->y; + maxx = r_east(r); + + minw = screen->rect.width/NCOL; + + ar = a->next; + for(al = v->area->next; al; al = al->next) + if(al->next == a) break; + + if(al) + r->x = max(r->x, al->rect.x + minw); + else + r->x = max(r->x, 0); + + if(ar) { + if(maxx >= r_east(&ar->rect) - minw) + maxx = r_east(&ar->rect) - minw; } - if(new->height < min_height) - goto AfterVertical; - /* vertical resize */ - if(north && !(sticky & NORTH)) { - north->rect.height = new->y - north->rect.y; - f->rect.height += f->rect.y - new->y; - f->rect.y = new->y; - resize_frame(north, &north->rect); - resize_frame(f, &f->rect); + else + if(maxx > screen->rect.width) + maxx = screen->rect.width - 1; + + dx = a->rect.x - r->x; + dw = maxx - r_east(&a->rect); + if(dx) { + al->rect.width -= dx; + arrange_column(al, False); } - if(south && !(sticky & SOUTH)) { - south->rect.height -= r_south(new) - south->rect.y; - south->rect.y = r_south(new); - f->rect.y = new->y; - f->rect.height = new->height; - resize_frame(f, &f->rect); - resize_frame(south, &south->rect); + if(dw) { + ar->rect.width -= dw; + arrange_column(ar, False); } -AfterVertical: - arrange_column(a, False); + + resize_colframeh(f, r); + + a->rect.width = maxx - r->x; + arrange_view(a->view); + focus_view(screen, v); } diff --git a/cmd/wmii/fns.h b/cmd/wmii/fns.h @@ -6,163 +6,164 @@ char *message_root(char *message); /* area.c */ -Area *create_area(View *v, Area *pos, uint w); -void destroy_area(Area *a); -Area *area_of_id(View *t, ushort id); -void focus_area(Area *a); -char *select_area(Area *a, char *arg); -void send_to_area(Area *to, Frame *f); -void attach_to_area(Area *a, Frame *f, Bool send); -void detach_from_area(Frame *f); -Client *area_selclient(Area *a); +Area *create_area(View*, Area *pos, uint w); +void destroy_area(Area*); +Area *area_of_id(View*, ushort id); +void focus_area(Area*); +char *select_area(Area*, char *arg); +void send_to_area(Area*, Frame*); +void attach_to_area(Area*, Frame*, Bool send); +void detach_from_area(Frame*); +Client *area_selclient(Area*); /* bar.c */ Bar *create_bar(Bar **b_link, char *name); -void destroy_bar(Bar **b_link, Bar *b); +void destroy_bar(Bar **b_link, Bar*); void draw_bar(WMScreen *s); -void draw_border(BlitzBrush *b); +void draw_border(BlitzBrush*); void resize_bar(); Bar *bar_of_name(Bar *b_link, const char *name); /* client.c */ -Client *create_client(Window w, XWindowAttributes *wa); -void destroy_client(Client *c); -void configure_client(Client *c); -void prop_client(Client *c, Atom a); -void kill_client(Client *c); -void gravitate_client(Client *c, Bool invert); -void map_client(Client *c); -void unmap_client(Client *c, int state); -void map_frame(Client *c); -void unmap_frame(Client *c); -void set_cursor(Client *c, Cursor cur); -void focus_frame(Frame *f, Bool restack); -void reparent_client(Client *c, Window w, int x, int y); -void manage_client(Client *c); -void focus(Client *c, Bool restack); -void focus_client(Client *c); -void resize_client(Client *c, XRectangle *r); -void apply_sizehints(Client *c, XRectangle *r, Bool floating, Bool frame, BlitzAlign sticky); -char *send_client(Frame *f, char *arg, Bool swap); -char * message_client(Client *c, char *message); -void move_client(Client *c, char *arg); -void size_client(Client *c, char *arg); +Client *create_client(Window, XWindowAttributes*); +void destroy_client(Client*); +void configure_client(Client*); +void prop_client(Client *c, Atom); +void kill_client(Client*); +void gravitate_client(Client*, Bool invert); +void map_client(Client*); +void unmap_client(Client*, int state); +void map_frame(Client*); +void unmap_frame(Client*); +void set_cursor(Client*, Cursor cur); +void focus_frame(Frame*, Bool restack); +void reparent_client(Client*, Window w, int x, int y); +void manage_client(Client*); +void focus(Client*, Bool restack); +void focus_client(Client*); +void resize_client(Client*, XRectangle*); +void apply_sizehints(Client*, XRectangle*, Bool floating, Bool frame, BlitzAlign sticky); +char *send_client(Frame*, char*, Bool swap); +char * message_client(Client*, char*); +void move_client(Client*, char *arg); +void size_client(Client*, char *arg); Client *selclient(); -Frame *win2frame(Window w); -Client *win2client(Window w); -void update_client_grab(Client *c); -void apply_rules(Client *c); -void apply_tags(Client *c, const char *tags); +Frame *win2frame(Window); +Client *win2client(Window); +void update_client_grab(Client*); +void apply_rules(Client*); +void apply_tags(Client*, const char*); /* column.c */ -Divide *win2div(Window w); +Divide *win2div(Window); void update_dividers(); void update_divs(); -void draw_div(Divide *d); -void arrange_column(Area *a, Bool dirty); -void resize_column(Frame *f, XRectangle *r); +void draw_div(Divide*); +void arrange_column(Area*, Bool dirty); +void resize_column(Area*, int w); +void resize_colframe(Frame*, XRectangle*); int str2colmode(const char *str); -Area *new_column(View *v, Area *pos, uint w); +Area *new_column(View*, Area *pos, uint w); /* draw.c */ -int loadcolor(Blitz *blitz, BlitzColor *c); -void draw_label(BlitzBrush *b, char *text); -void draw_tile(BlitzBrush *b); -void draw_rect(BlitzBrush *b); - -void drawbg(Display *dpy, Drawable drawable, GC gc, - XRectangle *rect, BlitzColor c, Bool fill, Bool border); -void drawcursor(Display *dpy, Drawable drawable, GC gc, - int x, int y, uint h, BlitzColor c); -uint textwidth(BlitzFont *font, char *text); -uint textwidth_l(BlitzFont *font, char *text, uint len); -void loadfont(Blitz *blitz, BlitzFont *font); +int loadcolor(Blitz *, BlitzColor *); +void draw_label(BlitzBrush *, char *text); +void draw_tile(BlitzBrush *); +void draw_rect(BlitzBrush *); + +void drawbg(Display*, Drawable, GC, + XRectangle*, BlitzColor, Bool fill, Bool border); +void drawcursor(Display*, Drawable, GC, + int x, int y, uint h, BlitzColor); +uint textwidth(BlitzFont*, char *text); +uint textwidth_l(BlitzFont*, char *text, uint len); +void loadfont(Blitz*, BlitzFont*); uint labelh(BlitzFont *font); -char *parse_colors(char **buf, int *buflen, BlitzColor *col); +char *parse_colors(char **buf, int *buflen, BlitzColor*); /* event.c */ -void dispatch_event(XEvent *e); -void check_x_event(IxpConn *c); +void dispatch_event(XEvent*); +void check_x_event(IxpConn*); uint flushevents(long even_mask, Bool dispatch); /* frame.c */ -Frame *create_frame(Client *c, View *v); -void remove_frame(Frame *f); -void insert_frame(Frame *pos, Frame *f, Bool before); -void resize_frame(Frame *f, XRectangle *r); +Frame *create_frame(Client*, View*); +void remove_frame(Frame*); +void insert_frame(Frame *pos, Frame*, Bool before); +void resize_frame(Frame*, XRectangle*); Bool frame_to_top(Frame *f); -void set_frame_cursor(Frame *f, int x, int y); -void swap_frames(Frame *fa, Frame *fb); +void set_frame_cursor(Frame*, int x, int y); +void swap_frames(Frame*, Frame*); int frame_delta_h(); -void frame2client(Frame *f, XRectangle *r); -void client2frame(Frame *f, XRectangle *r); -int ingrabbox(Frame *f, int x, int y); -void draw_frame(Frame *f); +void frame2client(Frame*, XRectangle*); +void client2frame(Frame*, XRectangle*); +int ingrabbox(Frame*, int x, int y); +void draw_frame(Frame*); void draw_frames(); -void update_frame_widget_colors(Frame *f); -void check_frame_constraints(XRectangle *rect); +void update_frame_widget_colors(Frame*); +void check_frame_constraints(XRectangle*); /* fs.c */ -void fs_attach(Ixp9Req *r); -void fs_clunk(Ixp9Req *r); -void fs_create(Ixp9Req *r); -void fs_flush(Ixp9Req *r); -void fs_freefid(Fid *f); -void fs_open(Ixp9Req *r); -void fs_read(Ixp9Req *r); -void fs_remove(Ixp9Req *r); -void fs_stat(Ixp9Req *r); -void fs_walk(Ixp9Req *r); -void fs_write(Ixp9Req *r); -void write_event(char *format, ...); +void fs_attach(Ixp9Req*); +void fs_clunk(Ixp9Req*); +void fs_create(Ixp9Req*); +void fs_flush(Ixp9Req*); +void fs_freefid(Fid*); +void fs_open(Ixp9Req*); +void fs_read(Ixp9Req*); +void fs_remove(Ixp9Req*); +void fs_stat(Ixp9Req*); +void fs_walk(Ixp9Req*); +void fs_write(Ixp9Req*); +void write_event(char*, ...); /* geom.c */ -Bool ptinrect(int x, int y, XRectangle * r); -BlitzAlign quadrant(XRectangle *rect, int x, int y); -Cursor cursor_of_quad(BlitzAlign align); -int strtorect(XRectangle *r, const char *val); +Bool ptinrect(int x, int y, XRectangle*); +BlitzAlign quadrant(XRectangle*, int x, int y); +Cursor cursor_of_quad(BlitzAlign); +int strtorect(XRectangle*, const char*); BlitzAlign get_sticky(XRectangle *src, XRectangle *dst); -int r_east(XRectangle *r); -int r_south(XRectangle *r); +int r_east(XRectangle*); +int r_south(XRectangle*); /* key.c */ -void kpress(Window w, ulong mod, KeyCode keycode); +void kpress(Window, ulong mod, KeyCode); void update_keys(); void init_lock_keys(); -ulong mod_key_of_str(char *val); +ulong mod_key_of_str(char*); /* mouse.c */ -void mouse_resizecol(Divide *d); -void do_mouse_resize(Client *c, Bool grabbox, BlitzAlign align); -void grab_mouse(Window w, ulong mod, ulong button); -void ungrab_mouse(Window w, ulong mod, uint button); +void mouse_resizecol(Divide*); +void do_mouse_resize(Client*, Bool opaque, BlitzAlign); +void grab_mouse(Window, ulong mod, ulong button); +void ungrab_mouse(Window, ulong mod, uint button); BlitzAlign snap_rect(XRectangle *rects, int num, XRectangle *current, - BlitzAlign *mask, int snap); -void grab_button(Window w, uint button, ulong mod); + BlitzAlign *mask, int snapw); +void grab_button(Window, uint button, ulong mod); /* rule.c */ -void update_rules(Rule **rule, const char *data); +void update_rules(Rule**, const char*); void trim(char *str, const char *chars); /* view.c */ -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(WMScreen *s, View *v); -void update_client_views(Client *c, char **tags); -XRectangle *rects_of_view(View *v, uint *num, Frame *ignore); -View *view_of_id(ushort id); -void select_view(const char *arg); -void attach_to_view(View *v, Frame *f); -Client *view_selclient(View *v); -char *message_view(View *v, char *message); -void restack_view(View *v); -uchar *view_index(View *v); -void destroy_view(View *v); +void arrange_view(View*); +void scale_view(View*, float w); +View *get_view(const char*); +View *create_view(const char*); +void focus_view(WMScreen*, View*); +void update_client_views(Client*, char**); +XRectangle *rects_of_view(View*, uint *num, Frame *ignore); +View *view_of_id(ushort); +void select_view(const char*); +void attach_to_view(View*, Frame*); +Client *view_selclient(View*); +char *message_view(View*, char*); +void restack_view(View*); +uchar *view_index(View*); +void destroy_view(View*); void update_views(); -uint newcolw_of_view(View *v, int i); +uint newcolw_of_view(View*, int i); /* wm.c */ -int wmii_error_handler(Display *dpy, XErrorEvent *error); -int win_proto(Window w); +int wmii_error_handler(Display*, XErrorEvent *error); +int win_proto(Window); diff --git a/cmd/wmii/mouse.c b/cmd/wmii/mouse.c @@ -357,7 +357,6 @@ mouse_resizecol(Divide *d) { XSetWindowAttributes wa; XEvent ev; Window cwin; - XRectangle r; Divide *dp; View *v; Area *a; @@ -406,9 +405,7 @@ mouse_resizecol(Divide *d) { XMaskEvent(blz.dpy, MouseMask | ExposureMask, &ev); switch (ev.type) { case ButtonRelease: - r = a->rect; - r.width = x - r.x; - resize_column(a->frame, &r); + resize_column(a, x - a->rect.x); XUngrabPointer(blz.dpy, CurrentTime); XSync(blz.dpy, False); @@ -526,7 +523,7 @@ do_mouse_resize(Client *c, Bool opaque, BlitzAlign align) { xorborder(&frect); if(!floating) - resize_column(c->sel, &frect); + resize_colframe(f, &frect); else resize_client(c, &frect);