aboutsummaryrefslogtreecommitdiff
path: root/gtk.c
diff options
context:
space:
mode:
authorJacob Nevins <jacobn@chiark.greenend.org.uk>2005-05-26 13:40:38 +0000
committerJacob Nevins <jacobn@chiark.greenend.org.uk>2005-05-26 13:40:38 +0000
commit865e8ad6ca3d83ad2a585ceeb1809e9f68c18a20 (patch)
tree9944ed8b60fc7844d9c403168f1849756b5de61f /gtk.c
parenta1be37343cfab49053396a3a70c7cca14d6f376f (diff)
downloadpuzzles-865e8ad6ca3d83ad2a585ceeb1809e9f68c18a20.zip
puzzles-865e8ad6ca3d83ad2a585ceeb1809e9f68c18a20.tar.gz
puzzles-865e8ad6ca3d83ad2a585ceeb1809e9f68c18a20.tar.bz2
puzzles-865e8ad6ca3d83ad2a585ceeb1809e9f68c18a20.tar.xz
Add origin-shifting (Shift+cursors) and source-shifting (Ctrl+cursors) to Net.
(Adding modifier+cursors handling has had minor knock-on effects on the other puzzles, so that they can continue to ignore modifiers.) (An unfortunate side effect of this is some artifacts in exterior barrier drawing; notably, a disconnected corner can now appear at the corner of the grid under some circumstances. I haven't found a satisfactory way round this yet.) [originally from svn r5844]
Diffstat (limited to 'gtk.c')
-rw-r--r--gtk.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/gtk.c b/gtk.c
index ab10a11..3fdfc87 100644
--- a/gtk.c
+++ b/gtk.c
@@ -317,24 +317,26 @@ static gint key_event(GtkWidget *widget, GdkEventKey *event, gpointer data)
{
frontend *fe = (frontend *)data;
int keyval;
+ int shift = (event->state & GDK_SHIFT_MASK) ? MOD_SHFT : 0;
+ int ctrl = (event->state & GDK_CONTROL_MASK) ? MOD_CTRL : 0;
if (!fe->pixmap)
return TRUE;
if (event->keyval == GDK_Up)
- keyval = CURSOR_UP;
+ keyval = shift | ctrl | CURSOR_UP;
else if (event->keyval == GDK_KP_Up || event->keyval == GDK_KP_8)
keyval = MOD_NUM_KEYPAD | '8';
else if (event->keyval == GDK_Down)
- keyval = CURSOR_DOWN;
+ keyval = shift | ctrl | CURSOR_DOWN;
else if (event->keyval == GDK_KP_Down || event->keyval == GDK_KP_2)
keyval = MOD_NUM_KEYPAD | '2';
else if (event->keyval == GDK_Left)
- keyval = CURSOR_LEFT;
+ keyval = shift | ctrl | CURSOR_LEFT;
else if (event->keyval == GDK_KP_Left || event->keyval == GDK_KP_4)
keyval = MOD_NUM_KEYPAD | '4';
else if (event->keyval == GDK_Right)
- keyval = CURSOR_RIGHT;
+ keyval = shift | ctrl | CURSOR_RIGHT;
else if (event->keyval == GDK_KP_Right || event->keyval == GDK_KP_6)
keyval = MOD_NUM_KEYPAD | '6';
else if (event->keyval == GDK_KP_Home || event->keyval == GDK_KP_7)