aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2017-09-20 16:38:31 +0100
committerSimon Tatham <anakin@pobox.com>2017-09-20 18:03:44 +0100
commitd72db91888c1efddd56c67eee665b0a83c9329eb (patch)
treead55626ee7c32ec425099a6da0ef9338f400c3cd
parente4d05c36d996c3053a66ca29cfe84e9652d501e3 (diff)
downloadpuzzles-d72db91888c1efddd56c67eee665b0a83c9329eb.zip
puzzles-d72db91888c1efddd56c67eee665b0a83c9329eb.tar.gz
puzzles-d72db91888c1efddd56c67eee665b0a83c9329eb.tar.bz2
puzzles-d72db91888c1efddd56c67eee665b0a83c9329eb.tar.xz
Map Ctrl-Shift-Z to Redo.
This is in addition to the existing keystrokes r, ^R and ^Y. I've become used to Ctrl-Shift-Z in other GUI games, and my fingers keep getting confused when my own puzzles don't handle it the same way.
-rw-r--r--PuzzleApplet.java7
-rw-r--r--emcc.c6
-rw-r--r--gtk.c2
-rw-r--r--osx.m4
-rw-r--r--windows.c14
5 files changed, 28 insertions, 5 deletions
diff --git a/PuzzleApplet.java b/PuzzleApplet.java
index 8f8bec1..8455734 100644
--- a/PuzzleApplet.java
+++ b/PuzzleApplet.java
@@ -126,7 +126,12 @@ public class PuzzleApplet extends JApplet implements Runtime.CallJavaCB {
}
}
public void keyTyped(KeyEvent e) {
- runtimeCall("jcallback_key_event", new int[] {0, 0, e.getKeyChar()});
+ int key = e.getKeyChar();
+ if (key == 26 && e.isShiftDown() && e.isControlDown()) {
+ runtimeCall("jcallback_redo_event", new int[0]);
+ return;
+ }
+ runtimeCall("jcallback_key_event", new int[] {0, 0, key});
}
});
pp.addMouseListener(new MouseAdapter() {
diff --git a/emcc.c b/emcc.c
index a55f0a6..23ab333 100644
--- a/emcc.c
+++ b/emcc.c
@@ -310,6 +310,8 @@ void key(int keycode, int charcode, const char *key, const char *chr,
keyevent = MOD_NUM_KEYPAD | '7';
} else if (!strnullcmp(key, "PageUp") || keycode==33) {
keyevent = MOD_NUM_KEYPAD | '9';
+ } else if (shift && ctrl && (keycode & 0x1F) == 26) {
+ keyevent = UI_REDO;
} else if (chr && chr[0] && !chr[1]) {
keyevent = chr[0] & 0xFF;
} else if (keycode >= 96 && keycode < 106) {
@@ -323,10 +325,10 @@ void key(int keycode, int charcode, const char *key, const char *chr,
}
if (keyevent >= 0) {
- if (shift && keyevent >= 0x100)
+ if (shift && (keyevent >= 0x100 && !IS_UI_FAKE_KEY(keyevent)))
keyevent |= MOD_SHFT;
- if (ctrl) {
+ if (ctrl && !IS_UI_FAKE_KEY(keyevent)) {
if (keyevent >= 0x100)
keyevent |= MOD_CTRL;
else
diff --git a/gtk.c b/gtk.c
index 9ce5c8d..c212522 100644
--- a/gtk.c
+++ b/gtk.c
@@ -1206,6 +1206,8 @@ static gint key_event(GtkWidget *widget, GdkEventKey *event, gpointer data)
event->keyval == GDK_KEY_Delete ||
event->keyval == GDK_KEY_KP_Delete)
keyval = '\177';
+ else if ((event->keyval == 'z' || event->keyval == 'Z') && shift && ctrl)
+ keyval = UI_REDO;
else if (event->string[0] && !event->string[1])
keyval = (unsigned char)event->string[0];
else
diff --git a/osx.m b/osx.m
index fae98c7..be29819 100644
--- a/osx.m
+++ b/osx.m
@@ -687,6 +687,10 @@ struct frontend {
if (c >= '0' && c <= '9' && ([ev modifierFlags] & NSNumericPadKeyMask))
c |= MOD_NUM_KEYPAD;
+ if (c == 26 &&
+ !((NSShiftKeyMask | NSControlKeyMask) & ~[ev modifierFlags]))
+ c = UI_REDO;
+
[self processKey:c];
}
}
diff --git a/windows.c b/windows.c
index 076e713..ffd0f75 100644
--- a/windows.c
+++ b/windows.c
@@ -3405,8 +3405,18 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
}
break;
case WM_CHAR:
- if (!midend_process_key(fe->me, 0, 0, (unsigned char)wParam))
- PostQuitMessage(0);
+ {
+ int key = (unsigned char)wParam;
+ if (key == '\x1A') {
+ BYTE keystate[256];
+ if (GetKeyboardState(keystate) &&
+ (keystate[VK_SHIFT] & 0x80) &&
+ (keystate[VK_CONTROL] & 0x80))
+ key = UI_REDO;
+ }
+ if (!midend_process_key(fe->me, 0, 0, key))
+ PostQuitMessage(0);
+ }
return 0;
case WM_TIMER:
if (fe->timer) {