shithub: puzzles

Download patch

ref: e96f53452ac06e6b533a30d4caad30dd0dbe46fb
parent: 3b1ec74d732399333f0b99a7af2a55cdd394a6cb
author: Simon Tatham <anakin@pobox.com>
date: Wed Apr 28 13:42:32 EDT 2004

Shift-click is equivalent to middle-click. This is mostly for
Windows users who may not have a middle button at all, but I've
replicated it in GTK to maintain cross-platform consistency.

[originally from svn r4166]

--- a/gtk.c
+++ b/gtk.c
@@ -181,10 +181,10 @@
     if (event->type != GDK_BUTTON_PRESS)
         return TRUE;
 
-    if (event->button == 1)
-	button = LEFT_BUTTON;
-    else if (event->button == 2)
+    if (event->button == 2 || (event->state & GDK_SHIFT_MASK))
 	button = MIDDLE_BUTTON;
+    else if (event->button == 1)
+	button = LEFT_BUTTON;
     else if (event->button == 3)
 	button = RIGHT_BUTTON;
     else
--- a/windows.c
+++ b/windows.c
@@ -438,12 +438,25 @@
       case WM_LBUTTONDOWN:
       case WM_RBUTTONDOWN:
       case WM_MBUTTONDOWN:
-	if (!midend_process_key(fe->me, LOWORD(lParam), HIWORD(lParam),
-				(message == WM_LBUTTONDOWN ? LEFT_BUTTON :
-				 message == WM_RBUTTONDOWN ? RIGHT_BUTTON :
-				 MIDDLE_BUTTON)))
-	    PostQuitMessage(0);
-	
+	{
+	    int button;
+
+	    /*
+	     * Shift-clicks count as middle-clicks, since otherwise
+	     * two-button Windows users won't have any kind of
+	     * middle click to use.
+	     */
+	    if (message == WM_MBUTTONDOWN || (wParam & MK_SHIFT))
+		button = MIDDLE_BUTTON;
+	    else if (message == WM_LBUTTONDOWN)
+		button = LEFT_BUTTON;
+	    else
+		button = RIGHT_BUTTON;
+		
+	    if (!midend_process_key(fe->me, LOWORD(lParam),
+				    HIWORD(lParam), button))
+		PostQuitMessage(0);
+	}
 	break;
       case WM_CHAR:
 	if (!midend_process_key(fe->me, 0, 0, (unsigned char)wParam))