From f554cdf60ea3808b88053077dc5dae83e427732c Mon Sep 17 00:00:00 2001
From: Bert <ber.t@gmx.com>
Date: Thu, 17 Feb 2011 15:08:58 +0100
Subject: [PATCH] Made key mappings mode-dependent

---
 main.c | 216 +++++++++++++++++++++++++++++----------------------------
 1 file changed, 111 insertions(+), 105 deletions(-)

diff --git a/main.c b/main.c
index e6353d3..ab2508f 100644
--- a/main.c
+++ b/main.c
@@ -284,6 +284,117 @@ void on_keypress(XKeyEvent *kev) {
 	XLookupString(kev, &key, 1, &ksym, NULL);
 	changed = 0;
 
+	if (mode == MODE_NORMAL) {
+		switch (ksym) {
+			/* navigate image list */
+			case XK_n:
+			case XK_space:
+				if (fileidx + 1 < filecnt) {
+					++fileidx;
+					changed = load_image();
+				}
+				break;
+			case XK_p:
+			case XK_BackSpace:
+				if (fileidx > 0) {
+					--fileidx;
+					changed = load_image();
+				}
+				break;
+			case XK_bracketleft:
+				if (fileidx != 0) {
+					fileidx = MAX(0, fileidx - 10);
+					changed = load_image();
+				}
+				break;
+			case XK_bracketright:
+				if (fileidx != filecnt - 1) {
+					fileidx = MIN(fileidx + 10, filecnt - 1);
+					changed = load_image();
+				}
+				break;
+			case XK_g:
+				if (fileidx != 0) {
+					fileidx = 0;
+					changed = load_image();
+				}
+				break;
+			case XK_G:
+				if (fileidx != filecnt - 1) {
+					fileidx = filecnt - 1;
+					changed = load_image();
+				}
+				break;
+
+			/* zooming */
+			case XK_plus:
+			case XK_equal:
+				changed = img_zoom_in(&img);
+				break;
+			case XK_minus:
+				changed = img_zoom_out(&img);
+				break;
+			case XK_0:
+				changed = img_zoom(&img, 1.0);
+				break;
+			case XK_w:
+				if ((changed = img_fit_win(&img, &win)))
+					img_center(&img, &win);
+				break;
+
+			/* panning */
+			case XK_h:
+			case XK_Left:
+				changed = img_pan(&img, &win, PAN_LEFT);
+				break;
+			case XK_j:
+			case XK_Down:
+				changed = img_pan(&img, &win, PAN_DOWN);
+				break;
+			case XK_k:
+			case XK_Up:
+				changed = img_pan(&img, &win, PAN_UP);
+				break;
+			case XK_l:
+			case XK_Right:
+				changed = img_pan(&img, &win, PAN_RIGHT);
+				break;
+
+			/* rotation */
+			case XK_less:
+				img_rotate_left(&img, &win);
+				changed = 1;
+				break;
+			case XK_greater:
+				img_rotate_right(&img, &win);
+				changed = 1;
+				break;
+
+			/* control window */
+			case XK_W:
+				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 */
+			case XK_a:
+				img_toggle_antialias(&img);
+				changed = 1;
+				break;
+			case XK_r:
+				changed = load_image();
+				break;
+		}
+	} else {
+	}
+
+	/* common key mappings */
 	switch (ksym) {
 		case XK_Escape:
 			cleanup();
@@ -291,115 +402,10 @@ void on_keypress(XKeyEvent *kev) {
 		case XK_q:
 			cleanup();
 			exit(0);
-
-		/* navigate image list */
-		case XK_n:
-		case XK_space:
-			if (fileidx + 1 < filecnt) {
-				++fileidx;
-				changed = load_image();
-			}
-			break;
-		case XK_p:
-		case XK_BackSpace:
-			if (fileidx > 0) {
-				--fileidx;
-				changed = load_image();
-			}
-			break;
-		case XK_bracketleft:
-			if (fileidx != 0) {
-				fileidx = MAX(0, fileidx - 10);
-				changed = load_image();
-			}
-			break;
-		case XK_bracketright:
-			if (fileidx != filecnt - 1) {
-				fileidx = MIN(fileidx + 10, filecnt - 1);
-				changed = load_image();
-			}
-			break;
-		case XK_g:
-			if (fileidx != 0) {
-				fileidx = 0;
-				changed = load_image();
-			}
-			break;
-		case XK_G:
-			if (fileidx != filecnt - 1) {
-				fileidx = filecnt - 1;
-				changed = load_image();
-			}
-			break;
-
-		/* zooming */
-		case XK_plus:
-		case XK_equal:
-			changed = img_zoom_in(&img);
-			break;
-		case XK_minus:
-			changed = img_zoom_out(&img);
-			break;
-		case XK_0:
-			changed = img_zoom(&img, 1.0);
-			break;
-		case XK_w:
-			if ((changed = img_fit_win(&img, &win)))
-				img_center(&img, &win);
-			break;
-
-		/* panning */
-		case XK_h:
-		case XK_Left:
-			changed = img_pan(&img, &win, PAN_LEFT);
-			break;
-		case XK_j:
-		case XK_Down:
-			changed = img_pan(&img, &win, PAN_DOWN);
-			break;
-		case XK_k:
-		case XK_Up:
-			changed = img_pan(&img, &win, PAN_UP);
-			break;
-		case XK_l:
-		case XK_Right:
-			changed = img_pan(&img, &win, PAN_RIGHT);
-			break;
-
-		/* rotation */
-		case XK_less:
-			img_rotate_left(&img, &win);
-			changed = 1;
-			break;
-		case XK_greater:
-			img_rotate_right(&img, &win);
-			changed = 1;
-			break;
-
-		/* control window */
 		case XK_f:
 			win_toggle_fullscreen(&win);
 			/* render on next configurenotify */
 			break;
-		case XK_W:
-			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 */
-		case XK_a:
-			img_toggle_antialias(&img);
-			changed = 1;
-			break;
-		case XK_r:
-			changed = load_image();
-			break;
 	}
 
 	if (changed)