Shift-click is equivalent to middle-click. This is mostly for
[sgt/puzzles] / gtk.c
diff --git a/gtk.c b/gtk.c
index 23ca66d..8a26730 100644 (file)
--- a/gtk.c
+++ b/gtk.c
@@ -139,14 +139,26 @@ static gint key_event(GtkWidget *widget, GdkEventKey *event, gpointer data)
 
     if (event->string[0] && !event->string[1])
         keyval = (unsigned char)event->string[0];
-    else if (event->keyval == GDK_Up || event->keyval == GDK_KP_Up)
+    else if (event->keyval == GDK_Up || event->keyval == GDK_KP_Up ||
+             event->keyval == GDK_KP_8)
         keyval = CURSOR_UP;
-    else if (event->keyval == GDK_Down || event->keyval == GDK_KP_Down)
+    else if (event->keyval == GDK_Down || event->keyval == GDK_KP_Down ||
+             event->keyval == GDK_KP_2)
         keyval = CURSOR_DOWN;
-    else if (event->keyval == GDK_Left || event->keyval == GDK_KP_Left)
+    else if (event->keyval == GDK_Left || event->keyval == GDK_KP_Left ||
+             event->keyval == GDK_KP_4)
         keyval = CURSOR_LEFT;
-    else if (event->keyval == GDK_Right || event->keyval == GDK_KP_Right)
+    else if (event->keyval == GDK_Right || event->keyval == GDK_KP_Right ||
+             event->keyval == GDK_KP_6)
         keyval = CURSOR_RIGHT;
+    else if (event->keyval == GDK_KP_Home || event->keyval == GDK_KP_7)
+        keyval = CURSOR_UP_LEFT;
+    else if (event->keyval == GDK_KP_End || event->keyval == GDK_KP_1)
+        keyval = CURSOR_DOWN_LEFT;
+    else if (event->keyval == GDK_KP_Page_Up || event->keyval == GDK_KP_9)
+        keyval = CURSOR_UP_RIGHT;
+    else if (event->keyval == GDK_KP_Page_Down || event->keyval == GDK_KP_3)
+        keyval = CURSOR_DOWN_RIGHT;
     else
         keyval = -1;
 
@@ -169,10 +181,10 @@ static gint button_event(GtkWidget *widget, GdkEventButton *event,
     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