diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/w32fns.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/w32fns.c b/src/w32fns.c index 0eb720e1cbe..f5e5b33556c 100644 --- a/src/w32fns.c +++ b/src/w32fns.c | |||
| @@ -276,6 +276,8 @@ static struct | |||
| 276 | } kbdhook; | 276 | } kbdhook; |
| 277 | typedef HWND (WINAPI *GetConsoleWindow_Proc) (void); | 277 | typedef HWND (WINAPI *GetConsoleWindow_Proc) (void); |
| 278 | 278 | ||
| 279 | typedef BOOL (WINAPI *IsDebuggerPresent_Proc) (void); | ||
| 280 | |||
| 279 | /* stdin, from w32console.c */ | 281 | /* stdin, from w32console.c */ |
| 280 | extern HANDLE keyboard_handle; | 282 | extern HANDLE keyboard_handle; |
| 281 | 283 | ||
| @@ -2303,6 +2305,19 @@ setup_w32_kbdhook (void) | |||
| 2303 | { | 2305 | { |
| 2304 | kbdhook.hook_count++; | 2306 | kbdhook.hook_count++; |
| 2305 | 2307 | ||
| 2308 | /* This hook gets in the way of debugging, since when Emacs stops, | ||
| 2309 | its input thread stops, and there's nothing to process keyboard | ||
| 2310 | events, whereas this hook is global, and is invoked in the | ||
| 2311 | context of the thread that installed it. So we don't install the | ||
| 2312 | hook if the process is being debugged. */ | ||
| 2313 | if (w32_kbdhook_active) | ||
| 2314 | { | ||
| 2315 | IsDebuggerPresent_Proc is_debugger_present = (IsDebuggerPresent_Proc) | ||
| 2316 | GetProcAddress (GetModuleHandle ("kernel32.dll"), "IsDebuggerPresent"); | ||
| 2317 | if (is_debugger_present && is_debugger_present ()) | ||
| 2318 | return; | ||
| 2319 | } | ||
| 2320 | |||
| 2306 | /* Hooking is only available on NT architecture systems, as | 2321 | /* Hooking is only available on NT architecture systems, as |
| 2307 | indicated by the w32_kbdhook_active variable. */ | 2322 | indicated by the w32_kbdhook_active variable. */ |
| 2308 | if (kbdhook.hook_count == 1 && w32_kbdhook_active) | 2323 | if (kbdhook.hook_count == 1 && w32_kbdhook_active) |