annotate src/w32inevt.c @ 69478:e8bb5df2ba7a

Add index entries around each paragraph rather than depend on entries from beginning of node. Doing so ensures that index entries are less likely to be forgotten if text is cut and pasted, and are necessary anyway if the references are on a separate page. It seems that makeinfo is now (v. 4.8) only producing one index entry per node, so there is no longer any excuse not to. Use subheading instead of heading. The incorrect use of heading produced very large fonts in Info--as large as the main heading. (From Bill Wohler): MH-E never did appear in Emacs 21--MH-E versions 6 and 7 appeared *around* the time of these Emacs releases.
author Bill Wohler <wohler@newt.com>
date Wed, 15 Mar 2006 00:26:12 +0000
parents 3bd95f4f2941
children e90d04cd455a b98066f4aa10 c5406394f567
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16884
36babc489b0c Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents: 16588
diff changeset
1 /* Input event support for Emacs on the Microsoft W32 API.
64770
a0d1312ede66 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64084
diff changeset
2 Copyright (C) 1992, 1993, 1995, 2002, 2003, 2004,
68651
3bd95f4f2941 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64770
diff changeset
3 2005, 2006 Free Software Foundation, Inc.
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12544
diff changeset
5 This file is part of GNU Emacs.
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12544
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12544
diff changeset
8 it under the terms of the GNU General Public License as published by
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12544
diff changeset
9 the Free Software Foundation; either version 2, or (at your option)
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12544
diff changeset
10 any later version.
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12544
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12544
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12544
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12544
diff changeset
15 GNU General Public License for more details.
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12544
diff changeset
17 You should have received a copy of the GNU General Public License
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12544
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
64084
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 55640
diff changeset
19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 55640
diff changeset
20 Boston, MA 02110-1301, USA.
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 Drew Bliss 01-Oct-93
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 Adapted from ntkbd.c by Tim Fleehart
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 */
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26
42469
64341c22fb4c Include <config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 35284
diff changeset
27 #ifdef HAVE_CONFIG_H
64341c22fb4c Include <config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 35284
diff changeset
28 #include <config.h>
64341c22fb4c Include <config.h>.
Pavel Janík <Pavel@Janik.cz>
parents: 35284
diff changeset
29 #endif
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 #include <stdlib.h>
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 #include <stdio.h>
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 #include <windows.h>
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34
31113
1743924e00dd Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents: 29319
diff changeset
35 #ifndef MOUSE_MOVED
1743924e00dd Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents: 29319
diff changeset
36 #define MOUSE_MOVED 1
1743924e00dd Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents: 29319
diff changeset
37 #endif
1743924e00dd Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents: 29319
diff changeset
38
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 #include "lisp.h"
31113
1743924e00dd Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents: 29319
diff changeset
40 #include "keyboard.h"
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 #include "frame.h"
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 #include "blockinput.h"
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 #include "termhooks.h"
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
44 #include "w32heap.h"
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
45 #include "w32term.h"
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
47 /* stdin, from ntterm */
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 extern HANDLE keyboard_handle;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 /* Info for last mouse motion */
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 static COORD movement_pos;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
52 static DWORD movement_time;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 /* from keyboard.c */
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 extern void reinvoke_input_signal (void);
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 /* from dispnew.c */
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 extern int change_frame_size (FRAME_PTR, int, int, int, int);
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59
24937
42f29912dc46 (w32_console_read_socket): Use new variable w32_use_full_screen_buffer.
Andrew Innes <andrewi@gnu.org>
parents: 24756
diff changeset
60 /* from w32console.c */
42f29912dc46 (w32_console_read_socket): Use new variable w32_use_full_screen_buffer.
Andrew Innes <andrewi@gnu.org>
parents: 24756
diff changeset
61 extern int w32_use_full_screen_buffer;
42f29912dc46 (w32_console_read_socket): Use new variable w32_use_full_screen_buffer.
Andrew Innes <andrewi@gnu.org>
parents: 24756
diff changeset
62
15460
be07c4433554 (Vwin32_alt_is_meta): Declared.
Richard M. Stallman <rms@gnu.org>
parents: 15144
diff changeset
63 /* from w32fns.c */
16588
481b7874a1e9 Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents: 15784
diff changeset
64 extern Lisp_Object Vw32_alt_is_meta;
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
65 extern unsigned int map_keypad_keys (unsigned int, unsigned int);
15460
be07c4433554 (Vwin32_alt_is_meta): Declared.
Richard M. Stallman <rms@gnu.org>
parents: 15144
diff changeset
66
19710
4a6b8c86ad87 Declare externs from other files.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
67 /* from w32term */
4a6b8c86ad87 Declare externs from other files.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
68 extern Lisp_Object Vw32_capslock_is_shiftlock;
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
69 extern Lisp_Object Vw32_enable_caps_lock;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
70 extern Lisp_Object Vw32_enable_num_lock;
21611
1a4fc4d9ca9a (Vw32_recognize_altgr): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents: 19710
diff changeset
71 extern Lisp_Object Vw32_recognize_altgr;
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
72 extern Lisp_Object Vw32_pass_lwindow_to_system;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
73 extern Lisp_Object Vw32_pass_rwindow_to_system;
23804
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
74 extern Lisp_Object Vw32_phantom_key_code;
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
75 extern Lisp_Object Vw32_lwindow_modifier;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
76 extern Lisp_Object Vw32_rwindow_modifier;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
77 extern Lisp_Object Vw32_apps_modifier;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
78 extern Lisp_Object Vw32_scroll_lock_modifier;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
79 extern unsigned int w32_key_to_modifier (int key);
19710
4a6b8c86ad87 Declare externs from other files.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
80
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 /* Event queue */
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 #define EVENT_QUEUE_SIZE 50
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 static INPUT_RECORD event_queue[EVENT_QUEUE_SIZE];
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 static INPUT_RECORD *queue_ptr = event_queue, *queue_end = event_queue;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
86 static int
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 fill_queue (BOOL block)
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 {
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 BOOL rc;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 DWORD events_waiting;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
91
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 if (queue_ptr < queue_end)
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 return queue_end-queue_ptr;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
94
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 if (!block)
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 {
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 /* Check to see if there are some events to read before we try
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 because we can't block. */
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 if (!GetNumberOfConsoleInputEvents (keyboard_handle, &events_waiting))
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 return -1;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 if (events_waiting == 0)
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 return 0;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
104
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 rc = ReadConsoleInput (keyboard_handle, event_queue, EVENT_QUEUE_SIZE,
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 &events_waiting);
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 if (!rc)
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 return -1;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 queue_ptr = event_queue;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 queue_end = event_queue + events_waiting;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 return (int) events_waiting;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 }
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 /* In a generic, multi-frame world this should take a console handle
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 and return the frame for it
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 Right now, there's only one frame so return it. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
118 static FRAME_PTR
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 get_frame (void)
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 {
27399
22e4449438ff (get_frame, w32_console_mouse_position, mouse_moved_to):
Jason Rumney <jasonr@gnu.org>
parents: 24937
diff changeset
121 return SELECTED_FRAME ();
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 }
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
124 /* Translate console modifiers to emacs modifiers.
11386
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
125 German keyboard support (Kai Morgan Zeise 2/18/95). */
15144
9dd18e9e0362 (win32_kdb_patch_key): Initialize isdead.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14463
diff changeset
126 int
19710
4a6b8c86ad87 Declare externs from other files.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
127 w32_kbd_mods_to_emacs (DWORD mods, WORD key)
11386
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
128 {
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
129 int retval = 0;
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
130
21611
1a4fc4d9ca9a (Vw32_recognize_altgr): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents: 19710
diff changeset
131 /* If we recognize right-alt and left-ctrl as AltGr, and it has been
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
132 pressed, first remove those modifiers. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
133 if (!NILP (Vw32_recognize_altgr)
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
134 && (mods & (RIGHT_ALT_PRESSED | LEFT_CTRL_PRESSED))
11386
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
135 == (RIGHT_ALT_PRESSED | LEFT_CTRL_PRESSED))
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
136 mods &= ~ (RIGHT_ALT_PRESSED | LEFT_CTRL_PRESSED);
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
137
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
138 if (mods & (RIGHT_ALT_PRESSED | LEFT_ALT_PRESSED))
16588
481b7874a1e9 Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents: 15784
diff changeset
139 retval = ((NILP (Vw32_alt_is_meta)) ? alt_modifier : meta_modifier);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
140
11386
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
141 if (mods & (RIGHT_CTRL_PRESSED | LEFT_CTRL_PRESSED))
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
142 {
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
143 retval |= ctrl_modifier;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
144 if ((mods & (RIGHT_CTRL_PRESSED | LEFT_CTRL_PRESSED))
11386
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
145 == (RIGHT_CTRL_PRESSED | LEFT_CTRL_PRESSED))
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
146 retval |= meta_modifier;
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
147 }
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
148
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
149 if (mods & LEFT_WIN_PRESSED)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
150 retval |= w32_key_to_modifier (VK_LWIN);
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
151 if (mods & RIGHT_WIN_PRESSED)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
152 retval |= w32_key_to_modifier (VK_RWIN);
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
153 if (mods & APPS_PRESSED)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
154 retval |= w32_key_to_modifier (VK_APPS);
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
155 if (mods & SCROLLLOCK_ON)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
156 retval |= w32_key_to_modifier (VK_SCROLL);
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
157
19710
4a6b8c86ad87 Declare externs from other files.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
158 /* Just in case someone wanted the original behaviour, make it
4a6b8c86ad87 Declare externs from other files.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
159 optional by setting w32-capslock-is-shiftlock to t. */
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
160 if (NILP (Vw32_capslock_is_shiftlock)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
161 /* Keys that should _not_ be affected by CapsLock. */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
162 && ( (key == VK_BACK)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
163 || (key == VK_TAB)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
164 || (key == VK_CLEAR)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
165 || (key == VK_RETURN)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
166 || (key == VK_ESCAPE)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
167 || ((key >= VK_SPACE) && (key <= VK_HELP))
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
168 || ((key >= VK_NUMPAD0) && (key <= VK_F24))
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
169 || ((key >= VK_NUMPAD_CLEAR) && (key <= VK_NUMPAD_DELETE))
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
170 ))
19710
4a6b8c86ad87 Declare externs from other files.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
171 {
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
172 /* Only consider shift state. */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
173 if ((mods & SHIFT_PRESSED) != 0)
19710
4a6b8c86ad87 Declare externs from other files.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
174 retval |= shift_modifier;
4a6b8c86ad87 Declare externs from other files.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
175 }
4a6b8c86ad87 Declare externs from other files.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
176 else
4a6b8c86ad87 Declare externs from other files.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
177 {
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
178 /* Ignore CapsLock state if not enabled. */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
179 if (NILP (Vw32_enable_caps_lock))
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
180 mods &= ~CAPSLOCK_ON;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
181 if ((mods & (SHIFT_PRESSED | CAPSLOCK_ON)) != 0)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
182 retval |= shift_modifier;
19710
4a6b8c86ad87 Declare externs from other files.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
183 }
11386
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
184
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
185 return retval;
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
186 }
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
187
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
188 #if 0
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
189 /* Return nonzero if the virtual key is a dead key. */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
190 static int
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
191 is_dead_key (int wparam)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
192 {
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
193 unsigned int code = MapVirtualKey (wparam, 2);
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
194
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
195 /* Windows 95 returns 0x8000, NT returns 0x80000000. */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
196 return (code & 0x80008000) ? 1 : 0;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
197 }
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
198 #endif
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
199
14245
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
200 /* The return code indicates key code size. */
14463
24e5bd545f4d (win32_kbd_mods_to_emacs, win32_kbd_patch_key,
Geoff Voelker <voelker@cs.washington.edu>
parents: 14245
diff changeset
201 int
16588
481b7874a1e9 Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents: 15784
diff changeset
202 w32_kbd_patch_key (KEY_EVENT_RECORD *event)
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 {
11386
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
204 unsigned int key_code = event->wVirtualKeyCode;
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
205 unsigned int mods = event->dwControlKeyState;
14245
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
206 BYTE keystate[256];
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
207 static BYTE ansi_code[4];
15144
9dd18e9e0362 (win32_kdb_patch_key): Initialize isdead.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14463
diff changeset
208 static int isdead = 0;
11386
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
209
14245
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
210 if (isdead == 2)
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
211 {
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
212 event->uChar.AsciiChar = ansi_code[2];
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
213 isdead = 0;
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
214 return 1;
11386
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
215 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
216 if (event->uChar.AsciiChar != 0)
14245
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
217 return 1;
14463
24e5bd545f4d (win32_kbd_mods_to_emacs, win32_kbd_patch_key,
Geoff Voelker <voelker@cs.washington.edu>
parents: 14245
diff changeset
218
14245
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
219 memset (keystate, 0, sizeof (keystate));
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
220 keystate[key_code] = 0x80;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
221 if (mods & SHIFT_PRESSED)
14245
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
222 keystate[VK_SHIFT] = 0x80;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
223 if (mods & CAPSLOCK_ON)
14245
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
224 keystate[VK_CAPITAL] = 1;
21611
1a4fc4d9ca9a (Vw32_recognize_altgr): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents: 19710
diff changeset
225 /* If we recognize right-alt and left-ctrl as AltGr, set the key
1a4fc4d9ca9a (Vw32_recognize_altgr): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents: 19710
diff changeset
226 states accordingly before invoking ToAscii. */
1a4fc4d9ca9a (Vw32_recognize_altgr): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents: 19710
diff changeset
227 if (!NILP (Vw32_recognize_altgr)
1a4fc4d9ca9a (Vw32_recognize_altgr): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents: 19710
diff changeset
228 && (mods & LEFT_CTRL_PRESSED) && (mods & RIGHT_ALT_PRESSED))
14463
24e5bd545f4d (win32_kbd_mods_to_emacs, win32_kbd_patch_key,
Geoff Voelker <voelker@cs.washington.edu>
parents: 14245
diff changeset
229 {
24e5bd545f4d (win32_kbd_mods_to_emacs, win32_kbd_patch_key,
Geoff Voelker <voelker@cs.washington.edu>
parents: 14245
diff changeset
230 keystate[VK_CONTROL] = 0x80;
24e5bd545f4d (win32_kbd_mods_to_emacs, win32_kbd_patch_key,
Geoff Voelker <voelker@cs.washington.edu>
parents: 14245
diff changeset
231 keystate[VK_LCONTROL] = 0x80;
24e5bd545f4d (win32_kbd_mods_to_emacs, win32_kbd_patch_key,
Geoff Voelker <voelker@cs.washington.edu>
parents: 14245
diff changeset
232 keystate[VK_MENU] = 0x80;
24e5bd545f4d (win32_kbd_mods_to_emacs, win32_kbd_patch_key,
Geoff Voelker <voelker@cs.washington.edu>
parents: 14245
diff changeset
233 keystate[VK_RMENU] = 0x80;
24e5bd545f4d (win32_kbd_mods_to_emacs, win32_kbd_patch_key,
Geoff Voelker <voelker@cs.washington.edu>
parents: 14245
diff changeset
234 }
24e5bd545f4d (win32_kbd_mods_to_emacs, win32_kbd_patch_key,
Geoff Voelker <voelker@cs.washington.edu>
parents: 14245
diff changeset
235
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
236 #if 0
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
237 /* Because of an OS bug, ToAscii corrupts the stack when called to
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
238 convert a dead key in console mode on NT4. Unfortunately, trying
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
239 to check for dead keys using MapVirtualKey doesn't work either -
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
240 these functions apparently use internal information about keyboard
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
241 layout which doesn't get properly updated in console programs when
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
242 changing layout (though apparently it gets partly updated,
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
243 otherwise ToAscii wouldn't crash). */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
244 if (is_dead_key (event->wVirtualKeyCode))
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
245 return 0;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
246 #endif
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
247
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
248 /* On NT, call ToUnicode instead and then convert to the current
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
249 locale's default codepage. */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
250 if (os_subtype == OS_NT)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
251 {
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
252 WCHAR buf[128];
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
253
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
254 isdead = ToUnicode (event->wVirtualKeyCode, event->wVirtualScanCode,
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
255 keystate, buf, 128, 0);
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
256 if (isdead > 0)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
257 {
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
258 char cp[20];
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
259 int cpId;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
260
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
261 GetLocaleInfo (GetThreadLocale (),
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
262 LOCALE_IDEFAULTANSICODEPAGE, cp, 20);
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
263 cpId = atoi (cp);
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
264 isdead = WideCharToMultiByte (cpId, 0, buf, isdead,
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
265 ansi_code, 4, NULL, NULL);
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
266 }
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
267 else
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
268 isdead = 0;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
269 }
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
270 else
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
271 {
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
272 isdead = ToAscii (event->wVirtualKeyCode, event->wVirtualScanCode,
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
273 keystate, (LPWORD) ansi_code, 0);
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
274 }
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
275
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
276 if (isdead == 0)
14245
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
277 return 0;
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
278 event->uChar.AsciiChar = ansi_code[0];
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
279 return isdead;
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 }
15144
9dd18e9e0362 (win32_kdb_patch_key): Initialize isdead.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14463
diff changeset
281
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
283 extern char *lispy_function_keys[];
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284
23804
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
285 static int faked_key = 0;
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
286
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
287 /* return code -1 means that event_queue_ptr won't be incremented.
14245
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
288 In other word, this event makes two key codes. (by himi) */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
289 int
19710
4a6b8c86ad87 Declare externs from other files.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
290 key_event (KEY_EVENT_RECORD *event, struct input_event *emacs_ev, int *isdead)
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 {
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
292 static int mod_key_state = 0;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
293 int wParam;
19710
4a6b8c86ad87 Declare externs from other files.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
294
4a6b8c86ad87 Declare externs from other files.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
295 *isdead = 0;
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
296
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 /* Skip key-up events. */
15144
9dd18e9e0362 (win32_kdb_patch_key): Initialize isdead.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14463
diff changeset
298 if (!event->bKeyDown)
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 {
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
300 switch (event->wVirtualKeyCode)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
301 {
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
302 case VK_LWIN:
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
303 mod_key_state &= ~LEFT_WIN_PRESSED;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
304 break;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
305 case VK_RWIN:
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
306 mod_key_state &= ~RIGHT_WIN_PRESSED;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
307 break;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
308 case VK_APPS:
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
309 mod_key_state &= ~APPS_PRESSED;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
310 break;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
311 }
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
312 return 0;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
313 }
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
314
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
315 /* Ignore keystrokes we fake ourself; see below. */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
316 if (faked_key == event->wVirtualKeyCode)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
317 {
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
318 faked_key = 0;
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 return 0;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 }
11386
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
321
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
322 /* To make it easier to debug this code, ignore modifier keys! */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
323 switch (event->wVirtualKeyCode)
11386
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
324 {
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
325 case VK_LWIN:
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
326 if (NILP (Vw32_pass_lwindow_to_system))
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
327 {
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
328 /* Prevent system from acting on keyup (which opens the Start
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
329 menu if no other key was pressed) by simulating a press of
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
330 Space which we will ignore. */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
331 if ((mod_key_state & LEFT_WIN_PRESSED) == 0)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
332 {
23804
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
333 if (NUMBERP (Vw32_phantom_key_code))
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
334 faked_key = XUINT (Vw32_phantom_key_code) & 255;
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
335 else
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
336 faked_key = VK_SPACE;
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
337 keybd_event (faked_key, (BYTE) MapVirtualKey (faked_key, 0), 0, 0);
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
338 }
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
339 }
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
340 mod_key_state |= LEFT_WIN_PRESSED;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
341 if (!NILP (Vw32_lwindow_modifier))
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
342 return 0;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
343 break;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
344 case VK_RWIN:
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
345 if (NILP (Vw32_pass_rwindow_to_system))
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
346 {
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
347 if ((mod_key_state & RIGHT_WIN_PRESSED) == 0)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
348 {
23804
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
349 if (NUMBERP (Vw32_phantom_key_code))
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
350 faked_key = XUINT (Vw32_phantom_key_code) & 255;
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
351 else
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
352 faked_key = VK_SPACE;
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
353 keybd_event (faked_key, (BYTE) MapVirtualKey (faked_key, 0), 0, 0);
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
354 }
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
355 }
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
356 mod_key_state |= RIGHT_WIN_PRESSED;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
357 if (!NILP (Vw32_rwindow_modifier))
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
358 return 0;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
359 break;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
360 case VK_APPS:
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
361 mod_key_state |= APPS_PRESSED;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
362 if (!NILP (Vw32_apps_modifier))
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
363 return 0;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
364 break;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
365 case VK_CAPITAL:
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
366 /* Decide whether to treat as modifier or function key. */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
367 if (NILP (Vw32_enable_caps_lock))
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
368 goto disable_lock_key;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
369 return 0;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
370 case VK_NUMLOCK:
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
371 /* Decide whether to treat as modifier or function key. */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
372 if (NILP (Vw32_enable_num_lock))
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
373 goto disable_lock_key;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
374 return 0;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
375 case VK_SCROLL:
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
376 /* Decide whether to treat as modifier or function key. */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
377 if (NILP (Vw32_scroll_lock_modifier))
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
378 goto disable_lock_key;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
379 return 0;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
380 disable_lock_key:
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
381 /* Ensure the appropriate lock key state is off (and the
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
382 indicator light as well). */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
383 wParam = event->wVirtualKeyCode;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
384 if (GetAsyncKeyState (wParam) & 0x8000)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
385 {
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
386 /* Fake another press of the relevant key. Apparently, this
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
387 really is the only way to turn off the indicator. */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
388 faked_key = wParam;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
389 keybd_event ((BYTE) wParam, (BYTE) MapVirtualKey (wParam, 0),
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
390 KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
391 keybd_event ((BYTE) wParam, (BYTE) MapVirtualKey (wParam, 0),
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
392 KEYEVENTF_EXTENDEDKEY | 0, 0);
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
393 keybd_event ((BYTE) wParam, (BYTE) MapVirtualKey (wParam, 0),
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
394 KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
395 }
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
396 break;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
397 case VK_MENU:
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
398 case VK_CONTROL:
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
399 case VK_SHIFT:
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 return 0;
23804
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
401 case VK_CANCEL:
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
402 /* Windows maps Ctrl-Pause (aka Ctrl-Break) into VK_CANCEL,
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
403 which is confusing for purposes of key binding; convert
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
404 VK_CANCEL events into VK_PAUSE events. */
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
405 event->wVirtualKeyCode = VK_PAUSE;
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
406 break;
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
407 case VK_PAUSE:
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
408 /* Windows maps Ctrl-NumLock into VK_PAUSE, which is confusing
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
409 for purposes of key binding; convert these back into
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
410 VK_NUMLOCK events, at least when we want to see NumLock key
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
411 presses. (Note that there is never any possibility that
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
412 VK_PAUSE with Ctrl really is C-Pause as per above.) */
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
413 if (NILP (Vw32_enable_num_lock)
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
414 && (event->dwControlKeyState
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
415 & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED)) != 0)
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
416 event->wVirtualKeyCode = VK_NUMLOCK;
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
417 break;
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 }
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
419
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
420 /* Recognize state of Windows and Apps keys. */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
421 event->dwControlKeyState |= mod_key_state;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
422
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
423 /* Distinguish numeric keypad keys from extended keys. */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
424 event->wVirtualKeyCode =
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
425 map_keypad_keys (event->wVirtualKeyCode,
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
426 (event->dwControlKeyState & ENHANCED_KEY));
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
427
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
428 if (lispy_function_keys[event->wVirtualKeyCode] == 0)
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 {
45804
863817d7e734 *** empty log message ***
Pavel Janík <Pavel@Janik.cz>
parents: 42469
diff changeset
430 emacs_ev->kind = ASCII_KEYSTROKE_EVENT;
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
431
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
432 if (!NILP (Vw32_recognize_altgr)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
433 && (event->dwControlKeyState & LEFT_CTRL_PRESSED)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
434 && (event->dwControlKeyState & RIGHT_ALT_PRESSED))
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
435 {
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
436 /* Don't try to interpret AltGr key chords; ToAscii seems not
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
437 to process them correctly. */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
438 }
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
439 /* Handle key chords including any modifiers other than shift
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
440 directly, in order to preserve as much modifier information as
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
441 possible. */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
442 else if (event->dwControlKeyState
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
443 & ( RIGHT_CTRL_PRESSED | LEFT_CTRL_PRESSED
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
444 | RIGHT_ALT_PRESSED | LEFT_ALT_PRESSED
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
445 | (!NILP (Vw32_lwindow_modifier) ? LEFT_WIN_PRESSED : 0)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
446 | (!NILP (Vw32_rwindow_modifier) ? RIGHT_WIN_PRESSED : 0)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
447 | (!NILP (Vw32_apps_modifier) ? APPS_PRESSED : 0)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
448 | (!NILP (Vw32_scroll_lock_modifier) ? SCROLLLOCK_ON : 0)))
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
449 {
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
450 /* Don't translate modified alphabetic keystrokes, so the user
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
451 doesn't need to constantly switch layout to type control or
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
452 meta keystrokes when the normal layout translates
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
453 alphabetic characters to non-ascii characters. */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
454 if ('A' <= event->wVirtualKeyCode && event->wVirtualKeyCode <= 'Z')
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
455 {
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
456 event->uChar.AsciiChar = event->wVirtualKeyCode;
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
457 if ((event->dwControlKeyState & SHIFT_PRESSED) == 0)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
458 event->uChar.AsciiChar += ('a' - 'A');
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
459 }
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
460 /* Try to handle unrecognized keystrokes by determining the
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
461 base character (ie. translating the base key plus shift
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
462 modifier). */
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
463 else if (event->uChar.AsciiChar == 0)
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
464 w32_kbd_patch_key (event);
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
465 }
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
466 if (event->uChar.AsciiChar == 0)
14245
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
467 return 0;
55640
773eb057811d (w32_console_mouse_position, do_mouse_event, key_event): Don't mix
Jason Rumney <jasonr@gnu.org>
parents: 54169
diff changeset
468 emacs_ev->code = event->uChar.AsciiChar;
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 }
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 else
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 {
45804
863817d7e734 *** empty log message ***
Pavel Janík <Pavel@Janik.cz>
parents: 42469
diff changeset
472 emacs_ev->kind = NON_ASCII_KEYSTROKE_EVENT;
55640
773eb057811d (w32_console_mouse_position, do_mouse_event, key_event): Don't mix
Jason Rumney <jasonr@gnu.org>
parents: 54169
diff changeset
473 emacs_ev->code = event->wVirtualKeyCode;
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 }
23679
3d02c8b4b525 Include w32term.h and w32heap.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21829
diff changeset
475
11386
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
476 XSETFRAME (emacs_ev->frame_or_window, get_frame ());
19710
4a6b8c86ad87 Declare externs from other files.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
477 emacs_ev->modifiers = w32_kbd_mods_to_emacs (event->dwControlKeyState,
4a6b8c86ad87 Declare externs from other files.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
478 event->wVirtualKeyCode);
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 emacs_ev->timestamp = GetTickCount ();
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480 return 1;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 }
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482
23804
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
483 int
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
484 w32_console_toggle_lock_key (int vk_code, Lisp_Object new_state)
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
485 {
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
486 int cur_state = (GetKeyState (vk_code) & 1);
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
487
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
488 if (NILP (new_state)
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
489 || (NUMBERP (new_state)
35284
712561c30aa5 (w32_console_toggle_lock_key): Add parentheses.
Jason Rumney <jasonr@gnu.org>
parents: 31113
diff changeset
490 && ((XUINT (new_state)) & 1) != cur_state))
23804
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
491 {
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
492 faked_key = vk_code;
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
493
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
494 keybd_event ((BYTE) vk_code,
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
495 (BYTE) MapVirtualKey (vk_code, 0),
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
496 KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
497 keybd_event ((BYTE) vk_code,
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
498 (BYTE) MapVirtualKey (vk_code, 0),
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
499 KEYEVENTF_EXTENDEDKEY | 0, 0);
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
500 keybd_event ((BYTE) vk_code,
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
501 (BYTE) MapVirtualKey (vk_code, 0),
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
502 KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
503 cur_state = !cur_state;
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
504 }
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
505
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
506 return cur_state;
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
507 }
aa5a4d0b1591 (key_event): Use Vw32_phantom_key_code. Undo the
Geoff Voelker <voelker@cs.washington.edu>
parents: 23679
diff changeset
508
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 /* Mouse position hook. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
510 void
21829
674d44aeeda1 (w32_console_mouse_position): Rename from
Geoff Voelker <voelker@cs.washington.edu>
parents: 21611
diff changeset
511 w32_console_mouse_position (FRAME_PTR *f,
674d44aeeda1 (w32_console_mouse_position): Rename from
Geoff Voelker <voelker@cs.washington.edu>
parents: 21611
diff changeset
512 int insist,
674d44aeeda1 (w32_console_mouse_position): Rename from
Geoff Voelker <voelker@cs.washington.edu>
parents: 21611
diff changeset
513 Lisp_Object *bar_window,
674d44aeeda1 (w32_console_mouse_position): Rename from
Geoff Voelker <voelker@cs.washington.edu>
parents: 21611
diff changeset
514 enum scroll_bar_part *part,
674d44aeeda1 (w32_console_mouse_position): Rename from
Geoff Voelker <voelker@cs.washington.edu>
parents: 21611
diff changeset
515 Lisp_Object *x,
674d44aeeda1 (w32_console_mouse_position): Rename from
Geoff Voelker <voelker@cs.washington.edu>
parents: 21611
diff changeset
516 Lisp_Object *y,
674d44aeeda1 (w32_console_mouse_position): Rename from
Geoff Voelker <voelker@cs.washington.edu>
parents: 21611
diff changeset
517 unsigned long *time)
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 {
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 BLOCK_INPUT;
15144
9dd18e9e0362 (win32_kdb_patch_key): Initialize isdead.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14463
diff changeset
520
11386
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
521 insist = insist;
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
522
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523 *f = get_frame ();
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524 *bar_window = Qnil;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 *part = 0;
27399
22e4449438ff (get_frame, w32_console_mouse_position, mouse_moved_to):
Jason Rumney <jasonr@gnu.org>
parents: 24937
diff changeset
526 SELECTED_FRAME ()->mouse_moved = 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
527
55640
773eb057811d (w32_console_mouse_position, do_mouse_event, key_event): Don't mix
Jason Rumney <jasonr@gnu.org>
parents: 54169
diff changeset
528 XSETINT(*x, movement_pos.X);
773eb057811d (w32_console_mouse_position, do_mouse_event, key_event): Don't mix
Jason Rumney <jasonr@gnu.org>
parents: 54169
diff changeset
529 XSETINT(*y, movement_pos.Y);
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530 *time = movement_time;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
531
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 UNBLOCK_INPUT;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 }
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 /* Remember mouse motion and notify emacs. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
536 static void
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 mouse_moved_to (int x, int y)
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 {
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 /* If we're in the same place, ignore it */
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540 if (x != movement_pos.X || y != movement_pos.Y)
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 {
27399
22e4449438ff (get_frame, w32_console_mouse_position, mouse_moved_to):
Jason Rumney <jasonr@gnu.org>
parents: 24937
diff changeset
542 SELECTED_FRAME ()->mouse_moved = 1;
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 movement_pos.X = x;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 movement_pos.Y = y;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 movement_time = GetTickCount ();
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 }
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547 }
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 /* Consoles return button bits in a strange order:
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 least significant - Leftmost button
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 next - Rightmost button
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 next - Leftmost+1
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 next - Leftmost+2...
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 Assume emacs likes three button mice, so
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 Left == 0
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 Middle == 1
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 Right == 2
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 Others increase from there. */
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560
29319
2069f3aa4939 (NUM_TRANSLATED_MOUSE_BUTTONS): New constant.
Jason Rumney <jasonr@gnu.org>
parents: 27515
diff changeset
561 #define NUM_TRANSLATED_MOUSE_BUTTONS 3
2069f3aa4939 (NUM_TRANSLATED_MOUSE_BUTTONS): New constant.
Jason Rumney <jasonr@gnu.org>
parents: 27515
diff changeset
562 static int emacs_button_translation[NUM_TRANSLATED_MOUSE_BUTTONS] =
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 {
29319
2069f3aa4939 (NUM_TRANSLATED_MOUSE_BUTTONS): New constant.
Jason Rumney <jasonr@gnu.org>
parents: 27515
diff changeset
564 0, 2, 1
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 };
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
567 static int
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 do_mouse_event (MOUSE_EVENT_RECORD *event,
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 struct input_event *emacs_ev)
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
570 {
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 static DWORD button_state = 0;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 DWORD but_change, mask;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 int i;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
574
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 if (event->dwEventFlags == MOUSE_MOVED)
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 {
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577 /* For movement events we just note that the mouse has moved
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 so that emacs will generate drag events. */
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 mouse_moved_to (event->dwMousePosition.X, event->dwMousePosition.Y);
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 return 0;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
582
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583 /* It looks like the console code sends us a mouse event with
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 dwButtonState == 0 when a window is activated. Ignore this case. */
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585 if (event->dwButtonState == button_state)
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 return 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
587
45804
863817d7e734 *** empty log message ***
Pavel Janík <Pavel@Janik.cz>
parents: 42469
diff changeset
588 emacs_ev->kind = MOUSE_CLICK_EVENT;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
589
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 /* Find out what button has changed state since the last button event. */
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 but_change = button_state ^ event->dwButtonState;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 mask = 1;
29319
2069f3aa4939 (NUM_TRANSLATED_MOUSE_BUTTONS): New constant.
Jason Rumney <jasonr@gnu.org>
parents: 27515
diff changeset
593 for (i = 0; mask; i++, mask <<= 1)
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 if (but_change & mask)
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 {
29319
2069f3aa4939 (NUM_TRANSLATED_MOUSE_BUTTONS): New constant.
Jason Rumney <jasonr@gnu.org>
parents: 27515
diff changeset
596 if (i < NUM_TRANSLATED_MOUSE_BUTTONS)
55640
773eb057811d (w32_console_mouse_position, do_mouse_event, key_event): Don't mix
Jason Rumney <jasonr@gnu.org>
parents: 54169
diff changeset
597 emacs_ev->code = emacs_button_translation[i];
29319
2069f3aa4939 (NUM_TRANSLATED_MOUSE_BUTTONS): New constant.
Jason Rumney <jasonr@gnu.org>
parents: 27515
diff changeset
598 else
55640
773eb057811d (w32_console_mouse_position, do_mouse_event, key_event): Don't mix
Jason Rumney <jasonr@gnu.org>
parents: 54169
diff changeset
599 emacs_ev->code = i;
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 break;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 }
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 button_state = event->dwButtonState;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 emacs_ev->timestamp = GetTickCount ();
19710
4a6b8c86ad87 Declare externs from other files.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
605 emacs_ev->modifiers = w32_kbd_mods_to_emacs (event->dwControlKeyState, 0) |
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 ((event->dwButtonState & mask) ? down_modifier : up_modifier);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
607
10007
10fc4417831d (SET_FRAME, key_event, do_mouse_event): Use accessor macros.
Karl Heuer <kwzh@gnu.org>
parents: 9907
diff changeset
608 XSETFASTINT (emacs_ev->x, event->dwMousePosition.X);
10fc4417831d (SET_FRAME, key_event, do_mouse_event): Use accessor macros.
Karl Heuer <kwzh@gnu.org>
parents: 9907
diff changeset
609 XSETFASTINT (emacs_ev->y, event->dwMousePosition.Y);
14245
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
610 /* for Mule 2.2 (Based on Emacs 19.28 */
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
611 #ifdef MULE
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
612 XSET (emacs_ev->frame_or_window, Lisp_Frame, get_frame ());
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
613 #else
11386
62e2ab942896 (do_mouse_event): Use XSETFASTINT.
Karl Heuer <kwzh@gnu.org>
parents: 11123
diff changeset
614 XSETFRAME (emacs_ev->frame_or_window, get_frame ());
14245
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
615 #endif
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
616
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617 return 1;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 }
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
620 static void
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
621 resize_event (WINDOW_BUFFER_SIZE_RECORD *event)
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 {
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623 FRAME_PTR f = get_frame ();
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
624
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625 change_frame_size (f, event->dwSize.Y, event->dwSize.X, 0, 1);
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626 SET_FRAME_GARBAGED (f);
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627 }
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628
24756
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
629 static void
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
630 maybe_generate_resize_event ()
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
631 {
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
632 CONSOLE_SCREEN_BUFFER_INFO info;
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
633 FRAME_PTR f = get_frame ();
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
634
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
635 GetConsoleScreenBufferInfo (GetStdHandle (STD_OUTPUT_HANDLE), &info);
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
636
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
637 /* It is okay to call this unconditionally, since it will do nothing
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
638 if the size hasn't actually changed. */
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
639 change_frame_size (f,
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
640 1 + info.srWindow.Bottom - info.srWindow.Top,
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
641 1 + info.srWindow.Right - info.srWindow.Left,
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
642 0, 0);
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
643 }
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
644
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
645 int
54169
8b5313e6b324 (w32_console_read_socket): Remove bufp_r and
Kim F. Storm <storm@cua.dk>
parents: 52401
diff changeset
646 w32_console_read_socket (int sd, int expected, struct input_event *hold_quit)
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
647 {
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
648 BOOL no_events = TRUE;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
649 int nev, ret = 0, add;
19710
4a6b8c86ad87 Declare externs from other files.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
650 int isdead;
4a6b8c86ad87 Declare externs from other files.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
651
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 if (interrupt_input_blocked)
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653 {
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 interrupt_input_pending = 1;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 return -1;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
657
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 interrupt_input_pending = 0;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 BLOCK_INPUT;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
660
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661 for (;;)
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 {
15784
75547616a6fe (win32_read_socket): Never block reading from input queue.
Richard M. Stallman <rms@gnu.org>
parents: 15460
diff changeset
663 nev = fill_queue (0);
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 if (nev <= 0)
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 {
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 /* If nev == -1, there was some kind of error
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667 If nev == 0 then waitp must be zero and no events were available
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668 so return. */
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 UNBLOCK_INPUT;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670 return nev;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 }
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672
54169
8b5313e6b324 (w32_console_read_socket): Remove bufp_r and
Kim F. Storm <storm@cua.dk>
parents: 52401
diff changeset
673 while (nev > 0)
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 {
54169
8b5313e6b324 (w32_console_read_socket): Remove bufp_r and
Kim F. Storm <storm@cua.dk>
parents: 52401
diff changeset
675 struct input_event inev;
8b5313e6b324 (w32_console_read_socket): Remove bufp_r and
Kim F. Storm <storm@cua.dk>
parents: 52401
diff changeset
676
8b5313e6b324 (w32_console_read_socket): Remove bufp_r and
Kim F. Storm <storm@cua.dk>
parents: 52401
diff changeset
677 EVENT_INIT (inev);
8b5313e6b324 (w32_console_read_socket): Remove bufp_r and
Kim F. Storm <storm@cua.dk>
parents: 52401
diff changeset
678 inev.kind = NO_EVENT;
8b5313e6b324 (w32_console_read_socket): Remove bufp_r and
Kim F. Storm <storm@cua.dk>
parents: 52401
diff changeset
679 inev.arg = Qnil;
8b5313e6b324 (w32_console_read_socket): Remove bufp_r and
Kim F. Storm <storm@cua.dk>
parents: 52401
diff changeset
680
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 switch (queue_ptr->EventType)
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 {
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 case KEY_EVENT:
54169
8b5313e6b324 (w32_console_read_socket): Remove bufp_r and
Kim F. Storm <storm@cua.dk>
parents: 52401
diff changeset
684 add = key_event (&queue_ptr->Event.KeyEvent, &inev, &isdead);
14245
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
685 if (add == -1) /* 95.7.25 by himi */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
686 {
14245
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
687 queue_ptr--;
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
688 add = 1;
59d24d42958a (WIN32_KEY_SHIFTED): Macro undefined.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14186
diff changeset
689 }
54169
8b5313e6b324 (w32_console_read_socket): Remove bufp_r and
Kim F. Storm <storm@cua.dk>
parents: 52401
diff changeset
690 if (add)
8b5313e6b324 (w32_console_read_socket): Remove bufp_r and
Kim F. Storm <storm@cua.dk>
parents: 52401
diff changeset
691 kbd_buffer_store_event_hold (&inev, hold_quit);
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692 break;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694 case MOUSE_EVENT:
54169
8b5313e6b324 (w32_console_read_socket): Remove bufp_r and
Kim F. Storm <storm@cua.dk>
parents: 52401
diff changeset
695 add = do_mouse_event (&queue_ptr->Event.MouseEvent, &inev);
8b5313e6b324 (w32_console_read_socket): Remove bufp_r and
Kim F. Storm <storm@cua.dk>
parents: 52401
diff changeset
696 if (add)
8b5313e6b324 (w32_console_read_socket): Remove bufp_r and
Kim F. Storm <storm@cua.dk>
parents: 52401
diff changeset
697 kbd_buffer_store_event_hold (&inev, hold_quit);
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698 break;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 case WINDOW_BUFFER_SIZE_EVENT:
24937
42f29912dc46 (w32_console_read_socket): Use new variable w32_use_full_screen_buffer.
Andrew Innes <andrewi@gnu.org>
parents: 24756
diff changeset
701 if (w32_use_full_screen_buffer)
42f29912dc46 (w32_console_read_socket): Use new variable w32_use_full_screen_buffer.
Andrew Innes <andrewi@gnu.org>
parents: 24756
diff changeset
702 resize_event (&queue_ptr->Event.WindowBufferSizeEvent);
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 break;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
704
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705 case MENU_EVENT:
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 case FOCUS_EVENT:
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 /* Internal event types, ignored. */
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 break;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45804
diff changeset
710
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 queue_ptr++;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712 nev--;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 }
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 if (ret > 0 || expected == 0)
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 break;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 }
24756
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
718
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
719 /* We don't get told about changes in the window size (only the buffer
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
720 size, which we no longer care about), so we have to check it
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
721 periodically. */
24937
42f29912dc46 (w32_console_read_socket): Use new variable w32_use_full_screen_buffer.
Andrew Innes <andrewi@gnu.org>
parents: 24756
diff changeset
722 if (!w32_use_full_screen_buffer)
42f29912dc46 (w32_console_read_socket): Use new variable w32_use_full_screen_buffer.
Andrew Innes <andrewi@gnu.org>
parents: 24756
diff changeset
723 maybe_generate_resize_event ();
24756
4582b492a651 (maybe_generate_resize_event): Detect changes in the
Andrew Innes <andrewi@gnu.org>
parents: 23804
diff changeset
724
9907
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725 UNBLOCK_INPUT;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 return ret;
2e5a14f7c44e Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 }
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
728
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
729 /* arch-tag: 0bcb39b7-d085-4b85-9070-6750e8c03047
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
730 (do not change this comment) */