annotate src/frame-msw.c @ 5124:623d57b7fbe8 ben-lisp-object

separate regular and disksave finalization, print method fixes. Create separate disksave method and make the finalize method only be for actual object finalization, not disksave finalization. Fix places where 0 was given in place of a printer -- print methods are mandatory, and internal objects formerly without a print method now must explicitly specify internal_object_printer(). Change the defn of CONSOLE_LIVE_P to avoid problems in some weird situations. -------------------- ChangeLog entries follow: -------------------- src/ChangeLog addition: 2010-01-20 Ben Wing <ben@xemacs.org> * alloc.c: * alloc.c (very_old_free_lcrecord): * alloc.c (disksave_object_finalization_1): * alloc.c (make_lcrecord_list): * alloc.c (alloc_managed_lcrecord): * alloc.c (free_managed_lcrecord): * alloc.c (sweep_lcrecords_1): * buffer.c: * bytecode.c: * bytecode.c (Fcompiled_function_p): * chartab.c: * console-impl.h: * console-impl.h (CONSOLE_TYPE_P): * console.c: * console.c (set_quit_events): * data.c: * data.c (Fmake_ephemeron): * database.c: * database.c (finalize_database): * database.c (Fclose_database): * device-msw.c: * device-msw.c (finalize_devmode): * device-msw.c (allocate_devmode): * device.c: * elhash.c: * elhash.c (finalize_hash_table): * eval.c: * eval.c (bind_multiple_value_limits): * event-stream.c: * event-stream.c (finalize_command_builder): * events.c: * events.c (mark_event): * extents.c: * extents.c (finalize_extent_info): * extents.c (uninit_buffer_extents): * faces.c: * file-coding.c: * file-coding.c (finalize_coding_system): * file-coding.h: * file-coding.h (struct coding_system_methods): * file-coding.h (struct detector): * floatfns.c: * floatfns.c (extract_float): * fns.c: * fns.c (Fidentity): * font-mgr.c (finalize_fc_pattern): * font-mgr.c (finalize_fc_config): * frame.c: * glyphs.c: * glyphs.c (finalize_image_instance): * glyphs.c (unmap_subwindow_instance_cache_mapper): * gui.c: * gui.c (gui_error): * keymap.c: * lisp.h (struct Lisp_Symbol): * lrecord.h: * lrecord.h (struct lrecord_implementation): * lrecord.h (MC_ALLOC_CALL_FINALIZER): * lrecord.h (MC_ALLOC_CALL_FINALIZER_FOR_DISKSAVE): * lrecord.h (DEFINE_DUMPABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_SIZABLE_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_FROB_BLOCK_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_FROB_BLOCK_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_FROB_BLOCK_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_INTERNAL_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_SIZABLE_INTERNAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_SIZABLE_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_FROB_BLOCK_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_FROB_BLOCK_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_INTERNAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_SIZABLE_INTERNAL_LISP_OBJECT): * lrecord.h (MAKE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_MODULE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_MODULE_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_MODULE_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_MODULE_SIZABLE_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_MODULE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_MODULE_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_MODULE_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_MODULE_SIZABLE_GENERAL_LISP_OBJECT): * lrecord.h (MAKE_MODULE_LISP_OBJECT): * lstream.c: * lstream.c (finalize_lstream): * lstream.c (disksave_lstream): * marker.c: * marker.c (finalize_marker): * mule-charset.c (make_charset): * number.c: * objects.c: * objects.c (finalize_color_instance): * objects.c (finalize_font_instance): * opaque.c: * opaque.c (make_opaque_ptr): * process-nt.c: * process-nt.c (nt_finalize_process_data): * process-nt.c (nt_deactivate_process): * process.c: * process.c (finalize_process): * procimpl.h (struct process_methods): * scrollbar.c: * scrollbar.c (free_scrollbar_instance): * specifier.c (finalize_specifier): * symbols.c: * toolbar.c: * toolbar.c (Ftoolbar_button_p): * tooltalk.c: * ui-gtk.c: * ui-gtk.c (emacs_gtk_object_finalizer): * ui-gtk.c (allocate_emacs_gtk_boxed_data): * window.c: * window.c (finalize_window): * window.c (mark_window_as_deleted): Separate out regular and disksave finalization. Instead of a FOR_DISKSAVE argument to the finalizer, create a separate object method `disksaver'. Make `finalizer' have only one argument. Go through and separate out all finalize methods into finalize and disksave. Delete lots of thereby redundant disksave checking. Delete places that signal an error if we attempt to disksave -- all of these objects are non-dumpable and we will get an error from pdump anyway if we attempt to dump them. After this is done, only one object remains that has a disksave method -- lstream. Change DEFINE_*_LISP_OBJECT_WITH_PROPS to DEFINE_*_GENERAL_LISP_OBJECT, which is used for specifying either property methods or disksave methods (or in the future, any other less-used methods). Remove the for_disksave argument to finalize_process_data. Don't provide a disksaver for processes because no one currently needs it. Clean up various places where objects didn't provide a print method. It was made mandatory in previous changes, and all methods now either provide their own print method or use internal_object_printer or external_object_printer. Change the definition of CONSOLE_LIVE_P to use the contype enum rather than looking into the conmeths structure -- in some weird situations with dead objects, the conmeths structure is NULL, and printing such objects from debug_print() will crash if we try to look into the conmeths structure.
author Ben Wing <ben@xemacs.org>
date Wed, 20 Jan 2010 07:05:57 -0600
parents d1247f3cc363
children b5df3737028a
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 /* Functions for the mswindows window system.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
3 Copyright (C) 1995, 1996, 2001, 2002 Ben Wing.
428
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 synched with FSF. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
24 /* This file Mule-ized, 8-14-2000. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
25
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 /* Authorship:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 Ultimately based on FSF.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 Substantially rewritten for XEmacs by Ben Wing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 Rewritten for mswindows by Jonathan Harris, November 1997 for 21.0.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 Graphics features added and frame resizing fiddled with by Andy Piper.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 #include <config.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 #include "lisp.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 #include "buffer.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
38 #include "device-impl.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 #include "elhash.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 #include "events.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 #include "faces.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
42 #include "frame-impl.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 #include "redisplay.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 #include "window.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
46 #include "console-msw-impl.h"
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
47 #include "glyphs-msw.h"
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
48
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 #define MSWINDOWS_FRAME_STYLE (WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_OVERLAPPEDWINDOW)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 #define MSWINDOWS_POPUP_STYLE (WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_POPUP \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 | WS_CAPTION | WS_BORDER | WS_SYSMENU | WS_MINIMIZEBOX)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 #define MSWINDOWS_FRAME_EXSTYLE WS_EX_OVERLAPPEDWINDOW
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 #define MSWINDOWS_POPUP_EXSTYLE WS_EX_PALETTEWINDOW
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 /* Default popup left top corner offset from the same
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 corner of the parent frame, in pixel */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 #define POPUP_OFFSET 30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 /* Default popup size, in characters */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 #define POPUP_WIDTH 30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 #define POPUP_HEIGHT 10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
64 /* Default regular frame size, in characters; if too big, it will get
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
65 shrunk to the workspace size */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 #define DEFAULT_FRAME_WIDTH 80
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
67 #define DEFAULT_FRAME_HEIGHT 50
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 #ifdef HAVE_MENUBARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 #define ADJR_MENUFLAG TRUE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 #define ADJR_MENUFLAG FALSE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 /* Default properties to use when creating frames. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 Lisp_Object Vdefault_mswindows_frame_plist;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
77 Lisp_Object Vdefault_msprinter_frame_plist;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 Lisp_Object Vmswindows_use_system_frame_size_defaults;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 /* This does not need to be GC protected, as it holds a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 frame Lisp_Object already protected by Fmake_frame */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 Lisp_Object Vmswindows_frame_being_created;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1130
diff changeset
84 static const struct memory_description mswindows_frame_data_description_1 [] = {
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1130
diff changeset
85 #ifdef HAVE_TOOLBARS
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1130
diff changeset
86 { XD_LISP_OBJECT, offsetof (struct mswindows_frame, toolbar_hash_table) },
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1130
diff changeset
87 #endif
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1130
diff changeset
88 { XD_LISP_OBJECT, offsetof (struct mswindows_frame, menu_hash_table) },
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1130
diff changeset
89 { XD_LISP_OBJECT, offsetof (struct mswindows_frame, widget_hash_table1) },
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1130
diff changeset
90 { XD_LISP_OBJECT, offsetof (struct mswindows_frame, widget_hash_table2) },
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1130
diff changeset
91 { XD_LISP_OBJECT, offsetof (struct mswindows_frame, widget_hash_table3) },
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1130
diff changeset
92 { XD_END }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1130
diff changeset
93 };
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1130
diff changeset
94
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3023
diff changeset
95 #ifdef NEW_GC
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 4139
diff changeset
96 DEFINE_DUMPABLE_INTERNAL_LISP_OBJECT ("mswindows-frame", mswindows_frame,
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 4139
diff changeset
97 0, mswindows_frame_data_description_1,
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 4139
diff changeset
98 Lisp_Mswindows_Frame);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3023
diff changeset
99 #else /* not NEW_GC */
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1130
diff changeset
100 extern const struct sized_memory_description mswindows_frame_data_description;
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1130
diff changeset
101
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1130
diff changeset
102 const struct sized_memory_description mswindows_frame_data_description = {
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1130
diff changeset
103 sizeof (struct mswindows_frame), mswindows_frame_data_description_1
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1130
diff changeset
104 };
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3023
diff changeset
105 #endif /* not NEW_GC */
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1130
diff changeset
106
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
107 /*---------------------------------------------------------------------*/
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
108 /*----- DISPLAY FRAME -----*/
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
109 /*---------------------------------------------------------------------*/
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
110
3022
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
111 static struct frame *
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
112 decode_mswindows_frame (Lisp_Object frame)
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
113 {
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
114 if (NILP (frame))
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
115 frame = wrap_frame (selected_frame ());
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
116 CHECK_LIVE_FRAME (frame);
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
117 /* this will also catch dead frames, but putting in the above check
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
118 results in a more useful error */
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
119 CHECK_MSWINDOWS_FRAME (frame);
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
120 return XFRAME (frame);
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
121 }
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
122
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
123 HWND
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
124 mswindows_get_selected_frame_hwnd (void)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
125 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
126 Lisp_Object frame, device;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
127
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
128 device = Ffind_device (Qnil, Qmswindows);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
129 if (NILP (device))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
130 return NULL;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
131 frame = DEVICE_SELECTED_FRAME (XDEVICE (device));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
132 if (NILP (frame))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
133 return NULL;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
134
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
135 return FRAME_MSWINDOWS_HANDLE (XFRAME (frame));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
136 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
137
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 static void
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
139 mswindows_init_frame_1 (struct frame *f, Lisp_Object props,
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
140 int UNUSED (frame_name_is_defaulted))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 Lisp_Object initially_unmapped;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 Lisp_Object name, height, width, popup, top, left;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 Lisp_Object frame_obj = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 RECT rect;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 XEMACS_RECT_WH rect_default;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 DWORD style, exstyle;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 HWND hwnd, hwnd_parent;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 /* Pick up relevant properties */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 initially_unmapped = Fplist_get (props, Qinitially_unmapped, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 name = Fplist_get (props, Qname, Qnil);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
153
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 popup = Fplist_get (props, Qpopup, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 if (EQ (popup, Qt))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 popup = Fselected_frame (Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 left = Fplist_get (props, Qleft, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 if (!NILP (left))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 CHECK_INT (left);
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 top = Fplist_get (props, Qtop, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 if (!NILP (top))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 CHECK_INT (top);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 width = Fplist_get (props, Qwidth, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 if (!NILP (width))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 CHECK_INT (width);
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 height = Fplist_get (props, Qheight, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 if (!NILP (height))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 CHECK_INT (height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3023
diff changeset
174 #ifdef NEW_GC
5120
d1247f3cc363 latest work on lisp-object workspace;
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
175 f->frame_data = XMSWINDOWS_FRAME (ALLOC_LISP_OBJECT (mswindows_frame));
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3023
diff changeset
176 #else /* not NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 f->frame_data = xnew_and_zero (struct mswindows_frame);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3023
diff changeset
178 #endif /* not NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 FRAME_MSWINDOWS_TARGET_RECT (f) = xnew_and_zero (XEMACS_RECT_WH);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 FRAME_MSWINDOWS_TARGET_RECT (f)->left = NILP (left) ? -1 : abs (XINT (left));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 FRAME_MSWINDOWS_TARGET_RECT (f)->top = NILP (top) ? -1 : abs (XINT (top));
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
183 FRAME_MSWINDOWS_TARGET_RECT (f)->width = NILP (width) ? -1 :
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 abs (XINT (width));
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
185 FRAME_MSWINDOWS_TARGET_RECT (f)->height = NILP (height) ? -1 :
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 abs (XINT (height));
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
187
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 /* Misc frame stuff */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
189 FRAME_MSWINDOWS_MENU_HASH_TABLE (f) = Qnil;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 #ifdef HAVE_TOOLBARS
1130
ccd0667b4764 [xemacs-hg @ 2002-11-30 08:10:24 by ben]
ben
parents: 1123
diff changeset
191 /* EQ not EQUAL or we will get QUIT crashes, see below. */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
192 FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE (f) =
1130
ccd0667b4764 [xemacs-hg @ 2002-11-30 08:10:24 by ben]
ben
parents: 1123
diff changeset
193 make_lisp_hash_table (50, HASH_TABLE_NON_WEAK, HASH_TABLE_EQ);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 #endif
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 903
diff changeset
195 /* hashtable of instantiated glyphs on the frame. Make them EQ because
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 903
diff changeset
196 we only use ints as keys. Otherwise we run into stickiness in
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 903
diff changeset
197 redisplay because internal_equal() can QUIT. See
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 903
diff changeset
198 enter_redisplay_critical_section(). */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
199 FRAME_MSWINDOWS_WIDGET_HASH_TABLE1 (f) =
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 827
diff changeset
200 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, HASH_TABLE_EQ);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
201 FRAME_MSWINDOWS_WIDGET_HASH_TABLE2 (f) =
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 827
diff changeset
202 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, HASH_TABLE_EQ);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
203 FRAME_MSWINDOWS_WIDGET_HASH_TABLE3 (f) =
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 827
diff changeset
204 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, HASH_TABLE_EQ);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 /* Will initialize these in WM_SIZE handler. We cannot do it now,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 because we do not know what is CW_USEDEFAULT height and width */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 FRAME_WIDTH (f) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 FRAME_HEIGHT (f) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 FRAME_PIXWIDTH (f) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 FRAME_PIXHEIGHT (f) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 if (NILP (popup))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 style = MSWINDOWS_FRAME_STYLE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 exstyle = MSWINDOWS_FRAME_EXSTYLE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 hwnd_parent = NULL;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 rect_default.left = rect_default.top = CW_USEDEFAULT;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 rect_default.width = rect_default.height = CW_USEDEFAULT;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 else
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 style = MSWINDOWS_POPUP_STYLE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 exstyle = MSWINDOWS_POPUP_EXSTYLE;
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 CHECK_MSWINDOWS_FRAME (popup);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 hwnd_parent = FRAME_MSWINDOWS_HANDLE (XFRAME (popup));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 assert (IsWindow (hwnd_parent));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 /* We cannot use CW_USEDEFAULT when creating a popup window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 So by default, we offset the new popup 30 pixels right
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 and down from its parent, and give it size of 30x10 characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 These dimensions look adequate on both high and low res monitors */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 GetWindowRect (hwnd_parent, &rect);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 rect_default.left = rect.left + POPUP_OFFSET;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 rect_default.top = rect.top + POPUP_OFFSET;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 char_to_real_pixel_size (f, POPUP_WIDTH, POPUP_HEIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 &rect_default.width, &rect_default.height);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
239 FRAME_MSWINDOWS_POPUP (f) = 1;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
242 AdjustWindowRectEx (&rect, style, ADJR_MENUFLAG, exstyle);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
244 frame_obj = wrap_frame (f);
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 Vmswindows_frame_being_created = frame_obj;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
247 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
248 const Extbyte *nameext = 0;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
250 if (STRINGP (f->name))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
251 LISP_STRING_TO_TSTR (f->name, nameext);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
252 else if (STRINGP (name))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
253 LISP_STRING_TO_TSTR (name, nameext);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
254 else
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
255 nameext = XETEXT (XEMACS_CLASS);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
256 hwnd = qxeCreateWindowEx (exstyle,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
257 XETEXT (XEMACS_CLASS),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
258 nameext,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
259 style,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
260 rect_default.left, rect_default.top,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
261 rect_default.width, rect_default.height,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
262 hwnd_parent, NULL, NULL, NULL);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
263 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 Vmswindows_frame_being_created = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 if (hwnd == NULL)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
268 invalid_operation ("System call to create frame failed",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
269 STRINGP (f->name) ? f->name :
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
270 STRINGP (name) ? name :
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
271 Qunbound);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
272
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
273 FRAME_MSWINDOWS_HANDLE (f) = hwnd;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
275 qxeSetWindowLong (hwnd, XWL_FRAMEOBJ, (LONG)LISP_TO_VOID (frame_obj));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
276 FRAME_MSWINDOWS_DC (f) = GetDC (hwnd);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
277 SetTextAlign (FRAME_MSWINDOWS_DC (f), TA_BASELINE | TA_LEFT | TA_NOUPDATECP);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
278
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
279 #ifdef HAVE_DIALOGS
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
280 if (FRAME_MSWINDOWS_POPUP (f))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
281 mswindows_register_popup_frame (frame_obj);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
282 #endif /* HAVE_DIALOGS */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 }
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 static void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
286 mswindows_init_frame_2 (struct frame *f, Lisp_Object UNUSED (props))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 if (NILP (Vmswindows_use_system_frame_size_defaults))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 /* I don't think anything can set the frame size before this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 since we don't have X resources. This may change if we look
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 at the registry. Even so these values can get overridden
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 later.*/
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
294 XEMACS_RECT_WH dest = { -1, -1, DEFAULT_FRAME_WIDTH,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 DEFAULT_FRAME_HEIGHT };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 mswindows_size_frame_internal (f, &dest);
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 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 /* Called after frame's properties are set */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 mswindows_init_frame_3 (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 {
4139
e93da3cda3cb [xemacs-hg @ 2007-08-23 12:31:32 by vins]
vins
parents: 4117
diff changeset
304 /* Don't do this earlier or we get a WM_PAINT before the frame is ready. */
e93da3cda3cb [xemacs-hg @ 2007-08-23 12:31:32 by vins]
vins
parents: 4117
diff changeset
305 ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_SHOWNORMAL);
e93da3cda3cb [xemacs-hg @ 2007-08-23 12:31:32 by vins]
vins
parents: 4117
diff changeset
306 #ifdef CYGWIN
e93da3cda3cb [xemacs-hg @ 2007-08-23 12:31:32 by vins]
vins
parents: 4117
diff changeset
307 /* The SW_x parameter in the first call that an app makes to ShowWindow is
e93da3cda3cb [xemacs-hg @ 2007-08-23 12:31:32 by vins]
vins
parents: 4117
diff changeset
308 * ignored, and the parameter specified in the caller's STARTUPINFO is
e93da3cda3cb [xemacs-hg @ 2007-08-23 12:31:32 by vins]
vins
parents: 4117
diff changeset
309 * substituted instead. That parameter is SW_HIDE if we were started by
e93da3cda3cb [xemacs-hg @ 2007-08-23 12:31:32 by vins]
vins
parents: 4117
diff changeset
310 * runemacs, so call this twice. #### runemacs is evil. To see why this
e93da3cda3cb [xemacs-hg @ 2007-08-23 12:31:32 by vins]
vins
parents: 4117
diff changeset
311 * second call was restored, see the threads referenced by
e93da3cda3cb [xemacs-hg @ 2007-08-23 12:31:32 by vins]
vins
parents: 4117
diff changeset
312 * 20a807210611011157j57ea2b22ue892f4dfcb6aade8@mail.gmail.com and
e93da3cda3cb [xemacs-hg @ 2007-08-23 12:31:32 by vins]
vins
parents: 4117
diff changeset
313 * 20a807210708181345m7ac94ff2m43337be71e853d95@mail.gmail.com . */
e93da3cda3cb [xemacs-hg @ 2007-08-23 12:31:32 by vins]
vins
parents: 4117
diff changeset
314 ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_SHOWNORMAL);
e93da3cda3cb [xemacs-hg @ 2007-08-23 12:31:32 by vins]
vins
parents: 4117
diff changeset
315 #endif
e93da3cda3cb [xemacs-hg @ 2007-08-23 12:31:32 by vins]
vins
parents: 4117
diff changeset
316 SetForegroundWindow (FRAME_MSWINDOWS_HANDLE(f));
e93da3cda3cb [xemacs-hg @ 2007-08-23 12:31:32 by vins]
vins
parents: 4117
diff changeset
317 DragAcceptFiles (FRAME_MSWINDOWS_HANDLE(f), TRUE);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 static void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
321 mswindows_after_init_frame (struct frame *UNUSED (f),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
322 int UNUSED (first_on_device), int first_on_console)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 /* Windows, unlike X, is very synchronous. After the initial
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
325 frame is created, it will never be displayed, except for
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 hollow border, unless we start pumping messages. Load progress
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 messages show in the bottom of the hollow frame, which is ugly.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 We redisplay the initial frame here, so modeline and root window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 background show.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 if (first_on_console)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 redisplay ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 mswindows_mark_frame (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 mark_object (FRAME_MSWINDOWS_MENU_HASH_TABLE (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 #ifdef HAVE_TOOLBARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 mark_object (FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 #endif
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
342 mark_object (FRAME_MSWINDOWS_WIDGET_HASH_TABLE1 (f));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
343 mark_object (FRAME_MSWINDOWS_WIDGET_HASH_TABLE2 (f));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
344 mark_object (FRAME_MSWINDOWS_WIDGET_HASH_TABLE3 (f));
428
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 mswindows_focus_on_frame (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
350 SetForegroundWindow (FRAME_MSWINDOWS_HANDLE (f));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 mswindows_delete_frame (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 if (f->frame_data)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
358 #ifdef HAVE_DIALOGS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
359 mswindows_unregister_popup_frame (wrap_frame (f));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
360 #endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
361 ReleaseDC (FRAME_MSWINDOWS_HANDLE (f), FRAME_MSWINDOWS_DC (f));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
362 DestroyWindow (FRAME_MSWINDOWS_HANDLE (f));
4117
229bd619740a [xemacs-hg @ 2007-08-15 11:06:02 by crestani]
crestani
parents: 3092
diff changeset
363 #ifndef NEW_GC
1726
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1395
diff changeset
364 xfree (f->frame_data, void *);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3023
diff changeset
365 #endif /* not NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 f->frame_data = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 mswindows_set_frame_size (struct frame *f, int width, int height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 RECT rect;
1395
607ad5a2ae95 [xemacs-hg @ 2003-03-31 08:13:20 by mta]
mta
parents: 1318
diff changeset
374 int columns, rows;
607ad5a2ae95 [xemacs-hg @ 2003-03-31 08:13:20 by mta]
mta
parents: 1318
diff changeset
375
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 rect.left = rect.top = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 rect.right = width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 rect.bottom = height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379
1395
607ad5a2ae95 [xemacs-hg @ 2003-03-31 08:13:20 by mta]
mta
parents: 1318
diff changeset
380 pixel_to_char_size (f, rect.right, rect.bottom, &columns, &rows);
607ad5a2ae95 [xemacs-hg @ 2003-03-31 08:13:20 by mta]
mta
parents: 1318
diff changeset
381 change_frame_size (f, rows, columns, 0);
607ad5a2ae95 [xemacs-hg @ 2003-03-31 08:13:20 by mta]
mta
parents: 1318
diff changeset
382
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
383 /* This can call Lisp, because it runs the window procedure, which can
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
384 call redisplay() */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 AdjustWindowRectEx (&rect,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
386 qxeGetWindowLong (FRAME_MSWINDOWS_HANDLE (f), GWL_STYLE),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
387 GetMenu (FRAME_MSWINDOWS_HANDLE (f)) != NULL,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
388 qxeGetWindowLong (FRAME_MSWINDOWS_HANDLE (f), GWL_EXSTYLE));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389
2872
5bf18ccb05df [xemacs-hg @ 2005-07-24 17:53:21 by michaels]
michaels
parents: 2367
diff changeset
390 if (IsIconic (FRAME_MSWINDOWS_HANDLE (f)))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
391 ShowWindow (FRAME_MSWINDOWS_HANDLE (f), SW_RESTORE);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
393 SetWindowPos (FRAME_MSWINDOWS_HANDLE (f), NULL,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 0, 0, rect.right-rect.left, rect.bottom-rect.top,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSENDCHANGING | SWP_NOMOVE);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 mswindows_set_frame_position (struct frame *f, int xoff, int yoff)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
401 SetWindowPos (FRAME_MSWINDOWS_HANDLE (f), NULL,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 xoff, yoff, 0, 0,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSENDCHANGING | SWP_NOSIZE);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 static void
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
407 mswindows_make_frame_visible (struct frame *f)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
409 if (!FRAME_VISIBLE_P (f))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
410 ShowWindow (FRAME_MSWINDOWS_HANDLE (f), SW_RESTORE);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 else
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
412 ShowWindow (FRAME_MSWINDOWS_HANDLE (f), SW_SHOW);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
413 SetActiveWindow (FRAME_MSWINDOWS_HANDLE (f));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 f->visible = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 f->iconified = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 static void
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
419 mswindows_make_frame_invisible (struct frame *f)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
421 if (!FRAME_VISIBLE_P (f))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
424 ShowWindow (FRAME_MSWINDOWS_HANDLE (f), SW_HIDE);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 f->visible = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 mswindows_frame_totally_visible_p (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 RECT rc_me, rc_other, rc_temp;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
432 HWND hwnd = FRAME_MSWINDOWS_HANDLE (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 /* We test against not a whole window rectangle, only against its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 client part. So, if non-client are is covered and client area is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 not, we return true. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 GetClientRect (hwnd, &rc_me);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
438 MapWindowPoints (hwnd, HWND_DESKTOP, (LPPOINT) (void *) (&rc_me), 2);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 /* First see if we're off the desktop */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
441 GetWindowRect (GetDesktopWindow (), &rc_other);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
442 UnionRect (&rc_temp, &rc_me, &rc_other);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 if (!EqualRect (&rc_temp, &rc_other))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 return 0;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
445
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 /* Then see if any window above us obscures us */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 while ((hwnd = GetWindow (hwnd, GW_HWNDPREV)) != NULL)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 if (IsWindowVisible (hwnd))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 GetWindowRect (hwnd, &rc_other);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
451 if (IntersectRect (&rc_temp, &rc_me, &rc_other))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 mswindows_frame_visible_p (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
461 return IsWindowVisible (FRAME_MSWINDOWS_HANDLE (f))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
462 && !IsIconic (FRAME_MSWINDOWS_HANDLE (f));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 mswindows_iconify_frame (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
469 ShowWindow (FRAME_MSWINDOWS_HANDLE (f), SW_MINIMIZE);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 f->visible = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 f->iconified = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 mswindows_frame_iconified_p (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
477 return IsIconic (FRAME_MSWINDOWS_HANDLE (f));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 mswindows_set_frame_icon (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 if (IMAGE_INSTANCEP (f->icon)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 && IMAGE_INSTANCE_PIXMAP_TYPE_P (XIMAGE_INSTANCE (f->icon)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 if (!XIMAGE_INSTANCE_MSWINDOWS_ICON (f->icon))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
488 mswindows_initialize_image_instance_icon (XIMAGE_INSTANCE (f->icon),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 FALSE);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 }
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
491
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
492 qxeSetClassLong (FRAME_MSWINDOWS_HANDLE (f), GCL_HICON,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
493 (LONG) XIMAGE_INSTANCE_MSWINDOWS_ICON (f->icon));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 mswindows_set_frame_pointer (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 if (IMAGE_INSTANCEP (f->pointer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 && IMAGE_INSTANCE_TYPE (XIMAGE_INSTANCE (f->pointer)) == IMAGE_POINTER)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
503 qxeSetClassLong (FRAME_MSWINDOWS_HANDLE (f), GCL_HCURSOR,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
504 (LONG) XIMAGE_INSTANCE_MSWINDOWS_ICON (f->pointer));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 /* we only have to do this because GC doesn't cause a mouse
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 event and doesn't give time to event processing even if it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 did. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 SetCursor (XIMAGE_INSTANCE_MSWINDOWS_ICON (f->pointer));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 mswindows_set_mouse_position (struct window *w, int x, int y)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 struct frame *f = XFRAME (w->frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 POINT pt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 pt.x = w->pixel_left + x;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 pt.y = w->pixel_top + y;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
520 ClientToScreen (FRAME_MSWINDOWS_HANDLE (f), &pt);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 SetCursorPos (pt.x, pt.y);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 static int
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
525 mswindows_get_mouse_position (struct device *UNUSED (d), Lisp_Object *frame,
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
526 int *x, int *y)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 POINT pt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 HWND hwnd;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531 GetCursorPos (&pt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533 /* What's under cursor? */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 hwnd = WindowFromPoint (pt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 if (hwnd == NULL)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 /* Get grandest parent of the window */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 HWND hwnd_parent;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 while ((hwnd_parent = GetParent (hwnd)) != NULL)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 hwnd = hwnd_parent;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 /* Make sure it belongs to us */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 if (GetWindowThreadProcessId (hwnd, NULL) != GetCurrentThreadId ())
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
548
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549 /* And that the window is an XEmacs frame */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
550 if (!mswindows_window_is_xemacs (hwnd))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
551 return 0;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553 /* Yippie! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554 ScreenToClient (hwnd, &pt);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 800
diff changeset
555 *frame = VOID_TO_LISP ((void *) qxeGetWindowLong (hwnd, XWL_FRAMEOBJ));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556 *x = pt.x;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557 *y = pt.y;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 mswindows_raise_frame (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
564 BringWindowToTop (FRAME_MSWINDOWS_HANDLE (f));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568 mswindows_lower_frame (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
570 SetWindowPos (FRAME_MSWINDOWS_HANDLE (f), HWND_BOTTOM, 0, 0, 0, 0,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571 SWP_NOSIZE | SWP_NOMOVE | SWP_NOSENDCHANGING);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574 static void
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
575 mswindows_enable_frame (struct frame *f)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
576 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
577 EnableWindow (FRAME_MSWINDOWS_HANDLE (f), TRUE);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
578 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
579
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
580 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
581 mswindows_disable_frame (struct frame *f)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
582 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
583 EnableWindow (FRAME_MSWINDOWS_HANDLE (f), FALSE);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
584 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
585
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
586 static void
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 853
diff changeset
587 mswindows_set_title_from_ibyte (struct frame *f, Ibyte *title)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
589 unsigned int new_checksum = hash_string (title, qxestrlen (title));
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 546
diff changeset
590 if (new_checksum != FRAME_MSWINDOWS_TITLE_CHECKSUM (f))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 {
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 546
diff changeset
592 Extbyte *title_ext;
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 546
diff changeset
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 546
diff changeset
594 FRAME_MSWINDOWS_TITLE_CHECKSUM (f) = new_checksum;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
595 C_STRING_TO_TSTR (title, title_ext);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
596 qxeSetWindowText (FRAME_MSWINDOWS_HANDLE (f), title_ext);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 static Lisp_Object
3022
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
601 mswindows_window_id (Lisp_Object frame)
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
602 {
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
603 Ibyte str[255];
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
604 struct frame *f = decode_mswindows_frame (frame);
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
605
3023
d305f4207861 [xemacs-hg @ 2005-10-25 07:30:38 by ben]
ben
parents: 3022
diff changeset
606 qxesprintf (str, "%lu", (unsigned long) FRAME_MSWINDOWS_HANDLE (f));
3022
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
607 return build_intstring (str);
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
608 }
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
609
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
610 static Lisp_Object
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 mswindows_frame_property (struct frame *f, Lisp_Object property)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613 if (EQ (Qleft, property) || EQ (Qtop, property))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615 RECT rc;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
616 GetWindowRect (FRAME_MSWINDOWS_HANDLE (f), &rc);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617 return make_int (EQ (Qtop, property) ? rc.top : rc.left);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618 }
3022
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
619 if (EQ (Qwindow_id, property))
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
620 return mswindows_window_id (wrap_frame (f));
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
621
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 return Qunbound;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625 static int
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
626 mswindows_internal_frame_property_p (struct frame *UNUSED (f),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
627 Lisp_Object property)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629 return EQ (property, Qleft)
3022
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
630 || EQ (property, Qtop)
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
631 || EQ (property, Qwindow_id);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 /* #### frame-x.c has also this. Why?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 || STRINGP (property);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 mswindows_frame_properties (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 Lisp_Object props = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 RECT rc;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
642 GetWindowRect (FRAME_MSWINDOWS_HANDLE (f), &rc);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644 props = cons3 (Qtop, make_int (rc.top), props);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 props = cons3 (Qleft, make_int (rc.left), props);
3022
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
646 props = cons3 (Qwindow_id, mswindows_window_id (wrap_frame (f)), props);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 return props;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652 mswindows_set_frame_properties (struct frame *f, Lisp_Object plist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 int x=-1, y=-1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 int width = -1, height = -1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 BOOL width_specified_p = FALSE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 BOOL height_specified_p = FALSE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658 BOOL x_specified_p = FALSE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 BOOL y_specified_p = FALSE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 Lisp_Object tail;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 /* Extract the properties from plist */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 for (tail = plist; !NILP (tail); tail = Fcdr (Fcdr (tail)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 Lisp_Object prop = Fcar (tail);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666 Lisp_Object val = Fcar (Fcdr (tail));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 if (SYMBOLP (prop))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 /* Kludge to handle the font property. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 if (EQ (prop, Qfont))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673 /* If the value is not a string we silently ignore it. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 if (STRINGP (val))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676 Lisp_Object frm, font_spec;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
677
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
678 frm = wrap_frame (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679 font_spec = Fget (Fget_face (Qdefault), Qfont, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 Fadd_spec_to_specifier (font_spec, val, frm, Qnil, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 update_frame_face_values (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 else if (EQ (prop, Qwidth))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687 CHECK_INT (val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
688 width = XINT (val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689 width_specified_p = TRUE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
691 else if (EQ (prop, Qheight))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
692 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
693 CHECK_INT (val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694 height = XINT (val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695 height_specified_p = TRUE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697 else if (EQ (prop, Qleft))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
698 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699 CHECK_INT (val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700 x = XINT (val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701 x_specified_p = TRUE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703 else if (EQ (prop, Qtop))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
705 CHECK_INT (val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706 y = XINT (val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707 y_specified_p = TRUE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
709 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
710 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
711
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
712 /* Now we've extracted the properties, apply them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
713 Do not apply geometric properties during frame creation. This
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
714 is excessive anyways, and this loses because WM_SIZE has not
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
715 been sent yet, so frame width and height fields are not initialized.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
716
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
717 unfortunately WM_SIZE loses as well since the resize is only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
718 applied once and the first time WM_SIZE is applied not everything
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
719 is initialised in the frame (toolbars for instance). enabling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
720 this always makes no visible difference and fixes a whole host of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
721 bugs (and is more consistent with X) so I am going to reenable it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
722 --andyp */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
723 if ( FRAME_PIXWIDTH (f) && FRAME_PIXHEIGHT (f)
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
724 && (width_specified_p || height_specified_p
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
725 || x_specified_p || y_specified_p))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
726 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
727 XEMACS_RECT_WH dest = { x, y, width, height };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
728
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
729 mswindows_size_frame_internal (f, &dest);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
730 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
731 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
732
506
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
733 void
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
734 mswindows_size_frame_internal (struct frame *f, XEMACS_RECT_WH *dest)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
735 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
736 RECT rect, ws_rect;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
737 int pixel_width, pixel_height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
738 int size_p = (dest->width >=0 || dest->height >=0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
739 int move_p = (dest->top >=0 || dest->left >=0);
506
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
740 char_to_real_pixel_size (f, dest->width, dest->height, &pixel_width,
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
741 &pixel_height);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
742
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
743 if (dest->width < 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
744 pixel_width = FRAME_PIXWIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
745 if (dest->height < 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
746 pixel_height = FRAME_PIXHEIGHT (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
747
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
748 GetWindowRect (FRAME_MSWINDOWS_HANDLE (f), &rect);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
749 if (dest->left < 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
750 dest->left = rect.left;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
751 if (dest->top < 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
752 dest->top = rect.top;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
753
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
754 rect.left = rect.top = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
755 rect.right = pixel_width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
756 rect.bottom = pixel_height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
757
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
758 AdjustWindowRectEx (&rect,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
759 qxeGetWindowLong (FRAME_MSWINDOWS_HANDLE (f), GWL_STYLE),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
760 GetMenu (FRAME_MSWINDOWS_HANDLE (f)) != NULL,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
761 qxeGetWindowLong (FRAME_MSWINDOWS_HANDLE (f), GWL_EXSTYLE));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
762
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
763 /* resize and move the window so that it fits in the workspace. This is
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
764 not restrictive since this will happen later anyway in WM_SIZE. We
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
765 have to do this after adjusting the rect to account for menubar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
766 etc. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
767 mswindows_get_workspace_coords (&ws_rect);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
768 pixel_width = rect.right - rect.left;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
769 pixel_height = rect.bottom - rect.top;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
770 if (pixel_width > ws_rect.right - ws_rect.left)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
772 pixel_width = ws_rect.right - ws_rect.left;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
773 size_p=1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774 }
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
775 if (pixel_height > ws_rect.bottom - ws_rect.top)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
776 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
777 pixel_height = ws_rect.bottom - ws_rect.top;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
778 size_p=1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
779 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
780
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
781 /* adjust position so window is in workspace */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
782 if (dest->left + pixel_width > ws_rect.right)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
783 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
784 dest->left = ws_rect.right - pixel_width;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
785 move_p=1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
786 }
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
787 if (dest->left < ws_rect.left)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
788 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
789 dest->left = ws_rect.left;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
790 move_p=1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
791 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
792
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
793 if (dest->top + pixel_height > ws_rect.bottom)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
794 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
795 dest->top = ws_rect.bottom - pixel_height;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
796 move_p=1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
797 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
798 if (dest->top < ws_rect.top)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
799 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
800 dest->top = ws_rect.top;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
801 move_p=1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
802 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
803
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
804 if (IsIconic (FRAME_MSWINDOWS_HANDLE (f))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
805 || IsZoomed (FRAME_MSWINDOWS_HANDLE (f)))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
806 ShowWindow (FRAME_MSWINDOWS_HANDLE (f), SW_RESTORE);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
807
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
808 SetWindowPos (FRAME_MSWINDOWS_HANDLE (f), NULL,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
809 dest->left, dest->top, pixel_width, pixel_height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
810 SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSENDCHANGING
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
811 | (size_p ? 0 : SWP_NOSIZE)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
812 | (move_p ? 0 : SWP_NOMOVE));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
813 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
814
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
815 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
816 mswindows_get_frame_parent (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
817 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
818 HWND hwnd = FRAME_MSWINDOWS_HANDLE (f);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
819 hwnd = GetParent (hwnd);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
820 if (hwnd)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
821 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
822 Lisp_Object parent;
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 800
diff changeset
823 parent = VOID_TO_LISP ((void *) qxeGetWindowLong (hwnd, XWL_FRAMEOBJ));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
824 assert (FRAME_MSWINDOWS_P (XFRAME (parent)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
825 return parent;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
826 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
827 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
828 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
829 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
830
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
831 static void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
832 mswindows_update_frame_external_traits (struct frame *UNUSED (frm),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
833 Lisp_Object UNUSED (name))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
834 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
835 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
836
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
837 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
838 mswindows_frame_size_fixed_p (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
839 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
840 /* Frame size cannot change if the frame is maximized */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
841 return IsZoomed (FRAME_MSWINDOWS_HANDLE (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
843
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
844 /*---------------------------------------------------------------------*/
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
845 /*----- PRINTER FRAME -----*/
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
846 /*---------------------------------------------------------------------*/
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
847
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
848 /*
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
849 * With some driver/os combination (I discovered this with HP drivers
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
850 * under W2K), DC geometry is reset upon StartDoc and EndPage
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
851 * calls. This is called every time one of these calls is made.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
852 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
853 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
854 apply_dc_geometry (struct frame* f)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
855 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
856 HDC hdc = DEVICE_MSPRINTER_HDC (XDEVICE (FRAME_DEVICE (f)));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
857 SetTextAlign (hdc, TA_BASELINE | TA_LEFT | TA_NOUPDATECP);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
858 SetViewportOrgEx (hdc, FRAME_MSPRINTER_PIXLEFT(f),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
859 FRAME_MSPRINTER_PIXTOP(f), NULL);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
860 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
861
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
862 void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
863 msprinter_start_page (struct frame *f)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
864 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
865 if (!FRAME_MSPRINTER_PAGE_STARTED (f))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
866 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
867 FRAME_MSPRINTER_PAGE_STARTED (f) = 1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
868 StartPage (DEVICE_MSPRINTER_HDC (XDEVICE (FRAME_DEVICE (f))));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
869 apply_dc_geometry (f);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
870 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
871 }
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
872
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
873 static void
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
874 error_frame_unsizable (struct frame *f)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
875 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
876 Lisp_Object frame = wrap_frame (f);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
877
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
878 invalid_change ("Cannot resize frame (margins) after print job has started.",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
879 frame);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
880 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
881
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
882 static void
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
883 maybe_error_if_job_active (struct frame *f)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
884 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
885 if (FRAME_MSPRINTER_JOB_STARTED (f))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
886 error_frame_unsizable (f);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
887 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
888
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
889 static void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
890 msprinter_init_frame_1 (struct frame *f, Lisp_Object UNUSED (props),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
891 int UNUSED (frame_name_is_defaulted))
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
892 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
893 /* Make sure this is the only frame on device. Windows printer can
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
894 handle only one job at a time. */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
895 if (!NILP (DEVICE_FRAME_LIST (XDEVICE (FRAME_DEVICE (f)))))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
896 invalid_operation ("Only one frame (print job) at a time is allowed on "
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
897 "this printer device", FRAME_DEVICE (f));
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
898
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
899 f->frame_data = xnew_and_zero (struct msprinter_frame);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
900
506
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
901 FRAME_MSPRINTER_TOP_MARGIN (f) =
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
902 mswindows_get_default_margin (Qtop_margin);
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
903 FRAME_MSPRINTER_BOTTOM_MARGIN (f) =
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
904 mswindows_get_default_margin (Qbottom_margin);
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
905 FRAME_MSPRINTER_LEFT_MARGIN (f) =
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
906 mswindows_get_default_margin (Qleft_margin);
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
907 FRAME_MSPRINTER_RIGHT_MARGIN (f) =
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
908 mswindows_get_default_margin (Qright_margin);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
909
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
910 /* Negative for "uinspecified" */
506
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
911 FRAME_MSPRINTER_CHARWIDTH (f) = -1;
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
912 FRAME_MSPRINTER_CHARHEIGHT (f) = -1;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
913 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
914
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
915 static void
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
916 msprinter_init_frame_3 (struct frame *f)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
917 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
918 DOCINFOW di;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
919 struct device *device = XDEVICE (FRAME_DEVICE (f));
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
920 int frame_left, frame_top, frame_width, frame_height;
903
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
921
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
922 /* DC might be recreated in msprinter_apply_devmode,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
923 so do not initialize until now */
903
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
924 HDC hdc = DEVICE_MSPRINTER_HDC (device);
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
925 int logpixelsx = GetDeviceCaps (hdc, LOGPIXELSX);
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
926 int logpixelsy = GetDeviceCaps (hdc, LOGPIXELSY);
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
927 int physicaloffsetx = GetDeviceCaps (hdc, PHYSICALOFFSETX);
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
928 int physicaloffsety = GetDeviceCaps (hdc, PHYSICALOFFSETY);
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
929 int physicalheight = GetDeviceCaps (hdc, PHYSICALHEIGHT);
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
930 int physicalwidth = GetDeviceCaps (hdc, PHYSICALWIDTH);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
931
903
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
932 /* Compute geometry properties.
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
933 Conversion is from TWIPS -> inches -> pixels. */
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
934 frame_left = MulDiv (logpixelsx, FRAME_MSPRINTER_LEFT_MARGIN(f), 1440)
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
935 - physicaloffsetx;
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
936
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
937 if (FRAME_MSPRINTER_CHARWIDTH (f) > 0)
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
938 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
939 char_to_real_pixel_size (f, FRAME_MSPRINTER_CHARWIDTH (f), 0,
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
940 &frame_width, NULL);
903
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
941 FRAME_MSPRINTER_RIGHT_MARGIN(f) =
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
942 MulDiv (physicalwidth - (frame_left + frame_width), 1440,
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
943 logpixelsx);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
944 }
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
945 else
903
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
946 frame_width = physicalwidth - frame_left
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
947 - MulDiv (logpixelsx, FRAME_MSPRINTER_RIGHT_MARGIN(f), 1440)
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
948 - physicaloffsetx;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
949
903
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
950 frame_top = MulDiv (logpixelsy, FRAME_MSPRINTER_TOP_MARGIN(f), 1440)
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
951 - physicaloffsety;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
952
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
953 if (FRAME_MSPRINTER_CHARHEIGHT (f) > 0)
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
954 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
955 char_to_real_pixel_size (f, 0, FRAME_MSPRINTER_CHARHEIGHT (f),
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
956 NULL, &frame_height);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
957
903
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
958 FRAME_MSPRINTER_BOTTOM_MARGIN(f) =
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
959 MulDiv (physicalheight - (frame_top + frame_height), 1440,
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
960 logpixelsy);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
961 }
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
962 else
903
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
963 frame_height = physicalheight - frame_top
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
964 - MulDiv (logpixelsy, FRAME_MSPRINTER_BOTTOM_MARGIN(f), 1440)
4a27df428c73 [xemacs-hg @ 2002-07-06 05:48:14 by andyp]
andyp
parents: 872
diff changeset
965 - physicaloffsety;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
966
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
967 /* Geometry sanity checks */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
968 if (!frame_pixsize_valid_p (f, frame_width, frame_height))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
969 invalid_operation ("Area inside print margins has shrunk to naught",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
970 STRINGP (f->name) ? f->name : Qunbound);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
971
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
972 if (frame_left < 0
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
973 || frame_top < 0
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
974 || frame_left + frame_width > GetDeviceCaps (hdc, HORZRES)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
975 || frame_top + frame_height > GetDeviceCaps (hdc, VERTRES))
546
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 536
diff changeset
976 invalid_operation ("Print area is outside of the printer's "
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
977 "hardware printable area",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
978 STRINGP (f->name) ? f->name : Qunbound);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
979
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
980 /* Apply XEmacs frame geometry and layout windows */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
981 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
982 int rows, columns;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
983 FRAME_PIXWIDTH (f) = frame_width;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
984 FRAME_PIXHEIGHT (f) = frame_height;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
985 pixel_to_char_size (f, frame_width, frame_height, &columns, &rows);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
986 change_frame_size (f, rows, columns, 0);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
987 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
988
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
989 FRAME_MSPRINTER_PIXLEFT(f) = frame_left;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
990 FRAME_MSPRINTER_PIXTOP(f) = frame_top;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
991
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
992 /* Start print job */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
993 di.cbSize = sizeof (di);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
994 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
995 const Extbyte *nameext;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
996
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
997 if (STRINGP (f->name))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
998 LISP_STRING_TO_TSTR (f->name, nameext);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
999 else
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1000 nameext = XETEXT ("XEmacs print document");
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1001 di.lpszDocName = (XELPTSTR) nameext;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1002 }
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1003 di.lpszOutput = NULL;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1004 di.lpszDatatype = NULL;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1005 di.fwType = 0;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1006
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1007 if (qxeStartDoc (hdc, &di) <= 0)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1008 invalid_operation ("Cannot start print job",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1009 STRINGP (f->name) ? f->name : Qunbound);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1010
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1011 apply_dc_geometry (f);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1012
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1013 /* Finish frame setup */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1014 FRAME_MSPRINTER_JOB_STARTED (f) = 1;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1015 FRAME_VISIBLE_P (f) = 0;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1016 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1017
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1018 static void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
1019 msprinter_mark_frame (struct frame *UNUSED (f))
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1020 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1021 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1022
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1023 static void
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1024 msprinter_delete_frame (struct frame *f)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1025 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1026 if (f->frame_data)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1027 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1028 HDC hdc = DEVICE_MSPRINTER_HDC (XDEVICE (FRAME_DEVICE (f)));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1029 if (FRAME_MSPRINTER_PAGE_STARTED (f))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1030 EndPage (hdc);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1031 if (FRAME_MSPRINTER_JOB_STARTED (f))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1032 EndDoc (hdc);
1726
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1395
diff changeset
1033 xfree (f->frame_data, void *);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1034 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1035
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1036 f->frame_data = 0;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1037 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1038
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1039 static Lisp_Object
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1040 msprinter_frame_property (struct frame *f, Lisp_Object property)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1041 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1042 if (EQ (Qleft_margin, property))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1043 return make_int (FRAME_MSPRINTER_LEFT_MARGIN (f));
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1044 else if (EQ (Qtop_margin, property))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1045 return make_int (FRAME_MSPRINTER_TOP_MARGIN (f));
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1046 if (EQ (Qright_margin, property))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1047 return make_int (FRAME_MSPRINTER_RIGHT_MARGIN (f));
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1048 else if (EQ (Qbottom_margin, property))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1049 return make_int (FRAME_MSPRINTER_BOTTOM_MARGIN (f));
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1050 else
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1051 return Qunbound;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1052 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1053
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1054 static int
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
1055 msprinter_internal_frame_property_p (struct frame *UNUSED (f),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
1056 Lisp_Object property)
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1057 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1058 return (EQ (Qleft_margin, property) || EQ (Qtop_margin, property) ||
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1059 EQ (Qright_margin, property) || EQ (Qbottom_margin, property));
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1060 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1061
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1062 static Lisp_Object
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1063 msprinter_frame_properties (struct frame *f)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1064 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1065 Lisp_Object props = Qnil;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1066 props = cons3 (Qbottom_margin,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1067 make_int (FRAME_MSPRINTER_BOTTOM_MARGIN (f)), props);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1068 props = cons3 (Qright_margin,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1069 make_int (FRAME_MSPRINTER_RIGHT_MARGIN (f)), props);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1070 props = cons3 (Qtop_margin,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1071 make_int (FRAME_MSPRINTER_TOP_MARGIN (f)), props);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1072 props = cons3 (Qleft_margin,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1073 make_int (FRAME_MSPRINTER_LEFT_MARGIN (f)), props);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1074 return props;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1075 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1076
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1077 static void
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1078 msprinter_set_frame_properties (struct frame *f, Lisp_Object plist)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1079 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1080 Lisp_Object tail;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1081
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1082 /* Extract the properties from plist */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1083 for (tail = plist; !NILP (tail); tail = Fcdr (Fcdr (tail)))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1084 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1085 Lisp_Object prop = Fcar (tail);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1086 Lisp_Object val = Fcar (Fcdr (tail));
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1087
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1088 if (SYMBOLP (prop))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1089 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1090 if (EQ (prop, Qwidth))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1091 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1092 maybe_error_if_job_active (f);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1093 if (!NILP (val))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1094 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1095 CHECK_NATNUM (val);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1096 FRAME_MSPRINTER_CHARWIDTH (f) = XINT (val);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1097 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1098 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1099 if (EQ (prop, Qheight))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1100 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1101 maybe_error_if_job_active (f);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1102 if (!NILP (val))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1103 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1104 CHECK_NATNUM (val);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1105 FRAME_MSPRINTER_CHARHEIGHT (f) = XINT (val);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1106 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1107 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1108 else if (EQ (prop, Qleft_margin))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1109 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1110 maybe_error_if_job_active (f);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1111 CHECK_NATNUM (val);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1112 FRAME_MSPRINTER_LEFT_MARGIN (f) = XINT (val);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1113 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1114 else if (EQ (prop, Qtop_margin))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1115 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1116 maybe_error_if_job_active (f);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1117 CHECK_NATNUM (val);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1118 FRAME_MSPRINTER_TOP_MARGIN (f) = XINT (val);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1119 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1120 else if (EQ (prop, Qright_margin))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1121 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1122 maybe_error_if_job_active (f);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1123 CHECK_NATNUM (val);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1124 FRAME_MSPRINTER_RIGHT_MARGIN (f) = XINT (val);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1125 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1126 else if (EQ (prop, Qbottom_margin))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1127 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1128 maybe_error_if_job_active (f);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1129 CHECK_NATNUM (val);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1130 FRAME_MSPRINTER_BOTTOM_MARGIN (f) = XINT (val);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1131 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1132 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1133 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1134 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1135
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1136 static void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
1137 msprinter_set_frame_size (struct frame *f, int UNUSED (width),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1726
diff changeset
1138 int UNUSED (height))
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1139 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1140 /* We're absolutely unsizeable */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1141 error_frame_unsizable (f);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1142 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1143
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1144 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1145 msprinter_eject_page (struct frame *f)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1146 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1147 /* #### Should we eject empty pages? */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1148 if (FRAME_MSPRINTER_PAGE_STARTED (f))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1149 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1150 FRAME_MSPRINTER_PAGE_STARTED (f) = 0;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1151 EndPage (DEVICE_MSPRINTER_HDC (XDEVICE (FRAME_DEVICE (f))));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1152 apply_dc_geometry (f);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1153 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1154 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1155
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1156
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1157 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1158 console_type_create_frame_mswindows (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1159 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1160 /* Display frames */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1161 CONSOLE_HAS_METHOD (mswindows, init_frame_1);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1162 CONSOLE_HAS_METHOD (mswindows, init_frame_2);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1163 CONSOLE_HAS_METHOD (mswindows, init_frame_3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1164 CONSOLE_HAS_METHOD (mswindows, after_init_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1165 CONSOLE_HAS_METHOD (mswindows, mark_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1166 CONSOLE_HAS_METHOD (mswindows, focus_on_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1167 CONSOLE_HAS_METHOD (mswindows, delete_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1168 CONSOLE_HAS_METHOD (mswindows, get_mouse_position);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1169 CONSOLE_HAS_METHOD (mswindows, set_mouse_position);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1170 CONSOLE_HAS_METHOD (mswindows, raise_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1171 CONSOLE_HAS_METHOD (mswindows, lower_frame);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1172 CONSOLE_HAS_METHOD (mswindows, enable_frame);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1173 CONSOLE_HAS_METHOD (mswindows, disable_frame);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1174 CONSOLE_HAS_METHOD (mswindows, make_frame_visible);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1175 CONSOLE_HAS_METHOD (mswindows, make_frame_invisible);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1176 CONSOLE_HAS_METHOD (mswindows, iconify_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1177 CONSOLE_HAS_METHOD (mswindows, set_frame_size);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1178 CONSOLE_HAS_METHOD (mswindows, set_frame_position);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1179 CONSOLE_HAS_METHOD (mswindows, frame_property);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1180 CONSOLE_HAS_METHOD (mswindows, internal_frame_property_p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1181 CONSOLE_HAS_METHOD (mswindows, frame_properties);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1182 CONSOLE_HAS_METHOD (mswindows, set_frame_properties);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 853
diff changeset
1183 CONSOLE_HAS_METHOD (mswindows, set_title_from_ibyte);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 853
diff changeset
1184 /* CONSOLE_HAS_METHOD (mswindows, set_icon_name_from_ibyte); */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1185 CONSOLE_HAS_METHOD (mswindows, frame_visible_p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1186 CONSOLE_HAS_METHOD (mswindows, frame_totally_visible_p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1187 CONSOLE_HAS_METHOD (mswindows, frame_iconified_p);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1188 CONSOLE_HAS_METHOD (mswindows, set_frame_pointer);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1189 CONSOLE_HAS_METHOD (mswindows, set_frame_icon);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1190 CONSOLE_HAS_METHOD (mswindows, get_frame_parent);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1191 CONSOLE_HAS_METHOD (mswindows, update_frame_external_traits);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1192 CONSOLE_HAS_METHOD (mswindows, frame_size_fixed_p);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1193
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1194 /* Printer frames, aka print jobs */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1195 CONSOLE_HAS_METHOD (msprinter, init_frame_1);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1196 CONSOLE_HAS_METHOD (msprinter, init_frame_3);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1197 CONSOLE_HAS_METHOD (msprinter, mark_frame);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1198 CONSOLE_HAS_METHOD (msprinter, delete_frame);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1199 CONSOLE_HAS_METHOD (msprinter, frame_property);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1200 CONSOLE_HAS_METHOD (msprinter, internal_frame_property_p);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1201 CONSOLE_HAS_METHOD (msprinter, frame_properties);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1202 CONSOLE_HAS_METHOD (msprinter, set_frame_properties);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1203 CONSOLE_HAS_METHOD (msprinter, set_frame_size);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1204 CONSOLE_HAS_METHOD (msprinter, eject_page);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1205 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1206
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1207 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1208 syms_of_frame_mswindows (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1209 {
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3023
diff changeset
1210 #ifdef NEW_GC
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 4139
diff changeset
1211 INIT_LISP_OBJECT (mswindows_frame);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3023
diff changeset
1212 #endif /* NEW_GC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1213 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1214
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1215 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1216 reinit_vars_of_frame_mswindows (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1217 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1218 /* Needn't staticpro -- see comment above. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1219 Vmswindows_frame_being_created = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1220 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1221
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1222 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1223 vars_of_frame_mswindows (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1224 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1225 DEFVAR_LISP ("mswindows-use-system-frame-size-defaults", &Vmswindows_use_system_frame_size_defaults /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1226 Controls whether to use system or XEmacs defaults for frame size.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1227 If nil then reasonable defaults are used for initial frame sizes. If t
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1228 then the system will choose default sizes for the frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1229 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1230 Vmswindows_use_system_frame_size_defaults = Qnil;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1231
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1232 DEFVAR_LISP ("default-mswindows-frame-plist", &Vdefault_mswindows_frame_plist /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1233 Plist of default frame-creation properties for mswindows frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1234 These override what is specified in `default-frame-plist', but are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1235 overridden by the arguments to the particular call to `make-frame'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1236
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1237 Note: In many cases, properties of a frame are available as specifiers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1238 instead of through the frame-properties mechanism.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1239
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1240 Here is a list of recognized frame properties, other than those
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1241 documented in `set-frame-properties' (they can be queried and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1242 set at any time, except as otherwise noted):
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1243
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1244 initially-unmapped If non-nil, the frame will not be visible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1245 when it is created. In this case, you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1246 need to call `make-frame-visible' to make
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1247 the frame appear.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1248 popup If non-nil, it should be a frame, and this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1249 frame will be created as a "popup" frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1250 whose parent is the given frame. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1251 will make the window manager treat the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1252 frame as a dialog box, which may entail
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1253 doing different things (e.g. not asking
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1254 for positioning, and not iconifying
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1255 separate from its parent).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1256 top Y position (in pixels) of the upper-left
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1257 outermost corner of the frame (i.e. the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1258 upper-left of the window-manager
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1259 decorations).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1260 left X position (in pixels) of the upper-left
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1261 outermost corner of the frame (i.e. the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1262 upper-left of the window-manager
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1263 decorations).
3022
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
1264 window-id Window handle (HWND) of the frame.
dd34bc8e9423 [xemacs-hg @ 2005-10-25 03:54:01 by ben]
ben
parents: 2872
diff changeset
1265 Cannot be set.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1266
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1267 See also `default-frame-plist', which specifies properties which apply
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1268 to all frames, not just mswindows frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1269 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1270 Vdefault_mswindows_frame_plist = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1271
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1272 mswindows_console_methods->device_specific_frame_props =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1273 &Vdefault_mswindows_frame_plist;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1274
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1275 DEFVAR_LISP ("default-msprinter-frame-plist", &Vdefault_msprinter_frame_plist /*
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1276 Plist of default frame-creation properties for msprinter print job frames.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1277 These override what is specified in `default-frame-plist', but are
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1278 overridden by the arguments to the particular call to `make-frame'.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1279
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1280 Note: In many cases, properties of a frame are available as specifiers
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1281 instead of through the frame-properties mechanism.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1282
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1283 Here is a list of recognized frame properties, other than those
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1284 documented in `set-frame-properties' (they can be queried and
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1285 set at any time, except as otherwise noted):
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1286
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1287 left-margin Margin of the page, in twips. Twip is a
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1288 top-margin typographical unit of measurement,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1289 right-margin equal to 1/1440 of an inch, or 1/20 of a
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1290 bottom-margin point, and roughly equal to 7/400 of a
506
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
1291 millimeter. If not specified, the left
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
1292 and right margins default to 1 inch
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
1293 (25.4 mm) and the top and bottom margins
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
1294 to 0.5 inch (12.7 mm).
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1295
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1296 MARGINS NOTE. right-margin and bottom-margin are overridden by
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1297 the height and width properties. If you want to specify size
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1298 of the printable area in character, as with the rest of XEmacs,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1299 use these properties. If height and/or width are nil, then
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1300 corresponding margin setting is taken into account. If you
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1301 specify height and/or width in `default-frame-plist', but still
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1302 want to specify right/bottom margins, set height/width in this
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1303 plist to nil, as in this example:
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1304
506
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
1305 (setq default-frame-plist '(height 55 width 80)
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
1306 default-msprinter-frame-plist '(height nil width nil))
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1307
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1308 See also `default-frame-plist', which specifies properties which apply
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1309 to all frames, not just mswindows frames.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1310 */ );
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1311 Vdefault_msprinter_frame_plist = Qnil;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1312
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1313 msprinter_console_methods->device_specific_frame_props =
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1314 &Vdefault_msprinter_frame_plist;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1315 }