]> git.eshelyaron.com Git - emacs.git/commitdiff
Avoid losing Ctrl-C keystrokes in compilation mode on MS-Windows
authorEli Zaretskii <eliz@gnu.org>
Tue, 5 Sep 2017 17:33:40 +0000 (20:33 +0300)
committerEli Zaretskii <eliz@gnu.org>
Tue, 5 Sep 2017 17:33:40 +0000 (20:33 +0300)
* src/w32proc.c (sys_kill): Preserve the up/down state of the
Ctrl key across the simulated Ctrl-C keystroke.  (Bug#28348)

src/w32proc.c

index 71bd28d3c243aa4b8f93fc0357fc01c53060a7cf..085995df58ac267373ee22d8193aedea699d9013 100644 (file)
@@ -2638,6 +2638,12 @@ sys_kill (pid_t pid, int sig)
               /* Set the foreground window to the child.  */
               if (SetForegroundWindow (cp->hwnd))
                 {
+                 /* Record the state of the Ctrl key: the user could
+                    have it depressed while we are simulating Ctrl-C,
+                    in which case we will have to leave the state of
+                    Ctrl depressed when we are done.  */
+                 short ctrl_state = GetKeyState (VK_CONTROL) & 0x8000;
+
                   /* Generate keystrokes as if user had typed Ctrl-Break or
                      Ctrl-C.  */
                   keybd_event (VK_CONTROL, control_scan_code, 0, 0);
@@ -2654,6 +2660,9 @@ sys_kill (pid_t pid, int sig)
                   Sleep (100);
 
                   SetForegroundWindow (foreground_window);
+                 /* If needed, restore the state of Ctrl.  */
+                 if (ctrl_state != 0)
+                   keybd_event (VK_CONTROL, control_scan_code, 0, 0);
                 }
               /* Detach from the foreground and child threads now that
                  the foreground switching is over.  */