X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/8e07ea1a05e801e52061e880aa36b7cec5895f5a..c69aef14ddc150da07dcd3527b5a9fb99d6cef34:/src/w32inevt.c diff --git a/src/w32inevt.c b/src/w32inevt.c index ea2db26a60..c7246c7a8e 100644 --- a/src/w32inevt.c +++ b/src/w32inevt.c @@ -1,5 +1,5 @@ /* Input event support for Emacs on the Microsoft Windows API. - Copyright (C) 1992-1993, 1995, 2001-2015 Free Software Foundation, + Copyright (C) 1992-1993, 1995, 2001-2016 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -37,14 +37,11 @@ along with GNU Emacs. If not, see . */ #include "lisp.h" #include "keyboard.h" #include "frame.h" -#include "dispextern.h" -#include "window.h" #include "blockinput.h" -#include "termhooks.h" -#include "termchar.h" -#include "w32heap.h" +#include "termchar.h" /* for Mouse_HLInfo, tty_display_info */ #include "w32term.h" #include "w32inevt.h" +#include "w32common.h" /* stdin, from w32console.c */ extern HANDLE keyboard_handle; @@ -152,10 +149,12 @@ key_event (KEY_EVENT_RECORD *event, struct input_event *emacs_ev, int *isdead) switch (event->wVirtualKeyCode) { case VK_LWIN: - mod_key_state &= ~LEFT_WIN_PRESSED; + if (!w32_kbdhook_active) + mod_key_state &= ~LEFT_WIN_PRESSED; break; case VK_RWIN: - mod_key_state &= ~RIGHT_WIN_PRESSED; + if (!w32_kbdhook_active) + mod_key_state &= ~RIGHT_WIN_PRESSED; break; case VK_APPS: mod_key_state &= ~APPS_PRESSED; @@ -189,7 +188,8 @@ key_event (KEY_EVENT_RECORD *event, struct input_event *emacs_ev, int *isdead) keybd_event (faked_key, (BYTE) MapVirtualKey (faked_key, 0), 0, 0); } } - mod_key_state |= LEFT_WIN_PRESSED; + if (!w32_kbdhook_active) + mod_key_state |= LEFT_WIN_PRESSED; if (!NILP (Vw32_lwindow_modifier)) return 0; break; @@ -205,7 +205,8 @@ key_event (KEY_EVENT_RECORD *event, struct input_event *emacs_ev, int *isdead) keybd_event (faked_key, (BYTE) MapVirtualKey (faked_key, 0), 0, 0); } } - mod_key_state |= RIGHT_WIN_PRESSED; + if (!w32_kbdhook_active) + mod_key_state |= RIGHT_WIN_PRESSED; if (!NILP (Vw32_rwindow_modifier)) return 0; break; @@ -271,6 +272,13 @@ key_event (KEY_EVENT_RECORD *event, struct input_event *emacs_ev, int *isdead) /* Recognize state of Windows and Apps keys. */ event->dwControlKeyState |= mod_key_state; + if (w32_kbdhook_active) + { + if (check_w32_winkey_state (VK_LWIN)) + event->dwControlKeyState |= LEFT_WIN_PRESSED; + if (check_w32_winkey_state (VK_RWIN)) + event->dwControlKeyState |= RIGHT_WIN_PRESSED; + } /* Distinguish numeric keypad keys from extended keys. */ event->wVirtualKeyCode = @@ -664,6 +672,7 @@ handle_file_notifications (struct input_event *hold_quit) inev.arg = list3 (make_pointer_integer (notifications_desc), action, fname); kbd_buffer_store_event_hold (&inev, hold_quit); + nevents++; if (!fni->NextEntryOffset) break;