diff options
| author | Jacob Nevins <jacobn@chiark.greenend.org.uk> | 2005-05-26 13:40:38 +0000 |
|---|---|---|
| committer | Jacob Nevins <jacobn@chiark.greenend.org.uk> | 2005-05-26 13:40:38 +0000 |
| commit | 865e8ad6ca3d83ad2a585ceeb1809e9f68c18a20 (patch) | |
| tree | 9944ed8b60fc7844d9c403168f1849756b5de61f /gtk.c | |
| parent | a1be37343cfab49053396a3a70c7cca14d6f376f (diff) | |
| download | puzzles-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.c | 10 |
1 files changed, 6 insertions, 4 deletions
@@ -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) |