Mercurial > emacs
annotate src/w32term.c @ 23323:0800a4f84757
(underlying_strftime):
Set the buffer to a nonzero value before calling
strftime, and check to see whether strftime has set the buffer to zero.
This lets us distinguish between an empty buffer and an error.
I'm installing this patch by hand now; it will be superseded whenever
the glibc sources are propagated back to fsf.org.
| author | Paul Eggert <eggert@twinsun.com> |
|---|---|
| date | Fri, 25 Sep 1998 21:40:23 +0000 |
| parents | 23fda104cd36 |
| children | 8a448630a9b5 |
| rev | line source |
|---|---|
|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
1 /* Implementation of GUI terminal on the Microsoft W32 API. |
| 13434 | 2 Copyright (C) 1989, 1993, 1994, 1995 Free Software Foundation, Inc. |
| 3 | |
| 4 This file is part of GNU Emacs. | |
| 5 | |
| 6 GNU Emacs is free software; you can redistribute it and/or modify | |
| 7 it under the terms of the GNU General Public License as published by | |
| 8 the Free Software Foundation; either version 2, or (at your option) | |
| 9 any later version. | |
| 10 | |
| 11 GNU Emacs is distributed in the hope that it will be useful, | |
| 12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 GNU General Public License for more details. | |
| 15 | |
| 16 You should have received a copy of the GNU General Public License | |
| 15742 | 17 along with GNU Emacs; see the file COPYING. If not, write to the |
| 18 Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| 19 Boston, MA 02111-1307, USA. */ | |
| 13434 | 20 |
| 21 /* Added by Kevin Gallo */ | |
| 22 | |
| 23 #include <signal.h> | |
| 24 #include <config.h> | |
| 25 #include <stdio.h> | |
| 26 #include "lisp.h" | |
|
18507
be4c110cda51
Include charset.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
27 #include "charset.h" |
| 13434 | 28 #include "blockinput.h" |
| 29 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
30 #include "w32term.h" |
| 21885 | 31 #include <shellapi.h> |
| 13434 | 32 |
| 33 #include "systty.h" | |
| 34 #include "systime.h" | |
| 35 | |
| 36 #include <ctype.h> | |
| 37 #include <errno.h> | |
| 38 #include <setjmp.h> | |
| 39 #include <sys/stat.h> | |
| 40 | |
| 41 #include "frame.h" | |
| 42 #include "dispextern.h" | |
| 43 #include "termhooks.h" | |
| 44 #include "termopts.h" | |
| 45 #include "termchar.h" | |
| 46 #include "gnu.h" | |
| 47 #include "disptab.h" | |
| 48 #include "buffer.h" | |
| 49 #include "window.h" | |
| 50 #include "keyboard.h" | |
| 51 #include "intervals.h" | |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
52 #include "coding.h" |
| 13434 | 53 |
| 21456 | 54 #undef min |
| 55 #undef max | |
| 56 #define min(x, y) (((x) < (y)) ? (x) : (y)) | |
| 57 #define max(x, y) (((x) > (y)) ? (x) : (y)) | |
| 58 | |
|
21875
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
59 extern unsigned int msh_mousewheel; |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
60 |
| 13434 | 61 extern void free_frame_menubar (); |
| 62 | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
63 extern Lisp_Object Vwindow_system; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
64 |
| 13434 | 65 #define x_any_window_to_frame x_window_to_frame |
| 66 #define x_top_window_to_frame x_window_to_frame | |
| 67 | |
| 68 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
69 /* This is display since w32 does not support multiple ones. */ |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
70 struct w32_display_info one_w32_display_info; |
| 13434 | 71 |
| 72 /* This is a list of cons cells, each of the form (NAME . FONT-LIST-CACHE), | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
73 one for each element of w32_display_list and in the same order. |
| 13434 | 74 NAME is the name of the frame. |
| 75 FONT-LIST-CACHE records previous values returned by x-list-fonts. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
76 Lisp_Object w32_display_name_list; |
| 13434 | 77 |
| 78 /* Frame being updated by update_frame. This is declared in term.c. | |
| 79 This is set by update_begin and looked at by all the | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
80 w32 functions. It is zero while not inside an update. |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
81 In that case, the w32 functions assume that `selected_frame' |
| 13434 | 82 is the frame to apply to. */ |
| 83 extern struct frame *updating_frame; | |
| 84 | |
| 85 /* This is a frame waiting to be autoraised, within w32_read_socket. */ | |
| 86 struct frame *pending_autoraise_frame; | |
| 87 | |
| 88 /* During an update, maximum vpos for ins/del line operations to affect. */ | |
| 89 | |
| 90 static int flexlines; | |
| 91 | |
| 92 /* During an update, nonzero if chars output now should be highlighted. */ | |
| 93 | |
| 94 static int highlight; | |
| 95 | |
| 96 /* Nominal cursor position -- where to draw output. | |
| 97 During an update, these are different from the cursor-box position. */ | |
| 98 | |
| 99 static int curs_x; | |
| 100 static int curs_y; | |
| 101 | |
|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
102 DWORD dwWindowsThreadId = 0; |
|
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
103 HANDLE hWindowsThread = NULL; |
| 13434 | 104 DWORD dwMainThreadId = 0; |
| 105 HANDLE hMainThread = NULL; | |
| 106 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
107 #ifndef SIF_ALL |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
108 /* These definitions are new with Windows 95. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
109 #define SIF_RANGE 0x0001 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
110 #define SIF_PAGE 0x0002 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
111 #define SIF_POS 0x0004 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
112 #define SIF_DISABLENOSCROLL 0x0008 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
113 #define SIF_TRACKPOS 0x0010 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
114 #define SIF_ALL (SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
115 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
116 typedef struct tagSCROLLINFO |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
117 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
118 UINT cbSize; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
119 UINT fMask; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
120 int nMin; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
121 int nMax; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
122 UINT nPage; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
123 int nPos; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
124 int nTrackPos; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
125 } SCROLLINFO, FAR *LPSCROLLINFO; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
126 typedef SCROLLINFO CONST FAR *LPCSCROLLINFO; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
127 #endif /* SIF_ALL */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
128 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
129 /* Dynamic linking to new proportional scroll bar functions. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
130 int (PASCAL *pfnSetScrollInfo) (HWND hwnd, int fnBar, LPSCROLLINFO lpsi, BOOL fRedraw); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
131 BOOL (PASCAL *pfnGetScrollInfo) (HWND hwnd, int fnBar, LPSCROLLINFO lpsi); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
132 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
133 int vertical_scroll_bar_min_handle; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
134 int vertical_scroll_bar_top_border; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
135 int vertical_scroll_bar_bottom_border; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
136 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
137 int last_scroll_bar_drag_pos; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
138 |
| 13434 | 139 /* Mouse movement. */ |
| 140 | |
| 141 /* Where the mouse was last time we reported a mouse event. */ | |
| 142 static FRAME_PTR last_mouse_frame; | |
| 143 static RECT last_mouse_glyph; | |
| 144 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
145 Lisp_Object Vw32_num_mouse_buttons; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
146 |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
147 Lisp_Object Vw32_swap_mouse_buttons; |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
148 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
149 /* Control whether x_raise_frame also sets input focus. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
150 Lisp_Object Vw32_grab_focus_on_raise; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
151 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
152 /* Control whether Caps Lock affects non-ascii characters. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
153 Lisp_Object Vw32_capslock_is_shiftlock; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
154 |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
155 /* Control whether right-alt and left-ctrl should be recognized as AltGr. */ |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
156 Lisp_Object Vw32_recognize_altgr; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
157 |
| 13434 | 158 /* The scroll bar in which the last motion event occurred. |
| 159 | |
| 160 If the last motion event occurred in a scroll bar, we set this | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
161 so w32_mouse_position can know whether to report a scroll bar motion or |
| 13434 | 162 an ordinary motion. |
| 163 | |
| 164 If the last motion event didn't occur in a scroll bar, we set this | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
165 to Qnil, to tell w32_mouse_position to return an ordinary motion event. */ |
| 13434 | 166 Lisp_Object last_mouse_scroll_bar; |
| 167 int last_mouse_scroll_bar_pos; | |
| 168 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
169 /* This is a hack. We would really prefer that w32_mouse_position would |
| 13434 | 170 return the time associated with the position it returns, but there |
| 171 doesn't seem to be any way to wrest the timestamp from the server | |
| 172 along with the position query. So, we just keep track of the time | |
| 173 of the last movement we received, and return that in hopes that | |
| 174 it's somewhat accurate. */ | |
| 175 Time last_mouse_movement_time; | |
| 176 | |
| 177 /* Incremented by w32_read_socket whenever it really tries to read events. */ | |
| 178 #ifdef __STDC__ | |
| 179 static int volatile input_signal_count; | |
| 180 #else | |
| 181 static int input_signal_count; | |
| 182 #endif | |
| 183 | |
| 184 extern Lisp_Object Vcommand_line_args, Vsystem_name; | |
| 185 | |
| 186 extern Lisp_Object Qface, Qmouse_face; | |
| 187 | |
| 188 extern int errno; | |
| 189 | |
| 190 /* A mask of extra modifier bits to put into every keyboard char. */ | |
| 191 extern int extra_keyboard_modifiers; | |
| 192 | |
| 193 static Lisp_Object Qvendor_specific_keysyms; | |
| 194 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
195 void w32_delete_display (); |
| 13434 | 196 |
| 197 static void redraw_previous_char (); | |
| 198 static void redraw_following_char (); | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
199 static unsigned int w32_get_modifiers (); |
| 13434 | 200 |
| 201 static int fast_find_position (); | |
| 202 static void note_mouse_highlight (); | |
| 203 static void clear_mouse_face (); | |
| 204 static void show_mouse_face (); | |
| 205 static void do_line_dance (); | |
| 206 | |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
207 /* Forward declarations for term hooks. Consistency with the rest of Emacs |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
208 requires the use of K&R functions prototypes. However, MSVC does not |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
209 pick up the function prototypes correctly with K&R function definitions, |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
210 and so we declare them first to give a little help to MSVC. */ |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
211 static void w32_clear_frame (); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
212 static void w32_clear_end_of_line (int); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
213 static void w32_ins_del_lines (int, int); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
214 static void w32_change_line_highlight (int, int, int); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
215 static void w32_insert_glyphs (GLYPH *, int); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
216 static void w32_write_glyphs (GLYPH *, int); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
217 static void w32_delete_glyphs (int); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
218 static void w32_ring_bell (); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
219 static void w32_reset_terminal_modes (); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
220 static void w32_set_terminal_modes (); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
221 static void w32_update_begin (FRAME_PTR); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
222 static void w32_update_end (FRAME_PTR); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
223 static void w32_set_terminal_window (int); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
224 extern int w32_read_socket (int, struct input_event *, int, int); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
225 static void w32_frame_up_to_date (FRAME_PTR); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
226 static void w32_cursor_to (int, int); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
227 static void w32_reassert_line_highlight (int, int); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
228 static void w32_mouse_position (FRAME_PTR *, int, Lisp_Object *, |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
229 enum scroll_bar_part *, Lisp_Object *, |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
230 Lisp_Object *, unsigned long *); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
231 static void w32_frame_rehighlight (FRAME_PTR); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
232 static void w32_frame_raise_lower (FRAME_PTR, int); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
233 static void w32_set_vertical_scroll_bar (struct window *, int, int, int); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
234 static void w32_condemn_scroll_bars (FRAME_PTR); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
235 static void w32_redeem_scroll_bar (struct window *); |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
236 static void w32_judge_scroll_bars (FRAME_PTR); |
| 13434 | 237 |
| 238 #if 0 | |
| 239 /* This is a function useful for recording debugging information | |
| 240 about the sequence of occurrences in this file. */ | |
| 241 | |
| 242 struct record | |
| 243 { | |
| 244 char *locus; | |
| 245 int type; | |
| 246 }; | |
| 247 | |
| 248 struct record event_record[100]; | |
| 249 | |
| 250 int event_record_index; | |
| 251 | |
| 252 record_event (locus, type) | |
| 253 char *locus; | |
| 254 int type; | |
| 255 { | |
| 256 if (event_record_index == sizeof (event_record) / sizeof (struct record)) | |
| 257 event_record_index = 0; | |
| 258 | |
| 259 event_record[event_record_index].locus = locus; | |
| 260 event_record[event_record_index].type = type; | |
| 261 event_record_index++; | |
| 262 } | |
| 263 | |
| 264 #endif /* 0 */ | |
| 265 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
266 /* Return the struct w32_display_info. */ |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
267 |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
268 struct w32_display_info * |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
269 w32_display_info_for_display () |
| 13434 | 270 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
271 return (&one_w32_display_info); |
| 13434 | 272 } |
| 273 | |
| 274 void | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
275 w32_fill_rect (f, _hdc, pix, lprect) |
| 13434 | 276 FRAME_PTR f; |
| 277 HDC _hdc; | |
| 278 COLORREF pix; | |
| 279 RECT * lprect; | |
| 280 { | |
| 281 HDC hdc; | |
| 282 HBRUSH hb; | |
| 283 RECT rect; | |
| 284 | |
| 285 if (_hdc) | |
| 286 hdc = _hdc; | |
| 287 else | |
| 288 { | |
| 289 if (!f) return; | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
290 hdc = get_frame_dc (f); |
| 13434 | 291 } |
| 292 | |
| 293 hb = CreateSolidBrush (pix); | |
| 294 FillRect (hdc, lprect, hb); | |
| 295 DeleteObject (hb); | |
| 296 | |
| 297 if (!_hdc) | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
298 release_frame_dc (f, hdc); |
| 13434 | 299 } |
| 300 | |
| 301 void | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
302 w32_clear_window (f) |
| 13434 | 303 FRAME_PTR f; |
| 304 { | |
| 305 RECT rect; | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
306 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
307 GetClientRect (FRAME_W32_WINDOW (f), &rect); |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
308 w32_clear_rect (f, NULL, &rect); |
| 13434 | 309 } |
| 310 | |
| 311 | |
| 312 /* Starting and ending updates. | |
| 313 | |
| 314 These hooks are called by update_frame at the beginning and end | |
| 315 of a frame update. We record in `updating_frame' the identity | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
316 of the frame being updated, so that the w32_... functions do not |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
317 need to take a frame as argument. Most of the w32_... functions |
| 13434 | 318 should never be called except during an update, the only exceptions |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
319 being w32_cursor_to, w32_write_glyphs and w32_reassert_line_highlight. */ |
| 13434 | 320 |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
321 static void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
322 w32_update_begin (f) |
| 13434 | 323 struct frame *f; |
| 324 { | |
| 325 if (f == 0) | |
| 326 abort (); | |
| 327 | |
| 328 flexlines = f->height; | |
| 329 highlight = 0; | |
| 330 | |
| 331 BLOCK_INPUT; | |
| 332 | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
333 /* Regenerate display palette before drawing if list of requested |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
334 colors has changed. */ |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
335 if (FRAME_W32_DISPLAY_INFO (f)->regen_palette) |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
336 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
337 w32_regenerate_palette (f); |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
338 FRAME_W32_DISPLAY_INFO (f)->regen_palette = FALSE; |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
339 } |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
340 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
341 if (f == FRAME_W32_DISPLAY_INFO (f)->mouse_face_mouse_frame) |
| 13434 | 342 { |
| 343 /* Don't do highlighting for mouse motion during the update. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
344 FRAME_W32_DISPLAY_INFO (f)->mouse_face_defer = 1; |
| 13434 | 345 |
| 346 /* If the frame needs to be redrawn, | |
| 347 simply forget about any prior mouse highlighting. */ | |
| 348 if (FRAME_GARBAGED_P (f)) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
349 FRAME_W32_DISPLAY_INFO (f)->mouse_face_window = Qnil; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
350 |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
351 if (!NILP (FRAME_W32_DISPLAY_INFO (f)->mouse_face_window)) |
| 13434 | 352 { |
| 353 int firstline, lastline, i; | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
354 struct window *w = XWINDOW (FRAME_W32_DISPLAY_INFO (f)->mouse_face_window); |
| 13434 | 355 |
| 356 /* Find the first, and the last+1, lines affected by redisplay. */ | |
| 357 for (firstline = 0; firstline < f->height; firstline++) | |
| 358 if (FRAME_DESIRED_GLYPHS (f)->enable[firstline]) | |
| 359 break; | |
| 360 | |
| 361 lastline = f->height; | |
| 362 for (i = f->height - 1; i >= 0; i--) | |
| 363 { | |
| 364 if (FRAME_DESIRED_GLYPHS (f)->enable[i]) | |
| 365 break; | |
| 366 else | |
| 367 lastline = i; | |
| 368 } | |
| 369 | |
| 370 /* Can we tell that this update does not affect the window | |
| 371 where the mouse highlight is? If so, no need to turn off. | |
| 372 Likewise, don't do anything if the frame is garbaged; | |
| 373 in that case, the FRAME_CURRENT_GLYPHS that we would use | |
| 374 are all wrong, and we will redisplay that line anyway. */ | |
| 375 if (! (firstline > (XFASTINT (w->top) + window_internal_height (w)) | |
| 376 || lastline < XFASTINT (w->top))) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
377 clear_mouse_face (FRAME_W32_DISPLAY_INFO (f)); |
| 13434 | 378 } |
| 379 } | |
| 380 | |
| 381 UNBLOCK_INPUT; | |
| 382 } | |
| 383 | |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
384 static void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
385 w32_update_end (f) |
| 13434 | 386 struct frame *f; |
| 387 { | |
| 388 BLOCK_INPUT; | |
| 389 | |
| 390 do_line_dance (); | |
| 391 x_display_cursor (f, 1); | |
| 392 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
393 if (f == FRAME_W32_DISPLAY_INFO (f)->mouse_face_mouse_frame) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
394 FRAME_W32_DISPLAY_INFO (f)->mouse_face_defer = 0; |
| 13434 | 395 |
| 396 UNBLOCK_INPUT; | |
| 397 } | |
| 398 | |
| 399 /* This is called after a redisplay on frame F. */ | |
| 400 | |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
401 static void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
402 w32_frame_up_to_date (f) |
| 13434 | 403 FRAME_PTR f; |
| 404 { | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
405 BLOCK_INPUT; |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
406 if (FRAME_W32_DISPLAY_INFO (f)->mouse_face_deferred_gc |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
407 || f == FRAME_W32_DISPLAY_INFO (f)->mouse_face_mouse_frame) |
| 13434 | 408 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
409 note_mouse_highlight (FRAME_W32_DISPLAY_INFO (f)->mouse_face_mouse_frame, |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
410 FRAME_W32_DISPLAY_INFO (f)->mouse_face_mouse_x, |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
411 FRAME_W32_DISPLAY_INFO (f)->mouse_face_mouse_y); |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
412 FRAME_W32_DISPLAY_INFO (f)->mouse_face_deferred_gc = 0; |
| 13434 | 413 } |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
414 UNBLOCK_INPUT; |
| 13434 | 415 } |
| 416 | |
| 417 /* External interface to control of standout mode. | |
| 418 Call this when about to modify line at position VPOS | |
| 419 and not change whether it is highlighted. */ | |
| 420 | |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
421 static void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
422 w32_reassert_line_highlight (new, vpos) |
| 13434 | 423 int new, vpos; |
| 424 { | |
| 425 highlight = new; | |
| 426 } | |
| 427 | |
| 428 /* Call this when about to modify line at position VPOS | |
| 429 and change whether it is highlighted. */ | |
| 430 | |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
431 static void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
432 w32_change_line_highlight (new_highlight, vpos, first_unused_hpos) |
| 13434 | 433 int new_highlight, vpos, first_unused_hpos; |
| 434 { | |
| 435 highlight = new_highlight; | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
436 w32_cursor_to (vpos, 0); |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
437 w32_clear_end_of_line (updating_frame->width); |
| 13434 | 438 } |
| 439 | |
| 440 /* This is used when starting Emacs and when restarting after suspend. | |
| 441 When starting Emacs, no window is mapped. And nothing must be done | |
| 442 to Emacs's own window if it is suspended (though that rarely happens). */ | |
| 443 | |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
444 static void |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
445 w32_set_terminal_modes (void) |
| 13434 | 446 { |
| 447 } | |
| 448 | |
| 449 /* This is called when exiting or suspending Emacs. | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
450 Exiting will make the W32 windows go away, and suspending |
| 13434 | 451 requires no action. */ |
| 452 | |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
453 static void |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
454 w32_reset_terminal_modes (void) |
| 13434 | 455 { |
| 456 } | |
| 457 | |
| 458 /* Set the nominal cursor position of the frame. | |
| 459 This is where display update commands will take effect. | |
| 460 This does not affect the place where the cursor-box is displayed. */ | |
| 461 | |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
462 static void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
463 w32_cursor_to (row, col) |
| 13434 | 464 register int row, col; |
| 465 { | |
| 466 int orow = row; | |
| 467 | |
| 468 curs_x = col; | |
| 469 curs_y = row; | |
| 470 | |
| 471 if (updating_frame == 0) | |
| 472 { | |
| 473 BLOCK_INPUT; | |
| 474 x_display_cursor (selected_frame, 1); | |
| 475 UNBLOCK_INPUT; | |
| 476 } | |
| 477 } | |
| 478 | |
| 479 /* Display a sequence of N glyphs found at GP. | |
| 480 WINDOW is the window to output to. LEFT and TOP are starting coords. | |
| 481 HL is 1 if this text is highlighted, 2 if the cursor is on it, | |
| 482 3 if should appear in its mouse-face. | |
| 483 JUST_FOREGROUND if 1 means draw only the foreground; | |
| 484 don't alter the background. | |
| 485 | |
| 486 FONT is the default font to use (for glyphs whose font-code is 0). | |
| 487 | |
| 488 Since the display generation code is responsible for calling | |
| 489 compute_char_face and compute_glyph_face on everything it puts in | |
| 490 the display structure, we can assume that the face code on each | |
| 491 glyph is a valid index into FRAME_COMPUTED_FACES (f), and the one | |
| 492 to which we can actually apply intern_face. | |
| 493 Call this function with input blocked. */ | |
| 494 | |
| 495 static void | |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
496 dumpglyphs (f, left, top, gp, n, hl, just_foreground, cmpcharp) |
| 13434 | 497 struct frame *f; |
| 498 int left, top; | |
| 499 register GLYPH *gp; /* Points to first GLYPH. */ | |
| 500 register int n; /* Number of glyphs to display. */ | |
| 501 int hl; | |
| 502 int just_foreground; | |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
503 struct cmpchar_info *cmpcharp; |
| 13434 | 504 { |
| 505 /* Holds characters to be displayed. */ | |
| 506 char *buf = (char *) alloca (f->width * sizeof (*buf)); | |
| 507 register char *cp; /* Steps through buf[]. */ | |
| 508 register int tlen = GLYPH_TABLE_LENGTH; | |
| 509 register Lisp_Object *tbase = GLYPH_TABLE_BASE; | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
510 Window window = FRAME_W32_WINDOW (f); |
| 13434 | 511 int orig_left = left; |
| 512 HDC hdc; | |
| 513 | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
514 hdc = get_frame_dc (f); |
| 13434 | 515 |
| 516 while (n > 0) | |
| 517 { | |
| 518 /* Get the face-code of the next GLYPH. */ | |
| 519 int cf, len; | |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
520 GLYPH g = *gp; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
521 int ch, charset; |
| 13434 | 522 |
| 523 GLYPH_FOLLOW_ALIASES (tbase, tlen, g); | |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
524 cf = (cmpcharp ? cmpcharp->face_work : FAST_GLYPH_FACE (g)); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
525 ch = FAST_GLYPH_CHAR (g); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
526 charset = CHAR_CHARSET (ch); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
527 if (charset == CHARSET_COMPOSITION) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
528 { |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
529 struct face *face = FRAME_DEFAULT_FACE (f); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
530 XFontStruct *font = FACE_FONT (face); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
531 /* We must draw components of the composite character on the |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
532 same column */ |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
533 cmpcharp = cmpchar_table[COMPOSITE_CHAR_ID (ch)]; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
534 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
535 /* Set the face in the slot for work. */ |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
536 cmpcharp->face_work = cf; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
537 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
538 dumpglyphs (f, left, top, cmpcharp->glyph, cmpcharp->glyph_len, |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
539 hl, just_foreground, cmpcharp); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
540 left += FONT_WIDTH (font) * cmpcharp->width; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
541 ++gp, --n; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
542 while (gp && (*gp & GLYPH_MASK_PADDING)) ++gp, --n; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
543 cmpcharp = NULL; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
544 continue; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
545 } |
| 13434 | 546 /* Find the run of consecutive glyphs with the same face-code. |
| 547 Extract their character codes into BUF. */ | |
| 548 cp = buf; | |
| 549 while (n > 0) | |
| 550 { | |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
551 int this_charset, c[2]; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
552 |
| 13434 | 553 g = *gp; |
| 554 GLYPH_FOLLOW_ALIASES (tbase, tlen, g); | |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
555 ch = FAST_GLYPH_CHAR (g); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
556 SPLIT_CHAR (ch, this_charset, c[0], c[1]); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
557 if (this_charset != charset |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
558 || (cmpcharp == NULL && FAST_GLYPH_FACE (g) != cf)) |
| 13434 | 559 break; |
| 560 | |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
561 if ( c[1] > 0 ) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
562 { |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
563 int consumed, produced; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
564 /* Handle multibyte characters (still assuming user |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
565 selects correct font themselves for now */ |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
566 produced = encode_terminal_code(gp, cp, 1, |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
567 (f->width*sizeof(*buf))-(cp-buf), &consumed); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
568 /* If we can't display this glyph, skip it */ |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
569 if (consumed == 0) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
570 gp++,n--; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
571 else |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
572 gp += consumed, n-= consumed; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
573 cp += produced; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
574 } |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
575 else |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
576 { |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
577 *cp++ = c[0]; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
578 ++gp, --n; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
579 } |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
580 while (gp && (*gp & GLYPH_MASK_PADDING)) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
581 ++gp, --n; |
| 13434 | 582 } |
| 583 | |
| 584 /* LEN gets the length of the run. */ | |
| 585 len = cp - buf; | |
| 586 /* Now output this run of chars, with the font and pixel values | |
| 587 determined by the face code CF. */ | |
| 588 { | |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
589 int stippled = 0; |
| 13434 | 590 struct face *face = FRAME_DEFAULT_FACE (f); |
| 591 XFontStruct *font = FACE_FONT (face); | |
| 592 COLORREF fg; | |
| 593 COLORREF bg; | |
| 594 | |
| 595 /* HL = 3 means use a mouse face previously chosen. */ | |
| 596 if (hl == 3) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
597 cf = FRAME_W32_DISPLAY_INFO (f)->mouse_face_face_id; |
| 13434 | 598 |
| 599 /* First look at the face of the text itself. */ | |
| 600 if (cf != 0) | |
| 601 { | |
| 602 /* It's possible for the display table to specify | |
| 603 a face code that is out of range. Use 0 in that case. */ | |
| 604 if (cf < 0 || cf >= FRAME_N_COMPUTED_FACES (f) | |
| 605 || FRAME_COMPUTED_FACES (f) [cf] == 0) | |
| 606 cf = 0; | |
| 607 | |
| 608 if (cf == 1) | |
| 609 face = FRAME_MODE_LINE_FACE (f); | |
| 610 else | |
| 611 face = intern_face (f, FRAME_COMPUTED_FACES (f) [cf]); | |
| 612 font = FACE_FONT (face); | |
| 613 if (FACE_STIPPLE (face)) | |
| 614 stippled = 1; | |
| 615 } | |
| 616 | |
| 617 /* Then comes the distinction between modeline and normal text. */ | |
| 618 else if (hl == 0) | |
| 619 ; | |
| 620 else if (hl == 1) | |
| 621 { | |
| 622 face = FRAME_MODE_LINE_FACE (f); | |
| 623 font = FACE_FONT (face); | |
| 624 if (FACE_STIPPLE (face)) | |
| 625 stippled = 1; | |
| 626 } | |
| 627 | |
| 628 fg = face->foreground; | |
| 629 bg = face->background; | |
| 630 | |
| 631 /* Now override that if the cursor's on this character. */ | |
| 632 if (hl == 2) | |
| 633 { | |
| 634 /* The cursor overrides stippling. */ | |
| 635 stippled = 0; | |
| 636 | |
| 637 if ((!face->font | |
| 638 || face->font == (XFontStruct *) FACE_DEFAULT | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
639 || face->font == f->output_data.w32->font) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
640 && face->background == f->output_data.w32->background_pixel |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
641 && face->foreground == f->output_data.w32->foreground_pixel) |
| 13434 | 642 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
643 bg = f->output_data.w32->cursor_pixel; |
| 13434 | 644 fg = face->background; |
| 645 } | |
| 646 /* Cursor on non-default face: must merge. */ | |
| 647 else | |
| 648 { | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
649 bg = f->output_data.w32->cursor_pixel; |
| 13434 | 650 fg = face->background; |
| 651 /* If the glyph would be invisible, | |
| 652 try a different foreground. */ | |
| 653 if (fg == bg) | |
| 654 fg = face->foreground; | |
| 655 if (fg == bg) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
656 fg = f->output_data.w32->cursor_foreground_pixel; |
| 13434 | 657 if (fg == bg) |
| 658 fg = face->foreground; | |
| 659 /* Make sure the cursor is distinct from text in this face. */ | |
| 660 if (bg == face->background | |
| 661 && fg == face->foreground) | |
| 662 { | |
| 663 bg = face->foreground; | |
| 664 fg = face->background; | |
| 665 } | |
| 666 } | |
| 667 } | |
| 668 | |
| 669 if (font == (XFontStruct *) FACE_DEFAULT) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
670 font = f->output_data.w32->font; |
| 13434 | 671 |
| 672 SetBkMode (hdc, just_foreground ? TRANSPARENT : OPAQUE); | |
| 673 | |
| 674 SetTextColor (hdc, fg); | |
| 675 SetBkColor (hdc, bg); | |
| 676 | |
| 677 SelectObject (hdc, font->hfont); | |
| 678 | |
| 679 TextOut (hdc, left, top, buf, len); | |
| 680 | |
| 681 if (!just_foreground) | |
| 682 { | |
| 683 /* Clear the rest of the line's height. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
684 if (f->output_data.w32->line_height != FONT_HEIGHT (font)) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
685 w32_fill_area (f, hdc, bg, |
| 13434 | 686 left, |
| 687 top + FONT_HEIGHT (font), | |
| 688 FONT_WIDTH (font) * len, | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
689 f->output_data.w32->line_height - FONT_HEIGHT (font)); |
| 13434 | 690 } |
| 691 | |
| 692 { | |
| 693 int underline_position = 1; | |
| 694 | |
| 695 if (font->tm.tmDescent <= underline_position) | |
| 696 underline_position = font->tm.tmDescent - 1; | |
| 697 | |
| 698 if (face->underline) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
699 w32_fill_area (f, hdc, fg, |
| 13434 | 700 left, (top |
| 701 + FONT_BASE (font) | |
| 702 + underline_position), | |
| 703 len * FONT_WIDTH (font), 1); | |
| 704 } | |
| 705 | |
| 706 left += len * FONT_WIDTH (font); | |
| 707 } | |
| 708 } | |
| 709 | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
710 release_frame_dc (f, hdc); |
| 13434 | 711 } |
| 712 | |
| 713 | |
| 714 /* Output some text at the nominal frame cursor position. | |
| 715 Advance the cursor over the text. | |
| 716 Output LEN glyphs at START. | |
| 717 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
718 `highlight', set up by w32_reassert_line_highlight or w32_change_line_highlight, |
| 13434 | 719 controls the pixel values used for foreground and background. */ |
| 720 | |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
721 static void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
722 w32_write_glyphs (start, len) |
| 13434 | 723 register GLYPH *start; |
| 724 int len; | |
| 725 { | |
| 726 register int temp_length; | |
| 727 struct frame *f; | |
| 728 | |
| 729 BLOCK_INPUT; | |
| 730 | |
| 731 do_line_dance (); | |
| 732 f = updating_frame; | |
| 733 if (f == 0) | |
| 734 { | |
| 735 f = selected_frame; | |
| 736 /* If not within an update, | |
| 737 output at the frame's visible cursor. */ | |
| 738 curs_x = f->cursor_x; | |
| 739 curs_y = f->cursor_y; | |
| 740 } | |
| 741 | |
| 742 dumpglyphs (f, | |
| 743 CHAR_TO_PIXEL_COL (f, curs_x), | |
| 744 CHAR_TO_PIXEL_ROW (f, curs_y), | |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
745 start, len, highlight, 0, NULL); |
| 13434 | 746 |
| 747 /* If we drew on top of the cursor, note that it is turned off. */ | |
| 748 if (curs_y == f->phys_cursor_y | |
| 749 && curs_x <= f->phys_cursor_x | |
| 750 && curs_x + len > f->phys_cursor_x) | |
| 751 f->phys_cursor_x = -1; | |
| 752 | |
| 753 if (updating_frame == 0) | |
| 754 { | |
| 755 f->cursor_x += len; | |
| 756 x_display_cursor (f, 1); | |
| 757 f->cursor_x -= len; | |
| 758 } | |
| 759 else | |
| 760 curs_x += len; | |
| 761 | |
| 762 UNBLOCK_INPUT; | |
| 763 } | |
| 764 | |
| 765 /* Clear to the end of the line. | |
| 766 Erase the current text line from the nominal cursor position (inclusive) | |
| 767 to column FIRST_UNUSED (exclusive). The idea is that everything | |
| 768 from FIRST_UNUSED onward is already erased. */ | |
| 769 | |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
770 static void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
771 w32_clear_end_of_line (first_unused) |
| 13434 | 772 register int first_unused; |
| 773 { | |
| 774 struct frame *f = updating_frame; | |
| 775 | |
| 776 if (f == 0) | |
| 777 abort (); | |
| 778 | |
| 779 if (curs_y < 0 || curs_y >= f->height) | |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
780 return; |
| 13434 | 781 if (first_unused <= 0) |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
782 return; |
| 13434 | 783 |
| 784 if (first_unused >= f->width) | |
| 785 first_unused = f->width; | |
| 786 | |
|
18877
d3e5a5f5fe02
(w32_clear_end_of_line): Include scroll bar width.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18507
diff
changeset
|
787 first_unused += FRAME_LEFT_SCROLL_BAR_WIDTH (f); |
|
d3e5a5f5fe02
(w32_clear_end_of_line): Include scroll bar width.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18507
diff
changeset
|
788 |
| 13434 | 789 BLOCK_INPUT; |
| 790 | |
| 791 do_line_dance (); | |
| 792 | |
| 793 /* Notice if the cursor will be cleared by this operation. */ | |
| 794 if (curs_y == f->phys_cursor_y | |
| 795 && curs_x <= f->phys_cursor_x | |
| 796 && f->phys_cursor_x < first_unused) | |
| 797 f->phys_cursor_x = -1; | |
| 798 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
799 w32_clear_area (f, NULL, |
| 13434 | 800 CHAR_TO_PIXEL_COL (f, curs_x), |
| 801 CHAR_TO_PIXEL_ROW (f, curs_y), | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
802 FONT_WIDTH (f->output_data.w32->font) * (first_unused - curs_x), |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
803 f->output_data.w32->line_height); |
| 13434 | 804 |
| 805 UNBLOCK_INPUT; | |
| 806 } | |
| 807 | |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
808 static void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
809 w32_clear_frame () |
| 13434 | 810 { |
| 811 struct frame *f = updating_frame; | |
| 812 | |
| 813 if (f == 0) | |
| 814 f = selected_frame; | |
| 815 | |
| 816 f->phys_cursor_x = -1; /* Cursor not visible. */ | |
| 817 curs_x = 0; /* Nominal cursor position is top left. */ | |
| 818 curs_y = 0; | |
| 819 | |
| 820 BLOCK_INPUT; | |
| 821 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
822 w32_clear_window (f); |
| 13434 | 823 |
| 824 /* We have to clear the scroll bars, too. If we have changed | |
| 825 colors or something like that, then they should be notified. */ | |
| 826 x_scroll_bar_clear (f); | |
| 827 | |
| 828 UNBLOCK_INPUT; | |
| 829 } | |
| 830 | |
| 831 /* Make audible bell. */ | |
| 832 | |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
833 static void |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
834 w32_ring_bell (void) |
| 13434 | 835 { |
| 836 BLOCK_INPUT; | |
| 837 | |
| 838 if (visible_bell) | |
|
22059
23fda104cd36
(w32_ring_bell): Flash window correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21885
diff
changeset
|
839 { |
|
23fda104cd36
(w32_ring_bell): Flash window correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21885
diff
changeset
|
840 int i; |
|
23fda104cd36
(w32_ring_bell): Flash window correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21885
diff
changeset
|
841 HWND hwnd = FRAME_W32_WINDOW (selected_frame); |
|
23fda104cd36
(w32_ring_bell): Flash window correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21885
diff
changeset
|
842 |
|
23fda104cd36
(w32_ring_bell): Flash window correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21885
diff
changeset
|
843 for (i = 0; i < 5; i++) |
|
23fda104cd36
(w32_ring_bell): Flash window correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21885
diff
changeset
|
844 { |
|
23fda104cd36
(w32_ring_bell): Flash window correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21885
diff
changeset
|
845 FlashWindow (hwnd, TRUE); |
|
23fda104cd36
(w32_ring_bell): Flash window correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21885
diff
changeset
|
846 Sleep (10); |
|
23fda104cd36
(w32_ring_bell): Flash window correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21885
diff
changeset
|
847 } |
|
23fda104cd36
(w32_ring_bell): Flash window correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21885
diff
changeset
|
848 FlashWindow (hwnd, FALSE); |
|
23fda104cd36
(w32_ring_bell): Flash window correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21885
diff
changeset
|
849 } |
| 13434 | 850 else |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
851 w32_sys_ring_bell (); |
| 13434 | 852 |
| 853 UNBLOCK_INPUT; | |
| 854 } | |
| 855 | |
| 856 /* Insert and delete character. | |
| 857 These are not supposed to be used because we are supposed to turn | |
| 858 off the feature of using them. */ | |
| 859 | |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
860 static void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
861 w32_insert_glyphs (start, len) |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
862 register GLYPH *start; |
| 13434 | 863 register int len; |
| 864 { | |
| 865 abort (); | |
| 866 } | |
| 867 | |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
868 static void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
869 w32_delete_glyphs (n) |
| 13434 | 870 register int n; |
| 871 { | |
| 872 abort (); | |
| 873 } | |
| 874 | |
| 875 /* Specify how many text lines, from the top of the window, | |
| 876 should be affected by insert-lines and delete-lines operations. | |
| 877 This, and those operations, are used only within an update | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
878 that is bounded by calls to w32_update_begin and w32_update_end. */ |
| 13434 | 879 |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
880 static void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
881 w32_set_terminal_window (n) |
| 13434 | 882 register int n; |
| 883 { | |
| 884 if (updating_frame == 0) | |
| 885 abort (); | |
| 886 | |
| 887 if ((n <= 0) || (n > updating_frame->height)) | |
| 888 flexlines = updating_frame->height; | |
| 889 else | |
| 890 flexlines = n; | |
| 891 } | |
| 892 | |
| 893 /* These variables need not be per frame | |
| 894 because redisplay is done on a frame-by-frame basis | |
| 895 and the line dance for one frame is finished before | |
| 896 anything is done for another frame. */ | |
| 897 | |
| 898 /* Array of line numbers from cached insert/delete operations. | |
| 899 line_dance[i] is the old position of the line that we want | |
| 900 to move to line i, or -1 if we want a blank line there. */ | |
| 901 static int *line_dance; | |
| 902 | |
| 903 /* Allocated length of that array. */ | |
| 904 static int line_dance_len; | |
| 905 | |
| 906 /* Flag indicating whether we've done any work. */ | |
| 907 static int line_dance_in_progress; | |
| 908 | |
| 909 /* Perform an insert-lines or delete-lines operation, | |
| 910 inserting N lines or deleting -N lines at vertical position VPOS. */ | |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
911 |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
912 static void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
913 w32_ins_del_lines (vpos, n) |
| 13434 | 914 int vpos, n; |
| 915 { | |
| 916 register int fence, i; | |
| 917 | |
| 918 if (vpos >= flexlines) | |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
919 return; |
| 13434 | 920 |
| 921 if (!line_dance_in_progress) | |
| 922 { | |
| 923 int ht = updating_frame->height; | |
| 924 if (ht > line_dance_len) | |
| 925 { | |
| 926 line_dance = (int *)xrealloc (line_dance, ht * sizeof (int)); | |
| 927 line_dance_len = ht; | |
| 928 } | |
| 929 for (i = 0; i < ht; ++i) line_dance[i] = i; | |
| 930 line_dance_in_progress = 1; | |
| 931 } | |
| 932 if (n >= 0) | |
| 933 { | |
| 934 if (n > flexlines - vpos) | |
| 935 n = flexlines - vpos; | |
| 936 fence = vpos + n; | |
| 937 for (i = flexlines; --i >= fence;) | |
| 938 line_dance[i] = line_dance[i-n]; | |
| 939 for (i = fence; --i >= vpos;) | |
| 940 line_dance[i] = -1; | |
| 941 } | |
| 942 else | |
| 943 { | |
| 944 n = -n; | |
| 945 if (n > flexlines - vpos) | |
| 946 n = flexlines - vpos; | |
| 947 fence = flexlines - n; | |
| 948 for (i = vpos; i < fence; ++i) | |
| 949 line_dance[i] = line_dance[i + n]; | |
| 950 for (i = fence; i < flexlines; ++i) | |
| 951 line_dance[i] = -1; | |
| 952 } | |
| 953 } | |
| 954 | |
| 955 /* Here's where we actually move the pixels around. | |
| 956 Must be called with input blocked. */ | |
| 957 static void | |
| 958 do_line_dance () | |
| 959 { | |
| 960 register int i, j, distance; | |
| 961 register struct frame *f; | |
| 962 int ht; | |
| 963 int intborder; | |
| 964 HDC hdc; | |
| 965 | |
| 966 /* Must check this flag first. If it's not set, then not only is the | |
| 967 array uninitialized, but we might not even have a frame. */ | |
| 968 if (!line_dance_in_progress) | |
| 969 return; | |
| 970 | |
| 971 f = updating_frame; | |
| 972 if (f == 0) | |
| 973 abort (); | |
| 974 | |
| 975 ht = f->height; | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
976 intborder = f->output_data.w32->internal_border_width; |
| 13434 | 977 |
| 978 x_display_cursor (updating_frame, 0); | |
| 979 | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
980 hdc = get_frame_dc (f); |
| 13434 | 981 |
| 982 for (i = 0; i < ht; ++i) | |
| 983 if (line_dance[i] != -1 && (distance = line_dance[i]-i) > 0) | |
| 984 { | |
| 985 for (j = i; (j < ht && line_dance[j] != -1 | |
| 986 && line_dance[j]-j == distance); ++j); | |
| 987 /* Copy [i,j) upward from [i+distance, j+distance) */ | |
| 988 BitBlt (hdc, | |
| 989 intborder, CHAR_TO_PIXEL_ROW (f, i+distance), | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
990 f->width * FONT_WIDTH (f->output_data.w32->font), |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
991 (j-i) * f->output_data.w32->line_height, |
| 13434 | 992 hdc, |
| 993 intborder, CHAR_TO_PIXEL_ROW (f, i), | |
| 994 SRCCOPY); | |
| 995 i = j-1; | |
| 996 } | |
| 997 | |
| 998 for (i = ht; --i >=0; ) | |
| 999 if (line_dance[i] != -1 && (distance = line_dance[i]-i) < 0) | |
| 1000 { | |
| 1001 for (j = i; (--j >= 0 && line_dance[j] != -1 | |
| 1002 && line_dance[j]-j == distance);); | |
| 1003 /* Copy (j, i] downward from (j+distance, i+distance] */ | |
| 1004 BitBlt (hdc, | |
| 1005 intborder, CHAR_TO_PIXEL_ROW (f, j+1+distance), | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1006 f->width * FONT_WIDTH (f->output_data.w32->font), |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1007 (i-j) * f->output_data.w32->line_height, |
| 13434 | 1008 hdc, |
| 1009 intborder, CHAR_TO_PIXEL_ROW (f, j+1), | |
| 1010 SRCCOPY); | |
| 1011 i = j+1; | |
| 1012 } | |
| 1013 | |
| 1014 for (i = 0; i < ht; ++i) | |
| 1015 if (line_dance[i] == -1) | |
| 1016 { | |
| 1017 for (j = i; j < ht && line_dance[j] == -1; ++j); | |
| 1018 /* Clear [i,j) */ | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1019 w32_clear_area (f, hdc, |
| 13434 | 1020 intborder, |
| 1021 CHAR_TO_PIXEL_ROW (f, i), | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1022 f->width * FONT_WIDTH (f->output_data.w32->font), |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1023 (j-i) * f->output_data.w32->line_height); |
| 13434 | 1024 i = j-1; |
| 1025 } | |
| 1026 line_dance_in_progress = 0; | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1027 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1028 release_frame_dc (f, hdc); |
| 13434 | 1029 } |
| 1030 | |
| 1031 /* Support routines for exposure events. */ | |
| 1032 static void clear_cursor (); | |
| 1033 | |
| 1034 /* Output into a rectangle of a window (for frame F) | |
| 1035 the characters in f->phys_lines that overlap that rectangle. | |
| 1036 TOP and LEFT are the position of the upper left corner of the rectangle. | |
| 1037 ROWS and COLS are the size of the rectangle. | |
| 1038 Call this function with input blocked. */ | |
| 1039 | |
| 1040 void | |
| 1041 dumprectangle (f, left, top, cols, rows) | |
| 1042 struct frame *f; | |
| 1043 register int left, top, cols, rows; | |
| 1044 { | |
| 1045 register struct frame_glyphs *active_frame = FRAME_CURRENT_GLYPHS (f); | |
| 1046 int cursor_cleared = 0; | |
| 1047 int bottom, right; | |
| 1048 register int y; | |
| 1049 | |
| 1050 if (FRAME_GARBAGED_P (f)) | |
| 1051 return; | |
| 1052 | |
| 1053 /* Express rectangle as four edges, instead of position-and-size. */ | |
| 1054 bottom = top + rows; | |
| 1055 right = left + cols; | |
| 1056 | |
| 1057 /* Convert rectangle edges in pixels to edges in chars. | |
| 1058 Round down for left and top, up for right and bottom. */ | |
| 1059 top = PIXEL_TO_CHAR_ROW (f, top); | |
| 1060 left = PIXEL_TO_CHAR_COL (f, left); | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1061 bottom += (f->output_data.w32->line_height - 1); |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1062 right += (FONT_WIDTH (f->output_data.w32->font) - 1); |
| 13434 | 1063 bottom = PIXEL_TO_CHAR_ROW (f, bottom); |
| 1064 right = PIXEL_TO_CHAR_COL (f, right); | |
| 1065 | |
| 1066 /* Clip the rectangle to what can be visible. */ | |
| 1067 if (left < 0) | |
| 1068 left = 0; | |
| 1069 if (top < 0) | |
| 1070 top = 0; | |
| 1071 if (right > f->width) | |
| 1072 right = f->width; | |
| 1073 if (bottom > f->height) | |
| 1074 bottom = f->height; | |
| 1075 | |
| 1076 /* Get size in chars of the rectangle. */ | |
| 1077 cols = right - left; | |
| 1078 rows = bottom - top; | |
| 1079 | |
| 1080 /* If rectangle has zero area, return. */ | |
| 1081 if (rows <= 0) return; | |
| 1082 if (cols <= 0) return; | |
| 1083 | |
| 1084 /* Turn off the cursor if it is in the rectangle. | |
| 1085 We will turn it back on afterward. */ | |
| 1086 if ((f->phys_cursor_x >= left) && (f->phys_cursor_x < right) | |
| 1087 && (f->phys_cursor_y >= top) && (f->phys_cursor_y < bottom)) | |
| 1088 { | |
| 1089 clear_cursor (f); | |
| 1090 cursor_cleared = 1; | |
| 1091 } | |
| 1092 | |
| 1093 /* Display the text in the rectangle, one text line at a time. */ | |
| 1094 | |
| 1095 for (y = top; y < bottom; y++) | |
| 1096 { | |
| 1097 GLYPH *line = &active_frame->glyphs[y][left]; | |
| 1098 | |
| 1099 if (! active_frame->enable[y] || left > active_frame->used[y]) | |
| 1100 continue; | |
| 1101 | |
| 1102 dumpglyphs (f, | |
| 1103 CHAR_TO_PIXEL_COL (f, left), | |
| 1104 CHAR_TO_PIXEL_ROW (f, y), | |
| 1105 line, min (cols, active_frame->used[y] - left), | |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
1106 active_frame->highlight[y], 0, NULL); |
| 13434 | 1107 } |
| 1108 | |
| 1109 /* Turn the cursor on if we turned it off. */ | |
| 1110 | |
| 1111 if (cursor_cleared) | |
| 1112 x_display_cursor (f, 1); | |
| 1113 } | |
| 1114 | |
| 1115 static void | |
| 1116 frame_highlight (f) | |
| 1117 struct frame *f; | |
| 1118 { | |
| 1119 x_display_cursor (f, 1); | |
| 1120 } | |
| 1121 | |
| 1122 static void | |
| 1123 frame_unhighlight (f) | |
| 1124 struct frame *f; | |
| 1125 { | |
| 1126 x_display_cursor (f, 1); | |
| 1127 } | |
| 1128 | |
| 1129 static void x_frame_rehighlight (); | |
| 1130 | |
| 1131 /* The focus has changed. Update the frames as necessary to reflect | |
| 1132 the new situation. Note that we can't change the selected frame | |
| 1133 here, because the Lisp code we are interrupting might become confused. | |
| 1134 Each event gets marked with the frame in which it occurred, so the | |
| 1135 Lisp code can tell when the switch took place by examining the events. */ | |
| 1136 | |
| 1137 void | |
| 1138 x_new_focus_frame (dpyinfo, frame) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1139 struct w32_display_info *dpyinfo; |
| 13434 | 1140 struct frame *frame; |
| 1141 { | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1142 struct frame *old_focus = dpyinfo->w32_focus_frame; |
| 13434 | 1143 int events_enqueued = 0; |
| 1144 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1145 if (frame != dpyinfo->w32_focus_frame) |
| 13434 | 1146 { |
| 1147 /* Set this before calling other routines, so that they see | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1148 the correct value of w32_focus_frame. */ |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1149 dpyinfo->w32_focus_frame = frame; |
| 13434 | 1150 |
| 1151 if (old_focus && old_focus->auto_lower) | |
| 1152 x_lower_frame (old_focus); | |
| 1153 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1154 if (dpyinfo->w32_focus_frame && dpyinfo->w32_focus_frame->auto_raise) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1155 pending_autoraise_frame = dpyinfo->w32_focus_frame; |
| 13434 | 1156 else |
| 1157 pending_autoraise_frame = 0; | |
| 1158 } | |
| 1159 | |
| 1160 x_frame_rehighlight (dpyinfo); | |
| 1161 } | |
| 1162 | |
| 1163 /* Handle an event saying the mouse has moved out of an Emacs frame. */ | |
| 1164 | |
| 1165 void | |
| 1166 x_mouse_leave (dpyinfo) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1167 struct w32_display_info *dpyinfo; |
| 13434 | 1168 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1169 x_new_focus_frame (dpyinfo, dpyinfo->w32_focus_event_frame); |
| 13434 | 1170 } |
| 1171 | |
| 1172 /* The focus has changed, or we have redirected a frame's focus to | |
| 1173 another frame (this happens when a frame uses a surrogate | |
| 1174 minibuffer frame). Shift the highlight as appropriate. | |
| 1175 | |
| 1176 The FRAME argument doesn't necessarily have anything to do with which | |
| 1177 frame is being highlighted or unhighlighted; we only use it to find | |
| 1178 the appropriate display info. */ | |
| 1179 static void | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1180 w32_frame_rehighlight (frame) |
| 13434 | 1181 struct frame *frame; |
| 1182 { | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1183 x_frame_rehighlight (FRAME_W32_DISPLAY_INFO (frame)); |
| 13434 | 1184 } |
| 1185 | |
| 1186 static void | |
| 1187 x_frame_rehighlight (dpyinfo) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1188 struct w32_display_info *dpyinfo; |
| 13434 | 1189 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1190 struct frame *old_highlight = dpyinfo->w32_highlight_frame; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1191 |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1192 if (dpyinfo->w32_focus_frame) |
| 13434 | 1193 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1194 dpyinfo->w32_highlight_frame |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1195 = ((GC_FRAMEP (FRAME_FOCUS_FRAME (dpyinfo->w32_focus_frame))) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1196 ? XFRAME (FRAME_FOCUS_FRAME (dpyinfo->w32_focus_frame)) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1197 : dpyinfo->w32_focus_frame); |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1198 if (! FRAME_LIVE_P (dpyinfo->w32_highlight_frame)) |
| 13434 | 1199 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1200 FRAME_FOCUS_FRAME (dpyinfo->w32_focus_frame) = Qnil; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1201 dpyinfo->w32_highlight_frame = dpyinfo->w32_focus_frame; |
| 13434 | 1202 } |
| 1203 } | |
| 1204 else | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1205 dpyinfo->w32_highlight_frame = 0; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1206 |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1207 if (dpyinfo->w32_highlight_frame != old_highlight) |
| 13434 | 1208 { |
| 1209 if (old_highlight) | |
| 1210 frame_unhighlight (old_highlight); | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1211 if (dpyinfo->w32_highlight_frame) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1212 frame_highlight (dpyinfo->w32_highlight_frame); |
| 13434 | 1213 } |
| 1214 } | |
| 1215 | |
| 1216 /* Keyboard processing - modifier keys, etc. */ | |
| 1217 | |
| 1218 /* Convert a keysym to its name. */ | |
| 1219 | |
| 1220 char * | |
| 1221 x_get_keysym_name (keysym) | |
| 1222 int keysym; | |
| 1223 { | |
| 1224 /* Make static so we can always return it */ | |
| 1225 static char value[100]; | |
| 1226 | |
| 1227 BLOCK_INPUT; | |
| 1228 GetKeyNameText(keysym, value, 100); | |
| 1229 UNBLOCK_INPUT; | |
| 1230 | |
| 1231 return value; | |
| 1232 } | |
| 1233 | |
| 1234 /* Mouse clicks and mouse movement. Rah. */ | |
| 1235 | |
| 1236 /* Given a pixel position (PIX_X, PIX_Y) on the frame F, return | |
| 1237 glyph co-ordinates in (*X, *Y). Set *BOUNDS to the rectangle | |
| 1238 that the glyph at X, Y occupies, if BOUNDS != 0. | |
| 1239 If NOCLIP is nonzero, do not force the value into range. */ | |
| 1240 | |
| 1241 void | |
| 1242 pixel_to_glyph_coords (f, pix_x, pix_y, x, y, bounds, noclip) | |
| 1243 FRAME_PTR f; | |
| 1244 register int pix_x, pix_y; | |
| 1245 register int *x, *y; | |
| 1246 RECT *bounds; | |
| 1247 int noclip; | |
| 1248 { | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1249 /* Support tty mode: if Vwindow_system is nil, behave correctly. */ |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1250 if (NILP (Vwindow_system)) |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1251 { |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1252 *x = pix_x; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1253 *y = pix_y; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1254 return; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1255 } |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1256 |
| 13434 | 1257 /* Arrange for the division in PIXEL_TO_CHAR_COL etc. to round down |
| 1258 even for negative values. */ | |
| 1259 if (pix_x < 0) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1260 pix_x -= FONT_WIDTH ((f)->output_data.w32->font) - 1; |
| 13434 | 1261 if (pix_y < 0) |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1262 pix_y -= (f)->output_data.w32->line_height - 1; |
| 13434 | 1263 |
| 1264 pix_x = PIXEL_TO_CHAR_COL (f, pix_x); | |
| 1265 pix_y = PIXEL_TO_CHAR_ROW (f, pix_y); | |
| 1266 | |
| 1267 if (bounds) | |
| 1268 { | |
| 1269 bounds->left = CHAR_TO_PIXEL_COL (f, pix_x); | |
| 1270 bounds->top = CHAR_TO_PIXEL_ROW (f, pix_y); | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1271 bounds->right = bounds->left + FONT_WIDTH (f->output_data.w32->font) - 1; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1272 bounds->bottom = bounds->top + f->output_data.w32->line_height - 1; |
| 13434 | 1273 } |
| 1274 | |
| 1275 if (!noclip) | |
| 1276 { | |
| 1277 if (pix_x < 0) | |
| 1278 pix_x = 0; | |
| 1279 else if (pix_x > f->width) | |
| 1280 pix_x = f->width; | |
| 1281 | |
| 1282 if (pix_y < 0) | |
| 1283 pix_y = 0; | |
| 1284 else if (pix_y > f->height) | |
| 1285 pix_y = f->height; | |
| 1286 } | |
| 1287 | |
| 1288 *x = pix_x; | |
| 1289 *y = pix_y; | |
| 1290 } | |
| 1291 | |
| 1292 void | |
| 1293 glyph_to_pixel_coords (f, x, y, pix_x, pix_y) | |
| 1294 FRAME_PTR f; | |
| 1295 register int x, y; | |
| 1296 register int *pix_x, *pix_y; | |
| 1297 { | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1298 /* Support tty mode: if Vwindow_system is nil, behave correctly. */ |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1299 if (NILP (Vwindow_system)) |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1300 { |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1301 *pix_x = x; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1302 *pix_y = y; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1303 return; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1304 } |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1305 |
| 13434 | 1306 *pix_x = CHAR_TO_PIXEL_COL (f, x); |
| 1307 *pix_y = CHAR_TO_PIXEL_ROW (f, y); | |
| 1308 } | |
| 1309 | |
| 1310 BOOL | |
| 1311 parse_button (message, pbutton, pup) | |
| 1312 int message; | |
| 1313 int * pbutton; | |
| 1314 int * pup; | |
| 1315 { | |
| 1316 int button = 0; | |
| 1317 int up = 0; | |
| 1318 | |
| 1319 switch (message) | |
| 1320 { | |
| 1321 case WM_LBUTTONDOWN: | |
| 1322 button = 0; | |
| 1323 up = 0; | |
| 1324 break; | |
| 1325 case WM_LBUTTONUP: | |
| 1326 button = 0; | |
| 1327 up = 1; | |
| 1328 break; | |
| 1329 case WM_MBUTTONDOWN: | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1330 if (NILP (Vw32_swap_mouse_buttons)) |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1331 button = 1; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1332 else |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1333 button = 2; |
| 13434 | 1334 up = 0; |
| 1335 break; | |
| 1336 case WM_MBUTTONUP: | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1337 if (NILP (Vw32_swap_mouse_buttons)) |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1338 button = 1; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1339 else |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1340 button = 2; |
| 13434 | 1341 up = 1; |
| 1342 break; | |
| 1343 case WM_RBUTTONDOWN: | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1344 if (NILP (Vw32_swap_mouse_buttons)) |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1345 button = 2; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1346 else |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1347 button = 1; |
| 13434 | 1348 up = 0; |
| 1349 break; | |
| 1350 case WM_RBUTTONUP: | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1351 if (NILP (Vw32_swap_mouse_buttons)) |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1352 button = 2; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1353 else |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
1354 button = 1; |
| 13434 | 1355 up = 1; |
| 1356 break; | |
| 1357 default: | |
| 1358 return (FALSE); | |
| 1359 } | |
| 1360 | |
| 1361 if (pup) *pup = up; | |
| 1362 if (pbutton) *pbutton = button; | |
| 1363 | |
| 1364 return (TRUE); | |
| 1365 } | |
| 1366 | |
| 1367 | |
| 1368 /* Prepare a mouse-event in *RESULT for placement in the input queue. | |
| 1369 | |
| 1370 If the event is a button press, then note that we have grabbed | |
| 1371 the mouse. */ | |
| 1372 | |
| 1373 static void | |
| 1374 construct_mouse_click (result, msg, f) | |
| 1375 struct input_event *result; | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1376 W32Msg *msg; |
| 13434 | 1377 struct frame *f; |
| 1378 { | |
| 1379 int button; | |
| 1380 int up; | |
| 1381 | |
| 1382 parse_button (msg->msg.message, &button, &up); | |
| 1383 | |
| 1384 /* Make the event type no_event; we'll change that when we decide | |
| 1385 otherwise. */ | |
| 1386 result->kind = mouse_click; | |
| 1387 result->code = button; | |
| 1388 result->timestamp = msg->msg.time; | |
| 1389 result->modifiers = (msg->dwModifiers | |
| 1390 | (up | |
| 1391 ? up_modifier | |
| 1392 : down_modifier)); | |
| 1393 | |
| 1394 { | |
| 1395 int row, column; | |
| 1396 | |
| 1397 XSETINT (result->x, LOWORD (msg->msg.lParam)); | |
| 1398 XSETINT (result->y, HIWORD (msg->msg.lParam)); | |
| 1399 XSETFRAME (result->frame_or_window, f); | |
| 1400 } | |
| 1401 } | |
| 1402 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1403 static void |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1404 construct_mouse_wheel (result, msg, f) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1405 struct input_event *result; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1406 W32Msg *msg; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1407 struct frame *f; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1408 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1409 POINT p; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1410 result->kind = mouse_wheel; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1411 result->code = (short) HIWORD (msg->msg.wParam); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1412 result->timestamp = msg->msg.time; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1413 result->modifiers = msg->dwModifiers; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1414 p.x = LOWORD (msg->msg.lParam); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1415 p.y = HIWORD (msg->msg.lParam); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1416 ScreenToClient(msg->msg.hwnd, &p); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1417 XSETINT (result->x, p.x); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1418 XSETINT (result->y, p.y); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1419 XSETFRAME (result->frame_or_window, f); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1420 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1421 |
| 21885 | 1422 static void |
| 1423 construct_drag_n_drop (result, msg, f) | |
| 1424 struct input_event *result; | |
| 1425 W32Msg *msg; | |
| 1426 struct frame *f; | |
| 1427 { | |
| 1428 Lisp_Object files; | |
| 1429 Lisp_Object frame; | |
| 1430 HDROP hdrop; | |
| 1431 POINT p; | |
| 1432 WORD num_files; | |
| 1433 char *name; | |
| 1434 int i, len; | |
| 1435 | |
| 1436 result->kind = drag_n_drop; | |
| 1437 result->code = 0; | |
| 1438 result->timestamp = msg->msg.time; | |
| 1439 result->modifiers = msg->dwModifiers; | |
| 1440 | |
| 1441 p.x = LOWORD (msg->msg.lParam); | |
| 1442 p.y = HIWORD (msg->msg.lParam); | |
| 1443 ScreenToClient (msg->msg.hwnd, &p); | |
| 1444 XSETINT (result->x, p.x); | |
| 1445 XSETINT (result->y, p.y); | |
| 1446 | |
| 1447 hdrop = (HDROP) msg->msg.wParam; | |
| 1448 DragQueryPoint (hdrop, &p); | |
| 1449 num_files = DragQueryFile (hdrop, 0xFFFFFFFF, NULL, 0); | |
| 1450 files = Qnil; | |
| 1451 | |
| 1452 for (i = 0; i < num_files; i++) | |
| 1453 { | |
| 1454 len = DragQueryFile (hdrop, i, NULL, 0); | |
| 1455 if (len <= 0) | |
| 1456 continue; | |
| 1457 name = alloca (len + 1); | |
| 1458 DragQueryFile (hdrop, i, name, len + 1); | |
| 1459 files = Fcons (build_string (name), files); | |
| 1460 } | |
| 1461 | |
| 1462 DragFinish (hdrop); | |
| 1463 | |
| 1464 XSETFRAME (frame, f); | |
| 1465 result->frame_or_window = Fcons (frame, files); | |
| 1466 } | |
| 1467 | |
| 13434 | 1468 |
| 1469 /* Function to report a mouse movement to the mainstream Emacs code. | |
| 1470 The input handler calls this. | |
| 1471 | |
| 1472 We have received a mouse movement event, which is given in *event. | |
| 1473 If the mouse is over a different glyph than it was last time, tell | |
| 1474 the mainstream emacs code by setting mouse_moved. If not, ask for | |
| 1475 another motion event, so we can check again the next time it moves. */ | |
| 1476 | |
| 1477 static void | |
| 1478 note_mouse_movement (frame, msg) | |
| 1479 FRAME_PTR frame; | |
| 1480 MSG *msg; | |
| 1481 { | |
| 1482 last_mouse_movement_time = msg->time; | |
| 1483 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1484 if (msg->hwnd != FRAME_W32_WINDOW (frame)) |
| 13434 | 1485 { |
| 1486 frame->mouse_moved = 1; | |
| 1487 last_mouse_scroll_bar = Qnil; | |
| 1488 | |
| 1489 note_mouse_highlight (frame, -1, -1); | |
| 1490 } | |
| 1491 | |
| 1492 /* Has the mouse moved off the glyph it was on at the last sighting? */ | |
| 1493 else if (LOWORD (msg->lParam) < last_mouse_glyph.left | |
| 1494 || LOWORD (msg->lParam) > last_mouse_glyph.right | |
|
15229
a270351f6e0c
(note_mouse_movement): Upwards mouse movement recognition corrected.
Richard M. Stallman <rms@gnu.org>
parents:
15216
diff
changeset
|
1495 || HIWORD (msg->lParam) < last_mouse_glyph.top |
| 13434 | 1496 || HIWORD (msg->lParam) > last_mouse_glyph.bottom) |
| 1497 { | |
| 1498 frame->mouse_moved = 1; | |
| 1499 last_mouse_scroll_bar = Qnil; | |
| 1500 | |
| 1501 note_mouse_highlight (frame, LOWORD (msg->lParam), HIWORD (msg->lParam)); | |
| 1502 } | |
| 1503 } | |
| 1504 | |
| 1505 /* This is used for debugging, to turn off note_mouse_highlight. */ | |
| 1506 static int disable_mouse_highlight; | |
| 1507 | |
| 1508 /* Take proper action when the mouse has moved to position X, Y on frame F | |
| 1509 as regards highlighting characters that have mouse-face properties. | |
| 1510 Also dehighlighting chars where the mouse was before. | |
| 1511 X and Y can be negative or out of range. */ | |
| 1512 | |
| 1513 static void | |
| 1514 note_mouse_highlight (f, x, y) | |
| 1515 FRAME_PTR f; | |
| 1516 int x, y; | |
| 1517 { | |
| 1518 int row, column, portion; | |
| 1519 RECT new_glyph; | |
| 1520 Lisp_Object window; | |
| 1521 struct window *w; | |
| 1522 | |
| 1523 if (disable_mouse_highlight) | |
| 1524 return; | |
| 1525 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1526 FRAME_W32_DISPLAY_INFO (f)->mouse_face_mouse_x = x; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1527 FRAME_W32_DISPLAY_INFO (f)->mouse_face_mouse_y = y; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1528 FRAME_W32_DISPLAY_INFO (f)->mouse_face_mouse_frame = f; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1529 |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1530 if (FRAME_W32_DISPLAY_INFO (f)->mouse_face_defer) |
| 13434 | 1531 return; |
| 1532 | |
| 1533 if (gc_in_progress) | |
| 1534 { | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1535 FRAME_W32_DISPLAY_INFO (f)->mouse_face_deferred_gc = 1; |
| 13434 | 1536 return; |
| 1537 } | |
| 1538 | |
| 1539 /* Find out which glyph the mouse is on. */ | |
| 1540 pixel_to_glyph_coords (f, x, y, &column, &row, | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1541 &new_glyph, FRAME_W32_DISPLAY_INFO (f)->grabbed); |
| 13434 | 1542 |
| 1543 /* Which window is that in? */ | |
| 1544 window = window_from_coordinates (f, column, row, &portion); | |
| 1545 w = XWINDOW (window); | |
| 1546 | |
| 1547 /* If we were displaying active text in another window, clear that. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1548 if (! EQ (window, FRAME_W32_DISPLAY_INFO (f)->mouse_face_window)) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1549 clear_mouse_face (FRAME_W32_DISPLAY_INFO (f)); |
| 13434 | 1550 |
| 1551 /* Are we in a window whose display is up to date? | |
| 1552 And verify the buffer's text has not changed. */ | |
| 1553 if (WINDOWP (window) && portion == 0 && row >= 0 && column >= 0 | |
| 1554 && row < FRAME_HEIGHT (f) && column < FRAME_WIDTH (f) | |
| 1555 && EQ (w->window_end_valid, w->buffer) | |
|
16209
40552cb9a45d
(note_mouse_highlight): Test last_overlay_modified field.
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1556 && w->last_modified == BUF_MODIFF (XBUFFER (w->buffer)) |
|
40552cb9a45d
(note_mouse_highlight): Test last_overlay_modified field.
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1557 && w->last_overlay_modified == BUF_OVERLAY_MODIFF (XBUFFER (w->buffer))) |
| 13434 | 1558 { |
| 1559 int *ptr = FRAME_CURRENT_GLYPHS (f)->charstarts[row]; | |
| 1560 int i, pos; | |
| 1561 | |
| 1562 /* Find which buffer position the mouse corresponds to. */ | |
| 1563 for (i = column; i >= 0; i--) | |
| 1564 if (ptr[i] > 0) | |
| 1565 break; | |
| 1566 pos = ptr[i]; | |
| 1567 /* Is it outside the displayed active region (if any)? */ | |
| 1568 if (pos <= 0) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1569 clear_mouse_face (FRAME_W32_DISPLAY_INFO (f)); |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1570 else if (! (EQ (window, FRAME_W32_DISPLAY_INFO (f)->mouse_face_window) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1571 && row >= FRAME_W32_DISPLAY_INFO (f)->mouse_face_beg_row |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1572 && row <= FRAME_W32_DISPLAY_INFO (f)->mouse_face_end_row |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1573 && (row > FRAME_W32_DISPLAY_INFO (f)->mouse_face_beg_row |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1574 || column >= FRAME_W32_DISPLAY_INFO (f)->mouse_face_beg_col) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1575 && (row < FRAME_W32_DISPLAY_INFO (f)->mouse_face_end_row |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1576 || column < FRAME_W32_DISPLAY_INFO (f)->mouse_face_end_col |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1577 || FRAME_W32_DISPLAY_INFO (f)->mouse_face_past_end))) |
| 13434 | 1578 { |
| 1579 Lisp_Object mouse_face, overlay, position; | |
| 1580 Lisp_Object *overlay_vec; | |
| 1581 int len, noverlays, ignor1; | |
| 1582 struct buffer *obuf; | |
| 1583 int obegv, ozv; | |
| 1584 | |
| 1585 /* If we get an out-of-range value, return now; avoid an error. */ | |
| 1586 if (pos > BUF_Z (XBUFFER (w->buffer))) | |
| 1587 return; | |
| 1588 | |
| 1589 /* Make the window's buffer temporarily current for | |
| 1590 overlays_at and compute_char_face. */ | |
| 1591 obuf = current_buffer; | |
| 1592 current_buffer = XBUFFER (w->buffer); | |
| 1593 obegv = BEGV; | |
| 1594 ozv = ZV; | |
| 1595 BEGV = BEG; | |
| 1596 ZV = Z; | |
| 1597 | |
| 1598 /* Yes. Clear the display of the old active region, if any. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1599 clear_mouse_face (FRAME_W32_DISPLAY_INFO (f)); |
| 13434 | 1600 |
| 1601 /* Is this char mouse-active? */ | |
| 1602 XSETINT (position, pos); | |
| 1603 | |
| 1604 len = 10; | |
| 1605 overlay_vec = (Lisp_Object *) xmalloc (len * sizeof (Lisp_Object)); | |
| 1606 | |
| 1607 /* Put all the overlays we want in a vector in overlay_vec. | |
| 1608 Store the length in len. */ | |
| 1609 noverlays = overlays_at (XINT (pos), 1, &overlay_vec, &len, | |
| 1610 NULL, NULL); | |
| 1611 noverlays = sort_overlays (overlay_vec, noverlays, w); | |
| 1612 | |
| 1613 /* Find the highest priority overlay that has a mouse-face prop. */ | |
| 1614 overlay = Qnil; | |
| 1615 for (i = 0; i < noverlays; i++) | |
| 1616 { | |
| 1617 mouse_face = Foverlay_get (overlay_vec[i], Qmouse_face); | |
| 1618 if (!NILP (mouse_face)) | |
| 1619 { | |
| 1620 overlay = overlay_vec[i]; | |
| 1621 break; | |
| 1622 } | |
| 1623 } | |
| 1624 free (overlay_vec); | |
| 1625 /* If no overlay applies, get a text property. */ | |
| 1626 if (NILP (overlay)) | |
| 1627 mouse_face = Fget_text_property (position, Qmouse_face, w->buffer); | |
| 1628 | |
| 1629 /* Handle the overlay case. */ | |
| 1630 if (! NILP (overlay)) | |
| 1631 { | |
| 1632 /* Find the range of text around this char that | |
| 1633 should be active. */ | |
| 1634 Lisp_Object before, after; | |
| 1635 int ignore; | |
| 1636 | |
| 1637 before = Foverlay_start (overlay); | |
| 1638 after = Foverlay_end (overlay); | |
| 1639 /* Record this as the current active region. */ | |
| 1640 fast_find_position (window, before, | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1641 &FRAME_W32_DISPLAY_INFO (f)->mouse_face_beg_col, |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1642 &FRAME_W32_DISPLAY_INFO (f)->mouse_face_beg_row); |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1643 FRAME_W32_DISPLAY_INFO (f)->mouse_face_past_end |
| 13434 | 1644 = !fast_find_position (window, after, |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1645 &FRAME_W32_DISPLAY_INFO (f)->mouse_face_end_col, |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1646 &FRAME_W32_DISPLAY_INFO (f)->mouse_face_end_row); |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1647 FRAME_W32_DISPLAY_INFO (f)->mouse_face_window = window; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1648 FRAME_W32_DISPLAY_INFO (f)->mouse_face_face_id |
| 13434 | 1649 = compute_char_face (f, w, pos, 0, 0, |
| 1650 &ignore, pos + 1, 1); | |
| 1651 | |
| 1652 /* Display it as active. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1653 show_mouse_face (FRAME_W32_DISPLAY_INFO (f), 1); |
| 13434 | 1654 } |
| 1655 /* Handle the text property case. */ | |
| 1656 else if (! NILP (mouse_face)) | |
| 1657 { | |
| 1658 /* Find the range of text around this char that | |
| 1659 should be active. */ | |
| 1660 Lisp_Object before, after, beginning, end; | |
| 1661 int ignore; | |
| 1662 | |
| 1663 beginning = Fmarker_position (w->start); | |
| 1664 XSETINT (end, (BUF_Z (XBUFFER (w->buffer)) | |
| 1665 - XFASTINT (w->window_end_pos))); | |
| 1666 before | |
| 1667 = Fprevious_single_property_change (make_number (pos + 1), | |
| 1668 Qmouse_face, | |
| 1669 w->buffer, beginning); | |
| 1670 after | |
| 1671 = Fnext_single_property_change (position, Qmouse_face, | |
| 1672 w->buffer, end); | |
| 1673 /* Record this as the current active region. */ | |
| 1674 fast_find_position (window, before, | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1675 &FRAME_W32_DISPLAY_INFO (f)->mouse_face_beg_col, |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1676 &FRAME_W32_DISPLAY_INFO (f)->mouse_face_beg_row); |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1677 FRAME_W32_DISPLAY_INFO (f)->mouse_face_past_end |
| 13434 | 1678 = !fast_find_position (window, after, |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1679 &FRAME_W32_DISPLAY_INFO (f)->mouse_face_end_col, |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1680 &FRAME_W32_DISPLAY_INFO (f)->mouse_face_end_row); |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1681 FRAME_W32_DISPLAY_INFO (f)->mouse_face_window = window; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1682 FRAME_W32_DISPLAY_INFO (f)->mouse_face_face_id |
| 13434 | 1683 = compute_char_face (f, w, pos, 0, 0, |
| 1684 &ignore, pos + 1, 1); | |
| 1685 | |
| 1686 /* Display it as active. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1687 show_mouse_face (FRAME_W32_DISPLAY_INFO (f), 1); |
| 13434 | 1688 } |
| 1689 BEGV = obegv; | |
| 1690 ZV = ozv; | |
| 1691 current_buffer = obuf; | |
| 1692 } | |
| 1693 } | |
| 1694 } | |
| 1695 | |
| 1696 /* Find the row and column of position POS in window WINDOW. | |
| 1697 Store them in *COLUMNP and *ROWP. | |
| 1698 This assumes display in WINDOW is up to date. | |
| 1699 If POS is above start of WINDOW, return coords | |
| 1700 of start of first screen line. | |
| 1701 If POS is after end of WINDOW, return coords of end of last screen line. | |
| 1702 | |
| 1703 Value is 1 if POS is in range, 0 if it was off screen. */ | |
| 1704 | |
| 1705 static int | |
| 1706 fast_find_position (window, pos, columnp, rowp) | |
| 1707 Lisp_Object window; | |
| 1708 int pos; | |
| 1709 int *columnp, *rowp; | |
| 1710 { | |
| 1711 struct window *w = XWINDOW (window); | |
| 1712 FRAME_PTR f = XFRAME (WINDOW_FRAME (w)); | |
| 1713 int i; | |
| 1714 int row = 0; | |
|
16258
008dd73a2005
(fast_find_position, show_macro_face): Use new WINDOW_LEFT_MARGIN macro.
Richard M. Stallman <rms@gnu.org>
parents:
16209
diff
changeset
|
1715 int left = WINDOW_LEFT_MARGIN (w); |
| 13434 | 1716 int top = w->top; |
| 1717 int height = XFASTINT (w->height) - ! MINI_WINDOW_P (w); | |
| 1718 int width = window_internal_width (w); | |
| 1719 int *charstarts; | |
| 1720 int lastcol; | |
| 1721 int maybe_next_line = 0; | |
| 1722 | |
| 1723 /* Find the right row. */ | |
| 1724 for (i = 0; | |
| 1725 i < height; | |
| 1726 i++) | |
| 1727 { | |
| 1728 int linestart = FRAME_CURRENT_GLYPHS (f)->charstarts[top + i][left]; | |
| 1729 if (linestart > pos) | |
| 1730 break; | |
| 1731 /* If the position sought is the end of the buffer, | |
| 1732 don't include the blank lines at the bottom of the window. */ | |
| 1733 if (linestart == pos && pos == BUF_ZV (XBUFFER (w->buffer))) | |
| 1734 { | |
| 1735 maybe_next_line = 1; | |
| 1736 break; | |
| 1737 } | |
| 1738 if (linestart > 0) | |
| 1739 row = i; | |
| 1740 } | |
| 1741 | |
| 1742 /* Find the right column with in it. */ | |
| 1743 charstarts = FRAME_CURRENT_GLYPHS (f)->charstarts[top + row]; | |
| 1744 lastcol = left; | |
| 1745 for (i = 0; i < width; i++) | |
| 1746 { | |
| 1747 if (charstarts[left + i] == pos) | |
| 1748 { | |
| 1749 *rowp = row + top; | |
| 1750 *columnp = i + left; | |
| 1751 return 1; | |
| 1752 } | |
| 1753 else if (charstarts[left + i] > pos) | |
| 1754 break; | |
| 1755 else if (charstarts[left + i] > 0) | |
| 1756 lastcol = left + i; | |
| 1757 } | |
| 1758 | |
| 1759 /* If we're looking for the end of the buffer, | |
| 1760 and we didn't find it in the line we scanned, | |
| 1761 use the start of the following line. */ | |
| 1762 if (maybe_next_line) | |
| 1763 { | |
| 1764 row++; | |
| 1765 i = 0; | |
| 1766 } | |
| 1767 | |
| 1768 *rowp = row + top; | |
| 1769 *columnp = lastcol; | |
| 1770 return 0; | |
| 1771 } | |
| 1772 | |
| 1773 /* Display the active region described by mouse_face_* | |
| 1774 in its mouse-face if HL > 0, in its normal face if HL = 0. */ | |
| 1775 | |
| 1776 static void | |
| 1777 show_mouse_face (dpyinfo, hl) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1778 struct w32_display_info *dpyinfo; |
| 13434 | 1779 int hl; |
| 1780 { | |
| 1781 struct window *w = XWINDOW (dpyinfo->mouse_face_window); | |
| 1782 int width = window_internal_width (w); | |
| 1783 FRAME_PTR f = XFRAME (WINDOW_FRAME (w)); | |
| 1784 int i; | |
| 1785 int cursor_off = 0; | |
| 1786 int old_curs_x = curs_x; | |
| 1787 int old_curs_y = curs_y; | |
| 1788 | |
| 1789 /* Set these variables temporarily | |
| 1790 so that if we have to turn the cursor off and on again | |
| 1791 we will put it back at the same place. */ | |
| 1792 curs_x = f->phys_cursor_x; | |
| 1793 curs_y = f->phys_cursor_y; | |
| 1794 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1795 for (i = FRAME_W32_DISPLAY_INFO (f)->mouse_face_beg_row; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1796 i <= FRAME_W32_DISPLAY_INFO (f)->mouse_face_end_row; i++) |
| 13434 | 1797 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1798 int column = (i == FRAME_W32_DISPLAY_INFO (f)->mouse_face_beg_row |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1799 ? FRAME_W32_DISPLAY_INFO (f)->mouse_face_beg_col |
|
16258
008dd73a2005
(fast_find_position, show_macro_face): Use new WINDOW_LEFT_MARGIN macro.
Richard M. Stallman <rms@gnu.org>
parents:
16209
diff
changeset
|
1800 : WINDOW_LEFT_MARGIN (w)); |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1801 int endcolumn = (i == FRAME_W32_DISPLAY_INFO (f)->mouse_face_end_row |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1802 ? FRAME_W32_DISPLAY_INFO (f)->mouse_face_end_col |
|
16258
008dd73a2005
(fast_find_position, show_macro_face): Use new WINDOW_LEFT_MARGIN macro.
Richard M. Stallman <rms@gnu.org>
parents:
16209
diff
changeset
|
1803 : WINDOW_LEFT_MARGIN (w) + width); |
| 13434 | 1804 endcolumn = min (endcolumn, FRAME_CURRENT_GLYPHS (f)->used[i]); |
| 1805 | |
| 1806 /* If the cursor's in the text we are about to rewrite, | |
| 1807 turn the cursor off. */ | |
| 1808 if (i == curs_y | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1809 && curs_x >= column - 1 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1810 && curs_x <= endcolumn) |
| 13434 | 1811 { |
| 1812 x_display_cursor (f, 0); | |
| 1813 cursor_off = 1; | |
| 1814 } | |
| 1815 | |
| 1816 dumpglyphs (f, | |
| 1817 CHAR_TO_PIXEL_COL (f, column), | |
| 1818 CHAR_TO_PIXEL_ROW (f, i), | |
| 1819 FRAME_CURRENT_GLYPHS (f)->glyphs[i] + column, | |
| 1820 endcolumn - column, | |
| 1821 /* Highlight with mouse face if hl > 0. */ | |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
1822 hl > 0 ? 3 : 0, 0, NULL); |
| 13434 | 1823 } |
| 1824 | |
| 1825 /* If we turned the cursor off, turn it back on. */ | |
| 1826 if (cursor_off) | |
| 1827 x_display_cursor (f, 1); | |
| 1828 | |
| 1829 curs_x = old_curs_x; | |
| 1830 curs_y = old_curs_y; | |
| 1831 | |
| 1832 /* Change the mouse cursor according to the value of HL. */ | |
| 1833 if (hl > 0) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1834 SetCursor (f->output_data.w32->cross_cursor); |
| 13434 | 1835 else |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1836 SetCursor (f->output_data.w32->text_cursor); |
| 13434 | 1837 } |
| 1838 | |
| 1839 /* Clear out the mouse-highlighted active region. | |
| 1840 Redraw it unhighlighted first. */ | |
| 1841 | |
| 1842 static void | |
| 1843 clear_mouse_face (dpyinfo) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1844 struct w32_display_info *dpyinfo; |
| 13434 | 1845 { |
| 1846 if (! NILP (dpyinfo->mouse_face_window)) | |
| 1847 show_mouse_face (dpyinfo, 0); | |
| 1848 | |
| 1849 dpyinfo->mouse_face_beg_row = dpyinfo->mouse_face_beg_col = -1; | |
| 1850 dpyinfo->mouse_face_end_row = dpyinfo->mouse_face_end_col = -1; | |
| 1851 dpyinfo->mouse_face_window = Qnil; | |
| 1852 } | |
| 1853 | |
| 1854 struct scroll_bar *x_window_to_scroll_bar (); | |
| 1855 static void x_scroll_bar_report_motion (); | |
| 1856 | |
| 1857 /* Return the current position of the mouse. | |
| 1858 *fp should be a frame which indicates which display to ask about. | |
| 1859 | |
| 1860 If the mouse movement started in a scroll bar, set *fp, *bar_window, | |
| 1861 and *part to the frame, window, and scroll bar part that the mouse | |
| 1862 is over. Set *x and *y to the portion and whole of the mouse's | |
| 1863 position on the scroll bar. | |
| 1864 | |
| 1865 If the mouse movement started elsewhere, set *fp to the frame the | |
| 1866 mouse is on, *bar_window to nil, and *x and *y to the character cell | |
| 1867 the mouse is over. | |
| 1868 | |
| 1869 Set *time to the server timestamp for the time at which the mouse | |
| 1870 was at this position. | |
| 1871 | |
| 1872 Don't store anything if we don't have a valid set of values to report. | |
| 1873 | |
| 1874 This clears the mouse_moved flag, so we can wait for the next mouse | |
| 1875 movement. This also calls XQueryPointer, which will cause the | |
| 1876 server to give us another MotionNotify when the mouse moves | |
| 1877 again. */ | |
| 1878 | |
| 1879 static void | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1880 w32_mouse_position (fp, insist, bar_window, part, x, y, time) |
| 13434 | 1881 FRAME_PTR *fp; |
| 1882 int insist; | |
| 1883 Lisp_Object *bar_window; | |
| 1884 enum scroll_bar_part *part; | |
| 1885 Lisp_Object *x, *y; | |
| 1886 unsigned long *time; | |
| 1887 { | |
| 1888 FRAME_PTR f1; | |
| 1889 | |
| 1890 BLOCK_INPUT; | |
| 1891 | |
|
20179
b4fe0e8ac819
(w32_mouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents:
19713
diff
changeset
|
1892 if (! NILP (last_mouse_scroll_bar) && insist == 0) |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
1893 /* This is never called at the moment. */ |
| 13434 | 1894 x_scroll_bar_report_motion (fp, bar_window, part, x, y, time); |
| 1895 else | |
| 1896 { | |
| 1897 POINT pt; | |
| 1898 | |
| 1899 Lisp_Object frame, tail; | |
| 1900 | |
| 1901 /* Clear the mouse-moved flag for every frame on this display. */ | |
| 1902 FOR_EACH_FRAME (tail, frame) | |
| 1903 XFRAME (frame)->mouse_moved = 0; | |
| 1904 | |
| 1905 last_mouse_scroll_bar = Qnil; | |
| 1906 | |
| 1907 GetCursorPos (&pt); | |
| 1908 | |
| 1909 /* Now we have a position on the root; find the innermost window | |
| 1910 containing the pointer. */ | |
| 1911 { | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1912 if (FRAME_W32_DISPLAY_INFO (*fp)->grabbed && last_mouse_frame |
| 13434 | 1913 && FRAME_LIVE_P (last_mouse_frame)) |
| 1914 { | |
| 1915 f1 = last_mouse_frame; | |
| 1916 } | |
| 1917 else | |
| 1918 { | |
| 1919 /* Is win one of our frames? */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1920 f1 = x_window_to_frame (FRAME_W32_DISPLAY_INFO (*fp), WindowFromPoint(pt)); |
| 13434 | 1921 } |
| 1922 | |
| 1923 /* If not, is it one of our scroll bars? */ | |
| 1924 if (! f1) | |
| 1925 { | |
| 1926 struct scroll_bar *bar = x_window_to_scroll_bar (WindowFromPoint(pt)); | |
| 1927 | |
| 1928 if (bar) | |
| 1929 { | |
| 1930 f1 = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); | |
| 1931 } | |
| 1932 } | |
| 1933 | |
|
20179
b4fe0e8ac819
(w32_mouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents:
19713
diff
changeset
|
1934 if (f1 == 0 && insist > 0) |
| 13434 | 1935 f1 = selected_frame; |
| 1936 | |
| 1937 if (f1) | |
| 1938 { | |
| 1939 int ignore1, ignore2; | |
| 1940 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1941 ScreenToClient (FRAME_W32_WINDOW (f1), &pt); |
| 13434 | 1942 |
| 1943 /* Ok, we found a frame. Store all the values. */ | |
| 1944 | |
| 1945 pixel_to_glyph_coords (f1, pt.x, pt.y, &ignore1, &ignore2, | |
| 1946 &last_mouse_glyph, | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1947 FRAME_W32_DISPLAY_INFO (f1)->grabbed |
| 13434 | 1948 || insist); |
| 1949 | |
| 1950 *bar_window = Qnil; | |
| 1951 *part = 0; | |
| 1952 *fp = f1; | |
| 1953 XSETINT (*x, pt.x); | |
| 1954 XSETINT (*y, pt.y); | |
| 1955 *time = last_mouse_movement_time; | |
| 1956 } | |
| 1957 } | |
| 1958 } | |
| 1959 | |
| 1960 UNBLOCK_INPUT; | |
| 1961 } | |
| 1962 | |
| 1963 /* Scroll bar support. */ | |
| 1964 | |
| 1965 /* Given an window ID, find the struct scroll_bar which manages it. | |
| 1966 This can be called in GC, so we have to make sure to strip off mark | |
| 1967 bits. */ | |
| 1968 struct scroll_bar * | |
| 1969 x_window_to_scroll_bar (window_id) | |
| 1970 Window window_id; | |
| 1971 { | |
| 1972 Lisp_Object tail, frame; | |
| 1973 | |
| 1974 for (tail = Vframe_list; | |
| 1975 XGCTYPE (tail) == Lisp_Cons; | |
| 1976 tail = XCONS (tail)->cdr) | |
| 1977 { | |
| 1978 Lisp_Object frame, bar, condemned; | |
| 1979 | |
| 1980 frame = XCONS (tail)->car; | |
| 1981 /* All elements of Vframe_list should be frames. */ | |
| 1982 if (! GC_FRAMEP (frame)) | |
| 1983 abort (); | |
| 1984 | |
| 1985 /* Scan this frame's scroll bar list for a scroll bar with the | |
| 1986 right window ID. */ | |
| 1987 condemned = FRAME_CONDEMNED_SCROLL_BARS (XFRAME (frame)); | |
| 1988 for (bar = FRAME_SCROLL_BARS (XFRAME (frame)); | |
| 1989 /* This trick allows us to search both the ordinary and | |
| 1990 condemned scroll bar lists with one loop. */ | |
| 1991 ! GC_NILP (bar) || (bar = condemned, | |
| 1992 condemned = Qnil, | |
| 1993 ! GC_NILP (bar)); | |
| 1994 bar = XSCROLL_BAR (bar)->next) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
1995 if (SCROLL_BAR_W32_WINDOW (XSCROLL_BAR (bar)) == window_id) |
| 13434 | 1996 return XSCROLL_BAR (bar); |
| 1997 } | |
| 1998 | |
| 1999 return 0; | |
| 2000 } | |
| 2001 | |
| 2002 HWND | |
| 2003 my_create_scrollbar (f, bar) | |
| 2004 struct frame * f; | |
| 2005 struct scroll_bar * bar; | |
| 2006 { | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2007 return (HWND) SendMessage (FRAME_W32_WINDOW (f), |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2008 WM_EMACS_CREATESCROLLBAR, (WPARAM) f, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2009 (LPARAM) bar); |
| 13434 | 2010 } |
| 2011 | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2012 //#define ATTACH_THREADS |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2013 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2014 BOOL |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2015 my_show_window (FRAME_PTR f, HWND hwnd, int how) |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2016 { |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2017 #ifndef ATTACH_THREADS |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2018 return SendMessage (FRAME_W32_WINDOW (f), WM_EMACS_SHOWWINDOW, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2019 (WPARAM) hwnd, (LPARAM) how); |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2020 #else |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2021 return ShowWindow (hwnd, how); |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2022 #endif |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2023 } |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2024 |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2025 void |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2026 my_set_window_pos (HWND hwnd, HWND hwndAfter, |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2027 int x, int y, int cx, int cy, UINT flags) |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2028 { |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2029 #ifndef ATTACH_THREADS |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2030 WINDOWPOS pos; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2031 pos.hwndInsertAfter = hwndAfter; |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2032 pos.x = x; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2033 pos.y = y; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2034 pos.cx = cx; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2035 pos.cy = cy; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2036 pos.flags = flags; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2037 SendMessage (hwnd, WM_EMACS_SETWINDOWPOS, (WPARAM) &pos, 0); |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2038 #else |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2039 SetWindowPos (hwnd, hwndAfter, x, y, cx, cy, flags); |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2040 #endif |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2041 } |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2042 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2043 BOOL |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2044 my_set_focus (f, hwnd) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2045 struct frame * f; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2046 HWND hwnd; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2047 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2048 SendMessage (FRAME_W32_WINDOW (f), WM_EMACS_SETFOCUS, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2049 (WPARAM) hwnd, 0); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2050 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2051 |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2052 BOOL |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2053 my_set_foreground_window (hwnd) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2054 HWND hwnd; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2055 { |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2056 SendMessage (hwnd, WM_EMACS_SETFOREGROUND, (WPARAM) hwnd, 0); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2057 } |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2058 |
| 13434 | 2059 void |
| 2060 my_destroy_window (f, hwnd) | |
| 2061 struct frame * f; | |
| 2062 HWND hwnd; | |
| 2063 { | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2064 SendMessage (FRAME_W32_WINDOW (f), WM_EMACS_DESTROYWINDOW, |
| 13434 | 2065 (WPARAM) hwnd, 0); |
| 2066 } | |
| 2067 | |
| 2068 /* Open a new window to serve as a scroll bar, and return the | |
| 2069 scroll bar vector for it. */ | |
| 2070 static struct scroll_bar * | |
| 2071 x_scroll_bar_create (window, top, left, width, height) | |
| 2072 struct window *window; | |
| 2073 int top, left, width, height; | |
| 2074 { | |
| 2075 FRAME_PTR f = XFRAME (WINDOW_FRAME (window)); | |
| 2076 struct scroll_bar *bar | |
| 2077 = XSCROLL_BAR (Fmake_vector (make_number (SCROLL_BAR_VEC_SIZE), Qnil)); | |
| 2078 HWND hwnd; | |
| 2079 | |
| 2080 BLOCK_INPUT; | |
| 2081 | |
| 2082 XSETWINDOW (bar->window, window); | |
| 2083 XSETINT (bar->top, top); | |
| 2084 XSETINT (bar->left, left); | |
| 2085 XSETINT (bar->width, width); | |
| 2086 XSETINT (bar->height, height); | |
| 2087 XSETINT (bar->start, 0); | |
| 2088 XSETINT (bar->end, 0); | |
| 2089 bar->dragging = Qnil; | |
| 2090 | |
| 2091 /* Requires geometry to be set before call to create the real window */ | |
| 2092 | |
| 2093 hwnd = my_create_scrollbar (f, bar); | |
| 2094 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2095 if (pfnSetScrollInfo) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2096 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2097 SCROLLINFO si; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2098 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2099 si.cbSize = sizeof (si); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2100 si.fMask = SIF_ALL; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2101 si.nMin = 0; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2102 si.nMax = VERTICAL_SCROLL_BAR_TOP_RANGE (height) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2103 + VERTICAL_SCROLL_BAR_MIN_HANDLE; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2104 si.nPage = si.nMax; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2105 si.nPos = 0; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2106 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2107 pfnSetScrollInfo (hwnd, SB_CTL, &si, FALSE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2108 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2109 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2110 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2111 SetScrollRange (hwnd, SB_CTL, 0, VERTICAL_SCROLL_BAR_TOP_RANGE (height), FALSE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2112 SetScrollPos (hwnd, SB_CTL, 0, FALSE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2113 } |
| 13434 | 2114 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2115 SET_SCROLL_BAR_W32_WINDOW (bar, hwnd); |
| 13434 | 2116 |
| 2117 /* Add bar to its frame's list of scroll bars. */ | |
| 2118 bar->next = FRAME_SCROLL_BARS (f); | |
| 2119 bar->prev = Qnil; | |
| 2120 XSETVECTOR (FRAME_SCROLL_BARS (f), bar); | |
| 2121 if (! NILP (bar->next)) | |
| 2122 XSETVECTOR (XSCROLL_BAR (bar->next)->prev, bar); | |
| 2123 | |
| 2124 UNBLOCK_INPUT; | |
| 2125 | |
| 2126 return bar; | |
| 2127 } | |
| 2128 | |
| 2129 /* Draw BAR's handle in the proper position. | |
| 2130 If the handle is already drawn from START to END, don't bother | |
| 2131 redrawing it, unless REBUILD is non-zero; in that case, always | |
| 2132 redraw it. (REBUILD is handy for drawing the handle after expose | |
| 2133 events.) | |
| 2134 | |
| 2135 Normally, we want to constrain the start and end of the handle to | |
| 2136 fit inside its rectangle, but if the user is dragging the scroll bar | |
| 2137 handle, we want to let them drag it down all the way, so that the | |
| 2138 bar's top is as far down as it goes; otherwise, there's no way to | |
| 2139 move to the very end of the buffer. */ | |
| 2140 static void | |
| 2141 x_scroll_bar_set_handle (bar, start, end, rebuild) | |
| 2142 struct scroll_bar *bar; | |
| 2143 int start, end; | |
| 2144 int rebuild; | |
| 2145 { | |
| 2146 int dragging = ! NILP (bar->dragging); | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2147 Window w = SCROLL_BAR_W32_WINDOW (bar); |
| 13434 | 2148 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); |
| 2149 | |
| 2150 /* If the display is already accurate, do nothing. */ | |
| 2151 if (! rebuild | |
| 2152 && start == XINT (bar->start) | |
| 2153 && end == XINT (bar->end)) | |
| 2154 return; | |
| 2155 | |
| 2156 BLOCK_INPUT; | |
| 2157 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2158 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2159 int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (XINT (bar->height)); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2160 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2161 /* Make sure the values are reasonable, and try to preserve |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2162 the distance between start and end. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2163 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2164 int length = end - start; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2165 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2166 if (start < 0) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2167 start = 0; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2168 else if (start > top_range) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2169 start = top_range; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2170 end = start + length; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2171 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2172 if (end < start) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2173 end = start; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2174 else if (end > top_range && ! dragging) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2175 end = top_range; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2176 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2177 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2178 |
| 13434 | 2179 /* Store the adjusted setting in the scroll bar. */ |
| 2180 XSETINT (bar->start, start); | |
| 2181 XSETINT (bar->end, end); | |
| 2182 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2183 /* If being dragged, let scroll bar update itself. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2184 if (!dragging) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2185 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2186 if (pfnSetScrollInfo) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2187 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2188 SCROLLINFO si; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2189 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2190 si.cbSize = sizeof (si); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2191 si.fMask = SIF_PAGE | SIF_POS; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2192 si.nPage = end - start + VERTICAL_SCROLL_BAR_MIN_HANDLE; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2193 si.nPos = start; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2194 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2195 pfnSetScrollInfo (w, SB_CTL, &si, TRUE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2196 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2197 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2198 SetScrollPos (w, SB_CTL, start, TRUE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2199 } |
| 13434 | 2200 |
| 2201 UNBLOCK_INPUT; | |
| 2202 } | |
| 2203 | |
| 2204 /* Move a scroll bar around on the screen, to accommodate changing | |
| 2205 window configurations. */ | |
| 2206 static void | |
| 2207 x_scroll_bar_move (bar, top, left, width, height) | |
| 2208 struct scroll_bar *bar; | |
| 2209 int top, left, width, height; | |
| 2210 { | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2211 Window w = SCROLL_BAR_W32_WINDOW (bar); |
| 13434 | 2212 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); |
| 2213 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2214 /* If already correctly positioned, do nothing. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2215 if ( XINT (bar->left) == left |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2216 && XINT (bar->top) == top |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2217 && XINT (bar->width) == width |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2218 && XINT (bar->height) == height ) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2219 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2220 /* Redraw after clear_frame. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2221 if (!my_show_window (f, w, SW_NORMAL)) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2222 InvalidateRect (w, NULL, FALSE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2223 return; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2224 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2225 |
| 13434 | 2226 BLOCK_INPUT; |
| 2227 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2228 /* Make sure scroll bar is "visible" before moving, to ensure the |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2229 area of the parent window now exposed will be refreshed. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2230 my_show_window (f, w, SW_HIDE); |
| 13434 | 2231 MoveWindow (w, left, top, width, height, TRUE); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2232 if (pfnSetScrollInfo) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2233 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2234 SCROLLINFO si; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2235 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2236 si.cbSize = sizeof (si); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2237 si.fMask = SIF_RANGE; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2238 si.nMin = 0; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2239 si.nMax = VERTICAL_SCROLL_BAR_TOP_RANGE (height) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2240 + VERTICAL_SCROLL_BAR_MIN_HANDLE; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2241 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2242 pfnSetScrollInfo (w, SB_CTL, &si, FALSE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2243 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2244 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2245 SetScrollRange (w, SB_CTL, 0, VERTICAL_SCROLL_BAR_TOP_RANGE (height), FALSE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2246 my_show_window (f, w, SW_NORMAL); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2247 // InvalidateRect (w, NULL, FALSE); |
| 13434 | 2248 |
| 2249 XSETINT (bar->left, left); | |
| 2250 XSETINT (bar->top, top); | |
| 2251 XSETINT (bar->width, width); | |
| 2252 XSETINT (bar->height, height); | |
| 2253 | |
| 2254 UNBLOCK_INPUT; | |
| 2255 } | |
| 2256 | |
| 2257 /* Destroy the window for BAR, and set its Emacs window's scroll bar | |
| 2258 to nil. */ | |
| 2259 static void | |
| 2260 x_scroll_bar_remove (bar) | |
| 2261 struct scroll_bar *bar; | |
| 2262 { | |
| 2263 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); | |
| 2264 | |
| 2265 BLOCK_INPUT; | |
| 2266 | |
| 2267 /* Destroy the window. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2268 my_destroy_window (f, SCROLL_BAR_W32_WINDOW (bar)); |
| 13434 | 2269 |
| 2270 /* Disassociate this scroll bar from its window. */ | |
| 2271 XWINDOW (bar->window)->vertical_scroll_bar = Qnil; | |
| 2272 | |
| 2273 UNBLOCK_INPUT; | |
| 2274 } | |
| 2275 | |
| 2276 /* Set the handle of the vertical scroll bar for WINDOW to indicate | |
| 2277 that we are displaying PORTION characters out of a total of WHOLE | |
| 2278 characters, starting at POSITION. If WINDOW has no scroll bar, | |
| 2279 create one. */ | |
| 2280 static void | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2281 w32_set_vertical_scroll_bar (window, portion, whole, position) |
| 13434 | 2282 struct window *window; |
| 2283 int portion, whole, position; | |
| 2284 { | |
| 2285 FRAME_PTR f = XFRAME (WINDOW_FRAME (window)); | |
| 2286 int top = XINT (window->top); | |
| 2287 int left = WINDOW_VERTICAL_SCROLL_BAR_COLUMN (window); | |
| 2288 int height = WINDOW_VERTICAL_SCROLL_BAR_HEIGHT (window); | |
| 2289 | |
| 2290 /* Where should this scroll bar be, pixelwise? */ | |
| 2291 int pixel_top = CHAR_TO_PIXEL_ROW (f, top); | |
| 2292 int pixel_left = CHAR_TO_PIXEL_COL (f, left); | |
| 2293 int pixel_width | |
| 2294 = (FRAME_SCROLL_BAR_PIXEL_WIDTH (f) > 0 | |
| 2295 ? FRAME_SCROLL_BAR_PIXEL_WIDTH (f) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2296 : (FRAME_SCROLL_BAR_COLS (f) * FONT_WIDTH (f->output_data.w32->font))); |
| 13434 | 2297 int pixel_height = VERTICAL_SCROLL_BAR_PIXEL_HEIGHT (f, height); |
| 2298 | |
| 2299 struct scroll_bar *bar; | |
| 2300 | |
| 2301 /* Does the scroll bar exist yet? */ | |
| 2302 if (NILP (window->vertical_scroll_bar)) | |
| 2303 bar = x_scroll_bar_create (window, | |
| 2304 pixel_top, pixel_left, | |
| 2305 pixel_width, pixel_height); | |
| 2306 else | |
| 2307 { | |
| 2308 /* It may just need to be moved and resized. */ | |
| 2309 bar = XSCROLL_BAR (window->vertical_scroll_bar); | |
| 2310 x_scroll_bar_move (bar, pixel_top, pixel_left, pixel_width, pixel_height); | |
| 2311 } | |
| 2312 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2313 /* Set the scroll bar's current state. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2314 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2315 int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (pixel_height); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2316 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2317 if (whole == 0) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2318 x_scroll_bar_set_handle (bar, 0, top_range, 0); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2319 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2320 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2321 int start = (int) (((double) position * top_range) / whole); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2322 int end = (int) (((double) (position + portion) * top_range) / whole); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2323 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2324 x_scroll_bar_set_handle (bar, start, end, 0); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2325 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2326 } |
| 13434 | 2327 |
| 2328 XSETVECTOR (window->vertical_scroll_bar, bar); | |
| 2329 } | |
| 2330 | |
| 2331 | |
| 2332 /* The following three hooks are used when we're doing a thorough | |
| 2333 redisplay of the frame. We don't explicitly know which scroll bars | |
| 2334 are going to be deleted, because keeping track of when windows go | |
| 2335 away is a real pain - "Can you say set-window-configuration, boys | |
| 2336 and girls?" Instead, we just assert at the beginning of redisplay | |
| 2337 that *all* scroll bars are to be removed, and then save a scroll bar | |
| 2338 from the fiery pit when we actually redisplay its window. */ | |
| 2339 | |
| 2340 /* Arrange for all scroll bars on FRAME to be removed at the next call | |
| 2341 to `*judge_scroll_bars_hook'. A scroll bar may be spared if | |
| 2342 `*redeem_scroll_bar_hook' is applied to its window before the judgement. */ | |
| 2343 static void | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2344 w32_condemn_scroll_bars (frame) |
| 13434 | 2345 FRAME_PTR frame; |
| 2346 { | |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2347 /* Transfer all the scroll bars to FRAME_CONDEMNED_SCROLL_BARS. */ |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2348 while (! NILP (FRAME_SCROLL_BARS (frame))) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2349 { |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2350 Lisp_Object bar; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2351 bar = FRAME_SCROLL_BARS (frame); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2352 FRAME_SCROLL_BARS (frame) = XSCROLL_BAR (bar)->next; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2353 XSCROLL_BAR (bar)->next = FRAME_CONDEMNED_SCROLL_BARS (frame); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2354 XSCROLL_BAR (bar)->prev = Qnil; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2355 if (! NILP (FRAME_CONDEMNED_SCROLL_BARS (frame))) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2356 XSCROLL_BAR (FRAME_CONDEMNED_SCROLL_BARS (frame))->prev = bar; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2357 FRAME_CONDEMNED_SCROLL_BARS (frame) = bar; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2358 } |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2359 #ifdef PIGSFLY |
| 13434 | 2360 /* The condemned list should be empty at this point; if it's not, |
| 2361 then the rest of Emacs isn't using the condemn/redeem/judge | |
| 2362 protocol correctly. */ | |
| 2363 if (! NILP (FRAME_CONDEMNED_SCROLL_BARS (frame))) | |
| 2364 abort (); | |
| 2365 | |
| 2366 /* Move them all to the "condemned" list. */ | |
| 2367 FRAME_CONDEMNED_SCROLL_BARS (frame) = FRAME_SCROLL_BARS (frame); | |
| 2368 FRAME_SCROLL_BARS (frame) = Qnil; | |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2369 #endif |
| 13434 | 2370 } |
| 2371 | |
| 2372 /* Unmark WINDOW's scroll bar for deletion in this judgement cycle. | |
| 2373 Note that WINDOW isn't necessarily condemned at all. */ | |
| 2374 static void | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2375 w32_redeem_scroll_bar (window) |
| 13434 | 2376 struct window *window; |
| 2377 { | |
| 2378 struct scroll_bar *bar; | |
| 2379 | |
| 2380 /* We can't redeem this window's scroll bar if it doesn't have one. */ | |
| 2381 if (NILP (window->vertical_scroll_bar)) | |
| 2382 abort (); | |
| 2383 | |
| 2384 bar = XSCROLL_BAR (window->vertical_scroll_bar); | |
| 2385 | |
| 2386 /* Unlink it from the condemned list. */ | |
| 2387 { | |
| 2388 FRAME_PTR f = XFRAME (WINDOW_FRAME (window)); | |
| 2389 | |
| 2390 if (NILP (bar->prev)) | |
| 2391 { | |
| 2392 /* If the prev pointer is nil, it must be the first in one of | |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2393 the lists. */ |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2394 if (EQ (FRAME_SCROLL_BARS (f), window->vertical_scroll_bar)) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2395 /* It's not condemned. Everything's fine. */ |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2396 return; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2397 else if (EQ (FRAME_CONDEMNED_SCROLL_BARS (f), |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2398 window->vertical_scroll_bar)) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2399 FRAME_CONDEMNED_SCROLL_BARS (f) = bar->next; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2400 else |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2401 /* If its prev pointer is nil, it must be at the front of |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2402 one or the other! */ |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2403 abort (); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2404 } |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2405 else |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2406 XSCROLL_BAR (bar->prev)->next = bar->next; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2407 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2408 if (! NILP (bar->next)) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2409 XSCROLL_BAR (bar->next)->prev = bar->prev; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2410 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2411 bar->next = FRAME_SCROLL_BARS (f); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2412 bar->prev = Qnil; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2413 XSETVECTOR (FRAME_SCROLL_BARS (f), bar); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2414 if (! NILP (bar->next)) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2415 XSETVECTOR (XSCROLL_BAR (bar->next)->prev, bar); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2416 } |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2417 #ifdef PIGSFLY |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2418 struct scroll_bar *bar; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2419 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2420 /* We can't redeem this window's scroll bar if it doesn't have one. */ |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2421 if (NILP (window->vertical_scroll_bar)) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2422 abort (); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2423 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2424 bar = XSCROLL_BAR (window->vertical_scroll_bar); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2425 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2426 /* Unlink it from the condemned list. */ |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2427 { |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2428 FRAME_PTR f = XFRAME (WINDOW_FRAME (window)); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2429 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2430 if (NILP (bar->prev)) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2431 { |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2432 /* If the prev pointer is nil, it must be the first in one of |
| 13434 | 2433 the lists. */ |
| 2434 if (EQ (FRAME_SCROLL_BARS (f), window->vertical_scroll_bar)) | |
| 2435 /* It's not condemned. Everything's fine. */ | |
| 2436 return; | |
| 2437 else if (EQ (FRAME_CONDEMNED_SCROLL_BARS (f), | |
| 2438 window->vertical_scroll_bar)) | |
| 2439 FRAME_CONDEMNED_SCROLL_BARS (f) = bar->next; | |
| 2440 else | |
| 2441 /* If its prev pointer is nil, it must be at the front of | |
| 2442 one or the other! */ | |
| 2443 abort (); | |
| 2444 } | |
| 2445 else | |
| 2446 XSCROLL_BAR (bar->prev)->next = bar->next; | |
| 2447 | |
| 2448 if (! NILP (bar->next)) | |
| 2449 XSCROLL_BAR (bar->next)->prev = bar->prev; | |
| 2450 | |
| 2451 bar->next = FRAME_SCROLL_BARS (f); | |
| 2452 bar->prev = Qnil; | |
| 2453 XSETVECTOR (FRAME_SCROLL_BARS (f), bar); | |
| 2454 if (! NILP (bar->next)) | |
| 2455 XSETVECTOR (XSCROLL_BAR (bar->next)->prev, bar); | |
| 2456 } | |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2457 #endif |
| 13434 | 2458 } |
| 2459 | |
| 2460 /* Remove all scroll bars on FRAME that haven't been saved since the | |
| 2461 last call to `*condemn_scroll_bars_hook'. */ | |
| 2462 static void | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2463 w32_judge_scroll_bars (f) |
| 13434 | 2464 FRAME_PTR f; |
| 2465 { | |
| 2466 Lisp_Object bar, next; | |
| 2467 | |
| 2468 bar = FRAME_CONDEMNED_SCROLL_BARS (f); | |
| 2469 | |
| 2470 /* Clear out the condemned list now so we won't try to process any | |
| 2471 more events on the hapless scroll bars. */ | |
| 2472 FRAME_CONDEMNED_SCROLL_BARS (f) = Qnil; | |
| 2473 | |
| 2474 for (; ! NILP (bar); bar = next) | |
| 2475 { | |
| 2476 struct scroll_bar *b = XSCROLL_BAR (bar); | |
| 2477 | |
| 2478 x_scroll_bar_remove (b); | |
| 2479 | |
| 2480 next = b->next; | |
| 2481 b->next = b->prev = Qnil; | |
| 2482 } | |
| 2483 | |
| 2484 /* Now there should be no references to the condemned scroll bars, | |
| 2485 and they should get garbage-collected. */ | |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2486 #ifdef PIGSFLY |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2487 Lisp_Object bar, next; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2488 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2489 bar = FRAME_CONDEMNED_SCROLL_BARS (f); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2490 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2491 /* Clear out the condemned list now so we won't try to process any |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2492 more events on the hapless scroll bars. */ |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2493 FRAME_CONDEMNED_SCROLL_BARS (f) = Qnil; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2494 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2495 for (; ! NILP (bar); bar = next) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2496 { |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2497 struct scroll_bar *b = XSCROLL_BAR (bar); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2498 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2499 x_scroll_bar_remove (b); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2500 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2501 next = b->next; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2502 b->next = b->prev = Qnil; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2503 } |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2504 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2505 /* Now there should be no references to the condemned scroll bars, |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2506 and they should get garbage-collected. */ |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
2507 #endif |
| 13434 | 2508 } |
| 2509 | |
| 2510 /* Handle a mouse click on the scroll bar BAR. If *EMACS_EVENT's kind | |
| 2511 is set to something other than no_event, it is enqueued. | |
| 2512 | |
| 2513 This may be called from a signal handler, so we have to ignore GC | |
| 2514 mark bits. */ | |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
2515 |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2516 static int |
| 13434 | 2517 x_scroll_bar_handle_click (bar, msg, emacs_event) |
| 2518 struct scroll_bar *bar; | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2519 W32Msg *msg; |
| 13434 | 2520 struct input_event *emacs_event; |
| 2521 { | |
| 2522 if (! GC_WINDOWP (bar->window)) | |
| 2523 abort (); | |
| 2524 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2525 emacs_event->kind = w32_scroll_bar_click; |
| 13434 | 2526 emacs_event->code = 0; |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2527 /* not really meaningful to distinguish up/down */ |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2528 emacs_event->modifiers = msg->dwModifiers; |
| 13434 | 2529 emacs_event->frame_or_window = bar->window; |
| 2530 emacs_event->timestamp = msg->msg.time; | |
| 2531 | |
| 2532 { | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2533 int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (XINT (bar->height)); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2534 int y; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2535 int dragging = !NILP (bar->dragging); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2536 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2537 if (pfnGetScrollInfo) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2538 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2539 SCROLLINFO si; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2540 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2541 si.cbSize = sizeof (si); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2542 si.fMask = SIF_POS; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2543 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2544 pfnGetScrollInfo ((HWND) msg->msg.lParam, SB_CTL, &si); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2545 y = si.nPos; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2546 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2547 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2548 y = GetScrollPos ((HWND) msg->msg.lParam, SB_CTL); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2549 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2550 bar->dragging = Qnil; |
| 13434 | 2551 |
| 2552 switch (LOWORD (msg->msg.wParam)) | |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
2553 { |
|
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
2554 case SB_LINEDOWN: |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2555 emacs_event->part = scroll_bar_down_arrow; |
| 13434 | 2556 break; |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
2557 case SB_LINEUP: |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2558 emacs_event->part = scroll_bar_up_arrow; |
| 13434 | 2559 break; |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
2560 case SB_PAGEUP: |
| 13434 | 2561 emacs_event->part = scroll_bar_above_handle; |
| 2562 break; | |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
2563 case SB_PAGEDOWN: |
| 13434 | 2564 emacs_event->part = scroll_bar_below_handle; |
| 2565 break; | |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
2566 case SB_TOP: |
| 13434 | 2567 emacs_event->part = scroll_bar_handle; |
| 2568 y = 0; | |
| 2569 break; | |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
2570 case SB_BOTTOM: |
| 13434 | 2571 emacs_event->part = scroll_bar_handle; |
| 2572 y = top_range; | |
| 2573 break; | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2574 case SB_THUMBTRACK: |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
2575 case SB_THUMBPOSITION: |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2576 if (VERTICAL_SCROLL_BAR_TOP_RANGE (XINT (bar->height)) <= 0xffff) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2577 y = HIWORD (msg->msg.wParam); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2578 bar->dragging = Qt; |
| 13434 | 2579 emacs_event->part = scroll_bar_handle; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2580 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2581 /* "Silently" update current position. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2582 if (pfnSetScrollInfo) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2583 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2584 SCROLLINFO si; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2585 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2586 si.cbSize = sizeof (si); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2587 si.fMask = SIF_POS; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2588 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2589 #if 0 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2590 /* Shrink handle if necessary to allow full range for position. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2591 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2592 int start = XINT (bar->start); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2593 int end = XINT (bar->end); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2594 int len = end - start; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2595 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2596 /* If new end is nearly hitting bottom, we must shrink |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2597 handle. How much we shrink it depends on the relative |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2598 sizes of len and top_range. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2599 if (y + len > top_range - 2) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2600 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2601 len -= min (top_range / 10, (len / 3) + 2); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2602 if (len < 0) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2603 len = 0; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2604 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2605 si.nPage = len + VERTICAL_SCROLL_BAR_MIN_HANDLE; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2606 si.fMask |= SIF_PAGE; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2607 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2608 #endif |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2609 si.nPos = y; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2610 /* Remember apparent position (we actually lag behind the real |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2611 position, so don't set that directly. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2612 last_scroll_bar_drag_pos = y; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2613 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2614 pfnSetScrollInfo (SCROLL_BAR_W32_WINDOW (bar), SB_CTL, &si, FALSE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2615 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2616 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2617 SetScrollPos (SCROLL_BAR_W32_WINDOW (bar), SB_CTL, y, FALSE); |
| 13434 | 2618 break; |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
2619 case SB_ENDSCROLL: |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2620 /* If this is the end of a drag sequence, then reset the scroll |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2621 handle size to normal and do a final redraw. Otherwise do |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2622 nothing. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2623 if (dragging) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2624 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2625 if (pfnSetScrollInfo) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2626 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2627 SCROLLINFO si; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2628 int start = XINT (bar->start); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2629 int end = XINT (bar->end); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2630 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2631 si.cbSize = sizeof (si); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2632 si.fMask = SIF_PAGE | SIF_POS; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2633 si.nPage = end - start + VERTICAL_SCROLL_BAR_MIN_HANDLE; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2634 si.nPos = last_scroll_bar_drag_pos; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2635 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2636 pfnSetScrollInfo (SCROLL_BAR_W32_WINDOW (bar), SB_CTL, &si, TRUE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2637 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2638 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2639 SetScrollPos (SCROLL_BAR_W32_WINDOW (bar), SB_CTL, y, TRUE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2640 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2641 /* fall through */ |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
2642 default: |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2643 emacs_event->kind = no_event; |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2644 return FALSE; |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
2645 } |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2646 |
| 13434 | 2647 XSETINT (emacs_event->x, y); |
| 2648 XSETINT (emacs_event->y, top_range); | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2649 |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2650 return TRUE; |
| 13434 | 2651 } |
| 2652 } | |
| 2653 | |
| 2654 /* Return information to the user about the current position of the mouse | |
| 2655 on the scroll bar. */ | |
| 2656 static void | |
| 2657 x_scroll_bar_report_motion (fp, bar_window, part, x, y, time) | |
| 2658 FRAME_PTR *fp; | |
| 2659 Lisp_Object *bar_window; | |
| 2660 enum scroll_bar_part *part; | |
| 2661 Lisp_Object *x, *y; | |
| 2662 unsigned long *time; | |
| 2663 { | |
| 2664 struct scroll_bar *bar = XSCROLL_BAR (last_mouse_scroll_bar); | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2665 Window w = SCROLL_BAR_W32_WINDOW (bar); |
| 13434 | 2666 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); |
| 2667 int pos; | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2668 int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (XINT (bar->height)); |
| 13434 | 2669 |
| 2670 BLOCK_INPUT; | |
| 2671 | |
| 2672 *fp = f; | |
| 2673 *bar_window = bar->window; | |
| 2674 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2675 if (pfnGetScrollInfo) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2676 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2677 SCROLLINFO si; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2678 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2679 si.cbSize = sizeof (si); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2680 si.fMask = SIF_POS | SIF_PAGE | SIF_RANGE; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2681 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2682 pfnGetScrollInfo (w, SB_CTL, &si); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2683 pos = si.nPos; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2684 top_range = si.nMax - si.nPage + 1; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2685 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2686 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2687 pos = GetScrollPos (w, SB_CTL); |
| 13434 | 2688 |
| 2689 switch (LOWORD (last_mouse_scroll_bar_pos)) | |
| 2690 { | |
| 2691 case SB_THUMBPOSITION: | |
| 2692 case SB_THUMBTRACK: | |
| 2693 *part = scroll_bar_handle; | |
| 2694 if (VERTICAL_SCROLL_BAR_TOP_RANGE (XINT (bar->height)) <= 0xffff) | |
| 2695 pos = HIWORD (last_mouse_scroll_bar_pos); | |
| 2696 break; | |
| 2697 case SB_LINEDOWN: | |
| 2698 *part = scroll_bar_handle; | |
| 2699 pos++; | |
| 2700 break; | |
| 2701 default: | |
| 2702 *part = scroll_bar_handle; | |
| 2703 break; | |
| 2704 } | |
| 2705 | |
| 2706 XSETINT(*x, pos); | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2707 XSETINT(*y, top_range); |
| 13434 | 2708 |
| 2709 f->mouse_moved = 0; | |
| 2710 last_mouse_scroll_bar = Qnil; | |
| 2711 | |
| 2712 *time = last_mouse_movement_time; | |
| 2713 | |
| 2714 UNBLOCK_INPUT; | |
| 2715 } | |
| 2716 | |
| 2717 /* The screen has been cleared so we may have changed foreground or | |
| 2718 background colors, and the scroll bars may need to be redrawn. | |
| 2719 Clear out the scroll bars, and ask for expose events, so we can | |
| 2720 redraw them. */ | |
| 2721 | |
| 2722 x_scroll_bar_clear (f) | |
| 2723 FRAME_PTR f; | |
| 2724 { | |
| 2725 Lisp_Object bar; | |
| 2726 | |
| 2727 for (bar = FRAME_SCROLL_BARS (f); VECTORP (bar); | |
| 2728 bar = XSCROLL_BAR (bar)->next) | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2729 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2730 HWND window = SCROLL_BAR_W32_WINDOW (XSCROLL_BAR (bar)); |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2731 HDC hdc = GetDC (window); |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2732 RECT rect; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2733 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2734 /* Hide scroll bar until ready to repaint. x_scroll_bar_move |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2735 arranges to refresh the scroll bar if hidden. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2736 my_show_window (f, window, SW_HIDE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2737 |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2738 GetClientRect (window, &rect); |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2739 select_palette (f, hdc); |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2740 w32_clear_rect (f, hdc, &rect); |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2741 deselect_palette (f, hdc); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2742 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2743 ReleaseDC (window, hdc); |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2744 } |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2745 } |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2746 |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2747 show_scroll_bars (f, how) |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2748 FRAME_PTR f; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2749 int how; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2750 { |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2751 Lisp_Object bar; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2752 |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2753 for (bar = FRAME_SCROLL_BARS (f); VECTORP (bar); |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2754 bar = XSCROLL_BAR (bar)->next) |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2755 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2756 HWND window = SCROLL_BAR_W32_WINDOW (XSCROLL_BAR (bar)); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2757 my_show_window (f, window, how); |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2758 } |
| 13434 | 2759 } |
| 2760 | |
| 2761 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2762 /* The main W32 event-reading loop - w32_read_socket. */ |
| 13434 | 2763 |
| 2764 /* Timestamp of enter window event. This is only used by w32_read_socket, | |
| 2765 but we have to put it out here, since static variables within functions | |
| 2766 sometimes don't work. */ | |
| 2767 static Time enter_timestamp; | |
| 2768 | |
| 2769 /* Record the last 100 characters stored | |
| 2770 to help debug the loss-of-chars-during-GC problem. */ | |
| 2771 int temp_index; | |
| 2772 short temp_buffer[100]; | |
| 2773 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2774 extern int key_event (KEY_EVENT_RECORD *, struct input_event *, int *isdead); |
|
14462
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2775 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2776 /* Map a W32 WM_CHAR message into a KEY_EVENT_RECORD so that |
|
14462
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2777 we can use the same routines to handle input in both console |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2778 and window modes. */ |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2779 |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2780 static void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2781 convert_to_key_event (W32Msg *msgp, KEY_EVENT_RECORD *eventp) |
|
14462
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2782 { |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2783 eventp->bKeyDown = TRUE; |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2784 eventp->wRepeatCount = 1; |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2785 eventp->wVirtualKeyCode = msgp->msg.wParam; |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2786 eventp->wVirtualScanCode = (msgp->msg.lParam & 0xFF0000) >> 16; |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2787 eventp->uChar.AsciiChar = 0; |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2788 eventp->dwControlKeyState = msgp->dwModifiers; |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2789 } |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2790 |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2791 /* Return nonzero if the virtual key is a dead key. */ |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2792 |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2793 static int |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2794 is_dead_key (int wparam) |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2795 { |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2796 unsigned int code = MapVirtualKey (wparam, 2); |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2797 |
|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
2798 /* Windows 95 returns 0x8000, NT returns 0x80000000. */ |
|
14462
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2799 if ((code & 0x8000) || (code & 0x80000000)) |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2800 return 1; |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2801 else |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2802 return 0; |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2803 } |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2804 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2805 /* Read events coming from the W32 shell. |
| 13434 | 2806 This routine is called by the SIGIO handler. |
| 2807 We return as soon as there are no more events to be read. | |
| 2808 | |
| 2809 Events representing keys are stored in buffer BUFP, | |
| 2810 which can hold up to NUMCHARS characters. | |
| 2811 We return the number of characters stored into the buffer, | |
| 2812 thus pretending to be `read'. | |
| 2813 | |
| 2814 EXPECTED is nonzero if the caller knows input is available. | |
| 2815 | |
| 2816 Some of these messages are reposted back to the message queue since the | |
|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
2817 system calls the windows proc directly in a context where we cannot return |
|
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
2818 the data nor can we guarantee the state we are in. So if we dispatch them |
| 13434 | 2819 we will get into an infinite loop. To prevent this from ever happening we |
| 2820 will set a variable to indicate we are in the read_socket call and indicate | |
|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
2821 which message we are processing since the windows proc gets called |
|
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
2822 recursively with different messages by the system. |
| 13434 | 2823 */ |
| 2824 | |
| 2825 int | |
|
16326
a85909645f7a
(w32_read_socket): Delete WAITP arg.
Richard M. Stallman <rms@gnu.org>
parents:
16258
diff
changeset
|
2826 w32_read_socket (sd, bufp, numchars, expected) |
| 13434 | 2827 register int sd; |
| 2828 register struct input_event *bufp; | |
| 2829 register int numchars; | |
| 2830 int expected; | |
| 2831 { | |
| 2832 int count = 0; | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2833 int check_visibility = 0; |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2834 W32Msg msg; |
| 13434 | 2835 struct frame *f; |
| 2836 Lisp_Object part; | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2837 struct w32_display_info *dpyinfo = &one_w32_display_info; |
| 13434 | 2838 |
| 2839 if (interrupt_input_blocked) | |
| 2840 { | |
| 2841 interrupt_input_pending = 1; | |
| 2842 return -1; | |
| 2843 } | |
| 2844 | |
| 2845 interrupt_input_pending = 0; | |
| 2846 BLOCK_INPUT; | |
| 2847 | |
| 2848 /* So people can tell when we have read the available input. */ | |
| 2849 input_signal_count++; | |
| 2850 | |
| 2851 if (numchars <= 0) | |
| 2852 abort (); /* Don't think this happens. */ | |
| 2853 | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2854 while (get_next_msg (&msg, FALSE)) |
| 13434 | 2855 { |
| 2856 switch (msg.msg.message) | |
| 2857 { | |
| 2858 case WM_PAINT: | |
| 2859 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); | |
| 2860 | |
| 2861 if (f) | |
| 2862 { | |
|
21740
92c501ecca49
(w32_read_socket): Don't misinterpret WM_PAINT message
Geoff Voelker <voelker@cs.washington.edu>
parents:
21614
diff
changeset
|
2863 if (msg.rect.right == msg.rect.left || |
|
92c501ecca49
(w32_read_socket): Don't misinterpret WM_PAINT message
Geoff Voelker <voelker@cs.washington.edu>
parents:
21614
diff
changeset
|
2864 msg.rect.bottom == msg.rect.top) |
| 13434 | 2865 { |
|
21740
92c501ecca49
(w32_read_socket): Don't misinterpret WM_PAINT message
Geoff Voelker <voelker@cs.washington.edu>
parents:
21614
diff
changeset
|
2866 /* We may get paint messages even though the client |
|
92c501ecca49
(w32_read_socket): Don't misinterpret WM_PAINT message
Geoff Voelker <voelker@cs.washington.edu>
parents:
21614
diff
changeset
|
2867 area is clipped - these are not expose events. */ |
|
92c501ecca49
(w32_read_socket): Don't misinterpret WM_PAINT message
Geoff Voelker <voelker@cs.washington.edu>
parents:
21614
diff
changeset
|
2868 DebPrint (("clipped frame %04x (%s) got WM_PAINT\n", f, |
|
92c501ecca49
(w32_read_socket): Don't misinterpret WM_PAINT message
Geoff Voelker <voelker@cs.washington.edu>
parents:
21614
diff
changeset
|
2869 XSTRING (f->name)->data)); |
|
92c501ecca49
(w32_read_socket): Don't misinterpret WM_PAINT message
Geoff Voelker <voelker@cs.washington.edu>
parents:
21614
diff
changeset
|
2870 } |
|
92c501ecca49
(w32_read_socket): Don't misinterpret WM_PAINT message
Geoff Voelker <voelker@cs.washington.edu>
parents:
21614
diff
changeset
|
2871 else if (f->async_visible != 1) |
|
92c501ecca49
(w32_read_socket): Don't misinterpret WM_PAINT message
Geoff Voelker <voelker@cs.washington.edu>
parents:
21614
diff
changeset
|
2872 { |
|
92c501ecca49
(w32_read_socket): Don't misinterpret WM_PAINT message
Geoff Voelker <voelker@cs.washington.edu>
parents:
21614
diff
changeset
|
2873 /* Definitely not obscured, so mark as visible. */ |
| 13434 | 2874 f->async_visible = 1; |
| 2875 f->async_iconified = 0; | |
| 2876 SET_FRAME_GARBAGED (f); | |
|
21740
92c501ecca49
(w32_read_socket): Don't misinterpret WM_PAINT message
Geoff Voelker <voelker@cs.washington.edu>
parents:
21614
diff
changeset
|
2877 DebPrint (("frame %04x (%s) reexposed\n", f, |
|
92c501ecca49
(w32_read_socket): Don't misinterpret WM_PAINT message
Geoff Voelker <voelker@cs.washington.edu>
parents:
21614
diff
changeset
|
2878 XSTRING (f->name)->data)); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2879 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2880 /* WM_PAINT serves as MapNotify as well, so report |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2881 visibility changes properly. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2882 if (f->iconified) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2883 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2884 bufp->kind = deiconify_event; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2885 XSETFRAME (bufp->frame_or_window, f); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2886 bufp++; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2887 count++; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2888 numchars--; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2889 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2890 else if (! NILP(Vframe_list) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2891 && ! NILP (XCONS (Vframe_list)->cdr)) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2892 /* Force a redisplay sooner or later to update the |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2893 frame titles in case this is the second frame. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2894 record_asynch_buffer_change (); |
| 13434 | 2895 } |
| 2896 else | |
| 2897 { | |
|
15723
d2cee951f37e
(w32_read_socket): Need to erase background
Karl Heuer <kwzh@gnu.org>
parents:
15651
diff
changeset
|
2898 /* Erase background again for safety. */ |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2899 w32_clear_rect (f, NULL, &msg.rect); |
| 13434 | 2900 dumprectangle (f, |
| 2901 msg.rect.left, | |
| 2902 msg.rect.top, | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2903 msg.rect.right - msg.rect.left, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2904 msg.rect.bottom - msg.rect.top); |
| 13434 | 2905 } |
| 2906 } | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
2907 break; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2908 |
| 13434 | 2909 case WM_KEYDOWN: |
| 2910 case WM_SYSKEYDOWN: | |
| 2911 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); | |
| 2912 | |
| 2913 if (f && !f->iconified) | |
| 2914 { | |
| 2915 if (temp_index == sizeof temp_buffer / sizeof (short)) | |
| 2916 temp_index = 0; | |
| 2917 temp_buffer[temp_index++] = msg.msg.wParam; | |
| 2918 bufp->kind = non_ascii_keystroke; | |
| 2919 bufp->code = msg.msg.wParam; | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2920 bufp->modifiers = w32_kbd_mods_to_emacs (msg.dwModifiers, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2921 msg.msg.wParam); |
| 13434 | 2922 XSETFRAME (bufp->frame_or_window, f); |
| 2923 bufp->timestamp = msg.msg.time; | |
| 2924 bufp++; | |
| 2925 numchars--; | |
| 2926 count++; | |
| 2927 } | |
| 2928 break; | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2929 |
| 13434 | 2930 case WM_SYSCHAR: |
| 2931 case WM_CHAR: | |
| 2932 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); | |
| 2933 | |
| 2934 if (f && !f->iconified) | |
| 2935 { | |
| 2936 if (numchars > 1) | |
| 2937 { | |
|
14462
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2938 int add; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2939 int isdead = 0; |
|
14462
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2940 KEY_EVENT_RECORD key, *keyp = &key; |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2941 |
| 13434 | 2942 if (temp_index == sizeof temp_buffer / sizeof (short)) |
| 2943 temp_index = 0; | |
|
14462
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2944 |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2945 convert_to_key_event (&msg, keyp); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2946 add = key_event (keyp, bufp, &isdead); |
|
15035
a538ad05bce1
(w32_read_socket): Initialize frame_or_window field.
Richard M. Stallman <rms@gnu.org>
parents:
14462
diff
changeset
|
2947 XSETFRAME (bufp->frame_or_window, f); |
|
14462
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2948 if (add == -1) |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2949 { |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2950 /* The key pressed generated two characters, most likely |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2951 an accent character and a key that could not be |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2952 combined with it. Prepend the message on the queue |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2953 again to process the second character (which is |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2954 being held internally in key_event), and process |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2955 the first character now. */ |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2956 prepend_msg (&msg); |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2957 add = 1; |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2958 } |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2959 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2960 if (isdead) |
|
14462
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2961 break; |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2962 |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2963 bufp += add; |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2964 numchars -= add; |
|
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
2965 count += add; |
| 13434 | 2966 } |
| 2967 else | |
| 2968 { | |
| 2969 abort (); | |
| 2970 } | |
| 2971 } | |
| 2972 break; | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2973 |
| 13434 | 2974 case WM_MOUSEMOVE: |
| 2975 if (dpyinfo->grabbed && last_mouse_frame | |
| 2976 && FRAME_LIVE_P (last_mouse_frame)) | |
| 2977 f = last_mouse_frame; | |
| 2978 else | |
| 2979 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); | |
| 2980 | |
| 2981 if (f) | |
| 2982 note_mouse_movement (f, &msg.msg); | |
| 2983 else | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
2984 clear_mouse_face (FRAME_W32_DISPLAY_INFO (f)); |
| 13434 | 2985 |
| 2986 break; | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
2987 |
| 13434 | 2988 case WM_LBUTTONDOWN: |
| 2989 case WM_LBUTTONUP: | |
| 2990 case WM_MBUTTONDOWN: | |
| 2991 case WM_MBUTTONUP: | |
| 2992 case WM_RBUTTONDOWN: | |
| 2993 case WM_RBUTTONUP: | |
| 2994 { | |
| 2995 int button; | |
| 2996 int up; | |
| 2997 | |
| 2998 if (dpyinfo->grabbed && last_mouse_frame | |
| 2999 && FRAME_LIVE_P (last_mouse_frame)) | |
| 3000 f = last_mouse_frame; | |
| 3001 else | |
| 3002 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); | |
| 3003 | |
| 3004 if (f) | |
| 3005 { | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3006 if ((!dpyinfo->w32_focus_frame || f == dpyinfo->w32_focus_frame) |
| 13434 | 3007 && (numchars >= 1)) |
| 3008 { | |
| 3009 construct_mouse_click (bufp, &msg, f); | |
| 3010 bufp++; | |
| 3011 count++; | |
| 3012 numchars--; | |
| 3013 } | |
| 3014 } | |
| 3015 | |
| 3016 parse_button (msg.msg.message, &button, &up); | |
| 3017 | |
| 3018 if (up) | |
| 3019 { | |
| 3020 dpyinfo->grabbed &= ~ (1 << button); | |
| 3021 } | |
| 3022 else | |
| 3023 { | |
| 3024 dpyinfo->grabbed |= (1 << button); | |
| 3025 last_mouse_frame = f; | |
| 3026 } | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3027 break; |
| 13434 | 3028 } |
| 3029 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3030 case WM_MOUSEWHEEL: |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3031 if (dpyinfo->grabbed && last_mouse_frame |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3032 && FRAME_LIVE_P (last_mouse_frame)) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3033 f = last_mouse_frame; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3034 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3035 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3036 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3037 if (f) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3038 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3039 if ((!dpyinfo->w32_focus_frame |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3040 || f == dpyinfo->w32_focus_frame) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3041 && (numchars >= 1)) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3042 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3043 construct_mouse_wheel (bufp, &msg, f); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3044 bufp++; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3045 count++; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3046 numchars--; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3047 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3048 } |
| 13434 | 3049 break; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3050 |
| 21885 | 3051 case WM_DROPFILES: |
| 3052 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); | |
| 3053 | |
| 3054 if (f) | |
| 3055 { | |
| 3056 construct_drag_n_drop (bufp, &msg, f); | |
| 3057 bufp++; | |
| 3058 count++; | |
| 3059 numchars--; | |
| 3060 } | |
| 3061 break; | |
| 3062 | |
| 13434 | 3063 case WM_VSCROLL: |
| 3064 { | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3065 struct scroll_bar *bar = |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3066 x_window_to_scroll_bar ((HWND)msg.msg.lParam); |
| 13434 | 3067 |
| 3068 if (bar && numchars >= 1) | |
| 3069 { | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
3070 if (x_scroll_bar_handle_click (bar, &msg, bufp)) |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
3071 { |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
3072 bufp++; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
3073 count++; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
3074 numchars--; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
3075 } |
| 13434 | 3076 } |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3077 break; |
| 13434 | 3078 } |
| 3079 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3080 case WM_WINDOWPOSCHANGED: |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3081 case WM_ACTIVATE: |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3082 case WM_ACTIVATEAPP: |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3083 check_visibility = 1; |
| 13434 | 3084 break; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3085 |
| 13434 | 3086 case WM_MOVE: |
| 3087 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); | |
| 3088 | |
| 3089 if (f && !f->async_iconified) | |
| 3090 { | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3091 int x, y; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3092 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3093 x_real_positions (f, &x, &y); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3094 f->output_data.w32->left_pos = x; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3095 f->output_data.w32->top_pos = y; |
| 13434 | 3096 } |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3097 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3098 check_visibility = 1; |
| 13434 | 3099 break; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3100 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3101 case WM_SHOWWINDOW: |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3102 /* If window has been obscured or exposed by another window |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3103 being maximised or minimised/restored, then recheck |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3104 visibility of all frames. Direct changes to our own |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3105 windows get handled by WM_SIZE. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3106 #if 0 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3107 if (msg.msg.lParam != 0) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3108 check_visibility = 1; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3109 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3110 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3111 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3112 f->async_visible = msg.msg.wParam; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3113 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3114 #endif |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3115 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3116 check_visibility = 1; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3117 break; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3118 |
| 13434 | 3119 case WM_SIZE: |
| 3120 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); | |
| 3121 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3122 /* Inform lisp of whether frame has been iconified etc. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3123 if (f) |
| 13434 | 3124 { |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3125 switch (msg.msg.wParam) |
| 13434 | 3126 { |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3127 case SIZE_MINIMIZED: |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3128 f->async_visible = 0; |
| 13434 | 3129 f->async_iconified = 1; |
| 3130 | |
| 3131 bufp->kind = iconify_event; | |
| 3132 XSETFRAME (bufp->frame_or_window, f); | |
| 3133 bufp++; | |
| 3134 count++; | |
| 3135 numchars--; | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3136 break; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3137 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3138 case SIZE_MAXIMIZED: |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3139 case SIZE_RESTORED: |
| 13434 | 3140 f->async_visible = 1; |
| 3141 f->async_iconified = 0; | |
| 3142 | |
| 3143 /* wait_reading_process_input will notice this and update | |
| 3144 the frame's display structures. */ | |
| 3145 SET_FRAME_GARBAGED (f); | |
| 3146 | |
| 3147 if (f->iconified) | |
| 3148 { | |
| 3149 bufp->kind = deiconify_event; | |
| 3150 XSETFRAME (bufp->frame_or_window, f); | |
| 3151 bufp++; | |
| 3152 count++; | |
| 3153 numchars--; | |
| 3154 } | |
| 3155 else | |
| 3156 /* Force a redisplay sooner or later | |
| 3157 to update the frame titles | |
| 3158 in case this is the second frame. */ | |
| 3159 record_asynch_buffer_change (); | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3160 break; |
| 13434 | 3161 } |
| 3162 } | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3163 |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3164 if (f && !f->async_iconified && msg.msg.wParam != SIZE_MINIMIZED) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3165 { |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3166 RECT rect; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3167 int rows; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3168 int columns; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3169 int width; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3170 int height; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3171 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3172 GetClientRect(msg.msg.hwnd, &rect); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3173 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3174 height = rect.bottom - rect.top; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3175 width = rect.right - rect.left; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3176 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3177 rows = PIXEL_TO_CHAR_HEIGHT (f, height); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3178 columns = PIXEL_TO_CHAR_WIDTH (f, width); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3179 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3180 /* TODO: Clip size to the screen dimensions. */ |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3181 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3182 /* Even if the number of character rows and columns has |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3183 not changed, the font size may have changed, so we need |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3184 to check the pixel dimensions as well. */ |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3185 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3186 if (columns != f->width |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3187 || rows != f->height |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3188 || width != f->output_data.w32->pixel_width |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3189 || height != f->output_data.w32->pixel_height) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3190 { |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3191 /* I had set this to 0, 0 - I am not sure why?? */ |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3192 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3193 change_frame_size (f, rows, columns, 0, 1); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3194 SET_FRAME_GARBAGED (f); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3195 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3196 f->output_data.w32->pixel_width = width; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3197 f->output_data.w32->pixel_height = height; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3198 f->output_data.w32->win_gravity = NorthWestGravity; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3199 } |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3200 } |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3201 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3202 check_visibility = 1; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3203 break; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3204 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3205 case WM_SETFOCUS: |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3206 case WM_KILLFOCUS: |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3207 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); |
| 13434 | 3208 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3209 if (msg.msg.message == WM_SETFOCUS) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3210 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3211 x_new_focus_frame (dpyinfo, f); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3212 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3213 else if (f == dpyinfo->w32_focus_frame) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3214 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3215 x_new_focus_frame (dpyinfo, 0); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3216 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3217 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3218 check_visibility = 1; |
| 13434 | 3219 break; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3220 |
| 13434 | 3221 case WM_CLOSE: |
| 3222 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); | |
| 3223 | |
| 3224 if (f) | |
| 3225 { | |
| 3226 if (numchars == 0) | |
| 3227 abort (); | |
| 3228 | |
| 3229 bufp->kind = delete_window_event; | |
| 3230 XSETFRAME (bufp->frame_or_window, f); | |
| 3231 bufp++; | |
| 3232 count++; | |
| 3233 numchars--; | |
| 3234 } | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3235 break; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3236 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3237 case WM_INITMENU: |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3238 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); |
| 13434 | 3239 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3240 if (f) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3241 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3242 if (numchars == 0) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3243 abort (); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3244 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3245 bufp->kind = menu_bar_activate_event; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3246 XSETFRAME (bufp->frame_or_window, f); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3247 bufp++; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3248 count++; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3249 numchars--; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3250 } |
| 13434 | 3251 break; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3252 |
| 13434 | 3253 case WM_COMMAND: |
| 3254 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); | |
|
21740
92c501ecca49
(w32_read_socket): Don't misinterpret WM_PAINT message
Geoff Voelker <voelker@cs.washington.edu>
parents:
21614
diff
changeset
|
3255 |
| 13434 | 3256 if (f) |
| 3257 { | |
|
21740
92c501ecca49
(w32_read_socket): Don't misinterpret WM_PAINT message
Geoff Voelker <voelker@cs.washington.edu>
parents:
21614
diff
changeset
|
3258 extern void menubar_selection_callback (FRAME_PTR f, void * client_data); |
|
92c501ecca49
(w32_read_socket): Don't misinterpret WM_PAINT message
Geoff Voelker <voelker@cs.washington.edu>
parents:
21614
diff
changeset
|
3259 menubar_selection_callback (f, (void *)msg.msg.wParam); |
| 13434 | 3260 } |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3261 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3262 check_visibility = 1; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3263 break; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3264 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3265 case WM_DISPLAYCHANGE: |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3266 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3267 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3268 if (f) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3269 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3270 dpyinfo->width = (short) LOWORD (msg.msg.lParam); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3271 dpyinfo->height = (short) HIWORD (msg.msg.lParam); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3272 dpyinfo->n_cbits = msg.msg.wParam; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3273 DebPrint (("display change: %d %d\n", dpyinfo->width, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3274 dpyinfo->height)); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3275 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3276 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3277 check_visibility = 1; |
| 13434 | 3278 break; |
|
21875
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3279 |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3280 default: |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3281 /* Check for messages registered at runtime. */ |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3282 if (msg.msg.message == msh_mousewheel) |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3283 { |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3284 if (dpyinfo->grabbed && last_mouse_frame |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3285 && FRAME_LIVE_P (last_mouse_frame)) |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3286 f = last_mouse_frame; |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3287 else |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3288 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3289 |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3290 if (f) |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3291 { |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3292 if ((!dpyinfo->w32_focus_frame |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3293 || f == dpyinfo->w32_focus_frame) |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3294 && (numchars >= 1)) |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3295 { |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3296 construct_mouse_wheel (bufp, &msg, f); |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3297 bufp++; |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3298 count++; |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3299 numchars--; |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3300 } |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3301 } |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3302 } |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
3303 break; |
| 13434 | 3304 } |
| 3305 } | |
| 3306 | |
| 3307 /* If the focus was just given to an autoraising frame, | |
| 3308 raise it now. */ | |
| 3309 /* ??? This ought to be able to handle more than one such frame. */ | |
| 3310 if (pending_autoraise_frame) | |
| 3311 { | |
| 3312 x_raise_frame (pending_autoraise_frame); | |
| 3313 pending_autoraise_frame = 0; | |
| 3314 } | |
| 3315 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3316 /* Check which frames are still visisble, if we have enqueued any user |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3317 events or been notified of events that may affect visibility. We |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3318 do this here because there doesn't seem to be any direct |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3319 notification from Windows that the visibility of a window has |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3320 changed (at least, not in all cases). */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3321 if (count > 0 || check_visibility) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3322 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3323 Lisp_Object tail, frame; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3324 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3325 FOR_EACH_FRAME (tail, frame) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3326 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3327 FRAME_PTR f = XFRAME (frame); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3328 /* Check "visible" frames and mark each as obscured or not. |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3329 Note that async_visible is nonzero for unobscured and |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3330 obscured frames, but zero for hidden and iconified frames. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3331 if (FRAME_W32_P (f) && f->async_visible) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3332 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3333 RECT clipbox; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3334 HDC hdc = get_frame_dc (f); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3335 GetClipBox (hdc, &clipbox); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3336 release_frame_dc (f, hdc); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3337 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3338 if (clipbox.right == clipbox.left |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3339 || clipbox.bottom == clipbox.top) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3340 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3341 /* Frame has become completely obscured so mark as |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3342 such (we do this by setting async_visible to 2 so |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3343 that FRAME_VISIBLE_P is still true, but redisplay |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3344 will skip it). */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3345 f->async_visible = 2; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3346 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3347 if (!FRAME_OBSCURED_P (f)) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3348 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3349 DebPrint (("frame %04x (%s) obscured\n", f, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3350 XSTRING (f->name)->data)); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3351 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3352 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3353 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3354 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3355 /* Frame is not obscured, so mark it as such. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3356 f->async_visible = 1; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3357 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3358 if (FRAME_OBSCURED_P (f)) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3359 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3360 SET_FRAME_GARBAGED (f); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3361 DebPrint (("frame %04x (%s) reexposed\n", f, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3362 XSTRING (f->name)->data)); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3363 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3364 /* Force a redisplay sooner or later. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3365 record_asynch_buffer_change (); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3366 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3367 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3368 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3369 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3370 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3371 |
| 13434 | 3372 UNBLOCK_INPUT; |
| 3373 return count; | |
| 3374 } | |
| 3375 | |
| 3376 /* Drawing the cursor. */ | |
| 3377 | |
| 3378 | |
| 3379 /* Draw a hollow box cursor. Don't change the inside of the box. */ | |
| 3380 | |
| 3381 static void | |
| 3382 x_draw_box (f) | |
| 3383 struct frame *f; | |
| 3384 { | |
| 3385 RECT rect; | |
| 3386 HBRUSH hb; | |
| 3387 HDC hdc; | |
| 3388 | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
3389 hdc = get_frame_dc (f); |
| 13434 | 3390 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3391 hb = CreateSolidBrush (f->output_data.w32->cursor_pixel); |
| 13434 | 3392 |
| 3393 rect.left = CHAR_TO_PIXEL_COL (f, curs_x); | |
| 3394 rect.top = CHAR_TO_PIXEL_ROW (f, curs_y); | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3395 rect.right = rect.left + FONT_WIDTH (f->output_data.w32->font); |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3396 rect.bottom = rect.top + f->output_data.w32->line_height; |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
3397 |
| 13434 | 3398 FrameRect (hdc, &rect, hb); |
| 3399 DeleteObject (hb); | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
3400 |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
3401 release_frame_dc (f, hdc); |
| 13434 | 3402 } |
| 3403 | |
| 3404 /* Clear the cursor of frame F to background color, | |
| 3405 and mark the cursor as not shown. | |
| 3406 This is used when the text where the cursor is | |
| 3407 is about to be rewritten. */ | |
| 3408 | |
| 3409 static void | |
| 3410 clear_cursor (f) | |
| 3411 struct frame *f; | |
| 3412 { | |
| 3413 if (! FRAME_VISIBLE_P (f) | |
| 3414 || f->phys_cursor_x < 0) | |
| 3415 return; | |
| 3416 | |
| 3417 x_display_cursor (f, 0); | |
| 3418 f->phys_cursor_x = -1; | |
| 3419 } | |
| 3420 | |
| 3421 /* Redraw the glyph at ROW, COLUMN on frame F, in the style | |
| 3422 HIGHLIGHT. HIGHLIGHT is as defined for dumpglyphs. Return the | |
| 3423 glyph drawn. */ | |
| 3424 | |
| 3425 static void | |
| 3426 x_draw_single_glyph (f, row, column, glyph, highlight) | |
| 3427 struct frame *f; | |
| 3428 int row, column; | |
| 3429 GLYPH glyph; | |
| 3430 int highlight; | |
| 3431 { | |
| 3432 dumpglyphs (f, | |
| 3433 CHAR_TO_PIXEL_COL (f, column), | |
| 3434 CHAR_TO_PIXEL_ROW (f, row), | |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3435 &glyph, 1, highlight, 0, NULL); |
| 13434 | 3436 } |
| 3437 | |
| 3438 static void | |
| 3439 x_display_bar_cursor (f, on) | |
| 3440 struct frame *f; | |
| 3441 int on; | |
| 3442 { | |
| 3443 struct frame_glyphs *current_glyphs = FRAME_CURRENT_GLYPHS (f); | |
| 3444 | |
| 3445 /* This is pointless on invisible frames, and dangerous on garbaged | |
| 3446 frames; in the latter case, the frame may be in the midst of | |
| 3447 changing its size, and curs_x and curs_y may be off the frame. */ | |
| 3448 if (! FRAME_VISIBLE_P (f) || FRAME_GARBAGED_P (f)) | |
| 3449 return; | |
| 3450 | |
| 3451 if (! on && f->phys_cursor_x < 0) | |
| 3452 return; | |
| 3453 | |
| 3454 /* If there is anything wrong with the current cursor state, remove it. */ | |
| 3455 if (f->phys_cursor_x >= 0 | |
| 3456 && (!on | |
| 3457 || f->phys_cursor_x != curs_x | |
| 3458 || f->phys_cursor_y != curs_y | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3459 || f->output_data.w32->current_cursor != bar_cursor)) |
| 13434 | 3460 { |
| 3461 /* Erase the cursor by redrawing the character underneath it. */ | |
| 3462 x_draw_single_glyph (f, f->phys_cursor_y, f->phys_cursor_x, | |
| 3463 f->phys_cursor_glyph, | |
| 3464 current_glyphs->highlight[f->phys_cursor_y]); | |
| 3465 f->phys_cursor_x = -1; | |
| 3466 } | |
| 3467 | |
| 3468 /* If we now need a cursor in the new place or in the new form, do it so. */ | |
| 3469 if (on | |
| 3470 && (f->phys_cursor_x < 0 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3471 || (f->output_data.w32->current_cursor != bar_cursor))) |
| 13434 | 3472 { |
| 3473 f->phys_cursor_glyph | |
| 3474 = ((current_glyphs->enable[curs_y] | |
| 3475 && curs_x < current_glyphs->used[curs_y]) | |
| 3476 ? current_glyphs->glyphs[curs_y][curs_x] | |
| 3477 : SPACEGLYPH); | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3478 w32_fill_area (f, NULL, f->output_data.w32->cursor_pixel, |
| 13434 | 3479 CHAR_TO_PIXEL_COL (f, curs_x), |
| 3480 CHAR_TO_PIXEL_ROW (f, curs_y), | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3481 max (f->output_data.w32->cursor_width, 1), |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3482 f->output_data.w32->line_height); |
| 13434 | 3483 |
| 3484 f->phys_cursor_x = curs_x; | |
| 3485 f->phys_cursor_y = curs_y; | |
| 3486 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3487 f->output_data.w32->current_cursor = bar_cursor; |
| 13434 | 3488 } |
| 3489 } | |
| 3490 | |
| 3491 | |
| 3492 /* Turn the displayed cursor of frame F on or off according to ON. | |
| 3493 If ON is nonzero, where to put the cursor is specified | |
| 3494 by F->cursor_x and F->cursor_y. */ | |
| 3495 | |
| 3496 static void | |
| 3497 x_display_box_cursor (f, on) | |
| 3498 struct frame *f; | |
| 3499 int on; | |
| 3500 { | |
| 3501 struct frame_glyphs *current_glyphs = FRAME_CURRENT_GLYPHS (f); | |
| 3502 | |
| 3503 /* This is pointless on invisible frames, and dangerous on garbaged | |
| 3504 frames; in the latter case, the frame may be in the midst of | |
| 3505 changing its size, and curs_x and curs_y may be off the frame. */ | |
| 3506 if (! FRAME_VISIBLE_P (f) || FRAME_GARBAGED_P (f)) | |
| 3507 return; | |
| 3508 | |
| 3509 /* If cursor is off and we want it off, return quickly. */ | |
| 3510 if (!on && f->phys_cursor_x < 0) | |
| 3511 return; | |
| 3512 | |
| 3513 /* If cursor is currently being shown and we don't want it to be | |
| 3514 or it is in the wrong place, | |
| 3515 or we want a hollow box and it's not so, (pout!) | |
| 3516 erase it. */ | |
| 3517 if (f->phys_cursor_x >= 0 | |
| 3518 && (!on | |
| 3519 || f->phys_cursor_x != curs_x | |
| 3520 || f->phys_cursor_y != curs_y | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3521 || (f->output_data.w32->current_cursor != hollow_box_cursor |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3522 && (f != FRAME_W32_DISPLAY_INFO (f)->w32_highlight_frame)))) |
| 13434 | 3523 { |
| 3524 int mouse_face_here = 0; | |
| 3525 struct frame_glyphs *active_glyphs = FRAME_CURRENT_GLYPHS (f); | |
| 3526 | |
| 3527 /* If the cursor is in the mouse face area, redisplay that when | |
| 3528 we clear the cursor. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3529 if (f == FRAME_W32_DISPLAY_INFO (f)->mouse_face_mouse_frame |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3530 && (f->phys_cursor_y > FRAME_W32_DISPLAY_INFO (f)->mouse_face_beg_row |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3531 || (f->phys_cursor_y == FRAME_W32_DISPLAY_INFO (f)->mouse_face_beg_row |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3532 && f->phys_cursor_x >= FRAME_W32_DISPLAY_INFO (f)->mouse_face_beg_col)) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3533 && (f->phys_cursor_y < FRAME_W32_DISPLAY_INFO (f)->mouse_face_end_row |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3534 || (f->phys_cursor_y == FRAME_W32_DISPLAY_INFO (f)->mouse_face_end_row |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3535 && f->phys_cursor_x < FRAME_W32_DISPLAY_INFO (f)->mouse_face_end_col)) |
| 13434 | 3536 /* Don't redraw the cursor's spot in mouse face |
| 3537 if it is at the end of a line (on a newline). | |
| 3538 The cursor appears there, but mouse highlighting does not. */ | |
| 3539 && active_glyphs->used[f->phys_cursor_y] > f->phys_cursor_x) | |
| 3540 mouse_face_here = 1; | |
| 3541 | |
| 3542 /* If the font is not as tall as a whole line, | |
| 3543 we must explicitly clear the line's whole height. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3544 if (FONT_HEIGHT (f->output_data.w32->font) != f->output_data.w32->line_height) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3545 w32_clear_area (f, NULL, |
| 13434 | 3546 CHAR_TO_PIXEL_COL (f, f->phys_cursor_x), |
| 3547 CHAR_TO_PIXEL_ROW (f, f->phys_cursor_y), | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3548 FONT_WIDTH (f->output_data.w32->font), |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3549 f->output_data.w32->line_height); |
| 13434 | 3550 /* Erase the cursor by redrawing the character underneath it. */ |
| 3551 x_draw_single_glyph (f, f->phys_cursor_y, f->phys_cursor_x, | |
| 3552 f->phys_cursor_glyph, | |
| 3553 (mouse_face_here | |
| 3554 ? 3 | |
| 3555 : current_glyphs->highlight[f->phys_cursor_y])); | |
| 3556 f->phys_cursor_x = -1; | |
| 3557 } | |
| 3558 | |
| 3559 /* If we want to show a cursor, | |
| 3560 or we want a box cursor and it's not so, | |
| 3561 write it in the right place. */ | |
| 3562 if (on | |
| 3563 && (f->phys_cursor_x < 0 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3564 || (f->output_data.w32->current_cursor != filled_box_cursor |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3565 && f == FRAME_W32_DISPLAY_INFO (f)->w32_highlight_frame))) |
| 13434 | 3566 { |
| 3567 f->phys_cursor_glyph | |
| 3568 = ((current_glyphs->enable[curs_y] | |
| 3569 && curs_x < current_glyphs->used[curs_y]) | |
| 3570 ? current_glyphs->glyphs[curs_y][curs_x] | |
| 3571 : SPACEGLYPH); | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3572 if (f != FRAME_W32_DISPLAY_INFO (f)->w32_highlight_frame) |
| 13434 | 3573 { |
| 3574 x_draw_box (f); | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3575 f->output_data.w32->current_cursor = hollow_box_cursor; |
| 13434 | 3576 } |
| 3577 else | |
| 3578 { | |
| 3579 x_draw_single_glyph (f, curs_y, curs_x, | |
| 3580 f->phys_cursor_glyph, 2); | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3581 f->output_data.w32->current_cursor = filled_box_cursor; |
| 13434 | 3582 } |
| 3583 | |
| 3584 f->phys_cursor_x = curs_x; | |
| 3585 f->phys_cursor_y = curs_y; | |
| 3586 } | |
| 3587 } | |
| 3588 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3589 /* Display the cursor on frame F, or clear it, according to ON. |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3590 Use the position specified by curs_x and curs_y |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3591 if we are doing an update of frame F now. |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3592 Otherwise use the position in the FRAME_CURSOR_X and FRAME_CURSOR_Y fields |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3593 of F. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3594 |
| 13434 | 3595 x_display_cursor (f, on) |
| 3596 struct frame *f; | |
| 3597 int on; | |
| 3598 { | |
| 3599 BLOCK_INPUT; | |
| 3600 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3601 /* If we're not updating, then we want to use the current frame's |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3602 cursor position, not our local idea of where the cursor ought to be. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3603 if (f != updating_frame) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3604 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3605 curs_x = FRAME_CURSOR_X (f); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3606 curs_y = FRAME_CURSOR_Y (f); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3607 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3608 |
| 13434 | 3609 if (FRAME_DESIRED_CURSOR (f) == filled_box_cursor) |
| 3610 x_display_box_cursor (f, on); | |
| 3611 else if (FRAME_DESIRED_CURSOR (f) == bar_cursor) | |
| 3612 x_display_bar_cursor (f, on); | |
| 3613 else | |
| 3614 /* Those are the only two we have implemented! */ | |
| 3615 abort (); | |
| 3616 | |
| 3617 UNBLOCK_INPUT; | |
| 3618 } | |
| 3619 | |
| 3620 /* Changing the font of the frame. */ | |
| 3621 | |
| 3622 /* Give frame F the font named FONTNAME as its default font, and | |
| 3623 return the full name of that font. FONTNAME may be a wildcard | |
| 3624 pattern; in that case, we choose some font that fits the pattern. | |
| 3625 The return value shows which font we chose. */ | |
| 3626 | |
| 3627 Lisp_Object | |
| 3628 x_new_font (f, fontname) | |
| 3629 struct frame *f; | |
| 3630 register char *fontname; | |
| 3631 { | |
| 3632 int already_loaded; | |
| 3633 int n_matching_fonts; | |
| 3634 XFontStruct *font_info; | |
| 3635 char new_font_name[101]; | |
| 3636 | |
| 3637 /* Get a font which matches this name */ | |
| 3638 { | |
| 3639 LOGFONT lf; | |
| 3640 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3641 if (!x_to_w32_font(fontname, &lf) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3642 || !w32_to_x_font(&lf, new_font_name, 100)) |
| 13434 | 3643 { |
| 3644 return Qnil; | |
| 3645 } | |
| 3646 } | |
| 3647 | |
| 3648 /* See if we've already loaded a matching font. */ | |
| 3649 already_loaded = -1; | |
| 3650 | |
| 3651 { | |
| 3652 int i; | |
| 3653 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3654 for (i = 0; i < FRAME_W32_DISPLAY_INFO (f)->n_fonts; i++) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3655 if (!strcmp (FRAME_W32_DISPLAY_INFO (f)->font_table[i].name, new_font_name)) |
| 13434 | 3656 { |
| 3657 already_loaded = i; | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3658 fontname = FRAME_W32_DISPLAY_INFO (f)->font_table[i].name; |
| 13434 | 3659 break; |
| 3660 } | |
| 3661 } | |
| 3662 | |
| 3663 /* If we have, just return it from the table. */ | |
| 3664 if (already_loaded >= 0) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3665 f->output_data.w32->font = FRAME_W32_DISPLAY_INFO (f)->font_table[already_loaded].font; |
| 13434 | 3666 /* Otherwise, load the font and add it to the table. */ |
| 3667 else | |
| 3668 { | |
| 3669 XFontStruct *font; | |
| 3670 int n_fonts; | |
| 3671 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3672 font = w32_load_font(FRAME_W32_DISPLAY_INFO (f), fontname); |
| 13434 | 3673 |
| 3674 if (! font) | |
| 3675 { | |
| 3676 return Qnil; | |
| 3677 } | |
| 3678 | |
| 3679 /* Do we need to create the table? */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3680 if (FRAME_W32_DISPLAY_INFO (f)->font_table_size == 0) |
| 13434 | 3681 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3682 FRAME_W32_DISPLAY_INFO (f)->font_table_size = 16; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3683 FRAME_W32_DISPLAY_INFO (f)->font_table |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3684 = (struct font_info *) xmalloc (FRAME_W32_DISPLAY_INFO (f)->font_table_size |
| 13434 | 3685 * sizeof (struct font_info)); |
| 3686 } | |
| 3687 /* Do we need to grow the table? */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3688 else if (FRAME_W32_DISPLAY_INFO (f)->n_fonts |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3689 >= FRAME_W32_DISPLAY_INFO (f)->font_table_size) |
| 13434 | 3690 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3691 FRAME_W32_DISPLAY_INFO (f)->font_table_size *= 2; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3692 FRAME_W32_DISPLAY_INFO (f)->font_table |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3693 = (struct font_info *) xrealloc (FRAME_W32_DISPLAY_INFO (f)->font_table, |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3694 (FRAME_W32_DISPLAY_INFO (f)->font_table_size |
| 13434 | 3695 * sizeof (struct font_info))); |
| 3696 } | |
| 3697 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3698 n_fonts = FRAME_W32_DISPLAY_INFO (f)->n_fonts; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3699 FRAME_W32_DISPLAY_INFO (f)->font_table[n_fonts].name = (char *) xmalloc (strlen (fontname) + 1); |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3700 bcopy (fontname, FRAME_W32_DISPLAY_INFO (f)->font_table[n_fonts].name, strlen (fontname) + 1); |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3701 f->output_data.w32->font = FRAME_W32_DISPLAY_INFO (f)->font_table[n_fonts].font = font; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3702 FRAME_W32_DISPLAY_INFO (f)->n_fonts++; |
| 13434 | 3703 } |
| 3704 | |
| 3705 /* Compute the scroll bar width in character columns. */ | |
| 3706 if (f->scroll_bar_pixel_width > 0) | |
| 3707 { | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3708 int wid = FONT_WIDTH (f->output_data.w32->font); |
| 13434 | 3709 f->scroll_bar_cols = (f->scroll_bar_pixel_width + wid-1) / wid; |
| 3710 } | |
| 3711 else | |
| 3712 f->scroll_bar_cols = 2; | |
| 3713 | |
| 3714 /* Now make the frame display the given font. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3715 if (FRAME_W32_WINDOW (f) != 0) |
| 13434 | 3716 { |
| 3717 frame_update_line_height (f); | |
| 3718 x_set_window_size (f, 0, f->width, f->height); | |
| 3719 } | |
| 3720 else | |
| 3721 /* If we are setting a new frame's font for the first time, | |
| 3722 there are no faces yet, so this font's height is the line height. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3723 f->output_data.w32->line_height = FONT_HEIGHT (f->output_data.w32->font); |
| 13434 | 3724 |
| 3725 { | |
| 3726 Lisp_Object lispy_name; | |
| 3727 | |
| 3728 lispy_name = build_string (fontname); | |
| 3729 | |
| 3730 return lispy_name; | |
| 3731 } | |
| 3732 } | |
| 3733 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3734 /* Calculate the absolute position in frame F |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3735 from its current recorded position values and gravity. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3736 |
| 13434 | 3737 x_calc_absolute_position (f) |
| 3738 struct frame *f; | |
| 3739 { | |
| 3740 Window win, child; | |
| 3741 POINT pt; | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3742 int flags = f->output_data.w32->size_hint_flags; |
| 13434 | 3743 |
| 3744 pt.x = pt.y = 0; | |
| 3745 | |
| 3746 /* Find the position of the outside upper-left corner of | |
| 3747 the inner window, with respect to the outer window. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3748 if (f->output_data.w32->parent_desc != FRAME_W32_DISPLAY_INFO (f)->root_window) |
| 13434 | 3749 { |
| 3750 BLOCK_INPUT; | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3751 MapWindowPoints (FRAME_W32_WINDOW (f), |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3752 f->output_data.w32->parent_desc, |
| 13434 | 3753 &pt, 1); |
| 3754 UNBLOCK_INPUT; | |
| 3755 } | |
| 3756 | |
| 3757 { | |
| 3758 RECT rt; | |
| 3759 rt.left = rt.right = rt.top = rt.bottom = 0; | |
| 3760 | |
| 3761 BLOCK_INPUT; | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3762 AdjustWindowRect(&rt, f->output_data.w32->dwStyle, |
|
14351
fb2ce4ebc871
ubackout 1.3 and 1.4
Geoff Voelker <voelker@cs.washington.edu>
parents:
14248
diff
changeset
|
3763 FRAME_EXTERNAL_MENU_BAR (f)); |
| 13434 | 3764 UNBLOCK_INPUT; |
| 3765 | |
| 3766 pt.x += (rt.right - rt.left); | |
| 3767 pt.y += (rt.bottom - rt.top); | |
| 3768 } | |
| 3769 | |
| 3770 /* Treat negative positions as relative to the leftmost bottommost | |
| 3771 position that fits on the screen. */ | |
| 3772 if (flags & XNegative) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3773 f->output_data.w32->left_pos = (FRAME_W32_DISPLAY_INFO (f)->width |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3774 - 2 * f->output_data.w32->border_width - pt.x |
| 13434 | 3775 - PIXEL_WIDTH (f) |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3776 + f->output_data.w32->left_pos); |
| 13434 | 3777 |
| 3778 if (flags & YNegative) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3779 f->output_data.w32->top_pos = (FRAME_W32_DISPLAY_INFO (f)->height |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3780 - 2 * f->output_data.w32->border_width - pt.y |
| 13434 | 3781 - PIXEL_HEIGHT (f) |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3782 + f->output_data.w32->top_pos); |
| 13434 | 3783 /* The left_pos and top_pos |
| 3784 are now relative to the top and left screen edges, | |
| 3785 so the flags should correspond. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3786 f->output_data.w32->size_hint_flags &= ~ (XNegative | YNegative); |
| 13434 | 3787 } |
| 3788 | |
| 3789 /* CHANGE_GRAVITY is 1 when calling from Fset_frame_position, | |
| 3790 to really change the position, and 0 when calling from | |
| 3791 x_make_frame_visible (in that case, XOFF and YOFF are the current | |
| 3792 position values). It is -1 when calling from x_set_frame_parameters, | |
| 3793 which means, do adjust for borders but don't change the gravity. */ | |
| 3794 | |
| 3795 x_set_offset (f, xoff, yoff, change_gravity) | |
| 3796 struct frame *f; | |
| 3797 register int xoff, yoff; | |
| 3798 int change_gravity; | |
| 3799 { | |
| 3800 int modified_top, modified_left; | |
| 3801 | |
| 3802 if (change_gravity > 0) | |
| 3803 { | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3804 f->output_data.w32->top_pos = yoff; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3805 f->output_data.w32->left_pos = xoff; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3806 f->output_data.w32->size_hint_flags &= ~ (XNegative | YNegative); |
| 13434 | 3807 if (xoff < 0) |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3808 f->output_data.w32->size_hint_flags |= XNegative; |
| 13434 | 3809 if (yoff < 0) |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3810 f->output_data.w32->size_hint_flags |= YNegative; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3811 f->output_data.w32->win_gravity = NorthWestGravity; |
| 13434 | 3812 } |
| 3813 x_calc_absolute_position (f); | |
| 3814 | |
| 3815 BLOCK_INPUT; | |
| 3816 x_wm_set_size_hint (f, (long) 0, 0); | |
| 3817 | |
| 3818 /* It is a mystery why we need to add the border_width here | |
| 3819 when the frame is already visible, but experiment says we do. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3820 modified_left = f->output_data.w32->left_pos; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3821 modified_top = f->output_data.w32->top_pos; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3822 #ifndef HAVE_NTGUI |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3823 /* Do not add in border widths under W32. */ |
| 13434 | 3824 if (change_gravity != 0) |
| 3825 { | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3826 modified_left += f->output_data.w32->border_width; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3827 modified_top += f->output_data.w32->border_width; |
| 13434 | 3828 } |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3829 #endif |
| 13434 | 3830 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3831 my_set_window_pos (FRAME_W32_WINDOW (f), |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
3832 NULL, |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
3833 modified_left, modified_top, |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
3834 0,0, |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3835 SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE); |
| 13434 | 3836 UNBLOCK_INPUT; |
| 3837 } | |
| 3838 | |
| 3839 /* Call this to change the size of frame F's x-window. | |
| 3840 If CHANGE_GRAVITY is 1, we change to top-left-corner window gravity | |
| 3841 for this size change and subsequent size changes. | |
| 3842 Otherwise we leave the window gravity unchanged. */ | |
| 3843 | |
| 3844 x_set_window_size (f, change_gravity, cols, rows) | |
| 3845 struct frame *f; | |
| 3846 int change_gravity; | |
| 3847 int cols, rows; | |
| 3848 { | |
| 3849 int pixelwidth, pixelheight; | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3850 Lisp_Object window; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3851 struct w32_display_info *dpyinfo = &one_w32_display_info; |
| 13434 | 3852 |
| 3853 BLOCK_INPUT; | |
| 3854 | |
| 3855 check_frame_size (f, &rows, &cols); | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3856 f->output_data.w32->vertical_scroll_bar_extra |
| 13434 | 3857 = (!FRAME_HAS_VERTICAL_SCROLL_BARS (f) |
| 3858 ? 0 | |
| 3859 : FRAME_SCROLL_BAR_PIXEL_WIDTH (f) > 0 | |
| 3860 ? FRAME_SCROLL_BAR_PIXEL_WIDTH (f) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3861 : (FRAME_SCROLL_BAR_COLS (f) * FONT_WIDTH (f->output_data.w32->font))); |
| 13434 | 3862 pixelwidth = CHAR_TO_PIXEL_WIDTH (f, cols); |
| 3863 pixelheight = CHAR_TO_PIXEL_HEIGHT (f, rows); | |
| 3864 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3865 f->output_data.w32->win_gravity = NorthWestGravity; |
| 13434 | 3866 x_wm_set_size_hint (f, (long) 0, 0); |
| 3867 | |
| 3868 { | |
| 3869 RECT rect; | |
| 3870 | |
| 3871 rect.left = rect.top = 0; | |
| 3872 rect.right = pixelwidth; | |
| 3873 rect.bottom = pixelheight; | |
| 3874 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3875 AdjustWindowRect(&rect, f->output_data.w32->dwStyle, |
|
14351
fb2ce4ebc871
ubackout 1.3 and 1.4
Geoff Voelker <voelker@cs.washington.edu>
parents:
14248
diff
changeset
|
3876 FRAME_EXTERNAL_MENU_BAR (f)); |
| 13434 | 3877 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3878 my_set_window_pos (FRAME_W32_WINDOW (f), |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
3879 NULL, |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
3880 0, 0, |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3881 rect.right - rect.left, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3882 rect.bottom - rect.top, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3883 SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE); |
| 13434 | 3884 } |
| 3885 | |
| 3886 /* Now, strictly speaking, we can't be sure that this is accurate, | |
| 3887 but the window manager will get around to dealing with the size | |
| 3888 change request eventually, and we'll hear how it went when the | |
| 3889 ConfigureNotify event gets here. | |
| 3890 | |
| 3891 We could just not bother storing any of this information here, | |
| 3892 and let the ConfigureNotify event set everything up, but that | |
| 3893 might be kind of confusing to the lisp code, since size changes | |
| 3894 wouldn't be reported in the frame parameters until some random | |
| 3895 point in the future when the ConfigureNotify event arrives. */ | |
| 3896 change_frame_size (f, rows, cols, 0, 0); | |
| 3897 PIXEL_WIDTH (f) = pixelwidth; | |
| 3898 PIXEL_HEIGHT (f) = pixelheight; | |
| 3899 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3900 /* We've set {FRAME,PIXEL}_{WIDTH,HEIGHT} to the values we hope to |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3901 receive in the ConfigureNotify event; if we get what we asked |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3902 for, then the event won't cause the screen to become garbaged, so |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3903 we have to make sure to do it here. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3904 SET_FRAME_GARBAGED (f); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3905 |
| 13434 | 3906 /* If cursor was outside the new size, mark it as off. */ |
| 3907 if (f->phys_cursor_y >= rows | |
| 3908 || f->phys_cursor_x >= cols) | |
| 3909 { | |
| 3910 f->phys_cursor_x = -1; | |
| 3911 f->phys_cursor_y = -1; | |
| 3912 } | |
| 3913 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3914 /* Clear out any recollection of where the mouse highlighting was, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3915 since it might be in a place that's outside the new frame size. |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3916 Actually checking whether it is outside is a pain in the neck, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3917 so don't try--just let the highlighting be done afresh with new size. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3918 window = dpyinfo->mouse_face_window; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3919 if (! NILP (window) && XFRAME (window) == f) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3920 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3921 dpyinfo->mouse_face_beg_row = dpyinfo->mouse_face_beg_col = -1; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3922 dpyinfo->mouse_face_end_row = dpyinfo->mouse_face_end_col = -1; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3923 dpyinfo->mouse_face_window = Qnil; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3924 } |
| 13434 | 3925 |
| 3926 UNBLOCK_INPUT; | |
| 3927 } | |
| 3928 | |
| 3929 /* Mouse warping. */ | |
| 3930 | |
| 3931 void | |
|
15616
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
3932 x_set_mouse_pixel_position (f, pix_x, pix_y) |
|
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
3933 struct frame *f; |
|
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
3934 int pix_x, pix_y; |
|
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
3935 { |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3936 RECT rect; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3937 POINT pt; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3938 |
|
15616
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
3939 BLOCK_INPUT; |
|
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
3940 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3941 GetClientRect (FRAME_W32_WINDOW (f), &rect); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3942 pt.x = rect.left + pix_x; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3943 pt.y = rect.top + pix_y; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3944 ClientToScreen (FRAME_W32_WINDOW (f), &pt); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3945 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3946 SetCursorPos (pt.x, pt.y); |
|
15616
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
3947 |
|
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
3948 UNBLOCK_INPUT; |
|
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
3949 } |
|
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
3950 |
|
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
3951 void |
| 13434 | 3952 x_set_mouse_position (f, x, y) |
| 3953 struct frame *f; | |
| 3954 int x, y; | |
| 3955 { | |
| 3956 int pix_x, pix_y; | |
| 3957 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3958 pix_x = CHAR_TO_PIXEL_COL (f, x) + FONT_WIDTH (f->output_data.w32->font) / 2; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
3959 pix_y = CHAR_TO_PIXEL_ROW (f, y) + f->output_data.w32->line_height / 2; |
| 13434 | 3960 |
| 3961 if (pix_x < 0) pix_x = 0; | |
| 3962 if (pix_x > PIXEL_WIDTH (f)) pix_x = PIXEL_WIDTH (f); | |
| 3963 | |
| 3964 if (pix_y < 0) pix_y = 0; | |
| 3965 if (pix_y > PIXEL_HEIGHT (f)) pix_y = PIXEL_HEIGHT (f); | |
| 3966 | |
|
15616
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
3967 x_set_mouse_pixel_position (f, pix_x, pix_y); |
| 13434 | 3968 } |
| 3969 | |
| 3970 /* focus shifting, raising and lowering. */ | |
| 3971 | |
| 3972 x_focus_on_frame (f) | |
| 3973 struct frame *f; | |
| 3974 { | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3975 struct w32_display_info *dpyinfo = &one_w32_display_info; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3976 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3977 /* Give input focus to frame. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3978 BLOCK_INPUT; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3979 #if 0 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3980 /* Try not to change its Z-order if possible. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3981 if (x_window_to_frame (dpyinfo, GetForegroundWindow ())) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3982 my_set_focus (f, FRAME_W32_WINDOW (f)); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3983 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3984 #endif |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
3985 my_set_foreground_window (FRAME_W32_WINDOW (f)); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3986 UNBLOCK_INPUT; |
| 13434 | 3987 } |
| 3988 | |
| 3989 x_unfocus_frame (f) | |
| 3990 struct frame *f; | |
| 3991 { | |
| 3992 } | |
| 3993 | |
| 3994 /* Raise frame F. */ | |
| 3995 | |
| 3996 x_raise_frame (f) | |
| 3997 struct frame *f; | |
| 3998 { | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
3999 BLOCK_INPUT; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4000 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4001 /* Strictly speaking, raise-frame should only change the frame's Z |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4002 order, leaving input focus unchanged. This is reasonable behaviour |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4003 on X where the usual policy is point-to-focus. However, this |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4004 behaviour would be very odd on Windows where the usual policy is |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4005 click-to-focus. |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4006 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4007 On X, if the mouse happens to be over the raised frame, it gets |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4008 input focus anyway (so the window with focus will never be |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4009 completely obscured) - if not, then just moving the mouse over it |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4010 is sufficient to give it focus. On Windows, the user must actually |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4011 click on the frame (preferrably the title bar so as not to move |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4012 point), which is more awkward. Also, no other Windows program |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4013 raises a window to the top but leaves another window (possibly now |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4014 completely obscured) with input focus. |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4015 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4016 Because there is a system setting on Windows that allows the user |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4017 to choose the point to focus policy, we make the strict semantics |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4018 optional, but by default we grab focus when raising. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4019 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4020 if (NILP (Vw32_grab_focus_on_raise)) |
| 13434 | 4021 { |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4022 /* The obvious call to my_set_window_pos doesn't work if Emacs is |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4023 not already the foreground application: the frame is raised |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4024 above all other frames belonging to us, but not above the |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4025 current top window. To achieve that, we have to resort to this |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4026 more cumbersome method. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4027 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4028 HDWP handle = BeginDeferWindowPos (2); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4029 if (handle) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4030 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4031 DeferWindowPos (handle, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4032 FRAME_W32_WINDOW (f), |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4033 HWND_TOP, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4034 0, 0, 0, 0, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4035 SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4036 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4037 DeferWindowPos (handle, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4038 GetForegroundWindow (), |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4039 FRAME_W32_WINDOW (f), |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4040 0, 0, 0, 0, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4041 SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4042 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4043 EndDeferWindowPos (handle); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4044 } |
| 13434 | 4045 } |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4046 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4047 { |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
4048 my_set_foreground_window (FRAME_W32_WINDOW (f)); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4049 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4050 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4051 UNBLOCK_INPUT; |
| 13434 | 4052 } |
| 4053 | |
| 4054 /* Lower frame F. */ | |
| 4055 | |
| 4056 x_lower_frame (f) | |
| 4057 struct frame *f; | |
| 4058 { | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4059 BLOCK_INPUT; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4060 my_set_window_pos (FRAME_W32_WINDOW (f), |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4061 HWND_BOTTOM, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4062 0, 0, 0, 0, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4063 SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4064 UNBLOCK_INPUT; |
| 13434 | 4065 } |
| 4066 | |
| 4067 static void | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4068 w32_frame_raise_lower (f, raise) |
| 13434 | 4069 FRAME_PTR f; |
| 4070 int raise; | |
| 4071 { | |
| 4072 if (raise) | |
| 4073 x_raise_frame (f); | |
| 4074 else | |
| 4075 x_lower_frame (f); | |
| 4076 } | |
| 4077 | |
| 4078 /* Change of visibility. */ | |
| 4079 | |
| 4080 /* This tries to wait until the frame is really visible. | |
| 4081 However, if the window manager asks the user where to position | |
| 4082 the frame, this will return before the user finishes doing that. | |
| 4083 The frame will not actually be visible at that time, | |
| 4084 but it will become visible later when the window manager | |
| 4085 finishes with it. */ | |
| 4086 | |
| 4087 x_make_frame_visible (f) | |
| 4088 struct frame *f; | |
| 4089 { | |
| 4090 BLOCK_INPUT; | |
| 4091 | |
| 4092 if (! FRAME_VISIBLE_P (f)) | |
| 4093 { | |
| 4094 /* We test FRAME_GARBAGED_P here to make sure we don't | |
| 4095 call x_set_offset a second time | |
| 4096 if we get to x_make_frame_visible a second time | |
| 4097 before the window gets really visible. */ | |
| 4098 if (! FRAME_ICONIFIED_P (f) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4099 && ! f->output_data.w32->asked_for_visible) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4100 x_set_offset (f, f->output_data.w32->left_pos, f->output_data.w32->top_pos, 0); |
| 13434 | 4101 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4102 f->output_data.w32->asked_for_visible = 1; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4103 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4104 // my_show_window (f, FRAME_W32_WINDOW (f), f->async_iconified ? SW_RESTORE : SW_SHOW); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4105 my_show_window (f, FRAME_W32_WINDOW (f), SW_SHOWNORMAL); |
| 13434 | 4106 } |
| 4107 | |
| 4108 /* Synchronize to ensure Emacs knows the frame is visible | |
| 4109 before we do anything else. We do this loop with input not blocked | |
| 4110 so that incoming events are handled. */ | |
| 4111 { | |
| 4112 Lisp_Object frame; | |
| 4113 int count = input_signal_count; | |
| 4114 | |
| 4115 /* This must come after we set COUNT. */ | |
| 4116 UNBLOCK_INPUT; | |
| 4117 | |
| 4118 XSETFRAME (frame, f); | |
| 4119 | |
| 4120 while (1) | |
| 4121 { | |
| 4122 /* Once we have handled input events, | |
| 4123 we should have received the MapNotify if one is coming. | |
| 4124 So if we have not got it yet, stop looping. | |
| 4125 Some window managers make their own decisions | |
| 4126 about visibility. */ | |
| 4127 if (input_signal_count != count) | |
| 4128 break; | |
| 4129 /* Machines that do polling rather than SIGIO have been observed | |
| 4130 to go into a busy-wait here. So we'll fake an alarm signal | |
| 4131 to let the handler know that there's something to be read. | |
| 4132 We used to raise a real alarm, but it seems that the handler | |
| 4133 isn't always enabled here. This is probably a bug. */ | |
| 4134 if (input_polling_used ()) | |
| 4135 { | |
| 4136 /* It could be confusing if a real alarm arrives while processing | |
| 4137 the fake one. Turn it off and let the handler reset it. */ | |
| 4138 alarm (0); | |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
4139 input_poll_signal (0); |
| 13434 | 4140 } |
| 4141 /* Once we have handled input events, | |
| 4142 we should have received the MapNotify if one is coming. | |
| 4143 So if we have not got it yet, stop looping. | |
| 4144 Some window managers make their own decisions | |
| 4145 about visibility. */ | |
| 4146 if (input_signal_count != count) | |
| 4147 break; | |
| 4148 } | |
| 4149 FRAME_SAMPLE_VISIBILITY (f); | |
| 4150 } | |
| 4151 } | |
| 4152 | |
| 4153 /* Change from mapped state to withdrawn state. */ | |
| 4154 | |
| 4155 /* Make the frame visible (mapped and not iconified). */ | |
| 4156 | |
| 4157 x_make_frame_invisible (f) | |
| 4158 struct frame *f; | |
| 4159 { | |
| 4160 Window window; | |
| 4161 | |
| 4162 /* Don't keep the highlight on an invisible frame. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4163 if (FRAME_W32_DISPLAY_INFO (f)->w32_highlight_frame == f) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4164 FRAME_W32_DISPLAY_INFO (f)->w32_highlight_frame = 0; |
| 13434 | 4165 |
| 4166 BLOCK_INPUT; | |
| 4167 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4168 my_show_window (f, FRAME_W32_WINDOW (f), SW_HIDE); |
| 13434 | 4169 |
| 4170 /* We can't distinguish this from iconification | |
| 4171 just by the event that we get from the server. | |
| 4172 So we can't win using the usual strategy of letting | |
| 4173 FRAME_SAMPLE_VISIBILITY set this. So do it by hand, | |
| 4174 and synchronize with the server to make sure we agree. */ | |
| 4175 f->visible = 0; | |
| 4176 FRAME_ICONIFIED_P (f) = 0; | |
| 4177 f->async_visible = 0; | |
| 4178 f->async_iconified = 0; | |
| 4179 | |
| 4180 UNBLOCK_INPUT; | |
| 4181 } | |
| 4182 | |
| 4183 /* Change window state from mapped to iconified. */ | |
| 4184 | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4185 void |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4186 x_iconify_frame (f) |
| 13434 | 4187 struct frame *f; |
| 4188 { | |
| 4189 int result; | |
| 4190 | |
| 4191 /* Don't keep the highlight on an invisible frame. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4192 if (FRAME_W32_DISPLAY_INFO (f)->w32_highlight_frame == f) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4193 FRAME_W32_DISPLAY_INFO (f)->w32_highlight_frame = 0; |
| 13434 | 4194 |
| 4195 if (f->async_iconified) | |
| 4196 return; | |
| 4197 | |
| 4198 BLOCK_INPUT; | |
| 4199 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4200 /* Simulate the user minimizing the frame. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4201 PostMessage (FRAME_W32_WINDOW (f), WM_SYSCOMMAND, SC_MINIMIZE, 0); |
| 13434 | 4202 |
| 4203 f->async_iconified = 1; | |
| 4204 | |
| 4205 UNBLOCK_INPUT; | |
| 4206 } | |
| 4207 | |
| 4208 /* Destroy the window of frame F. */ | |
| 4209 | |
| 4210 x_destroy_window (f) | |
| 4211 struct frame *f; | |
| 4212 { | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4213 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); |
| 13434 | 4214 |
| 4215 BLOCK_INPUT; | |
| 4216 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4217 my_destroy_window (f, FRAME_W32_WINDOW (f)); |
| 13434 | 4218 free_frame_menubar (f); |
| 4219 free_frame_faces (f); | |
| 4220 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4221 xfree (f->output_data.w32); |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4222 f->output_data.w32 = 0; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4223 if (f == dpyinfo->w32_focus_frame) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4224 dpyinfo->w32_focus_frame = 0; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4225 if (f == dpyinfo->w32_focus_event_frame) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4226 dpyinfo->w32_focus_event_frame = 0; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4227 if (f == dpyinfo->w32_highlight_frame) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4228 dpyinfo->w32_highlight_frame = 0; |
| 13434 | 4229 |
| 4230 dpyinfo->reference_count--; | |
| 4231 | |
| 4232 if (f == dpyinfo->mouse_face_mouse_frame) | |
| 4233 { | |
| 4234 dpyinfo->mouse_face_beg_row | |
| 4235 = dpyinfo->mouse_face_beg_col = -1; | |
| 4236 dpyinfo->mouse_face_end_row | |
| 4237 = dpyinfo->mouse_face_end_col = -1; | |
| 4238 dpyinfo->mouse_face_window = Qnil; | |
| 4239 } | |
| 4240 | |
| 4241 UNBLOCK_INPUT; | |
| 4242 } | |
| 4243 | |
| 4244 /* Setting window manager hints. */ | |
| 4245 | |
| 4246 /* Set the normal size hints for the window manager, for frame F. | |
| 4247 FLAGS is the flags word to use--or 0 meaning preserve the flags | |
| 4248 that the window now has. | |
| 4249 If USER_POSITION is nonzero, we set the USPosition | |
| 4250 flag (this is useful when FLAGS is 0). */ | |
| 4251 | |
| 4252 x_wm_set_size_hint (f, flags, user_position) | |
| 4253 struct frame *f; | |
| 4254 long flags; | |
| 4255 int user_position; | |
| 4256 { | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4257 Window window = FRAME_W32_WINDOW (f); |
| 13434 | 4258 |
| 4259 flexlines = f->height; | |
| 4260 | |
|
14351
fb2ce4ebc871
ubackout 1.3 and 1.4
Geoff Voelker <voelker@cs.washington.edu>
parents:
14248
diff
changeset
|
4261 enter_crit (); |
| 13434 | 4262 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4263 SetWindowLong (window, WND_FONTWIDTH_INDEX, FONT_WIDTH (f->output_data.w32->font)); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4264 SetWindowLong (window, WND_LINEHEIGHT_INDEX, f->output_data.w32->line_height); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4265 SetWindowLong (window, WND_BORDER_INDEX, f->output_data.w32->internal_border_width); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4266 SetWindowLong (window, WND_SCROLLBAR_INDEX, f->output_data.w32->vertical_scroll_bar_extra); |
| 13434 | 4267 |
|
14351
fb2ce4ebc871
ubackout 1.3 and 1.4
Geoff Voelker <voelker@cs.washington.edu>
parents:
14248
diff
changeset
|
4268 leave_crit (); |
| 13434 | 4269 } |
| 4270 | |
| 4271 /* Window manager things */ | |
| 4272 x_wm_set_icon_position (f, icon_x, icon_y) | |
| 4273 struct frame *f; | |
| 4274 int icon_x, icon_y; | |
| 4275 { | |
| 4276 #if 0 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4277 Window window = FRAME_W32_WINDOW (f); |
| 13434 | 4278 |
| 4279 f->display.x->wm_hints.flags |= IconPositionHint; | |
| 4280 f->display.x->wm_hints.icon_x = icon_x; | |
| 4281 f->display.x->wm_hints.icon_y = icon_y; | |
| 4282 | |
| 4283 XSetWMHints (FRAME_X_DISPLAY (f), window, &f->display.x->wm_hints); | |
| 4284 #endif | |
| 4285 } | |
| 4286 | |
| 4287 | |
| 4288 /* Initialization. */ | |
| 4289 | |
| 4290 #ifdef USE_X_TOOLKIT | |
| 4291 static XrmOptionDescRec emacs_options[] = { | |
| 4292 {"-geometry", ".geometry", XrmoptionSepArg, NULL}, | |
| 4293 {"-iconic", ".iconic", XrmoptionNoArg, (XtPointer) "yes"}, | |
| 4294 | |
| 4295 {"-internal-border-width", "*EmacsScreen.internalBorderWidth", | |
| 4296 XrmoptionSepArg, NULL}, | |
| 4297 {"-ib", "*EmacsScreen.internalBorderWidth", XrmoptionSepArg, NULL}, | |
| 4298 | |
| 4299 {"-T", "*EmacsShell.title", XrmoptionSepArg, (XtPointer) NULL}, | |
| 4300 {"-wn", "*EmacsShell.title", XrmoptionSepArg, (XtPointer) NULL}, | |
| 4301 {"-title", "*EmacsShell.title", XrmoptionSepArg, (XtPointer) NULL}, | |
| 4302 {"-iconname", "*EmacsShell.iconName", XrmoptionSepArg, (XtPointer) NULL}, | |
| 4303 {"-in", "*EmacsShell.iconName", XrmoptionSepArg, (XtPointer) NULL}, | |
| 4304 {"-mc", "*pointerColor", XrmoptionSepArg, (XtPointer) NULL}, | |
| 4305 {"-cr", "*cursorColor", XrmoptionSepArg, (XtPointer) NULL} | |
| 4306 }; | |
| 4307 #endif /* USE_X_TOOLKIT */ | |
| 4308 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4309 static int w32_initialized = 0; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4310 |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4311 struct w32_display_info * |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4312 w32_term_init (display_name, xrm_option, resource_name) |
| 13434 | 4313 Lisp_Object display_name; |
| 4314 char *xrm_option; | |
| 4315 char *resource_name; | |
| 4316 { | |
| 4317 Lisp_Object frame; | |
| 4318 char *defaultvalue; | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4319 struct w32_display_info *dpyinfo; |
| 13434 | 4320 HDC hdc; |
|
14351
fb2ce4ebc871
ubackout 1.3 and 1.4
Geoff Voelker <voelker@cs.washington.edu>
parents:
14248
diff
changeset
|
4321 |
| 13434 | 4322 BLOCK_INPUT; |
| 4323 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4324 if (!w32_initialized) |
| 13434 | 4325 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4326 w32_initialize (); |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4327 w32_initialized = 1; |
| 13434 | 4328 } |
| 4329 | |
| 4330 { | |
| 4331 int argc = 0; | |
| 4332 char *argv[3]; | |
| 4333 | |
| 4334 argv[0] = ""; | |
| 4335 argc = 1; | |
| 4336 if (xrm_option) | |
| 4337 { | |
| 4338 argv[argc++] = "-xrm"; | |
| 4339 argv[argc++] = xrm_option; | |
| 4340 } | |
| 4341 } | |
| 4342 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4343 dpyinfo = &one_w32_display_info; |
| 13434 | 4344 |
| 4345 /* Put this display on the chain. */ | |
| 4346 dpyinfo->next = NULL; | |
| 4347 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4348 /* Put it on w32_display_name_list as well, to keep them parallel. */ |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4349 w32_display_name_list = Fcons (Fcons (display_name, Qnil), |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4350 w32_display_name_list); |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4351 dpyinfo->name_list_element = XCONS (w32_display_name_list)->car; |
|
14351
fb2ce4ebc871
ubackout 1.3 and 1.4
Geoff Voelker <voelker@cs.washington.edu>
parents:
14248
diff
changeset
|
4352 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4353 dpyinfo->w32_id_name |
| 13434 | 4354 = (char *) xmalloc (XSTRING (Vinvocation_name)->size |
| 4355 + XSTRING (Vsystem_name)->size | |
| 4356 + 2); | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4357 sprintf (dpyinfo->w32_id_name, "%s@%s", |
| 13434 | 4358 XSTRING (Vinvocation_name)->data, XSTRING (Vsystem_name)->data); |
| 4359 | |
| 4360 #if 0 | |
| 4361 xrdb = x_load_resources (dpyinfo->display, xrm_option, | |
| 4362 resource_name, EMACS_CLASS); | |
| 4363 | |
| 4364 /* Put the rdb where we can find it in a way that works on | |
| 4365 all versions. */ | |
| 4366 dpyinfo->xrdb = xrdb; | |
| 4367 #endif | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4368 hdc = GetDC (GetDesktopWindow ()); |
| 13434 | 4369 |
| 4370 dpyinfo->height = GetDeviceCaps (hdc, VERTRES); | |
| 4371 dpyinfo->width = GetDeviceCaps (hdc, HORZRES); | |
| 4372 dpyinfo->root_window = GetDesktopWindow (); | |
| 4373 dpyinfo->n_planes = GetDeviceCaps (hdc, PLANES); | |
| 4374 dpyinfo->n_cbits = GetDeviceCaps (hdc, BITSPIXEL); | |
| 4375 dpyinfo->height_in = GetDeviceCaps (hdc, LOGPIXELSX); | |
| 4376 dpyinfo->width_in = GetDeviceCaps (hdc, LOGPIXELSY); | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4377 dpyinfo->has_palette = GetDeviceCaps (hdc, RASTERCAPS) & RC_PALETTE; |
| 13434 | 4378 dpyinfo->grabbed = 0; |
| 4379 dpyinfo->reference_count = 0; | |
| 4380 dpyinfo->n_fonts = 0; | |
| 4381 dpyinfo->font_table_size = 0; | |
| 4382 dpyinfo->bitmaps = 0; | |
| 4383 dpyinfo->bitmaps_size = 0; | |
| 4384 dpyinfo->bitmaps_last = 0; | |
| 4385 dpyinfo->mouse_face_mouse_frame = 0; | |
| 4386 dpyinfo->mouse_face_deferred_gc = 0; | |
| 4387 dpyinfo->mouse_face_beg_row = dpyinfo->mouse_face_beg_col = -1; | |
| 4388 dpyinfo->mouse_face_end_row = dpyinfo->mouse_face_end_col = -1; | |
| 4389 dpyinfo->mouse_face_face_id = 0; | |
| 4390 dpyinfo->mouse_face_window = Qnil; | |
| 4391 dpyinfo->mouse_face_mouse_x = dpyinfo->mouse_face_mouse_y = 0; | |
| 4392 dpyinfo->mouse_face_defer = 0; | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4393 dpyinfo->w32_focus_frame = 0; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4394 dpyinfo->w32_focus_event_frame = 0; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4395 dpyinfo->w32_highlight_frame = 0; |
| 13434 | 4396 |
| 4397 ReleaseDC (GetDesktopWindow (), hdc); | |
| 4398 | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4399 /* Determine if there is a middle mouse button, to allow parse_button |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4400 to decide whether right mouse events should be mouse-2 or |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4401 mouse-3. */ |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4402 XSETINT (Vw32_num_mouse_buttons, GetSystemMetrics (SM_CMOUSEBUTTONS)); |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4403 |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4404 /* initialise palette with white and black */ |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4405 { |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4406 COLORREF color; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4407 defined_color (0, "white", &color, 1); |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4408 defined_color (0, "black", &color, 1); |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4409 } |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4410 |
| 13434 | 4411 #ifndef F_SETOWN_BUG |
| 4412 #ifdef F_SETOWN | |
| 4413 #ifdef F_SETOWN_SOCK_NEG | |
| 4414 /* stdin is a socket here */ | |
| 4415 fcntl (connection, F_SETOWN, -getpid ()); | |
| 4416 #else /* ! defined (F_SETOWN_SOCK_NEG) */ | |
| 4417 fcntl (connection, F_SETOWN, getpid ()); | |
| 4418 #endif /* ! defined (F_SETOWN_SOCK_NEG) */ | |
| 4419 #endif /* ! defined (F_SETOWN) */ | |
| 4420 #endif /* F_SETOWN_BUG */ | |
| 4421 | |
| 4422 #ifdef SIGIO | |
| 4423 if (interrupt_input) | |
| 4424 init_sigio (connection); | |
| 4425 #endif /* ! defined (SIGIO) */ | |
| 4426 | |
| 4427 UNBLOCK_INPUT; | |
| 4428 | |
| 4429 return dpyinfo; | |
| 4430 } | |
| 4431 | |
| 4432 /* Get rid of display DPYINFO, assuming all frames are already gone. */ | |
| 4433 | |
| 4434 void | |
| 4435 x_delete_display (dpyinfo) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4436 struct w32_display_info *dpyinfo; |
| 13434 | 4437 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4438 /* Discard this display from w32_display_name_list and w32_display_list. |
| 13434 | 4439 We can't use Fdelq because that can quit. */ |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4440 if (! NILP (w32_display_name_list) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4441 && EQ (XCONS (w32_display_name_list)->car, dpyinfo->name_list_element)) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4442 w32_display_name_list = XCONS (w32_display_name_list)->cdr; |
| 13434 | 4443 else |
| 4444 { | |
| 4445 Lisp_Object tail; | |
| 4446 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4447 tail = w32_display_name_list; |
| 13434 | 4448 while (CONSP (tail) && CONSP (XCONS (tail)->cdr)) |
| 4449 { | |
| 4450 if (EQ (XCONS (XCONS (tail)->cdr)->car, | |
| 4451 dpyinfo->name_list_element)) | |
| 4452 { | |
| 4453 XCONS (tail)->cdr = XCONS (XCONS (tail)->cdr)->cdr; | |
| 4454 break; | |
| 4455 } | |
| 4456 tail = XCONS (tail)->cdr; | |
| 4457 } | |
| 4458 } | |
| 4459 | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4460 /* free palette table */ |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4461 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4462 struct w32_palette_entry * plist; |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4463 |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4464 plist = dpyinfo->color_list; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4465 while (plist) |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4466 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4467 struct w32_palette_entry * pentry = plist; |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4468 plist = plist->next; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4469 xfree(pentry); |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4470 } |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4471 dpyinfo->color_list = NULL; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4472 if (dpyinfo->palette) |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4473 DeleteObject(dpyinfo->palette); |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4474 } |
| 13434 | 4475 xfree (dpyinfo->font_table); |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4476 xfree (dpyinfo->w32_id_name); |
| 13434 | 4477 } |
| 4478 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4479 /* Set up use of W32. */ |
| 13434 | 4480 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4481 DWORD w32_msg_worker (); |
| 13434 | 4482 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4483 w32_initialize () |
| 13434 | 4484 { |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
4485 /* MSVC does not type K&R functions with no arguments correctly, and |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
4486 so we must explicitly cast them. */ |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
4487 clear_frame_hook = (void (*)(void)) w32_clear_frame; |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4488 clear_end_of_line_hook = w32_clear_end_of_line; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4489 ins_del_lines_hook = w32_ins_del_lines; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4490 change_line_highlight_hook = w32_change_line_highlight; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4491 insert_glyphs_hook = w32_insert_glyphs; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4492 write_glyphs_hook = w32_write_glyphs; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4493 delete_glyphs_hook = w32_delete_glyphs; |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
4494 ring_bell_hook = (void (*)(void)) w32_ring_bell; |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
4495 reset_terminal_modes_hook = (void (*)(void)) w32_reset_terminal_modes; |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
4496 set_terminal_modes_hook = (void (*)(void)) w32_set_terminal_modes; |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4497 update_begin_hook = w32_update_begin; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4498 update_end_hook = w32_update_end; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4499 set_terminal_window_hook = w32_set_terminal_window; |
| 13434 | 4500 read_socket_hook = w32_read_socket; |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4501 frame_up_to_date_hook = w32_frame_up_to_date; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4502 cursor_to_hook = w32_cursor_to; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4503 reassert_line_highlight_hook = w32_reassert_line_highlight; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4504 mouse_position_hook = w32_mouse_position; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4505 frame_rehighlight_hook = w32_frame_rehighlight; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4506 frame_raise_lower_hook = w32_frame_raise_lower; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4507 set_vertical_scroll_bar_hook = w32_set_vertical_scroll_bar; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4508 condemn_scroll_bars_hook = w32_condemn_scroll_bars; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4509 redeem_scroll_bar_hook = w32_redeem_scroll_bar; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4510 judge_scroll_bars_hook = w32_judge_scroll_bars; |
| 13434 | 4511 |
| 4512 scroll_region_ok = 1; /* we'll scroll partial frames */ | |
| 4513 char_ins_del_ok = 0; /* just as fast to write the line */ | |
| 4514 line_ins_del_ok = 1; /* we'll just blt 'em */ | |
| 4515 fast_clear_end_of_line = 1; /* X does this well */ | |
| 4516 memory_below_frame = 0; /* we don't remember what scrolls | |
| 4517 off the bottom */ | |
| 4518 baud_rate = 19200; | |
| 4519 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4520 /* Initialize input mode: interrupt_input off, no flow control, allow |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4521 8 bit character input, standard quit char. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4522 Fset_input_mode (Qnil, Qnil, make_number (2), Qnil); |
| 13434 | 4523 |
| 4524 /* Create the window thread - it will terminate itself or when the app terminates */ | |
| 4525 | |
| 4526 init_crit (); | |
| 4527 | |
| 4528 dwMainThreadId = GetCurrentThreadId (); | |
| 4529 DuplicateHandle (GetCurrentProcess (), GetCurrentThread (), | |
| 4530 GetCurrentProcess (), &hMainThread, 0, TRUE, DUPLICATE_SAME_ACCESS); | |
| 4531 | |
| 4532 /* Wait for thread to start */ | |
| 4533 | |
| 4534 { | |
| 4535 MSG msg; | |
| 4536 | |
| 4537 PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE); | |
| 4538 | |
|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
4539 hWindowsThread = CreateThread (NULL, 0, |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4540 (LPTHREAD_START_ROUTINE) w32_msg_worker, |
|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
4541 0, 0, &dwWindowsThreadId); |
| 13434 | 4542 |
| 4543 GetMessage (&msg, NULL, WM_EMACS_DONE, WM_EMACS_DONE); | |
| 4544 } | |
| 4545 | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4546 /* It is desirable that mainThread should have the same notion of |
|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
4547 focus window and active window as windowsThread. Unfortunately, the |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4548 following call to AttachThreadInput, which should do precisely what |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4549 we need, causes major problems when Emacs is linked as a console |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4550 program. Unfortunately, we have good reasons for doing that, so |
|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
4551 instead we need to send messages to windowsThread to make some API |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4552 calls for us (ones that affect, or depend on, the active/focus |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4553 window state. */ |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4554 #ifdef ATTACH_THREADS |
|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
4555 AttachThreadInput (dwMainThreadId, dwWindowsThreadId, TRUE); |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4556 #endif |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4557 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4558 /* Dynamically link to optional system components. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4559 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4560 HANDLE user_lib = LoadLibrary ("user32.dll"); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4561 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4562 #define LOAD_PROC(fn) pfn##fn = (void *) GetProcAddress (user_lib, #fn) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4563 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4564 /* New proportional scroll bar functions. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4565 LOAD_PROC( SetScrollInfo ); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4566 LOAD_PROC( GetScrollInfo ); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4567 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4568 #undef LOAD_PROC |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4569 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4570 FreeLibrary (user_lib); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4571 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4572 /* If using proportional scroll bars, ensure handle is at least 5 pixels; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4573 otherwise use the fixed height. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4574 vertical_scroll_bar_min_handle = (pfnSetScrollInfo != NULL) ? 5 : |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4575 GetSystemMetrics (SM_CYVTHUMB); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4576 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4577 /* For either kind of scroll bar, take account of the arrows; these |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4578 effectively form the border of the main scroll bar range. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4579 vertical_scroll_bar_top_border = vertical_scroll_bar_bottom_border |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4580 = GetSystemMetrics (SM_CYVSCROLL); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4581 } |
| 13434 | 4582 } |
| 4583 | |
| 4584 void | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4585 syms_of_w32term () |
| 13434 | 4586 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4587 staticpro (&w32_display_name_list); |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4588 w32_display_name_list = Qnil; |
| 13434 | 4589 |
| 4590 staticpro (&last_mouse_scroll_bar); | |
| 4591 last_mouse_scroll_bar = Qnil; | |
| 4592 | |
| 4593 staticpro (&Qvendor_specific_keysyms); | |
| 4594 Qvendor_specific_keysyms = intern ("vendor-specific-keysyms"); | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4595 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4596 DEFVAR_INT ("w32-num-mouse-buttons", |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4597 &Vw32_num_mouse_buttons, |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4598 "Number of physical mouse buttons."); |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4599 Vw32_num_mouse_buttons = Qnil; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4600 |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4601 DEFVAR_LISP ("w32-swap-mouse-buttons", |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4602 &Vw32_swap_mouse_buttons, |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4603 "Swap the mapping of middle and right mouse buttons.\n\ |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
4604 When nil, middle button is mouse-2 and right button is mouse-3."); |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
4605 Vw32_swap_mouse_buttons = Qnil; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4606 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4607 DEFVAR_LISP ("w32-grab-focus-on-raise", |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4608 &Vw32_grab_focus_on_raise, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4609 "Raised frame grabs input focus.\n\ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4610 When t, `raise-frame' grabs input focus as well. This fits well\n\ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4611 with the normal Windows click-to-focus policy, but might not be\n\ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4612 desirable when using a point-to-focus policy."); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4613 Vw32_grab_focus_on_raise = Qt; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4614 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4615 DEFVAR_LISP ("w32-capslock-is-shiftlock", |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4616 &Vw32_capslock_is_shiftlock, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4617 "Apply CapsLock state to non character input keys.\n\ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4618 When nil, CapsLock only affects normal character input keys."); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
4619 Vw32_capslock_is_shiftlock = Qnil; |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
4620 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
4621 DEFVAR_LISP ("w32-recognize-altgr", |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
4622 &Vw32_recognize_altgr, |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
4623 "Recognize right-alt and left-ctrl as AltGr.\n\ |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
4624 When nil, the right-alt and left-ctrl key combination is\n\ |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
4625 interpreted normally."); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
4626 Vw32_recognize_altgr = Qt; |
| 13434 | 4627 } |
