comparison src/console-msw.h @ 412:697ef44129c6 r21-2-14

Import from CVS: tag r21-2-14
author cvs
date Mon, 13 Aug 2007 11:20:41 +0200
parents de805c49cfc1
children 11054d720c21
comparison
equal deleted inserted replaced
411:12e008d41344 412:697ef44129c6
27 Ultimately based on FSF, then later on JWZ work for Lemacs. 27 Ultimately based on FSF, then later on JWZ work for Lemacs.
28 Rewritten over time by Ben Wing and Chuck Thompson. 28 Rewritten over time by Ben Wing and Chuck Thompson.
29 Rewritten for mswindows by Jonathan Harris, November 1997 for 21.0. 29 Rewritten for mswindows by Jonathan Harris, November 1997 for 21.0.
30 */ 30 */
31 31
32 #ifndef INCLUDED_console_msw_h_ 32 #ifndef _XEMACS_CONSOLE_MSW_H_
33 #define INCLUDED_console_msw_h_ 33 #define _XEMACS_CONSOLE_MSW_H_
34 34
35 #include "console.h" 35 #include "console.h"
36 #include "syswindows.h" 36 #ifdef CONST /* I suspect this is safe */
37 #include "syscommctrl.h" 37 #undef CONST
38 #endif
39 #include <windows.h>
40 #include <ddeml.h> /* DDE management library */
41 #if !defined (__CYGWIN32__) && !defined(__MINGW32__)
42 #include <shellapi.h> /* FileManager/Explorer drag and drop */
43 #include <commctrl.h>
44 #endif
38 45
39 #ifdef HAVE_XPM 46 #ifdef HAVE_XPM
40 #include <X11/xpm.h> 47 #include <X11/xpm.h>
41 #endif 48 #endif
42 49
50 /*
51 * XXX FIXME: The following X modifier defs in events-mod.h clash with win32
52 * hotkey defs in winuser.h. For the moment lose the win32 versions.
53 * Maybe we should rename all of MOD_* to something that doesn't clash.
54 */
55 #ifdef MOD_CONTROL
56 # undef MOD_CONTROL
57 #endif
58 #ifdef MOD_ALT
59 # undef MOD_ALT
60 #endif
61 #ifdef MOD_SHIFT
62 # undef MOD_SHIFT
63 #endif
64
65
43 /* The name of the main window class */ 66 /* The name of the main window class */
44 #define XEMACS_CLASS "XEmacs" 67 #define XEMACS_CLASS "XEmacs"
45 68
46 #define XEMACS_CONTROL_CLASS "XEmacsControl" 69
47 70 /*
48 /* 71 * Console
49 * Consoles
50 */ 72 */
51 73
52 DECLARE_CONSOLE_TYPE (mswindows); 74 DECLARE_CONSOLE_TYPE (mswindows);
53 75
54 struct mswindows_console 76 struct mswindows_console
55 { 77 {
56 int infd, outfd; 78 int infd, outfd;
57 }; 79 };
58 80
59 DECLARE_CONSOLE_TYPE (msprinter); 81
60 82 /*
61 /* 83 * Device
62 * Printer settings, aka devmode
63 */
64
65 typedef struct Lisp_Devmode
66 {
67 struct lcrecord_header header;
68
69 /* Pointer to the DEVMODE structure */
70 DEVMODE* devmode;
71
72 /* Full printer name. It can be longer than devmode->dmDeviceName
73 can accomodate, so need to keep it separately */
74 char* printer_name;
75
76 /* Printer device this object is currently selected in, or Qnil
77 if not selected */
78 Lisp_Object device;
79
80 } Lisp_Devmode;
81
82
83 DECLARE_LRECORD (devmode, Lisp_Devmode);
84 #define XDEVMODE(x) XRECORD (x, devmode, Lisp_Devmode)
85 #define XSETDEVMODE(x, p) XSETRECORD (x, p, devmode)
86 #define DEVMODEP(x) RECORDP (x, devmode)
87 #define CHECK_DEVMODE(x) CHECK_RECORD (x, devmode)
88 #define CONCHECK_DEVMODE(x) CONCHECK_RECORD (x, devmode)
89
90 #define DEVMODE_SIZE(dm) ((dm)->dmSize + (dm)->dmDriverExtra)
91 #define XDEVMODE_SIZE(x) ((x)->devmode ? DEVMODE_SIZE((x)->devmode) : 0)
92
93 /*
94 * Devices
95 */ 84 */
96 85
97 #define MSW_FONTSIZE (LF_FACESIZE*4+12) 86 #define MSW_FONTSIZE (LF_FACESIZE*4+12)
98 87
88 struct mswindows_font_enum
89 {
90 char fontname[MSW_FONTSIZE];
91 struct mswindows_font_enum *next;
92 };
93
99 struct mswindows_device 94 struct mswindows_device
100 { 95 {
101 Lisp_Object fontlist; /* List of strings, device fonts */ 96 int logpixelsx, logpixelsy;
102 HDC hcdc; /* Compatible DC */ 97 int planes, cells;
103 DWORD update_tick; /* Used when device is modified through 98 int horzres, vertres; /* Size in pixels */
104 Windows mwssages, see WM_DISPLAYCHANGE 99 int horzsize, vertsize; /* Size in mm */
105 in event-msw.c */ 100 int bitspixel;
101 struct mswindows_font_enum *fontlist;
106 }; 102 };
107 103
108 #define DEVICE_MSWINDOWS_DATA(d) DEVICE_TYPE_DATA (d, mswindows) 104 #define DEVICE_MSWINDOWS_DATA(d) DEVICE_TYPE_DATA (d, mswindows)
109 #define DEVICE_MSWINDOWS_FONTLIST(d) (DEVICE_MSWINDOWS_DATA (d)->fontlist) 105 #define DEVICE_MSWINDOWS_LOGPIXELSX(d) (DEVICE_MSWINDOWS_DATA (d)->logpixelsx)
110 #define DEVICE_MSWINDOWS_HCDC(d) (DEVICE_MSWINDOWS_DATA (d)->hcdc) 106 #define DEVICE_MSWINDOWS_LOGPIXELSY(d) (DEVICE_MSWINDOWS_DATA (d)->logpixelsy)
111 #define DEVICE_MSWINDOWS_UPDATE_TICK(d) (DEVICE_MSWINDOWS_DATA (d)->update_tick) 107 #define DEVICE_MSWINDOWS_PLANES(d) (DEVICE_MSWINDOWS_DATA (d)->planes)
112 108 #define DEVICE_MSWINDOWS_CELLS(d) (DEVICE_MSWINDOWS_DATA (d)->cells)
113 struct msprinter_device 109 #define DEVICE_MSWINDOWS_HORZRES(d) (DEVICE_MSWINDOWS_DATA (d)->horzres)
114 { 110 #define DEVICE_MSWINDOWS_VERTRES(d) (DEVICE_MSWINDOWS_DATA (d)->vertres)
115 HDC hdc, hcdc; /* Printer and the comp. DCs */ 111 #define DEVICE_MSWINDOWS_HORZSIZE(d) (DEVICE_MSWINDOWS_DATA (d)->horzsize)
116 HANDLE hprinter; 112 #define DEVICE_MSWINDOWS_VERTSIZE(d) (DEVICE_MSWINDOWS_DATA (d)->vertsize)
117 char* name; 113 #define DEVICE_MSWINDOWS_BITSPIXEL(d) (DEVICE_MSWINDOWS_DATA (d)->bitspixel)
118 Lisp_Object devmode; 114 #define DEVICE_MSWINDOWS_FONTLIST(d) (DEVICE_MSWINDOWS_DATA (d)->fontlist)
119 Lisp_Object fontlist; 115
120 }; 116
121 117 /*
122 #define DEVICE_MSPRINTER_DATA(d) DEVICE_TYPE_DATA (d, msprinter) 118 * Frame
123 #define DEVICE_MSPRINTER_HDC(d) (DEVICE_MSPRINTER_DATA (d)->hdc)
124 #define DEVICE_MSPRINTER_HCDC(d) (DEVICE_MSPRINTER_DATA (d)->hcdc)
125 #define DEVICE_MSPRINTER_HPRINTER(d) (DEVICE_MSPRINTER_DATA (d)->hprinter)
126 #define DEVICE_MSPRINTER_FONTLIST(d) (DEVICE_MSPRINTER_DATA (d)->fontlist)
127 #define DEVICE_MSPRINTER_NAME(d) (DEVICE_MSPRINTER_DATA (d)->name)
128 #define DEVICE_MSPRINTER_DEVMODE(d) (DEVICE_MSPRINTER_DATA (d)->devmode)
129
130 #define CONSOLE_TYPESYM_MSPRINTER_P(typesym) EQ (typesym, Qmsprinter)
131 #define DEVICE_MSPRINTER_P(dev) CONSOLE_TYPESYM_MSPRINTER_P (DEVICE_TYPE (dev))
132 #define CHECK_MSPRINTER_DEVICE(z) CHECK_DEVICE_TYPE (z, msprinter)
133 #define CONCHECK_MSPRINTER_DEVICE(z) CONCHECK_DEVICE_TYPE (z, msprinter)
134
135 /* Printer functions in frame-msw.c */
136 void msprinter_start_page (struct frame *f);
137
138 /* Common checks */
139
140 #define DEVICE_MSGDI_P(dev) (DEVICE_MSWINDOWS_P(dev) || DEVICE_MSPRINTER_P(dev))
141 #define CHECK_MSGDI_DEVICE(d) \
142 do { \
143 CHECK_DEVICE (d); \
144 if (!(DEVICEP (d) && DEVICE_MSGDI_P(XDEVICE(d)))) \
145 dead_wrong_type_argument \
146 (list3 (Qor, Qmswindows, Qmsprinter), d); \
147 } while (0)
148 #define CONCHECK_MSGDI_DEVICE(d) \
149 do { \
150 CHECK_DEVICE (d); \
151 if (!(DEVICEP (d) && DEVICE_MSGDI_P(XDEVICE(d)))) \
152 wrong_type_argument \
153 (list3 (Qor, Qmswindows, Qmsprinter), d); \
154 } while (0)
155
156 /*
157 * Frames
158 */ 119 */
159 typedef struct 120 typedef struct
160 { 121 {
161 int left; 122 int left;
162 int top; 123 int top;
170 HWND hwnd; 131 HWND hwnd;
171 132
172 /* DC for this win32 window */ 133 /* DC for this win32 window */
173 HDC hdc; 134 HDC hdc;
174 135
175 /* Used with DeferWindowPos */ 136 /* compatible DC for bitmap operations */
176 HDWP hdwp; 137 HDC cdc;
177 138
178 /* Time of last click event, for button 2 emul */ 139 /* Time of last click event, for button 2 emul */
179 DWORD last_click_time; 140 DWORD last_click_time;
180 141
181 /* Coordinates of last click event, screen-relative */ 142 /* Coordinates of last click event, screen-relative */
191 152
192 /* Menu checksum. See menubar-msw.c */ 153 /* Menu checksum. See menubar-msw.c */
193 unsigned int menu_checksum; 154 unsigned int menu_checksum;
194 155
195 /* Widget glyphs attached to this frame. See glyphs-msw.c */ 156 /* Widget glyphs attached to this frame. See glyphs-msw.c */
196 Lisp_Object widget_hash_table1, widget_hash_table2, widget_hash_table3; 157 Lisp_Object widget_hash_table;
197 158
198 /* Frame title hash value. See frame-msw.c */ 159 /* Frame title hash value. See frame-msw.c */
199 unsigned int title_checksum; 160 unsigned int title_checksum;
200 161
201 /* Real character width and height of the frame. 162 /* Real character width and height of the frame.
207 int button2_need_rbutton : 1; 168 int button2_need_rbutton : 1;
208 int button2_is_down : 1; 169 int button2_is_down : 1;
209 int ignore_next_lbutton_up : 1; 170 int ignore_next_lbutton_up : 1;
210 int ignore_next_rbutton_up : 1; 171 int ignore_next_rbutton_up : 1;
211 int sizing : 1; 172 int sizing : 1;
212 int paint_pending : 1; /* Whether a WM_PAINT magic event has been queued */
213 173
214 /* Geometry, in characters, as specified by proplist during frame 174 /* Geometry, in characters, as specified by proplist during frame
215 creation. Memebers are set to -1 for unspecified */ 175 creation. Memebers are set to -1 for unspecified */
216 XEMACS_RECT_WH* target_rect; 176 XEMACS_RECT_WH* target_rect;
217 }; 177 };
218 178
219 #define FRAME_MSWINDOWS_DATA(f) FRAME_TYPE_DATA (f, mswindows) 179 #define FRAME_MSWINDOWS_DATA(f) FRAME_TYPE_DATA (f, mswindows)
220 180
221 #define FRAME_MSWINDOWS_HANDLE(f) (FRAME_MSWINDOWS_DATA (f)->hwnd) 181 #define FRAME_MSWINDOWS_HANDLE(f) (FRAME_MSWINDOWS_DATA (f)->hwnd)
222 #define FRAME_MSWINDOWS_DC(f) (FRAME_MSWINDOWS_DATA (f)->hdc) 182 #define FRAME_MSWINDOWS_DC(f) (FRAME_MSWINDOWS_DATA (f)->hdc)
183 #define FRAME_MSWINDOWS_CDC(f) (FRAME_MSWINDOWS_DATA (f)->cdc)
223 #define FRAME_MSWINDOWS_MENU_HASH_TABLE(f) (FRAME_MSWINDOWS_DATA (f)->menu_hash_table) 184 #define FRAME_MSWINDOWS_MENU_HASH_TABLE(f) (FRAME_MSWINDOWS_DATA (f)->menu_hash_table)
224 #define FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE(f) \ 185 #define FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE(f) \
225 (FRAME_MSWINDOWS_DATA (f)->toolbar_hash_table) 186 (FRAME_MSWINDOWS_DATA (f)->toolbar_hash_table)
226 #define FRAME_MSWINDOWS_WIDGET_HASH_TABLE1(f) \ 187 #define FRAME_MSWINDOWS_WIDGET_HASH_TABLE(f) \
227 (FRAME_MSWINDOWS_DATA (f)->widget_hash_table1) 188 (FRAME_MSWINDOWS_DATA (f)->widget_hash_table)
228 #define FRAME_MSWINDOWS_WIDGET_HASH_TABLE2(f) \
229 (FRAME_MSWINDOWS_DATA (f)->widget_hash_table2)
230 #define FRAME_MSWINDOWS_WIDGET_HASH_TABLE3(f) \
231 (FRAME_MSWINDOWS_DATA (f)->widget_hash_table3)
232 #define FRAME_MSWINDOWS_TOOLBAR_CHECKSUM(f,pos) \ 189 #define FRAME_MSWINDOWS_TOOLBAR_CHECKSUM(f,pos) \
233 (FRAME_MSWINDOWS_DATA (f)->toolbar_checksum[pos]) 190 (FRAME_MSWINDOWS_DATA (f)->toolbar_checksum[pos])
234 #define FRAME_MSWINDOWS_MENU_CHECKSUM(f) (FRAME_MSWINDOWS_DATA (f)->menu_checksum) 191 #define FRAME_MSWINDOWS_MENU_CHECKSUM(f) (FRAME_MSWINDOWS_DATA (f)->menu_checksum)
235 #define FRAME_MSWINDOWS_TITLE_CHECKSUM(f) (FRAME_MSWINDOWS_DATA (f)->title_checksum) 192 #define FRAME_MSWINDOWS_TITLE_CHECKSUM(f) (FRAME_MSWINDOWS_DATA (f)->title_checksum)
236 #define FRAME_MSWINDOWS_CHARWIDTH(f) (FRAME_MSWINDOWS_DATA (f)->charwidth) 193 #define FRAME_MSWINDOWS_CHARWIDTH(f) (FRAME_MSWINDOWS_DATA (f)->charwidth)
245 /* win32 window LONG indices */ 202 /* win32 window LONG indices */
246 #define XWL_FRAMEOBJ 0 203 #define XWL_FRAMEOBJ 0
247 #define XWL_COUNT 1 /* Number of LONGs that we use */ 204 #define XWL_COUNT 1 /* Number of LONGs that we use */
248 #define MSWINDOWS_WINDOW_EXTRA_BYTES (XWL_COUNT*4) 205 #define MSWINDOWS_WINDOW_EXTRA_BYTES (XWL_COUNT*4)
249 206
250 /*
251 * Printer frame, aka printer job
252 */
253
254 struct msprinter_frame
255 {
256 int left_margin, top_margin, /* All in twips */
257 right_margin, bottom_margin;
258 int charheight, charwidth; /* As per proplist or -1 if not gven */
259 int pix_left, pix_top; /* Calculated in init_frame_*, VP offset */
260 int job_started : 1;
261 int page_started : 1;
262 };
263
264 #define FRAME_MSPRINTER_DATA(f) FRAME_TYPE_DATA (f, msprinter)
265 #define FRAME_MSPRINTER_LEFT_MARGIN(f) (FRAME_MSPRINTER_DATA (f)->left_margin)
266 #define FRAME_MSPRINTER_RIGHT_MARGIN(f) (FRAME_MSPRINTER_DATA (f)->top_margin)
267 #define FRAME_MSPRINTER_TOP_MARGIN(f) (FRAME_MSPRINTER_DATA (f)->right_margin)
268 #define FRAME_MSPRINTER_BOTTOM_MARGIN(f) (FRAME_MSPRINTER_DATA (f)->bottom_margin)
269 #define FRAME_MSPRINTER_JOB_STARTED(f) (FRAME_MSPRINTER_DATA (f)->job_started)
270 #define FRAME_MSPRINTER_PAGE_STARTED(f) (FRAME_MSPRINTER_DATA (f)->page_started)
271 #define FRAME_MSPRINTER_CHARWIDTH(f) (FRAME_MSPRINTER_DATA (f)->charheight)
272 #define FRAME_MSPRINTER_CHARHEIGHT(f) (FRAME_MSPRINTER_DATA (f)->charwidth)
273 #define FRAME_MSPRINTER_PIXLEFT(f) (FRAME_MSPRINTER_DATA (f)->pix_left)
274 #define FRAME_MSPRINTER_PIXTOP(f) (FRAME_MSPRINTER_DATA (f)->pix_top)
275 207
276 /* 208 /*
277 * Events 209 * Events
278 */ 210 */
279 211
290 */ 222 */
291 223
292 /* win32 "Windows" procedure */ 224 /* win32 "Windows" procedure */
293 LRESULT WINAPI mswindows_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, 225 LRESULT WINAPI mswindows_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam,
294 LPARAM lParam); 226 LPARAM lParam);
295 LRESULT WINAPI mswindows_control_wnd_proc (HWND hwnd,
296 UINT msg, WPARAM wParam,
297 LPARAM lParam);
298 227
299 void mswindows_redraw_exposed_area (struct frame *f, int x, int y, 228 void mswindows_redraw_exposed_area (struct frame *f, int x, int y,
300 int width, int height); 229 int width, int height);
301 void mswindows_size_frame_internal (struct frame* f, XEMACS_RECT_WH* dest); 230 void mswindows_size_frame_internal (struct frame* f, XEMACS_RECT_WH* dest);
302 HWND mswindows_get_selected_frame_hwnd (void); 231 void mswindows_enqueue_magic_event (HWND hwnd, UINT message);
303 void mswindows_enqueue_magic_event (HWND hwnd, UINT msg);
304 232
305 /* win32 DDE management library */ 233 /* win32 DDE management library */
306 #define MSWINDOWS_DDE_ITEM_OPEN "Open" 234 #define MSWINDOWS_DDE_ITEM_OPEN "Open"
307 extern DWORD mswindows_dde_mlid; 235 extern DWORD mswindows_dde_mlid;
308 extern HSZ mswindows_dde_service; 236 extern HSZ mswindows_dde_service;
309 extern HSZ mswindows_dde_topic_system; 237 extern HSZ mswindows_dde_topic_system;
310 extern HSZ mswindows_dde_item_open; 238 extern HSZ mswindows_dde_item_open;
311 HDDEDATA CALLBACK mswindows_dde_callback (UINT uType, UINT uFmt, HCONV hconv, 239 HDDEDATA CALLBACK mswindows_dde_callback (UINT uType, UINT uFmt, HCONV hconv,
312 HSZ hszTopic, HSZ hszItem, 240 HSZ hszTopic, HSZ hszItem, HDDEDATA hdata,
313 HDDEDATA hdata,
314 DWORD dwData1, DWORD dwData2); 241 DWORD dwData1, DWORD dwData2);
315 242
316 void mswindows_enqueue_dispatch_event (Lisp_Object event);
317 void mswindows_enqueue_misc_user_event (Lisp_Object channel, 243 void mswindows_enqueue_misc_user_event (Lisp_Object channel,
318 Lisp_Object function, 244 Lisp_Object function,
319 Lisp_Object object); 245 Lisp_Object object);
320 Lisp_Object mswindows_cancel_dispatch_event (Lisp_Event* event); 246 Lisp_Object mswindows_cancel_dispatch_event (struct Lisp_Event* event);
321 Lisp_Object mswindows_pump_outstanding_events (void); 247 Lisp_Object mswindows_pump_outstanding_events (void);
322 Lisp_Object mswindows_protect_modal_loop (Lisp_Object (*bfun) 248 Lisp_Object mswindows_protect_modal_loop (Lisp_Object (*bfun) (Lisp_Object barg),
323 (Lisp_Object barg),
324 Lisp_Object barg); 249 Lisp_Object barg);
325 void mswindows_unmodalize_signal_maybe (void); 250 void mswindows_unmodalize_signal_maybe (void);
326 251
327 COLORREF mswindows_string_to_color (const char *name);
328 USID emacs_mswindows_create_stream_pair (void* inhandle, void* outhandle,
329 Lisp_Object* instream,
330 Lisp_Object* outstream,
331 int flags);
332 USID emacs_mswindows_delete_stream_pair (Lisp_Object instream,
333 Lisp_Object outstream);
334
335 #ifdef HAVE_WIN32_PROCESSES 252 #ifdef HAVE_WIN32_PROCESSES
336 HANDLE get_nt_process_handle (Lisp_Process *p); 253 HANDLE get_nt_process_handle (struct Lisp_Process *p);
337 #endif 254 #endif
338 255
339 extern Lisp_Object Vmswindows_frame_being_created; 256 extern Lisp_Object Vmswindows_frame_being_created;
340 extern Lisp_Object mswindows_frame_being_created; 257 extern Lisp_Object mswindows_frame_being_created;
341 258
342 void mswindows_get_workspace_coords (RECT *rc); 259 void mswindows_enumerate_fonts (struct device *d);
343 260
344 HWND mswindows_get_console_hwnd (void); 261 #endif /* _XEMACS_CONSOLE_MSW_H_ */
345 void mswindows_hide_console (void);
346 void mswindows_show_console (void);
347 int mswindows_output_console_string (CONST Extbyte *str, Extcount len);
348
349 Lisp_Object mswindows_enumerate_fonts (HDC hdc);
350
351 int mswindows_char_is_accelerator (struct frame *f, Emchar ch);
352 Bytecount mswindows_translate_menu_or_dialog_item (Bufbyte *item, Bytecount len,
353 Bytecount maxlen, Emchar *accel,
354 Lisp_Object error_name);
355
356 #ifdef HAVE_TOOLBARS
357 Lisp_Object mswindows_get_toolbar_button_text (struct frame* f,
358 int command_id);
359 Lisp_Object mswindows_handle_toolbar_wm_command (struct frame* f,
360 HWND ctrl, WORD id);
361 #endif
362 Lisp_Object mswindows_handle_gui_wm_command (struct frame* f,
363 HWND ctrl, LPARAM id);
364
365 int mswindows_windows9x_p (void);
366
367
368 void mswindows_output_last_error (char *frob);
369
370 #endif /* INCLUDED_console_msw_h_ */