chiark / gitweb /
Forbid undo of new-game if it would change the params.
[sgt-puzzles.git] / windows.c
index 6b0a7debe0b0916dafb15f736d2e5b82f984035c..ffd0f75894611260a7abdcf86e8c670334cb73a0 100644 (file)
--- a/windows.c
+++ b/windows.c
@@ -2993,18 +2993,18 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
        cmd = wParam & ~0xF;           /* low 4 bits reserved to Windows */
        switch (cmd) {
          case IDM_NEW:
-           if (!midend_process_key(fe->me, 0, 0, 'n'))
+           if (!midend_process_key(fe->me, 0, 0, UI_NEWGAME))
                PostQuitMessage(0);
            break;
          case IDM_RESTART:
            midend_restart_game(fe->me);
            break;
          case IDM_UNDO:
-           if (!midend_process_key(fe->me, 0, 0, 'u'))
+           if (!midend_process_key(fe->me, 0, 0, UI_UNDO))
                PostQuitMessage(0);
            break;
          case IDM_REDO:
-           if (!midend_process_key(fe->me, 0, 0, '\x12'))
+           if (!midend_process_key(fe->me, 0, 0, UI_REDO))
                PostQuitMessage(0);
            break;
          case IDM_COPY:
@@ -3026,7 +3026,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
            }
            break;
          case IDM_QUIT:
-           if (!midend_process_key(fe->me, 0, 0, 'q'))
+           if (!midend_process_key(fe->me, 0, 0, UI_QUIT))
                PostQuitMessage(0);
            break;
          case IDM_CONFIG:
@@ -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) {