X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/7e09ef09a479731d01b1ca46e94ddadd73ac98e3..c69aef14ddc150da07dcd3527b5a9fb99d6cef34:/src/w32inevt.c diff --git a/src/w32inevt.c b/src/w32inevt.c index daf4a5c237..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 = @@ -631,7 +639,7 @@ handle_file_notifications (struct input_event *hold_quit) if (notification_buffer_in_use) { DWORD info_size = notifications_size; - Lisp_Object cs = intern ("utf-16le"); + Lisp_Object cs = Qutf_16le; Lisp_Object obj = w32_get_watch_object (notifications_desc); /* notifications_size could be zero when the buffer of @@ -657,12 +665,14 @@ handle_file_notifications (struct input_event *hold_quit) Lisp_Object action = lispy_file_action (fni->Action); inev.kind = FILE_NOTIFY_EVENT; - inev.code = (ptrdiff_t)XINT (XIL ((EMACS_INT)notifications_desc)); inev.timestamp = GetTickCount (); inev.modifiers = 0; inev.frame_or_window = callback; inev.arg = Fcons (action, fname); + inev.arg = list3 (make_pointer_integer (notifications_desc), + action, fname); kbd_buffer_store_event_hold (&inev, hold_quit); + nevents++; if (!fni->NextEntryOffset) break;