Mercurial > hg > xemacs-beta
annotate src/console-msw-impl.h @ 5486:58e320bde005
Handle redisplay edge case.
With motion events when entering a frame and the minibuffer is
active, row and column can be zero, and there aren't any runes.
| author | Mike Kupfer <mike.kupfer@xemacs.org> |
|---|---|
| date | Sat, 30 Apr 2011 13:30:47 +0900 |
| parents | 308d34e9f07d |
| children | 0f2338afbabf |
| rev | line source |
|---|---|
| 872 | 1 /* Define mswindows-specific console, device, and frame object for XEmacs. |
| 2 Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. | |
| 3 Copyright (C) 1994, 1995 Board of Trustees, University of Illinois. | |
| 5043 | 4 Copyright (C) 2001, 2002, 2010 Ben Wing. |
| 872 | 5 |
| 6 This file is part of XEmacs. | |
| 7 | |
|
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5127
diff
changeset
|
8 XEmacs is free software: you can redistribute it and/or modify it |
| 872 | 9 under the terms of the GNU General Public License as published by the |
|
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5127
diff
changeset
|
10 Free Software Foundation, either version 3 of the License, or (at your |
|
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5127
diff
changeset
|
11 option) any later version. |
| 872 | 12 |
| 13 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
| 14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 16 for more details. | |
| 17 | |
| 18 You should have received a copy of the GNU General Public License | |
|
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5127
diff
changeset
|
19 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */ |
| 872 | 20 |
| 21 /* Synched up with: Not in FSF. */ | |
| 22 | |
| 23 /* This file essentially Mule-ized (except perhaps some Unicode splitting). | |
| 24 5-2000. */ | |
| 25 | |
| 26 /* Authorship: | |
| 27 | |
| 28 Ultimately based on FSF, then later on JWZ work for Lemacs. | |
| 29 Rewritten over time by Ben Wing and Chuck Thompson. | |
| 30 Rewritten for mswindows by Jonathan Harris, November 1997 for 21.0. | |
| 31 */ | |
| 32 | |
| 33 #ifndef INCLUDED_console_msw_impl_h_ | |
| 34 #define INCLUDED_console_msw_impl_h_ | |
| 35 | |
| 36 #include "console-impl.h" | |
| 37 #include "console-msw.h" | |
| 38 | |
| 39 /* | |
| 40 * Consoles | |
| 41 */ | |
| 42 | |
| 43 DECLARE_CONSOLE_TYPE (mswindows); | |
| 44 | |
| 45 struct mswindows_console | |
| 46 { | |
| 47 int infd, outfd; | |
| 48 }; | |
| 49 | |
| 50 DECLARE_CONSOLE_TYPE (msprinter); | |
| 51 | |
| 52 /* | |
| 53 * Printer settings, aka devmode | |
| 54 */ | |
| 55 | |
| 903 | 56 struct Lisp_Devmode |
| 872 | 57 { |
|
5127
a9c41067dd88
more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents:
5126
diff
changeset
|
58 NORMAL_LISP_OBJECT_HEADER header; |
| 872 | 59 |
| 60 /* Pointer to the DEVMODE structure */ | |
| 61 DEVMODEW *devmode; | |
| 62 | |
| 63 /* Full printer name. It can be longer than devmode->dmDeviceName | |
| 64 can accommodate, so need to keep it separately */ | |
| 65 Lisp_Object printer_name; | |
| 66 | |
| 67 /* Printer device this object is currently selected in, or Qnil | |
| 68 if not selected */ | |
| 69 Lisp_Object device; | |
| 70 | |
| 903 | 71 }; |
| 872 | 72 |
| 73 #define DEVMODE_SIZE(dm) ((dm)->dmSize + (dm)->dmDriverExtra) | |
| 74 #define XDEVMODE_SIZE(x) ((x)->devmode ? DEVMODE_SIZE((x)->devmode) : 0) | |
| 75 | |
| 76 /* | |
| 77 * Devices | |
| 78 */ | |
| 79 | |
| 80 struct mswindows_device | |
| 81 { | |
| 3092 | 82 #ifdef NEW_GC |
|
5127
a9c41067dd88
more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents:
5126
diff
changeset
|
83 NORMAL_LISP_OBJECT_HEADER header; |
| 3092 | 84 #endif /* NEW_GC */ |
| 872 | 85 Lisp_Object fontlist; /* List of (STRING . FIXED-P), device fonts */ |
| 86 HDC hcdc; /* Compatible DC */ | |
| 87 DWORD update_tick; /* Used when device is modified through | |
| 88 Windows messages, see WM_DISPLAYCHANGE | |
| 89 in event-msw.c */ | |
| 90 }; | |
| 91 | |
| 3092 | 92 #ifdef NEW_GC |
| 93 typedef struct mswindows_device Lisp_Mswindows_Device; | |
| 94 | |
|
5118
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
3092
diff
changeset
|
95 DECLARE_LISP_OBJECT (mswindows_device, Lisp_Mswindows_Device); |
| 3092 | 96 |
| 97 #define XMSWINDOWS_DEVICE(x) \ | |
| 98 XRECORD (x, mswindows_device, Lisp_Mswindows_Device) | |
| 99 #define wrap_mswindows_device(p) wrap_record (p, mswindows_device) | |
| 100 #define MSWINDOWS_DEVICE_P(x) RECORDP (x, mswindows_device) | |
| 101 #endif /* NEW_GC */ | |
| 102 | |
| 872 | 103 #define DEVICE_MSWINDOWS_DATA(d) DEVICE_TYPE_DATA (d, mswindows) |
| 104 #define DEVICE_MSWINDOWS_FONTLIST(d) (DEVICE_MSWINDOWS_DATA (d)->fontlist) | |
| 105 #define DEVICE_MSWINDOWS_HCDC(d) (DEVICE_MSWINDOWS_DATA (d)->hcdc) | |
| 106 #define DEVICE_MSWINDOWS_UPDATE_TICK(d) (DEVICE_MSWINDOWS_DATA (d)->update_tick) | |
| 107 | |
| 108 struct msprinter_device | |
| 109 { | |
| 3092 | 110 #ifdef NEW_GC |
|
5127
a9c41067dd88
more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents:
5126
diff
changeset
|
111 NORMAL_LISP_OBJECT_HEADER header; |
| 3092 | 112 #endif /* NEW_GC */ |
| 872 | 113 HDC hdc, hcdc; /* Printer and the comp. DCs */ |
| 114 HANDLE hprinter; | |
| 115 Lisp_Object name; | |
| 116 Lisp_Object devmode; | |
| 117 Lisp_Object fontlist; | |
| 118 }; | |
| 119 | |
| 3092 | 120 #ifdef NEW_GC |
| 121 typedef struct msprinter_device Lisp_Msprinter_Device; | |
| 122 | |
|
5118
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
3092
diff
changeset
|
123 DECLARE_LISP_OBJECT (msprinter_device, Lisp_Msprinter_Device); |
| 3092 | 124 |
| 125 #define XMSPRINTER_DEVICE(x) \ | |
| 126 XRECORD (x, msprinter_device, Lisp_Msprinter_Device) | |
| 127 #define wrap_msprinter_device(p) wrap_record (p, msprinter_device) | |
| 128 #define MSPRINTER_DEVICE_P(x) RECORDP (x, msprinter_device) | |
| 129 #endif /* NEW_GC */ | |
| 130 | |
| 872 | 131 #define DEVICE_MSPRINTER_DATA(d) DEVICE_TYPE_DATA (d, msprinter) |
| 132 #define DEVICE_MSPRINTER_HDC(d) (DEVICE_MSPRINTER_DATA (d)->hdc) | |
| 133 #define DEVICE_MSPRINTER_HCDC(d) (DEVICE_MSPRINTER_DATA (d)->hcdc) | |
| 134 #define DEVICE_MSPRINTER_HPRINTER(d) (DEVICE_MSPRINTER_DATA (d)->hprinter) | |
| 135 #define DEVICE_MSPRINTER_FONTLIST(d) (DEVICE_MSPRINTER_DATA (d)->fontlist) | |
| 136 #define DEVICE_MSPRINTER_NAME(d) (DEVICE_MSPRINTER_DATA (d)->name) | |
| 137 #define DEVICE_MSPRINTER_DEVMODE(d) (DEVICE_MSPRINTER_DATA (d)->devmode) | |
| 138 | |
| 139 #define CONSOLE_TYPESYM_MSPRINTER_P(typesym) EQ (typesym, Qmsprinter) | |
| 140 #define DEVICE_MSPRINTER_P(dev) CONSOLE_TYPESYM_MSPRINTER_P (DEVICE_TYPE (dev)) | |
| 141 #define CHECK_MSPRINTER_DEVICE(z) CHECK_DEVICE_TYPE (z, msprinter) | |
| 142 #define CONCHECK_MSPRINTER_DEVICE(z) CONCHECK_DEVICE_TYPE (z, msprinter) | |
| 143 | |
| 144 /* Common checks */ | |
| 145 | |
| 146 #define DEVICE_MSGDI_P(dev) (DEVICE_MSWINDOWS_P(dev) || DEVICE_MSPRINTER_P(dev)) | |
| 147 #define CHECK_MSGDI_DEVICE(d) \ | |
| 148 do { \ | |
| 149 CHECK_DEVICE (d); \ | |
| 150 if (!(DEVICEP (d) && DEVICE_MSGDI_P(XDEVICE(d)))) \ | |
| 151 dead_wrong_type_argument \ | |
| 152 (list3 (Qor, Qmswindows, Qmsprinter), d); \ | |
| 153 } while (0) | |
| 154 #define CONCHECK_MSGDI_DEVICE(d) \ | |
| 155 do { \ | |
| 156 CHECK_DEVICE (d); \ | |
| 157 if (!(DEVICEP (d) && DEVICE_MSGDI_P(XDEVICE(d)))) \ | |
| 158 wrong_type_argument \ | |
| 159 (list3 (Qor, Qmswindows, Qmsprinter), d); \ | |
| 160 } while (0) | |
| 161 | |
| 162 /* | |
| 163 * Frames | |
| 164 */ | |
| 165 | |
| 166 struct mswindows_frame | |
| 167 { | |
| 3092 | 168 #ifdef NEW_GC |
|
5127
a9c41067dd88
more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents:
5126
diff
changeset
|
169 NORMAL_LISP_OBJECT_HEADER header; |
| 3092 | 170 #endif /* NEW_GC */ |
| 171 | |
| 872 | 172 /* win32 window handle */ |
| 173 HWND hwnd; | |
| 174 | |
| 175 /* DC for this win32 window */ | |
| 176 HDC hdc; | |
| 177 | |
| 178 /* Used with DeferWindowPos */ | |
| 179 HDWP hdwp; | |
| 180 | |
| 181 /* Time of last click event, for button 2 emul */ | |
| 182 DWORD last_click_time; | |
| 183 | |
| 184 /* Mods of last click event */ | |
| 185 DWORD last_click_mods; | |
| 186 | |
| 187 /* Coordinates of last click event, screen-relative */ | |
| 188 POINTS last_click_point; | |
| 189 #ifdef HAVE_TOOLBARS | |
| 190 /* Toolbar hash table. See toolbar-msw.c */ | |
| 191 Lisp_Object toolbar_hash_table; | |
| 192 unsigned int toolbar_checksum[4]; | |
| 193 #endif | |
| 194 | |
| 195 /* Menu hash table. See menubar-msw.c */ | |
| 196 Lisp_Object menu_hash_table; | |
| 197 | |
| 198 /* Menu checksum. See menubar-msw.c */ | |
| 199 unsigned int menu_checksum; | |
| 200 | |
| 201 /* Widget glyphs attached to this frame. See glyphs-msw.c */ | |
| 202 Lisp_Object widget_hash_table1, widget_hash_table2, widget_hash_table3; | |
| 203 | |
| 204 /* Frame title hash value. See frame-msw.c */ | |
| 205 unsigned int title_checksum; | |
| 206 | |
| 207 #ifdef MULE | |
| 208 int cursor_x; | |
| 209 int cursor_y; | |
| 210 face_index cursor_findex; | |
| 211 #endif | |
| 212 | |
| 213 /* Misc flags */ | |
| 214 int button2_need_lbutton : 1; | |
| 215 int button2_need_rbutton : 1; | |
| 216 int button2_is_down : 1; | |
| 217 int ignore_next_lbutton_up : 1; | |
| 218 int ignore_next_rbutton_up : 1; | |
| 219 int sizing : 1; | |
| 220 int paint_pending : 1; /* Whether a WM_PAINT magic event has been queued */ | |
| 221 int popup : 1; /* frame is a popup frame */ | |
| 222 | |
| 223 /* Geometry, in characters, as specified by proplist during frame | |
| 224 creation. Members are set to -1 for unspecified */ | |
| 225 XEMACS_RECT_WH *target_rect; | |
| 226 }; | |
| 227 | |
| 3092 | 228 #ifdef NEW_GC |
| 229 typedef struct mswindows_frame Lisp_Mswindows_Frame; | |
| 230 | |
|
5118
e0db3c197671
merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents:
3092
diff
changeset
|
231 DECLARE_LISP_OBJECT (mswindows_frame, Lisp_Mswindows_Frame); |
| 3092 | 232 |
| 233 #define XMSWINDOWS_FRAME(x) \ | |
| 234 XRECORD (x, mswindows_frame, Lisp_Mswindows_Frame) | |
| 235 #define wrap_mswindows_frame(p) wrap_record (p, mswindows_frame) | |
| 236 #define MSWINDOWS_FRAME_P(x) RECORDP (x, mswindows_frame) | |
| 237 #endif /* NEW_GC */ | |
| 238 | |
| 872 | 239 #define FRAME_MSWINDOWS_DATA(f) FRAME_TYPE_DATA (f, mswindows) |
| 240 | |
| 241 #define FRAME_MSWINDOWS_HANDLE(f) (FRAME_MSWINDOWS_DATA (f)->hwnd) | |
| 242 #define FRAME_MSWINDOWS_DC(f) (FRAME_MSWINDOWS_DATA (f)->hdc) | |
| 243 #define FRAME_MSWINDOWS_MENU_HASH_TABLE(f) (FRAME_MSWINDOWS_DATA (f)->menu_hash_table) | |
| 244 #define FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE(f) \ | |
| 245 (FRAME_MSWINDOWS_DATA (f)->toolbar_hash_table) | |
| 246 #define FRAME_MSWINDOWS_WIDGET_HASH_TABLE1(f) \ | |
| 247 (FRAME_MSWINDOWS_DATA (f)->widget_hash_table1) | |
| 248 #define FRAME_MSWINDOWS_WIDGET_HASH_TABLE2(f) \ | |
| 249 (FRAME_MSWINDOWS_DATA (f)->widget_hash_table2) | |
| 250 #define FRAME_MSWINDOWS_WIDGET_HASH_TABLE3(f) \ | |
| 251 (FRAME_MSWINDOWS_DATA (f)->widget_hash_table3) | |
| 252 #define FRAME_MSWINDOWS_TOOLBAR_CHECKSUM(f,pos) \ | |
| 253 (FRAME_MSWINDOWS_DATA (f)->toolbar_checksum[pos]) | |
| 254 #define FRAME_MSWINDOWS_MENU_CHECKSUM(f) (FRAME_MSWINDOWS_DATA (f)->menu_checksum) | |
| 255 #define FRAME_MSWINDOWS_TITLE_CHECKSUM(f) (FRAME_MSWINDOWS_DATA (f)->title_checksum) | |
| 256 #define FRAME_MSWINDOWS_TARGET_RECT(f) (FRAME_MSWINDOWS_DATA (f)->target_rect) | |
| 257 | |
| 258 #define FRAME_MSWINDOWS_POPUP(f) (FRAME_MSWINDOWS_DATA (f)->popup) | |
| 259 | |
| 260 #ifdef MULE | |
| 261 # define FRAME_MSWINDOWS_CURSOR_X(f) (FRAME_MSWINDOWS_DATA (f)->cursor_x) | |
| 262 # define FRAME_MSWINDOWS_CURSOR_Y(f) (FRAME_MSWINDOWS_DATA (f)->cursor_y) | |
| 263 # define FRAME_MSWINDOWS_CURSOR_FINDEX(f) (FRAME_MSWINDOWS_DATA (f)->cursor_findex) | |
| 264 #endif | |
| 265 | |
| 266 /* Frame check and validation macros */ | |
| 267 #define FRAME_MSWINDOWS_P(frm) CONSOLE_TYPESYM_MSWINDOWS_P (FRAME_TYPE (frm)) | |
| 268 #define CHECK_MSWINDOWS_FRAME(z) CHECK_FRAME_TYPE (z, mswindows) | |
| 269 #define CONCHECK_MSWINDOWS_FRAME(z) CONCHECK_FRAME_TYPE (z, mswindows) | |
| 270 | |
| 271 /* win32 window LONG indices */ | |
| 272 #define XWL_FRAMEOBJ 0 | |
| 273 #define XWL_COUNT 1 /* Number of LONGs that we use */ | |
| 274 #define MSWINDOWS_WINDOW_EXTRA_BYTES (XWL_COUNT * 4) | |
| 275 | |
| 276 /* | |
| 277 * Printer frame, aka printer job | |
| 278 */ | |
| 279 | |
| 280 struct msprinter_frame | |
| 281 { | |
| 282 int left_margin, top_margin, /* All in twips */ | |
| 283 right_margin, bottom_margin; | |
| 284 int charheight, charwidth; /* As per proplist or -1 if not given */ | |
| 285 int pix_left, pix_top; /* Calculated in init_frame_*, VP offset */ | |
| 286 int job_started : 1; | |
| 287 int page_started : 1; | |
| 288 }; | |
| 289 | |
| 290 #define FRAME_MSPRINTER_DATA(f) FRAME_TYPE_DATA (f, msprinter) | |
| 291 #define FRAME_MSPRINTER_LEFT_MARGIN(f) (FRAME_MSPRINTER_DATA (f)->left_margin) | |
| 292 #define FRAME_MSPRINTER_RIGHT_MARGIN(f) (FRAME_MSPRINTER_DATA (f)->top_margin) | |
| 293 #define FRAME_MSPRINTER_TOP_MARGIN(f) (FRAME_MSPRINTER_DATA (f)->right_margin) | |
| 294 #define FRAME_MSPRINTER_BOTTOM_MARGIN(f) (FRAME_MSPRINTER_DATA (f)->bottom_margin) | |
| 295 #define FRAME_MSPRINTER_JOB_STARTED(f) (FRAME_MSPRINTER_DATA (f)->job_started) | |
| 296 #define FRAME_MSPRINTER_PAGE_STARTED(f) (FRAME_MSPRINTER_DATA (f)->page_started) | |
| 297 #define FRAME_MSPRINTER_CHARWIDTH(f) (FRAME_MSPRINTER_DATA (f)->charwidth) | |
| 298 #define FRAME_MSPRINTER_CHARHEIGHT(f) (FRAME_MSPRINTER_DATA (f)->charheight) | |
| 299 #define FRAME_MSPRINTER_PIXLEFT(f) (FRAME_MSPRINTER_DATA (f)->pix_left) | |
| 300 #define FRAME_MSPRINTER_PIXTOP(f) (FRAME_MSPRINTER_DATA (f)->pix_top) | |
| 301 | |
| 302 /* | |
| 303 * Events | |
| 304 */ | |
| 305 | |
| 306 /* win32 messages / magic event types */ | |
| 307 #define XM_BUMPQUEUE (WM_USER + 101) | |
| 308 #define XM_MAPFRAME (WM_USER + 102) | |
| 309 #define XM_UNMAPFRAME (WM_USER + 103) | |
| 310 | |
| 311 struct mswindows_dialog_id | |
| 312 { | |
|
5127
a9c41067dd88
more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents:
5126
diff
changeset
|
313 NORMAL_LISP_OBJECT_HEADER header; |
| 872 | 314 |
| 315 Lisp_Object frame; | |
| 316 Lisp_Object callbacks; | |
| 317 HWND hwnd; | |
| 318 }; | |
| 319 | |
| 320 #endif /* INCLUDED_console_msw_impl_h_ */ |
