summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGeoff Voelker <voelker@cs.washington.edu>1997-09-03 00:52:40 +0000
committerGeoff Voelker <voelker@cs.washington.edu>1997-09-03 00:52:40 +0000
commit3750e8f47bd196a1f88dc8a53baf7888deb33060 (patch)
treedb00cdfa62434312dde6d39332bfccd5e70c9ec5 /src
parent2304ee4a1c44513126c73a614bf4b6789063cf39 (diff)
downloademacs-3750e8f47bd196a1f88dc8a53baf7888deb33060.tar.gz
Declare externs from other files.
(w32_kbd_mods_to_emacs): New parameter KEY. Use w32-capslock-is-shiftlock for old behavior. (key_event): Pass in new parameter to w32_kbd_mods_to_emacs. (key_event): New parameter isdead. Set isdead if the key press was done using a dead key.
Diffstat (limited to 'src')
-rw-r--r--src/w32inevt.c35
1 files changed, 29 insertions, 6 deletions
diff --git a/src/w32inevt.c b/src/w32inevt.c
index 76f5be277be..dc3fdf301b8 100644
--- a/src/w32inevt.c
+++ b/src/w32inevt.c
@@ -50,6 +50,9 @@ extern int change_frame_size (FRAME_PTR, int, int, int, int);
/* from w32fns.c */
extern Lisp_Object Vw32_alt_is_meta;
+/* from w32term */
+extern Lisp_Object Vw32_capslock_is_shiftlock;
+
/* Event queue */
#define EVENT_QUEUE_SIZE 50
static INPUT_RECORD event_queue[EVENT_QUEUE_SIZE];
@@ -96,7 +99,7 @@ get_frame (void)
/* Translate console modifiers to emacs modifiers.
German keyboard support (Kai Morgan Zeise 2/18/95). */
int
-w32_kbd_mods_to_emacs (DWORD mods)
+w32_kbd_mods_to_emacs (DWORD mods, WORD key)
{
int retval = 0;
@@ -116,9 +119,23 @@ w32_kbd_mods_to_emacs (DWORD mods)
retval |= meta_modifier;
}
+ /* Just in case someone wanted the original behaviour, make it
+ optional by setting w32-capslock-is-shiftlock to t. */
+ if (NILP (Vw32_capslock_is_shiftlock)
+ && ((key == VK_INSERT)
+ || (key == VK_DELETE)
+ || ((key >= VK_F1) && (key <= VK_F24))
+ || ((key >= VK_PRIOR) && (key <= VK_DOWN))))
+ {
+ if ( (mods & SHIFT_PRESSED) == SHIFT_PRESSED)
+ retval |= shift_modifier;
+ }
+ else
+ {
if (((mods & (SHIFT_PRESSED | CAPSLOCK_ON)) == SHIFT_PRESSED)
|| ((mods & (SHIFT_PRESSED | CAPSLOCK_ON)) == CAPSLOCK_ON))
retval |= shift_modifier;
+ }
return retval;
}
@@ -288,11 +305,13 @@ static int map_virt_key[256] =
/* return code -1 means that event_queue_ptr won't be incremented.
In other word, this event makes two key codes. (by himi) */
int
-key_event (KEY_EVENT_RECORD *event, struct input_event *emacs_ev)
+key_event (KEY_EVENT_RECORD *event, struct input_event *emacs_ev, int *isdead)
{
int map;
int key_flag = 0;
static BOOL map_virt_key_init_done;
+
+ *isdead = 0;
/* Skip key-up events. */
if (!event->bKeyDown)
@@ -334,6 +353,8 @@ key_event (KEY_EVENT_RECORD *event, struct input_event *emacs_ev)
key_flag = w32_kbd_patch_key (event); /* 95.7.25 by himi */
if (key_flag == 0)
return 0;
+ if (key_flag < 0)
+ *isdead = 1;
XSETINT (emacs_ev->code, event->uChar.AsciiChar);
}
#ifdef MULE
@@ -375,7 +396,8 @@ key_event (KEY_EVENT_RECORD *event, struct input_event *emacs_ev)
#else
XSETFRAME (emacs_ev->frame_or_window, get_frame ());
#endif
- emacs_ev->modifiers = w32_kbd_mods_to_emacs (event->dwControlKeyState);
+ emacs_ev->modifiers = w32_kbd_mods_to_emacs (event->dwControlKeyState,
+ event->wVirtualKeyCode);
emacs_ev->timestamp = GetTickCount ();
if (key_flag == 2) return -1; /* 95.7.25 by himi */
return 1;
@@ -482,7 +504,7 @@ do_mouse_event (MOUSE_EVENT_RECORD *event,
button_state = event->dwButtonState;
emacs_ev->timestamp = GetTickCount ();
- emacs_ev->modifiers = w32_kbd_mods_to_emacs (event->dwControlKeyState) |
+ emacs_ev->modifiers = w32_kbd_mods_to_emacs (event->dwControlKeyState, 0) |
((event->dwButtonState & mask) ? down_modifier : up_modifier);
XSETFASTINT (emacs_ev->x, event->dwMousePosition.X);
@@ -512,7 +534,8 @@ w32_console_read_socket (int sd, struct input_event *bufp, int numchars,
{
BOOL no_events = TRUE;
int nev, ret = 0, add;
-
+ int isdead;
+
if (interrupt_input_blocked)
{
interrupt_input_pending = 1;
@@ -539,7 +562,7 @@ w32_console_read_socket (int sd, struct input_event *bufp, int numchars,
switch (queue_ptr->EventType)
{
case KEY_EVENT:
- add = key_event (&queue_ptr->Event.KeyEvent, bufp);
+ add = key_event (&queue_ptr->Event.KeyEvent, bufp, &isdead);
if (add == -1) /* 95.7.25 by himi */
{
queue_ptr--;