diff --git a/Makefile b/Makefile index 1f24280..ed8d343 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ all: sxiv -VERSION=git-20110204 +VERSION=git-20110206 CC?=gcc PREFIX?=/usr/local diff --git a/main.c b/main.c index 4ce19de..379b7bd 100644 --- a/main.c +++ b/main.c @@ -222,6 +222,8 @@ unsigned char timeout; int mox, moy; void on_keypress(XKeyEvent *kev) { + int x, y; + unsigned int w, h; char key; KeySym ksym; int changed; @@ -330,8 +332,14 @@ void on_keypress(XKeyEvent *kev) { /* render on next configurenotify */ break; case XK_W: - if ((changed = win_resize(&win, img.w * img.zoom, img.h * img.zoom))) - img.checkpan = 1; + x = win.x + img.x; + y = win.y + img.y; + w = img.w * img.zoom; + h = img.h * img.zoom; + if ((changed = win_moveresize(&win, x, y, w, h))) { + img.x = x - win.x; + img.y = y - win.y; + } break; /* miscellaneous */ diff --git a/window.c b/window.c index 2c8ea68..23146cd 100644 --- a/window.c +++ b/window.c @@ -157,24 +157,23 @@ int win_configure(win_t *win, XConfigureEvent *c) { return changed; } -int win_resize(win_t *win, unsigned int w, unsigned int h) { +int win_moveresize(win_t *win, int x, int y, unsigned int w, unsigned int h) { if (!win) return 0; + x = MAX(0, x); + y = MAX(0, y); w = MIN(w, win->env.scrw - 2 * win->bw); h = MIN(h, win->env.scrh - 2 * win->bw); - if (win->w == w && win->h == h) + if (win->x == x && win->y == y && win->w == w && win->h == h) return 0; + win->x = x; + win->y = y; win->w = w; win->h = h; - if (win->x + w + 2 * win->bw > win->env.scrw) - win->x = win->env.scrw - w - 2 * win->bw; - if (win->y + h + 2 * win->bw > win->env.scrh) - win->y = win->env.scrh - h - 2 * win->bw; - if (options->fixed) win_set_sizehints(win); diff --git a/window.h b/window.h index cc2598f..db91b18 100644 --- a/window.h +++ b/window.h @@ -57,7 +57,7 @@ void win_open(win_t*); void win_close(win_t*); int win_configure(win_t*, XConfigureEvent*); -int win_resize(win_t*, unsigned int, unsigned int); +int win_moveresize(win_t*, int, int, unsigned int, unsigned int); void win_toggle_fullscreen(win_t*);