annotate src/console-msw.h @ 617:af57a77cbc92

[xemacs-hg @ 2001-06-18 07:09:50 by ben] --------------------------------------------------------------- DOCUMENTATION FIXES: --------------------------------------------------------------- eval.c: Correct documentation. elhash.c: Doc correction. --------------------------------------------------------------- LISP OBJECT CLEANUP: --------------------------------------------------------------- bytecode.h, buffer.h, casetab.h, chartab.h, console-msw.h, console.h, database.c, device.h, eldap.h, elhash.h, events.h, extents.h, faces.h, file-coding.h, frame.h, glyphs.h, gui-x.h, gui.h, keymap.h, lisp-disunion.h, lisp-union.h, lisp.h, lrecord.h, lstream.h, mule-charset.h, objects.h, opaque.h, postgresql.h, process.h, rangetab.h, specifier.h, toolbar.h, tooltalk.h, ui-gtk.h: Add wrap_* to all objects (it was already there for a few of them) -- an expression to encapsulate a pointer into a Lisp object, rather than the inconvenient XSET*. "wrap" was chosen because "make" as in make_int(), make_char() is not appropriate. (It implies allocation. The issue does not exist for ints and chars because they are not allocated.) Full error checking has been added to these expressions. When used without error checking, non-union build, use of these expressions will incur no loss of efficiency. (In fact, XSET* is now defined in terms of wrap_* in a non-union build.) In a union build, you will also get no loss of efficiency provided that you have a decent optimizing compiler, and a compiler that either understands inlines or automatically inlines those particular functions. (And since people don't normally do their production builds on union, it doesn't matter.) Update the sample Lisp object definition in lrecord.h accordingly. dumper.c: Fix places in dumper that referenced wrap_object to reference its new name, wrap_pointer_1. buffer.c, bufslots.h, conslots.h, console.c, console.h, devslots.h, device.c, device.h, frame.c, frame.h, frameslots.h, window.c, window.h, winslots.h: -- Extract out the Lisp objects of `struct device' into devslots.h, just like for the other structures. -- Extract out the remaining (not copied into the window config) Lisp objects in `struct window' into winslots.h; use different macros (WINDOW_SLOT vs. WINDOW_SAVED_SLOT) to differentiate them. -- Eliminate the `dead' flag of `struct frame', since it duplicates information already available in `framemeths', and fix FRAME_LIVE_P accordingly. (Devices and consoles already work this way.) -- In *slots.h, switch to system where MARKED_SLOT is automatically undef'd at the end of the file. (Follows what winslots.h already does.) -- Update the comments at the beginning of *slots.h to be accurate. -- When making any of the above objects dead, zero it out entirely and reset all Lisp object slots to Qnil. (We were already doing this somewhat, but not consistently.) This (1) Eliminates the possibility of extra objects hanging around that ought to be GC'd, (2) Causes an immediate crash if anyone tries to access a structure in one of these objects, (3) Ensures consistent behavior wrt dead objects. dialog-msw.c: Use internal_object_printer, since this object should not escape. --------------------------------------------------------------- FIXING A CRASH THAT I HIT ONCE (AND A RELATED BAD BEHAVIOR): --------------------------------------------------------------- eval.c: Fix up some comments about the FSF implementation. Fix two nasty bugs: (1) condition_case_unwind frees the conses sitting in the catch->tag slot too quickly, resulting in a crash that I hit. (2) catches need to be unwound one at a time when calling unwind-protect code, rather than all at once at the end; otherwise, incorrect behavior can result. (A comment shows exactly how.) backtrace.h: Improve comment about FSF differences in the handler stack. --------------------------------------------------------------- FIXING A CRASH THAT I REPEATEDLY HIT WHEN USING THE MOUSE WHEEL UNDER MSWINDOWS: --------------------------------------------------------------- Basic idea: My crash is due either to a dead, non-marked, GC-collected frame inside of a window mirror, or a prematurely freed window mirror. We need to mark the Lisp objects inside of window mirrors. Tracking the lifespan of window mirrors and scrollbar instances is extremely hard, and there may well be lurking bugs where such objects are freed too soon. The only safe way to fix these problems (and it fixes both problems at once) is to make both of these structures Lisp objects. lrecord.h, emacs.c, inline.c, scrollbar-gtk.c, scrollbar-msw.c, scrollbar-x.c, scrollbar.c, scrollbar.h, symsinit.h: Make scrollbar instances actual Lisp objects. Mark the window mirrors in them. inline.c needs to know about scrollbar.h now. Record the new type in lrecord.h. Fix up scrollbar-*.c appropriately. Create a hash table in scrollbar-msw.c so that the scrollbar instances stored in scrollbar HWND's are properly GC-protected. Create complex_vars_of_scrollbar_mswindows() to create the hash table at startup, and call it from emacs.c. Don't store the scrollbar instance as a property of the GTK scrollbar, as it's not used and if we did this, we'd have to separately GC-protect it in a hash table, like in MS Windows. lrecord.h, frame.h, frame.c, frameslots.h, redisplay.c, window.c, window.h: Move mark_window_mirror from redisplay.c to window.c. Make window mirrors actual Lisp objects. Tell lrecord.h about them. Change the window mirror member of struct frame from a pointer to a Lisp object, and add XWINDOW_MIRROR in appropriate places. Mark the scrollbar instances in the window mirror. redisplay.c, redisplay.h, alloc.c: Delete mark_redisplay. Don't call mark_redisplay. We now mark frame-specific structures in mark_frame. NOTE: I also deleted an extremely questionable call to update_frame_window_mirrors(). It was extremely questionable before, and now totally impossible, since it will create Lisp objects during redisplay. frame.c: Mark the scrollbar instances, which are now Lisp objects. Call mark_gutter() here, not in mark_redisplay(). gutter.c: Update comments about correct marking. --------------------------------------------------------------- ISSUES BROUGHT UP BY MARTIN: --------------------------------------------------------------- buffer.h: Put back these macros the way Steve T and I think they ought to be. I already explained in a previous changelog entry why I think these macros should be the way I'd defined them. Once again: We fix these macros so they don't care about the type of their lvalues. The non-C-string equivalents of these already function in the same way, and it's correct because it should be OK to pass in a CBufbyte *, a BufByte *, a Char_Binary *, an UChar_Binary *, etc. The whole reason for these different types is to work around errors caused by signed-vs-unsigned non-matching types. Any possible error that might be caught in a DFC macro would also be caught wherever the argument is used elsewhere. So creating multiple macro versions would add no useful error-checking and just further complicate an already complicated area. As for Martin's "ANSI aliasing" bug, XEmacs is not ANSI-aliasing clean and probably never will be. Unless the board agrees to change XEmacs in this way (and we really don't want to go down that road), this is not a bug. sound.h: Undo Martin's type change. signal.c: Fix problem identified by Martin with Linux and g++ due to non-standard declaration of setitimer(). systime.h: Update the docs for "qxe_" to point out why making the encapsulation explicit is always the right way to go. (setitimer() itself serves as an example.) For 21.4: update-elc-2.el: Correct misplaced parentheses, making lisp/mule not get recompiled.
author ben
date Mon, 18 Jun 2001 07:10:32 +0000
parents b5b4308a001d
children fdefd0186b75
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* Define mswindows-specific console, device, and frame object for XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 Copyright (C) 1994, 1995 Board of Trustees, University of Illinois.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 /* Synched up with: Not in FSF. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 /* Authorship:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 Ultimately based on FSF, then later on JWZ work for Lemacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 Rewritten over time by Ben Wing and Chuck Thompson.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 Rewritten for mswindows by Jonathan Harris, November 1997 for 21.0.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
32 #ifndef INCLUDED_console_msw_h_
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
33 #define INCLUDED_console_msw_h_
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 #include "console.h"
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
36 #include "syswindows.h"
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
37 #include "syscommctrl.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 #ifdef HAVE_XPM
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 #include <X11/xpm.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 /* The name of the main window class */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 #define XEMACS_CLASS "XEmacs"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 #define XEMACS_CONTROL_CLASS "XEmacsControl"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 /*
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
49 * Consoles
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 DECLARE_CONSOLE_TYPE (mswindows);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 struct mswindows_console
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 int infd, outfd;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
59 DECLARE_CONSOLE_TYPE (msprinter);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 /*
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
62 * Printer settings, aka devmode
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
63 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
64
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
65 typedef struct Lisp_Devmode
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
66 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
67 struct lcrecord_header header;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
68
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
69 /* Pointer to the DEVMODE structure */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
70 DEVMODE* devmode;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
71
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
72 /* Full printer name. It can be longer than devmode->dmDeviceName
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
73 can accommodate, so need to keep it separately */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
74 char* printer_name;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
75
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
76 /* Printer device this object is currently selected in, or Qnil
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
77 if not selected */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
78 Lisp_Object device;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
79
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
80 } Lisp_Devmode;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
81
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
82
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
83 DECLARE_LRECORD (devmode, Lisp_Devmode);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
84 #define XDEVMODE(x) XRECORD (x, devmode, Lisp_Devmode)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
85 #define XSETDEVMODE(x, p) XSETRECORD (x, p, devmode)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 586
diff changeset
86 #define wrap_devmode(p) wrap_record (p, devmode)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
87 #define DEVMODEP(x) RECORDP (x, devmode)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
88 #define CHECK_DEVMODE(x) CHECK_RECORD (x, devmode)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
89 #define CONCHECK_DEVMODE(x) CONCHECK_RECORD (x, devmode)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
90
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
91 #define DEVMODE_SIZE(dm) ((dm)->dmSize + (dm)->dmDriverExtra)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
92 #define XDEVMODE_SIZE(x) ((x)->devmode ? DEVMODE_SIZE((x)->devmode) : 0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
93
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
94 /*
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
95 * Devices
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 #define MSW_FONTSIZE (LF_FACESIZE*4+12)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 struct mswindows_device
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
102 Lisp_Object fontlist; /* List of strings, device fonts */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
103 HDC hcdc; /* Compatible DC */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
104 DWORD update_tick; /* Used when device is modified through
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
105 Windows messages, see WM_DISPLAYCHANGE
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
106 in event-msw.c */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 #define DEVICE_MSWINDOWS_DATA(d) DEVICE_TYPE_DATA (d, mswindows)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
110 #define DEVICE_MSWINDOWS_FONTLIST(d) (DEVICE_MSWINDOWS_DATA (d)->fontlist)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
111 #define DEVICE_MSWINDOWS_HCDC(d) (DEVICE_MSWINDOWS_DATA (d)->hcdc)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
112 #define DEVICE_MSWINDOWS_UPDATE_TICK(d) (DEVICE_MSWINDOWS_DATA (d)->update_tick)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
114 struct msprinter_device
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
115 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
116 HDC hdc, hcdc; /* Printer and the comp. DCs */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
117 HANDLE hprinter;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
118 char* name;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
119 Lisp_Object devmode;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
120 Lisp_Object fontlist;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
121 };
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
122
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
123 #define DEVICE_MSPRINTER_DATA(d) DEVICE_TYPE_DATA (d, msprinter)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
124 #define DEVICE_MSPRINTER_HDC(d) (DEVICE_MSPRINTER_DATA (d)->hdc)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
125 #define DEVICE_MSPRINTER_HCDC(d) (DEVICE_MSPRINTER_DATA (d)->hcdc)
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
126 #define DEVICE_MSPRINTER_HPRINTER(d) (DEVICE_MSPRINTER_DATA (d)->hprinter)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
127 #define DEVICE_MSPRINTER_FONTLIST(d) (DEVICE_MSPRINTER_DATA (d)->fontlist)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
128 #define DEVICE_MSPRINTER_NAME(d) (DEVICE_MSPRINTER_DATA (d)->name)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
129 #define DEVICE_MSPRINTER_DEVMODE(d) (DEVICE_MSPRINTER_DATA (d)->devmode)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
130
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
131 #define CONSOLE_TYPESYM_MSPRINTER_P(typesym) EQ (typesym, Qmsprinter)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
132 #define DEVICE_MSPRINTER_P(dev) CONSOLE_TYPESYM_MSPRINTER_P (DEVICE_TYPE (dev))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
133 #define CHECK_MSPRINTER_DEVICE(z) CHECK_DEVICE_TYPE (z, msprinter)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
134 #define CONCHECK_MSPRINTER_DEVICE(z) CONCHECK_DEVICE_TYPE (z, msprinter)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
135
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
136 /* Printer functions in frame-msw.c */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
137 void msprinter_start_page (struct frame *f);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
138
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
139 /* Common checks */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
140
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
141 #define DEVICE_MSGDI_P(dev) (DEVICE_MSWINDOWS_P(dev) || DEVICE_MSPRINTER_P(dev))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
142 #define CHECK_MSGDI_DEVICE(d) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
143 do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
144 CHECK_DEVICE (d); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
145 if (!(DEVICEP (d) && DEVICE_MSGDI_P(XDEVICE(d)))) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
146 dead_wrong_type_argument \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
147 (list3 (Qor, Qmswindows, Qmsprinter), d); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
148 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
149 #define CONCHECK_MSGDI_DEVICE(d) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
150 do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
151 CHECK_DEVICE (d); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
152 if (!(DEVICEP (d) && DEVICE_MSGDI_P(XDEVICE(d)))) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
153 wrong_type_argument \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
154 (list3 (Qor, Qmswindows, Qmsprinter), d); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
155 } while (0)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 /*
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
158 * Frames
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 int left;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 int top;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 int width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 int height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 } XEMACS_RECT_WH;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 struct mswindows_frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 /* win32 window handle */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 HWND hwnd;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 /* DC for this win32 window */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 HDC hdc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
176 /* Used with DeferWindowPos */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
177 HDWP hdwp;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 /* Time of last click event, for button 2 emul */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 DWORD last_click_time;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
182 /* Mods of last click event */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
183 DWORD last_click_mods;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
184
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 /* Coordinates of last click event, screen-relative */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 POINTS last_click_point;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 #ifdef HAVE_TOOLBARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 /* Toolbar hash table. See toolbar-msw.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 Lisp_Object toolbar_hash_table;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 unsigned int toolbar_checksum[4];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 /* Menu hash table. See menubar-msw.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 Lisp_Object menu_hash_table;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 /* Menu checksum. See menubar-msw.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 unsigned int menu_checksum;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 /* Widget glyphs attached to this frame. See glyphs-msw.c */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
200 Lisp_Object widget_hash_table1, widget_hash_table2, widget_hash_table3;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 /* Frame title hash value. See frame-msw.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 unsigned int title_checksum;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 /* Real character width and height of the frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 FRAME_{HEIGHT,WIDTH} do not work for pixel geometry! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 int charheight, charwidth;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 /* Misc flags */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 int button2_need_lbutton : 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 int button2_need_rbutton : 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 int button2_is_down : 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 int ignore_next_lbutton_up : 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 int ignore_next_rbutton_up : 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 int sizing : 1;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
216 int paint_pending : 1; /* Whether a WM_PAINT magic event has been queued */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
217 int popup : 1; /* frame is a popup frame */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 /* Geometry, in characters, as specified by proplist during frame
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
220 creation. Members are set to -1 for unspecified */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 XEMACS_RECT_WH* target_rect;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 #define FRAME_MSWINDOWS_DATA(f) FRAME_TYPE_DATA (f, mswindows)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 #define FRAME_MSWINDOWS_HANDLE(f) (FRAME_MSWINDOWS_DATA (f)->hwnd)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 #define FRAME_MSWINDOWS_DC(f) (FRAME_MSWINDOWS_DATA (f)->hdc)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 #define FRAME_MSWINDOWS_MENU_HASH_TABLE(f) (FRAME_MSWINDOWS_DATA (f)->menu_hash_table)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 #define FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE(f) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 (FRAME_MSWINDOWS_DATA (f)->toolbar_hash_table)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
231 #define FRAME_MSWINDOWS_WIDGET_HASH_TABLE1(f) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
232 (FRAME_MSWINDOWS_DATA (f)->widget_hash_table1)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
233 #define FRAME_MSWINDOWS_WIDGET_HASH_TABLE2(f) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
234 (FRAME_MSWINDOWS_DATA (f)->widget_hash_table2)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
235 #define FRAME_MSWINDOWS_WIDGET_HASH_TABLE3(f) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
236 (FRAME_MSWINDOWS_DATA (f)->widget_hash_table3)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 #define FRAME_MSWINDOWS_TOOLBAR_CHECKSUM(f,pos) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 (FRAME_MSWINDOWS_DATA (f)->toolbar_checksum[pos])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 #define FRAME_MSWINDOWS_MENU_CHECKSUM(f) (FRAME_MSWINDOWS_DATA (f)->menu_checksum)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 #define FRAME_MSWINDOWS_TITLE_CHECKSUM(f) (FRAME_MSWINDOWS_DATA (f)->title_checksum)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 #define FRAME_MSWINDOWS_CHARWIDTH(f) (FRAME_MSWINDOWS_DATA (f)->charwidth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 #define FRAME_MSWINDOWS_CHARHEIGHT(f) (FRAME_MSWINDOWS_DATA (f)->charheight)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 #define FRAME_MSWINDOWS_TARGET_RECT(f) (FRAME_MSWINDOWS_DATA (f)->target_rect)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
244 #define FRAME_MSWINDOWS_POPUP(f) (FRAME_MSWINDOWS_DATA (f)->popup)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 /* Frame check and validation macros */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 #define FRAME_MSWINDOWS_P(frm) CONSOLE_TYPESYM_MSWINDOWS_P (FRAME_TYPE (frm))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 #define CHECK_MSWINDOWS_FRAME(z) CHECK_FRAME_TYPE (z, mswindows)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 #define CONCHECK_MSWINDOWS_FRAME(z) CONCHECK_FRAME_TYPE (z, mswindows)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 /* win32 window LONG indices */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 #define XWL_FRAMEOBJ 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 #define XWL_COUNT 1 /* Number of LONGs that we use */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 #define MSWINDOWS_WINDOW_EXTRA_BYTES (XWL_COUNT*4)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
256 /*
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
257 * Printer frame, aka printer job
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
258 */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
259
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
260 struct msprinter_frame
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
261 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
262 int left_margin, top_margin, /* All in twips */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
263 right_margin, bottom_margin;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
264 int charheight, charwidth; /* As per proplist or -1 if not given */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
265 int pix_left, pix_top; /* Calculated in init_frame_*, VP offset */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
266 int job_started : 1;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
267 int page_started : 1;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
268 };
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
269
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
270 #define FRAME_MSPRINTER_DATA(f) FRAME_TYPE_DATA (f, msprinter)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
271 #define FRAME_MSPRINTER_LEFT_MARGIN(f) (FRAME_MSPRINTER_DATA (f)->left_margin)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
272 #define FRAME_MSPRINTER_RIGHT_MARGIN(f) (FRAME_MSPRINTER_DATA (f)->top_margin)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
273 #define FRAME_MSPRINTER_TOP_MARGIN(f) (FRAME_MSPRINTER_DATA (f)->right_margin)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
274 #define FRAME_MSPRINTER_BOTTOM_MARGIN(f) (FRAME_MSPRINTER_DATA (f)->bottom_margin)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
275 #define FRAME_MSPRINTER_JOB_STARTED(f) (FRAME_MSPRINTER_DATA (f)->job_started)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
276 #define FRAME_MSPRINTER_PAGE_STARTED(f) (FRAME_MSPRINTER_DATA (f)->page_started)
586
b5b4308a001d [xemacs-hg @ 2001-05-29 05:11:44 by mta]
mta
parents: 563
diff changeset
277 #define FRAME_MSPRINTER_CHARWIDTH(f) (FRAME_MSPRINTER_DATA (f)->charwidth)
b5b4308a001d [xemacs-hg @ 2001-05-29 05:11:44 by mta]
mta
parents: 563
diff changeset
278 #define FRAME_MSPRINTER_CHARHEIGHT(f) (FRAME_MSPRINTER_DATA (f)->charheight)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
279 #define FRAME_MSPRINTER_PIXLEFT(f) (FRAME_MSPRINTER_DATA (f)->pix_left)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
280 #define FRAME_MSPRINTER_PIXTOP(f) (FRAME_MSPRINTER_DATA (f)->pix_top)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 * Events
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 /* win32 messages / magic event types */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 #define EVENT_MSWINDOWS_MAGIC_TYPE(e) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 ((e)->event.magic.underlying_mswindows_event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 #define XM_BUMPQUEUE (WM_USER + 101)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 #define XM_MAPFRAME (WM_USER + 102)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 #define XM_UNMAPFRAME (WM_USER + 103)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 * Random globals
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 /* win32 "Windows" procedure */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 LRESULT WINAPI mswindows_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 LPARAM lParam);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 LRESULT WINAPI mswindows_control_wnd_proc (HWND hwnd,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 UINT msg, WPARAM wParam,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 LPARAM lParam);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
305 void mswindows_redraw_exposed_area (struct frame *f, int x, int y,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 int width, int height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 void mswindows_size_frame_internal (struct frame* f, XEMACS_RECT_WH* dest);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
308 HWND mswindows_get_selected_frame_hwnd (void);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
309 void mswindows_enqueue_magic_event (HWND hwnd, UINT msg);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
310 int mswindows_is_dialog_msg (MSG *msg);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 /* win32 DDE management library */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 #define MSWINDOWS_DDE_ITEM_OPEN "Open"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 extern DWORD mswindows_dde_mlid;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 extern HSZ mswindows_dde_service;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 extern HSZ mswindows_dde_topic_system;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 extern HSZ mswindows_dde_item_open;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 HDDEDATA CALLBACK mswindows_dde_callback (UINT uType, UINT uFmt, HCONV hconv,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
319 HSZ hszTopic, HSZ hszItem,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
320 HDDEDATA hdata,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 DWORD dwData1, DWORD dwData2);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
323 void mswindows_enqueue_dispatch_event (Lisp_Object event);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 void mswindows_enqueue_misc_user_event (Lisp_Object channel,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 Lisp_Object function,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 Lisp_Object object);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
327 Lisp_Object mswindows_cancel_dispatch_event (Lisp_Event* event);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 Lisp_Object mswindows_pump_outstanding_events (void);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
329 Lisp_Object mswindows_protect_modal_loop (Lisp_Object (*bfun)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
330 (Lisp_Object barg),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 Lisp_Object barg);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 void mswindows_unmodalize_signal_maybe (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
334 COLORREF mswindows_string_to_color (const char *name);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
335 USID emacs_mswindows_create_stream_pair (void* inhandle, void* outhandle,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
336 Lisp_Object* instream,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
337 Lisp_Object* outstream,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
338 int flags);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
339 USID emacs_mswindows_delete_stream_pair (Lisp_Object instream,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
340 Lisp_Object outstream);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
341
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 #ifdef HAVE_WIN32_PROCESSES
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
343 HANDLE get_nt_process_handle (Lisp_Process *p);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 extern Lisp_Object Vmswindows_frame_being_created;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 extern Lisp_Object mswindows_frame_being_created;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
349 void mswindows_get_workspace_coords (RECT *rc);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
350
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
351 HWND mswindows_get_console_hwnd (void);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
352 void mswindows_hide_console (void);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
353 void mswindows_show_console (void);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
354 int mswindows_output_console_string (CONST Extbyte *str, Extcount len);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
355
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
356 Lisp_Object mswindows_enumerate_fonts (HDC hdc);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
358 int mswindows_char_is_accelerator (struct frame *f, Emchar ch);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
359 Bytecount mswindows_translate_menu_or_dialog_item (Bufbyte *item, Bytecount len,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
360 Bytecount maxlen, Emchar *accel,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
361 Lisp_Object error_name);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
362
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
363 #ifdef HAVE_TOOLBARS
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
364 Lisp_Object mswindows_get_toolbar_button_text (struct frame* f,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
365 int command_id);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
366 Lisp_Object mswindows_handle_toolbar_wm_command (struct frame* f,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
367 HWND ctrl, WORD id);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
368 #endif
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
369 Lisp_Object mswindows_handle_gui_wm_command (struct frame* f,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
370 HWND ctrl, LPARAM id);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
371
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
372 int mswindows_windows9x_p (void);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
373
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
374 void mswindows_output_last_error (char *frob);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 546
diff changeset
375 DOESNT_RETURN mswindows_report_process_error (const char *string,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 546
diff changeset
376 Lisp_Object data,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 546
diff changeset
377 int errnum);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 546
diff changeset
378 Lisp_Object mswindows_lisp_error (int errnum);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
379
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
380 Lisp_Object mswindows_handle_print_dialog_box (struct frame *f,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
381 Lisp_Object keys);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
382 Lisp_Object mswindows_handle_page_setup_dialog_box (struct frame *f,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
383 Lisp_Object keys);
506
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 442
diff changeset
384 int mswindows_get_default_margin (Lisp_Object prop);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
385
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
386 void mswindows_register_popup_frame (Lisp_Object frame);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
387 void mswindows_unregister_popup_frame (Lisp_Object frame);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
388
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
389 void mswindows_destroy_selection (Lisp_Object selection);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
390
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
391 Lisp_Object msprinter_default_printer (void);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
392
546
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 510
diff changeset
393 Lisp_Object mswindows_find_frame (HWND hwnd);
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 510
diff changeset
394
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
395 struct mswindows_dialog_id
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
396 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
397 struct lcrecord_header header;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
398
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
399 Lisp_Object frame;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
400 Lisp_Object callbacks;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
401 HWND hwnd;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
402 };
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
403
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
404 DECLARE_LRECORD (mswindows_dialog_id, struct mswindows_dialog_id);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
405 #define XMSWINDOWS_DIALOG_ID(x) XRECORD (x, mswindows_dialog_id, struct mswindows_dialog_id)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
406 #define XSETMSWINDOWS_DIALOG_ID(x, p) XSETRECORD (x, p, mswindows_dialog_id)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 586
diff changeset
407 #define wrap_mswindows_dialog_id(p) wrap_record (p, mswindows_dialog_id)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
408 #define MSWINDOWS_DIALOG_IDP(x) RECORDP (x, mswindows_dialog_id)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
409 #define CHECK_MSWINDOWS_DIALOG_ID(x) CHECK_RECORD (x, mswindows_dialog_id)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
410 #define CONCHECK_MSWINDOWS_DIALOG_ID(x) CONCHECK_RECORD (x, mswindows_dialog_id)
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
411
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
412 #endif /* INCLUDED_console_msw_h_ */