From 6adbb3831d889b7a0fa3b69e40843d8b70beaf55 Mon Sep 17 00:00:00 2001
From: Bert <ber.t@gmx.com>
Date: Thu, 17 Feb 2011 17:28:13 +0100
Subject: [PATCH] Use Button1 to open thumbnail

---
 main.c   | 97 ++++++++++++++++++++++++++++++++------------------------
 thumbs.c | 16 ++++++++++
 thumbs.h |  2 ++
 3 files changed, 74 insertions(+), 41 deletions(-)

diff --git a/main.c b/main.c
index 79b562f..4189f4f 100644
--- a/main.c
+++ b/main.c
@@ -268,11 +268,11 @@ void redraw() {
 }
 
 void on_keypress(XKeyEvent *kev) {
-	int sel, x, y;
+	int x, y;
 	unsigned int w, h;
 	char key;
 	KeySym ksym;
-	int changed;
+	int changed, sel;
 
 	if (!kev)
 		return;
@@ -439,7 +439,7 @@ void on_keypress(XKeyEvent *kev) {
 }
 
 void on_buttonpress(XButtonEvent *bev) {
-	int changed;
+	int changed, sel;
 	unsigned int mask;
 
 	if (!bev)
@@ -448,46 +448,61 @@ void on_buttonpress(XButtonEvent *bev) {
 	mask = CLEANMASK(bev->state);
 	changed = 0;
 
-	switch (bev->button) {
-		case Button1:
-			if (fileidx + 1 < filecnt) {
-				++fileidx;
-				changed = load_image();
-			}
-			break;
-		case Button2:
-			mox = bev->x;
-			moy = bev->y;
-			win_set_cursor(&win, CURSOR_HAND);
-			break;
-		case Button3:
-			if (fileidx > 0) {
-				--fileidx;
-				changed = load_image();
-			}
-			break;
-		case Button4:
-			if (mask == ControlMask)
-				changed = img_zoom_in(&img);
-			else if (mask == ShiftMask)
+	if (mode == MODE_NORMAL) {
+		switch (bev->button) {
+			case Button1:
+				if (fileidx + 1 < filecnt) {
+					++fileidx;
+					changed = load_image();
+				}
+				break;
+			case Button2:
+				mox = bev->x;
+				moy = bev->y;
+				win_set_cursor(&win, CURSOR_HAND);
+				break;
+			case Button3:
+				if (fileidx > 0) {
+					--fileidx;
+					changed = load_image();
+				}
+				break;
+			case Button4:
+				if (mask == ControlMask)
+					changed = img_zoom_in(&img);
+				else if (mask == ShiftMask)
+					changed = img_pan(&img, &win, PAN_LEFT);
+				else
+					changed = img_pan(&img, &win, PAN_UP);
+				break;
+			case Button5:
+				if (mask == ControlMask)
+					changed = img_zoom_out(&img);
+				else if (mask == ShiftMask)
+					changed = img_pan(&img, &win, PAN_RIGHT);
+				else
+					changed = img_pan(&img, &win, PAN_DOWN);
+				break;
+			case 6:
 				changed = img_pan(&img, &win, PAN_LEFT);
-			else
-				changed = img_pan(&img, &win, PAN_UP);
-			break;
-		case Button5:
-			if (mask == ControlMask)
-				changed = img_zoom_out(&img);
-			else if (mask == ShiftMask)
+				break;
+			case 7:
 				changed = img_pan(&img, &win, PAN_RIGHT);
-			else
-				changed = img_pan(&img, &win, PAN_DOWN);
-			break;
-		case 6:
-			changed = img_pan(&img, &win, PAN_LEFT);
-			break;
-		case 7:
-			changed = img_pan(&img, &win, PAN_RIGHT);
-			break;
+				break;
+		}
+	} else {
+		/* thumbnail mode */
+		switch (bev->button) {
+			case Button1:
+				if ((sel = tns_translate(&tns, bev->x, bev->y)) >= 0) {
+					fileidx = sel;
+					load_image();
+					mode = MODE_NORMAL;
+					changed = 1;
+					break;
+				}
+				break;
+		}
 	}
 
 	if (changed)
diff --git a/thumbs.c b/thumbs.c
index c369395..25a7fc1 100644
--- a/thumbs.c
+++ b/thumbs.c
@@ -170,3 +170,19 @@ void tns_move_selection(tns_t *tns, win_t *win, movedir_t dir) {
 			break;
 	}
 }
+
+int tns_translate(tns_t *tns, int x, int y) {
+	int n;
+	thumb_t *t;
+
+	if (!tns || x < 5 || y < 5)
+		return -1;
+
+	if ((n = y / thumb_dim * tns-> cols + x / thumb_dim) < tns->cnt) {
+		t = &tns->thumbs[n];
+		if (x > t->x && x < t->x + t->w && y > t->y && y < t->y + t->h)
+			return n;
+	}
+
+	return -1;
+}
diff --git a/thumbs.h b/thumbs.h
index 1fd1209..70d8b3c 100644
--- a/thumbs.h
+++ b/thumbs.h
@@ -57,4 +57,6 @@ void tns_highlight(tns_t*, win_t*, int);
 
 void tns_move_selection(tns_t*, win_t*, movedir_t);
 
+int tns_translate(tns_t*, int, int);
+
 #endif /* THUMBS_H */