wmii

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

commit e30b35b530a47c7af005a79fcc10eddc7ad5dc50
parent 19d8c7123d07481f521adb01aa42610eb9449819
Author: Kris Maglione <jg@suckless.org>
Date:   Fri,  1 Feb 2008 22:11:06 -0500

Reallocate the screen buffer on RandR resize.

Diffstat:
cmd/wmii/fns.h | 3+++
cmd/wmii/main.c | 10+++++-----
cmd/wmii/x11.c | 3+++
cmd/wmii/xext.c | 5+++--
4 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/cmd/wmii/fns.h b/cmd/wmii/fns.h @@ -161,6 +161,9 @@ void kpress(XWindow, ulong mod, KeyCode); ulong str2modmask(const char*); void update_keys(void); +/* main.c */ +void init_screen(WMScreen*); + /* map.c */ MapEnt* hash_get(Map*, const char*, int create); void* hash_rm(Map*, const char*); diff --git a/cmd/wmii/main.c b/cmd/wmii/main.c @@ -184,13 +184,13 @@ init_cursors(void) { XFreePixmap(display, pix); } -static void +void init_screen(WMScreen *screen) { screen->r = scr.rect; def.snap = Dy(scr.rect) / 63; - - sel_screen = pointerscreen(); + freeimage(screen->ibuf); + screen->ibuf = allocimage(Dx(screen->r), Dy(screen->r), scr.depth); } static void @@ -446,6 +446,8 @@ main(int argc, char *argv[]) { loadcolor(&def.focuscolor, FOCUSCOLORS); loadcolor(&def.normcolor, NORMCOLORS); + sel_screen = pointerscreen(); + num_screens = 1; screens = emallocz(num_screens * sizeof(*screens)); screen = &screens[0]; @@ -453,8 +455,6 @@ main(int argc, char *argv[]) { s = &screens[i]; init_screen(s); - s->ibuf = allocimage(Dx(s->r), Dy(s->r), scr.depth); - wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask diff --git a/cmd/wmii/x11.c b/cmd/wmii/x11.c @@ -203,6 +203,9 @@ allocimage(int w, int h, int depth) { void freeimage(Image *img) { + if(img == nil) + return; + assert(img->type == WImage); XFreePixmap(display, img->w); diff --git a/cmd/wmii/xext.c b/cmd/wmii/xext.c @@ -45,14 +45,15 @@ randr_screenchange(XRRScreenChangeNotifyEvent *ev) { Point d; XRRUpdateConfiguration((XEvent*)ev); - + scr.rect = Rect(0, 0, ev->width, ev->height); + d.x = ev->width - Dx(screen->r); d.y = ev->height - Dy(screen->r); for(v=view; v; v=v->next) { v->r.max.x += d.x; v->r.max.y += d.y; } - screen->r = Rect(0, 0, ev->width, ev->height); + init_screen(screen); bar_resize(screen); }