annotate src/frame-msw.c @ 665:fdefd0186b75

[xemacs-hg @ 2001-09-20 06:28:42 by ben] The great integral types renaming. The purpose of this is to rationalize the names used for various integral types, so that they match their intended uses and follow consist conventions, and eliminate types that were not semantically different from each other. The conventions are: -- All integral types that measure quantities of anything are signed. Some people disagree vociferously with this, but their arguments are mostly theoretical, and are vastly outweighed by the practical headaches of mixing signed and unsigned values, and more importantly by the far increased likelihood of inadvertent bugs: Because of the broken "viral" nature of unsigned quantities in C (operations involving mixed signed/unsigned are done unsigned, when exactly the opposite is nearly always wanted), even a single error in declaring a quantity unsigned that should be signed, or even the even more subtle error of comparing signed and unsigned values and forgetting the necessary cast, can be catastrophic, as comparisons will yield wrong results. -Wsign-compare is turned on specifically to catch this, but this tends to result in a great number of warnings when mixing signed and unsigned, and the casts are annoying. More has been written on this elsewhere. -- All such quantity types just mentioned boil down to EMACS_INT, which is 32 bits on 32-bit machines and 64 bits on 64-bit machines. This is guaranteed to be the same size as Lisp objects of type `int', and (as far as I can tell) of size_t (unsigned!) and ssize_t. The only type below that is not an EMACS_INT is Hashcode, which is an unsigned value of the same size as EMACS_INT. -- Type names should be relatively short (no more than 10 characters or so), with the first letter capitalized and no underscores if they can at all be avoided. -- "count" == a zero-based measurement of some quantity. Includes sizes, offsets, and indexes. -- "bpos" == a one-based measurement of a position in a buffer. "Charbpos" and "Bytebpos" count text in the buffer, rather than bytes in memory; thus Bytebpos does not directly correspond to the memory representation. Use "Membpos" for this. -- "Char" refers to internal-format characters, not to the C type "char", which is really a byte. -- For the actual name changes, see the script below. I ran the following script to do the conversion. (NOTE: This script is idempotent. You can safely run it multiple times and it will not screw up previous results -- in fact, it will do nothing if nothing has changed. Thus, it can be run repeatedly as necessary to handle patches coming in from old workspaces, or old branches.) There are two tags, just before and just after the change: `pre-integral-type-rename' and `post-integral-type-rename'. When merging code from the main trunk into a branch, the best thing to do is first merge up to `pre-integral-type-rename', then apply the script and associated changes, then merge from `post-integral-type-change' to the present. (Alternatively, just do the merging in one operation; but you may then have a lot of conflicts needing to be resolved by hand.) Script `fixtypes.sh' follows: ----------------------------------- cut ------------------------------------ files="*.[ch] s/*.h m/*.h config.h.in ../configure.in Makefile.in.in ../lib-src/*.[ch] ../lwlib/*.[ch]" gr Memory_Count Bytecount $files gr Lstream_Data_Count Bytecount $files gr Element_Count Elemcount $files gr Hash_Code Hashcode $files gr extcount bytecount $files gr bufpos charbpos $files gr bytind bytebpos $files gr memind membpos $files gr bufbyte intbyte $files gr Extcount Bytecount $files gr Bufpos Charbpos $files gr Bytind Bytebpos $files gr Memind Membpos $files gr Bufbyte Intbyte $files gr EXTCOUNT BYTECOUNT $files gr BUFPOS CHARBPOS $files gr BYTIND BYTEBPOS $files gr MEMIND MEMBPOS $files gr BUFBYTE INTBYTE $files gr MEMORY_COUNT BYTECOUNT $files gr LSTREAM_DATA_COUNT BYTECOUNT $files gr ELEMENT_COUNT ELEMCOUNT $files gr HASH_CODE HASHCODE $files ----------------------------------- cut ------------------------------------ `fixtypes.sh' is a Bourne-shell script; it uses 'gr': ----------------------------------- cut ------------------------------------ #!/bin/sh # Usage is like this: # gr FROM TO FILES ... # globally replace FROM with TO in FILES. FROM and TO are regular expressions. # backup files are stored in the `backup' directory. from="$1" to="$2" shift 2 echo ${1+"$@"} | xargs global-replace "s/$from/$to/g" ----------------------------------- cut ------------------------------------ `gr' in turn uses a Perl script to do its real work, `global-replace', which follows: ----------------------------------- cut ------------------------------------ : #-*- Perl -*- ### global-modify --- modify the contents of a file by a Perl expression ## Copyright (C) 1999 Martin Buchholz. ## Copyright (C) 2001 Ben Wing. ## Authors: Martin Buchholz <martin@xemacs.org>, Ben Wing <ben@xemacs.org> ## Maintainer: Ben Wing <ben@xemacs.org> ## Current Version: 1.0, May 5, 2001 # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with XEmacs; see the file COPYING. If not, write to the Free # Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. eval 'exec perl -w -S $0 ${1+"$@"}' if 0; use strict; use FileHandle; use Carp; use Getopt::Long; use File::Basename; (my $myName = $0) =~ s@.*/@@; my $usage=" Usage: $myName [--help] [--backup-dir=DIR] [--line-mode] [--hunk-mode] PERLEXPR FILE ... Globally modify a file, either line by line or in one big hunk. Typical usage is like this: [with GNU print, GNU xargs: guaranteed to handle spaces, quotes, etc. in file names] find . -name '*.[ch]' -print0 | xargs -0 $0 's/\bCONST\b/const/g'\n [with non-GNU print, xargs] find . -name '*.[ch]' -print | xargs $0 's/\bCONST\b/const/g'\n The file is read in, either line by line (with --line-mode specified) or in one big hunk (with --hunk-mode specified; it's the default), and the Perl expression is then evalled with \$_ set to the line or hunk of text, including the terminating newline if there is one. It should destructively modify the value there, storing the changed result in \$_. Files in which any modifications are made are backed up to the directory specified using --backup-dir, or to `backup' by default. To disable this, use --backup-dir= with no argument. Hunk mode is the default because it is MUCH MUCH faster than line-by-line. Use line-by-line only when it matters, e.g. you want to do a replacement only once per line (the default without the `g' argument). Conversely, when using hunk mode, *ALWAYS* use `g'; otherwise, you will only make one replacement in the entire file! "; my %options = (); $Getopt::Long::ignorecase = 0; &GetOptions ( \%options, 'help', 'backup-dir=s', 'line-mode', 'hunk-mode', ); die $usage if $options{"help"} or @ARGV <= 1; my $code = shift; die $usage if grep (-d || ! -w, @ARGV); sub SafeOpen { open ((my $fh = new FileHandle), $_[0]); confess "Can't open $_[0]: $!" if ! defined $fh; return $fh; } sub SafeClose { close $_[0] or confess "Can't close $_[0]: $!"; } sub FileContents { my $fh = SafeOpen ("< $_[0]"); my $olddollarslash = $/; local $/ = undef; my $contents = <$fh>; $/ = $olddollarslash; return $contents; } sub WriteStringToFile { my $fh = SafeOpen ("> $_[0]"); binmode $fh; print $fh $_[1] or confess "$_[0]: $!\n"; SafeClose $fh; } foreach my $file (@ARGV) { my $changed_p = 0; my $new_contents = ""; if ($options{"line-mode"}) { my $fh = SafeOpen $file; while (<$fh>) { my $save_line = $_; eval $code; $changed_p = 1 if $save_line ne $_; $new_contents .= $_; } } else { my $orig_contents = $_ = FileContents $file; eval $code; if ($_ ne $orig_contents) { $changed_p = 1; $new_contents = $_; } } if ($changed_p) { my $backdir = $options{"backup-dir"}; $backdir = "backup" if !defined ($backdir); if ($backdir) { my ($name, $path, $suffix) = fileparse ($file, ""); my $backfulldir = $path . $backdir; my $backfile = "$backfulldir/$name"; mkdir $backfulldir, 0755 unless -d $backfulldir; print "modifying $file (original saved in $backfile)\n"; rename $file, $backfile; } WriteStringToFile ($file, $new_contents); } } ----------------------------------- cut ------------------------------------ In addition to those programs, I needed to fix up a few other things, particularly relating to the duplicate definitions of types, now that some types merged with others. Specifically: 1. in lisp.h, removed duplicate declarations of Bytecount. The changed code should now look like this: (In each code snippet below, the first and last lines are the same as the original, as are all lines outside of those lines. That allows you to locate the section to be replaced, and replace the stuff in that section, verifying that there isn't anything new added that would need to be kept.) --------------------------------- snip ------------------------------------- /* Counts of bytes or chars */ typedef EMACS_INT Bytecount; typedef EMACS_INT Charcount; /* Counts of elements */ typedef EMACS_INT Elemcount; /* Hash codes */ typedef unsigned long Hashcode; /* ------------------------ dynamic arrays ------------------- */ --------------------------------- snip ------------------------------------- 2. in lstream.h, removed duplicate declaration of Bytecount. Rewrote the comment about this type. The changed code should now look like this: --------------------------------- snip ------------------------------------- #endif /* The have been some arguments over the what the type should be that specifies a count of bytes in a data block to be written out or read in, using Lstream_read(), Lstream_write(), and related functions. Originally it was long, which worked fine; Martin "corrected" these to size_t and ssize_t on the grounds that this is theoretically cleaner and is in keeping with the C standards. Unfortunately, this practice is horribly error-prone due to design flaws in the way that mixed signed/unsigned arithmetic happens. In fact, by doing this change, Martin introduced a subtle but fatal error that caused the operation of sending large mail messages to the SMTP server under Windows to fail. By putting all values back to be signed, avoiding any signed/unsigned mixing, the bug immediately went away. The type then in use was Lstream_Data_Count, so that it be reverted cleanly if a vote came to that. Now it is Bytecount. Some earlier comments about why the type must be signed: This MUST BE SIGNED, since it also is used in functions that return the number of bytes actually read to or written from in an operation, and these functions can return -1 to signal error. Note that the standard Unix read() and write() functions define the count going in as a size_t, which is UNSIGNED, and the count going out as an ssize_t, which is SIGNED. This is a horrible design flaw. Not only is it highly likely to lead to logic errors when a -1 gets interpreted as a large positive number, but operations are bound to fail in all sorts of horrible ways when a number in the upper-half of the size_t range is passed in -- this number is unrepresentable as an ssize_t, so code that checks to see how many bytes are actually written (which is mandatory if you are dealing with certain types of devices) will get completely screwed up. --ben */ typedef enum lstream_buffering --------------------------------- snip ------------------------------------- 3. in dumper.c, there are four places, all inside of switch() statements, where XD_BYTECOUNT appears twice as a case tag. In each case, the two case blocks contain identical code, and you should *REMOVE THE SECOND* and leave the first.
author ben
date Thu, 20 Sep 2001 06:31:11 +0000
parents 5fd7ba8b56e7
children 943eaba38521
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.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 Copyright (C) 1995, 1996 Ben Wing.
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 /* Authorship:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 Ultimately based on FSF.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 Substantially rewritten for XEmacs by Ben Wing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 Rewritten for mswindows by Jonathan Harris, November 1997 for 21.0.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 Graphics features added and frame resizing fiddled with by Andy Piper.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 #include <config.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 #include "lisp.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 #include "buffer.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 #include "elhash.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 #include "console-msw.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 #include "glyphs-msw.h"
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"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 #include "frame.h"
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 #define MSWINDOWS_FRAME_STYLE (WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_OVERLAPPEDWINDOW)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 #define MSWINDOWS_POPUP_STYLE (WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_POPUP \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 | WS_CAPTION | WS_BORDER | WS_SYSMENU | WS_MINIMIZEBOX)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 #define MSWINDOWS_FRAME_EXSTYLE WS_EX_OVERLAPPEDWINDOW
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 #define MSWINDOWS_POPUP_EXSTYLE WS_EX_PALETTEWINDOW
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 /* Default popup left top corner offset from the same
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 corner of the parent frame, in pixel */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 #define POPUP_OFFSET 30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 /* Default popup size, in characters */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 #define POPUP_WIDTH 30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 #define POPUP_HEIGHT 10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
61 /* Default regular frame size, in characters */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 #define DEFAULT_FRAME_WIDTH 80
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 #define DEFAULT_FRAME_HEIGHT 35
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 #ifdef HAVE_MENUBARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 #define ADJR_MENUFLAG TRUE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 #define ADJR_MENUFLAG FALSE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 /* Default properties to use when creating frames. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 Lisp_Object Vdefault_mswindows_frame_plist;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
73 Lisp_Object Vdefault_msprinter_frame_plist;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 Lisp_Object Vmswindows_use_system_frame_size_defaults;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 /* This does not need to be GC protected, as it holds a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 frame Lisp_Object already protected by Fmake_frame */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 Lisp_Object Vmswindows_frame_being_created;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
80 /*---------------------------------------------------------------------*/
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
81 /*----- DISPLAY FRAME -----*/
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
82 /*---------------------------------------------------------------------*/
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
83
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
84 HWND
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
85 mswindows_get_selected_frame_hwnd (void)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
86 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
87 Lisp_Object frame, device;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
88
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
89 device = Ffind_device (Qnil, Qmswindows);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
90 if (NILP (device))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
91 return NULL;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
92 frame = DEVICE_SELECTED_FRAME (XDEVICE (device));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
93 if (NILP (frame))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
94 return NULL;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
95
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
96 return FRAME_MSWINDOWS_HANDLE (XFRAME (frame));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
97 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
98
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 mswindows_init_frame_1 (struct frame *f, Lisp_Object props)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 Lisp_Object initially_unmapped;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 Lisp_Object name, height, width, popup, top, left;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 Lisp_Object frame_obj = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 RECT rect;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 XEMACS_RECT_WH rect_default;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 DWORD style, exstyle;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 HWND hwnd, hwnd_parent;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 /* Pick up relevant properties */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 initially_unmapped = Fplist_get (props, Qinitially_unmapped, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 name = Fplist_get (props, Qname, Qnil);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
113
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 popup = Fplist_get (props, Qpopup, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 if (EQ (popup, Qt))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 popup = Fselected_frame (Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 left = Fplist_get (props, Qleft, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 if (!NILP (left))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 CHECK_INT (left);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 top = Fplist_get (props, Qtop, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 if (!NILP (top))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 CHECK_INT (top);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 width = Fplist_get (props, Qwidth, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 if (!NILP (width))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 CHECK_INT (width);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 height = Fplist_get (props, Qheight, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 if (!NILP (height))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 CHECK_INT (height);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 f->frame_data = xnew_and_zero (struct mswindows_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 FRAME_MSWINDOWS_TARGET_RECT (f) = xnew_and_zero (XEMACS_RECT_WH);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 FRAME_MSWINDOWS_TARGET_RECT (f)->left = NILP (left) ? -1 : abs (XINT (left));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 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
139 FRAME_MSWINDOWS_TARGET_RECT (f)->width = NILP (width) ? -1 :
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 abs (XINT (width));
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
141 FRAME_MSWINDOWS_TARGET_RECT (f)->height = NILP (height) ? -1 :
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 abs (XINT (height));
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
143
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 /* Misc frame stuff */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 FRAME_MSWINDOWS_MENU_HASH_TABLE(f) = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 #ifdef HAVE_TOOLBARS
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
147 FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE(f) =
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 make_lisp_hash_table (50, HASH_TABLE_NON_WEAK, HASH_TABLE_EQUAL);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 /* hashtable of instantiated glyphs on the frame. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
151 FRAME_MSWINDOWS_WIDGET_HASH_TABLE1 (f) =
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
152 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, HASH_TABLE_EQUAL);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
153 FRAME_MSWINDOWS_WIDGET_HASH_TABLE2 (f) =
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
154 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, HASH_TABLE_EQUAL);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
155 FRAME_MSWINDOWS_WIDGET_HASH_TABLE3 (f) =
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, HASH_TABLE_EQUAL);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 /* Will initialize these in WM_SIZE handler. We cannot do it now,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 because we do not know what is CW_USEDEFAULT height and width */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 FRAME_WIDTH (f) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 FRAME_HEIGHT (f) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 FRAME_PIXWIDTH (f) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 FRAME_PIXHEIGHT (f) = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 if (NILP (popup))
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 style = MSWINDOWS_FRAME_STYLE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 exstyle = MSWINDOWS_FRAME_EXSTYLE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 hwnd_parent = NULL;
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 rect_default.left = rect_default.top = CW_USEDEFAULT;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 rect_default.width = rect_default.height = CW_USEDEFAULT;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 style = MSWINDOWS_POPUP_STYLE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 exstyle = MSWINDOWS_POPUP_EXSTYLE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 CHECK_MSWINDOWS_FRAME (popup);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 hwnd_parent = FRAME_MSWINDOWS_HANDLE (XFRAME (popup));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 assert (IsWindow (hwnd_parent));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 /* We cannot use CW_USEDEFAULT when creating a popup window.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 So by default, we offset the new popup 30 pixels right
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 and down from its parent, and give it size of 30x10 characters.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 These dimensions look adequate on both high and low res monitors */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 GetWindowRect (hwnd_parent, &rect);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 rect_default.left = rect.left + POPUP_OFFSET;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 rect_default.top = rect.top + POPUP_OFFSET;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 char_to_real_pixel_size (f, POPUP_WIDTH, POPUP_HEIGHT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 &rect_default.width, &rect_default.height);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
191 FRAME_MSWINDOWS_POPUP (f) = 1;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 AdjustWindowRectEx(&rect, style, ADJR_MENUFLAG, exstyle);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 XSETFRAME (frame_obj, f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 Vmswindows_frame_being_created = frame_obj;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 hwnd = CreateWindowEx (exstyle,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 XEMACS_CLASS,
464
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 442
diff changeset
202 STRINGP (f->name) ? (LPCTSTR) XSTRING_DATA (f->name) :
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 442
diff changeset
203 (STRINGP (name) ? (LPCTSTR) XSTRING_DATA (name) :
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 442
diff changeset
204 XEMACS_CLASS),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 style,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 rect_default.left, rect_default.top,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 rect_default.width, rect_default.height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 hwnd_parent, NULL, NULL, NULL);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 Vmswindows_frame_being_created = Qnil;
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 (hwnd == NULL)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
213 invalid_operation ("System call to create frame failed",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
214 STRINGP (f->name) ? f->name :
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
215 STRINGP (name) ? name :
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
216 Qunbound);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
217
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 FRAME_MSWINDOWS_HANDLE(f) = hwnd;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 SetWindowLong (hwnd, XWL_FRAMEOBJ, (LONG)LISP_TO_VOID(frame_obj));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 FRAME_MSWINDOWS_DC(f) = GetDC (hwnd);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 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
223
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
224 if (FRAME_MSWINDOWS_POPUP (f))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
225 mswindows_register_popup_frame (frame_obj);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 mswindows_init_frame_2 (struct frame *f, Lisp_Object props)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 if (NILP (Vmswindows_use_system_frame_size_defaults))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 /* I don't think anything can set the frame size before this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 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
235 at the registry. Even so these values can get overridden
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 later.*/
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
237 XEMACS_RECT_WH dest = { -1, -1, DEFAULT_FRAME_WIDTH,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 DEFAULT_FRAME_HEIGHT };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 mswindows_size_frame_internal (f, &dest);
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 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 /* Called after frame's properties are set */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 mswindows_init_frame_3 (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 /* Don't do this earlier or we get a WM_PAINT before the frame is ready.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 * The SW_x parameter in the first call that an app makes to ShowWindow is
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
249 * ignored, and the parameter specified in the caller's STARTUPINFO is
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 * substituted instead. That parameter is SW_HIDE if we were started by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 * runemacs, so call this twice. #### runemacs is evil */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_SHOWNORMAL);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_SHOWNORMAL);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 SetForegroundWindow (FRAME_MSWINDOWS_HANDLE(f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 DragAcceptFiles (FRAME_MSWINDOWS_HANDLE(f), TRUE);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 mswindows_after_init_frame (struct frame *f, int first_on_device,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 int first_on_console)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 /* Windows, unlike X, is very synchronous. After the initial
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
263 frame is created, it will never be displayed, except for
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 hollow border, unless we start pumping messages. Load progress
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 messages show in the bottom of the hollow frame, which is ugly.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 We redisplay the initial frame here, so modeline and root window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 background show.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 if (first_on_console)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 redisplay ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 mswindows_mark_frame (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 mark_object (FRAME_MSWINDOWS_MENU_HASH_TABLE (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 #ifdef HAVE_TOOLBARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 mark_object (FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE (f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 #endif
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
280 mark_object (FRAME_MSWINDOWS_WIDGET_HASH_TABLE1 (f));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
281 mark_object (FRAME_MSWINDOWS_WIDGET_HASH_TABLE2 (f));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
282 mark_object (FRAME_MSWINDOWS_WIDGET_HASH_TABLE3 (f));
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 mswindows_focus_on_frame (struct frame *f)
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 SetForegroundWindow (FRAME_MSWINDOWS_HANDLE(f));
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 mswindows_delete_frame (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 if (f->frame_data)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
296 Lisp_Object frame;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
297 XSETFRAME (frame, f);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
298 mswindows_unregister_popup_frame (frame);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 ReleaseDC(FRAME_MSWINDOWS_HANDLE(f), FRAME_MSWINDOWS_DC(f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 DestroyWindow(FRAME_MSWINDOWS_HANDLE(f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 xfree (f->frame_data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 f->frame_data = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 mswindows_set_frame_size (struct frame *f, int width, int height)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 RECT rect;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 rect.left = rect.top = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 rect.right = width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 rect.bottom = height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 AdjustWindowRectEx (&rect,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), GWL_STYLE),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 GetMenu (FRAME_MSWINDOWS_HANDLE(f)) != NULL,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), GWL_EXSTYLE));
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 if (IsIconic (FRAME_MSWINDOWS_HANDLE(f)) || IsZoomed (FRAME_MSWINDOWS_HANDLE(f)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_RESTORE);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
322 SetWindowPos (FRAME_MSWINDOWS_HANDLE(f), NULL,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 0, 0, rect.right-rect.left, rect.bottom-rect.top,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSENDCHANGING | SWP_NOMOVE);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 mswindows_set_frame_position (struct frame *f, int xoff, int yoff)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
330 SetWindowPos (FRAME_MSWINDOWS_HANDLE(f), NULL,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 xoff, yoff, 0, 0,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSENDCHANGING | SWP_NOSIZE);
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
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
336 mswindows_make_frame_visible (struct frame *f)
428
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 if (!FRAME_VISIBLE_P(f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_RESTORE);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_SHOW);
536
8f3fb4fd879b [xemacs-hg @ 2001-05-14 05:05:09 by mta]
mta
parents: 506
diff changeset
342 SetActiveWindow (FRAME_MSWINDOWS_HANDLE(f));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 f->visible = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 f->iconified = 0;
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
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
348 mswindows_make_frame_invisible (struct frame *f)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 if (!FRAME_VISIBLE_P(f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 return;
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 ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_HIDE);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 f->visible = 0;
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 mswindows_frame_totally_visible_p (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 RECT rc_me, rc_other, rc_temp;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 HWND hwnd = FRAME_MSWINDOWS_HANDLE(f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 /* We test against not a whole window rectangle, only against its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 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
365 not, we return true. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 GetClientRect (hwnd, &rc_me);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 MapWindowPoints (hwnd, HWND_DESKTOP, (LPPOINT)&rc_me, 2);
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 /* First see if we're off the desktop */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 GetWindowRect (GetDesktopWindow(), &rc_other);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 UnionRect(&rc_temp, &rc_me, &rc_other);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 if (!EqualRect (&rc_temp, &rc_other))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 return 0;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
374
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 /* Then see if any window above us obscures us */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 while ((hwnd = GetWindow (hwnd, GW_HWNDPREV)) != NULL)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 if (IsWindowVisible (hwnd))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 GetWindowRect (hwnd, &rc_other);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 if (IntersectRect(&rc_temp, &rc_me, &rc_other))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 mswindows_frame_visible_p (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 return IsWindowVisible (FRAME_MSWINDOWS_HANDLE(f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 && !IsIconic (FRAME_MSWINDOWS_HANDLE(f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 mswindows_iconify_frame (struct frame *f)
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 ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_MINIMIZE);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 f->visible = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 f->iconified = 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 mswindows_frame_iconified_p (struct frame *f)
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 return IsIconic (FRAME_MSWINDOWS_HANDLE(f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 mswindows_set_frame_icon (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 if (IMAGE_INSTANCEP (f->icon)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 && IMAGE_INSTANCE_PIXMAP_TYPE_P (XIMAGE_INSTANCE (f->icon)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 if (!XIMAGE_INSTANCE_MSWINDOWS_ICON (f->icon))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
417 mswindows_initialize_image_instance_icon (XIMAGE_INSTANCE (f->icon),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 FALSE);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 }
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
420
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
421 SetClassLong (FRAME_MSWINDOWS_HANDLE (f), GCL_HICON,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 (LONG) XIMAGE_INSTANCE_MSWINDOWS_ICON (f->icon));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 mswindows_set_frame_pointer (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 if (IMAGE_INSTANCEP (f->pointer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 && IMAGE_INSTANCE_TYPE (XIMAGE_INSTANCE (f->pointer)) == IMAGE_POINTER)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 SetClassLong (FRAME_MSWINDOWS_HANDLE (f), GCL_HCURSOR,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 (LONG) XIMAGE_INSTANCE_MSWINDOWS_ICON (f->pointer));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 /* 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
435 event and doesn't give time to event processing even if it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 did. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 SetCursor (XIMAGE_INSTANCE_MSWINDOWS_ICON (f->pointer));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 }
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 mswindows_set_mouse_position (struct window *w, int x, int y)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 struct frame *f = XFRAME (w->frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 POINT pt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 pt.x = w->pixel_left + x;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 pt.y = w->pixel_top + y;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 ClientToScreen (FRAME_MSWINDOWS_HANDLE(f), &pt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 SetCursorPos (pt.x, pt.y);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 mswindows_get_mouse_position (struct device *d, Lisp_Object *frame, int *x, int *y)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 POINT pt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 HWND hwnd;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 GetCursorPos (&pt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 /* What's under cursor? */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 hwnd = WindowFromPoint (pt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 if (hwnd == NULL)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 return 0;
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 /* Get grandest parent of the window */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 HWND hwnd_parent;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 while ((hwnd_parent = GetParent (hwnd)) != NULL)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 hwnd = hwnd_parent;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 }
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 /* Make sure it belongs to us */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 if (GetWindowThreadProcessId (hwnd, NULL) != GetCurrentThreadId ())
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 /* And that the window is an XEmacs frame */
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 char class_name [sizeof(XEMACS_CLASS) + 1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 if (!GetClassName (hwnd, class_name, sizeof(XEMACS_CLASS))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 || strcmp (class_name, XEMACS_CLASS) != 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 /* Yippie! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 ScreenToClient (hwnd, &pt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 VOID_TO_LISP (*frame, GetWindowLong (hwnd, XWL_FRAMEOBJ));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 *x = pt.x;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 *y = pt.y;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 mswindows_raise_frame (struct frame *f)
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 BringWindowToTop (FRAME_MSWINDOWS_HANDLE(f));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 mswindows_lower_frame (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 SetWindowPos (FRAME_MSWINDOWS_HANDLE(f), HWND_BOTTOM, 0, 0, 0, 0,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 SWP_NOSIZE | SWP_NOMOVE | SWP_NOSENDCHANGING);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 static void
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
507 mswindows_enable_frame (struct frame *f)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
508 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
509 EnableWindow (FRAME_MSWINDOWS_HANDLE (f), TRUE);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
510 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
511
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
512 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
513 mswindows_disable_frame (struct frame *f)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
514 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
515 EnableWindow (FRAME_MSWINDOWS_HANDLE (f), FALSE);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
516 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
517
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
518 static void
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 593
diff changeset
519 mswindows_set_title_from_intbyte (struct frame *f, Intbyte *title)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 {
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 546
diff changeset
521 unsigned int new_checksum = hash_string (title, strlen ((char *) title));
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 546
diff changeset
522 if (new_checksum != FRAME_MSWINDOWS_TITLE_CHECKSUM (f))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523 {
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 546
diff changeset
524 Extbyte *title_ext;
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 546
diff changeset
525
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 546
diff changeset
526 FRAME_MSWINDOWS_TITLE_CHECKSUM (f) = new_checksum;
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 546
diff changeset
527 C_STRING_TO_EXTERNAL (title, title_ext, Qmswindows_tstr);
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 546
diff changeset
528 SetWindowText (FRAME_MSWINDOWS_HANDLE (f), title_ext);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 }
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
532 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533 mswindows_frame_property (struct frame *f, Lisp_Object property)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 if (EQ (Qleft, property) || EQ (Qtop, property))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 RECT rc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 GetWindowRect (FRAME_MSWINDOWS_HANDLE(f), &rc);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 return make_int (EQ (Qtop, property) ? rc.top : rc.left);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 return Qunbound;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 }
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 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 mswindows_internal_frame_property_p (struct frame *f, Lisp_Object property)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547 return EQ (property, Qleft)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
548 || EQ (property, Qtop);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549 /* #### frame-x.c has also this. Why?
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
550 || STRINGP (property);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551 */
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
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
555 mswindows_frame_properties (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557 Lisp_Object props = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 RECT rc;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 GetWindowRect (FRAME_MSWINDOWS_HANDLE(f), &rc);
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 props = cons3 (Qtop, make_int (rc.top), props);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 props = cons3 (Qleft, make_int (rc.left), props);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 return props;
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_set_frame_properties (struct frame *f, Lisp_Object plist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570 int x=-1, y=-1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571 int width = -1, height = -1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
572 BOOL width_specified_p = FALSE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
573 BOOL height_specified_p = FALSE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574 BOOL x_specified_p = FALSE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575 BOOL y_specified_p = FALSE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576 Lisp_Object tail;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 /* Extract the properties from plist */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 for (tail = plist; !NILP (tail); tail = Fcdr (Fcdr (tail)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 Lisp_Object prop = Fcar (tail);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 Lisp_Object val = Fcar (Fcdr (tail));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 if (SYMBOLP (prop))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586 /* Kludge to handle the font property. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 if (EQ (prop, Qfont))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 /* If the value is not a string we silently ignore it. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 if (STRINGP (val))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592 Lisp_Object frm, font_spec;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
593
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594 XSETFRAME (frm, f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 font_spec = Fget (Fget_face (Qdefault), Qfont, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597 Fadd_spec_to_specifier (font_spec, val, frm, Qnil, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598 update_frame_face_values (f);
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 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
601 else if (EQ (prop, Qwidth))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603 CHECK_INT (val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 width = XINT (val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
605 width_specified_p = TRUE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 else if (EQ (prop, Qheight))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609 CHECK_INT (val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 height = XINT (val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 height_specified_p = TRUE;
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 else if (EQ (prop, Qleft))
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 CHECK_INT (val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616 x = XINT (val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617 x_specified_p = TRUE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
619 else if (EQ (prop, Qtop))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621 CHECK_INT (val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 y = XINT (val);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623 y_specified_p = TRUE;
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 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
627
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628 /* Now we've extracted the properties, apply them.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629 Do not apply geometric properties during frame creation. This
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
630 is excessive anyways, and this loses because WM_SIZE has not
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631 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
632
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 unfortunately WM_SIZE loses as well since the resize is only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 applied once and the first time WM_SIZE is applied not everything
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 is initialised in the frame (toolbars for instance). enabling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 this always makes no visible difference and fixes a whole host of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 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
638 --andyp */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 if ( FRAME_PIXWIDTH (f) && FRAME_PIXHEIGHT (f)
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
640 && (width_specified_p || height_specified_p
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
641 || x_specified_p || y_specified_p))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 XEMACS_RECT_WH dest = { x, y, width, height };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 mswindows_size_frame_internal (f, &dest);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 }
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
506
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
649 void
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
650 mswindows_size_frame_internal (struct frame* f, XEMACS_RECT_WH* dest)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
652 RECT rect, ws_rect;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 int pixel_width, pixel_height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 int size_p = (dest->width >=0 || dest->height >=0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 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
656 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
657 &pixel_height);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
658
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 if (dest->width < 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 pixel_width = FRAME_PIXWIDTH (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 if (dest->height < 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 pixel_height = FRAME_PIXHEIGHT (f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 GetWindowRect (FRAME_MSWINDOWS_HANDLE(f), &rect);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 if (dest->left < 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666 dest->left = rect.left;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 if (dest->top < 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 dest->top = rect.top;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
669
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 rect.left = rect.top = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 rect.right = pixel_width;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 rect.bottom = pixel_height;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 AdjustWindowRectEx (&rect,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), GWL_STYLE),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676 GetMenu (FRAME_MSWINDOWS_HANDLE(f)) != NULL,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677 GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), GWL_EXSTYLE));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
679 /* 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
680 not restrictive since this will happen later anyway in WM_SIZE. We
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 have to do this after adjusting the rect to account for menubar
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 etc. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
683 mswindows_get_workspace_coords (&ws_rect);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 pixel_width = rect.right - rect.left;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 pixel_height = rect.bottom - rect.top;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
686 if (pixel_width > ws_rect.right - ws_rect.left)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
688 pixel_width = ws_rect.right - ws_rect.left;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689 size_p=1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690 }
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
691 if (pixel_height > ws_rect.bottom - ws_rect.top)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
692 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
693 pixel_height = ws_rect.bottom - ws_rect.top;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694 size_p=1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
697 /* adjust position so window is in workspace */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
698 if (dest->left + pixel_width > ws_rect.right)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
700 dest->left = ws_rect.right - pixel_width;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701 move_p=1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 }
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
703 if (dest->left < ws_rect.left)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
705 dest->left = ws_rect.left;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706 move_p=1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
709 if (dest->top + pixel_height > ws_rect.bottom)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
710 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
711 dest->top = ws_rect.bottom - pixel_height;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
712 move_p=1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
713 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
714 if (dest->top < ws_rect.top)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
715 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
716 dest->top = ws_rect.top;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
717 move_p=1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
718 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
719
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
720 if (IsIconic (FRAME_MSWINDOWS_HANDLE(f))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
721 || IsZoomed (FRAME_MSWINDOWS_HANDLE(f)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
722 ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_RESTORE);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
723
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
724 SetWindowPos (FRAME_MSWINDOWS_HANDLE(f), NULL,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
725 dest->left, dest->top, pixel_width, pixel_height,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
726 SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSENDCHANGING
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
727 | (size_p ? 0 : SWP_NOSIZE)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
728 | (move_p ? 0 : SWP_NOMOVE));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
729 }
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 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
732 mswindows_get_frame_parent (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
733 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
734 HWND hwnd = FRAME_MSWINDOWS_HANDLE(f);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
735 hwnd = GetParent (hwnd);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
736 if (hwnd)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
737 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
738 Lisp_Object parent;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
739 VOID_TO_LISP (parent, GetWindowLong (hwnd, XWL_FRAMEOBJ));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
740 assert (FRAME_MSWINDOWS_P (XFRAME (parent)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
741 return parent;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
742 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
743 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
744 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
745 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
746
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
747 static void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
748 mswindows_update_frame_external_traits (struct frame* frm, Lisp_Object name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
749 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
750 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
751
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
752 static int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
753 mswindows_frame_size_fixed_p (struct frame *f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
754 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
755 /* Frame size cannot change if the frame is maximized */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
756 return IsZoomed (FRAME_MSWINDOWS_HANDLE (f));
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
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
759 /*---------------------------------------------------------------------*/
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
760 /*----- PRINTER FRAME -----*/
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
761 /*---------------------------------------------------------------------*/
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
762
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
763 /*
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
764 * With some driver/os combination (I discovered this with HP drivers
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
765 * under W2K), DC geometry is reset upon StartDoc and EndPage
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
766 * 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
767 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
768 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
769 apply_dc_geometry (struct frame* f)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
770 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
771 HDC hdc = DEVICE_MSPRINTER_HDC (XDEVICE (FRAME_DEVICE (f)));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
772 SetTextAlign (hdc, TA_BASELINE | TA_LEFT | TA_NOUPDATECP);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
773 SetViewportOrgEx (hdc, FRAME_MSPRINTER_PIXLEFT(f),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
774 FRAME_MSPRINTER_PIXTOP(f), NULL);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
775 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
776
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
777 void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
778 msprinter_start_page (struct frame *f)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
779 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
780 if (!FRAME_MSPRINTER_PAGE_STARTED (f))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
781 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
782 FRAME_MSPRINTER_PAGE_STARTED (f) = 1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
783 StartPage (DEVICE_MSPRINTER_HDC (XDEVICE (FRAME_DEVICE (f))));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
784 apply_dc_geometry (f);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
785 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
786 }
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
787
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
788 static void
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
789 error_frame_unsizable (struct frame *f)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
790 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
791 Lisp_Object frame;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
792 XSETFRAME (frame, f);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
793 invalid_change ("Cannot resize frame (margins) after print job has started.",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
794 frame);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
795 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
796
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
797 static void
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
798 maybe_error_if_job_active (struct frame *f)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
799 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
800 if (FRAME_MSPRINTER_JOB_STARTED (f))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
801 error_frame_unsizable (f);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
802 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
803
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
804 static void
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
805 msprinter_init_frame_1 (struct frame *f, Lisp_Object props)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
806 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
807 /* 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
808 handle only one job at a time. */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
809 if (!NILP (DEVICE_FRAME_LIST (XDEVICE (FRAME_DEVICE (f)))))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
810 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
811 "this printer device", FRAME_DEVICE (f));
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
812
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
813 f->frame_data = xnew_and_zero (struct msprinter_frame);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
814
506
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
815 FRAME_MSPRINTER_TOP_MARGIN (f) =
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
816 mswindows_get_default_margin (Qtop_margin);
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
817 FRAME_MSPRINTER_BOTTOM_MARGIN (f) =
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
818 mswindows_get_default_margin (Qbottom_margin);
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
819 FRAME_MSPRINTER_LEFT_MARGIN (f) =
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
820 mswindows_get_default_margin (Qleft_margin);
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
821 FRAME_MSPRINTER_RIGHT_MARGIN (f) =
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
822 mswindows_get_default_margin (Qright_margin);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
823
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
824 /* Negative for "uinspecified" */
506
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
825 FRAME_MSPRINTER_CHARWIDTH (f) = -1;
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
826 FRAME_MSPRINTER_CHARHEIGHT (f) = -1;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
827 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
828
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
829 static void
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
830 msprinter_init_frame_3 (struct frame *f)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
831 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
832 DOCINFO di;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
833 struct device *device = XDEVICE (FRAME_DEVICE (f));
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
834 HDC hdc;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
835 int frame_left, frame_top, frame_width, frame_height;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
836
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
837 /* DC might be recreated in msprinter_apply_devmode,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
838 so do not initialize until now */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
839 hdc = DEVICE_MSPRINTER_HDC (device);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
840
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
841 /* Compute geometry properties */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
842 frame_left = (MulDiv (GetDeviceCaps (hdc, LOGPIXELSX),
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
843 FRAME_MSPRINTER_LEFT_MARGIN(f), 1440)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
844 - GetDeviceCaps (hdc, PHYSICALOFFSETX));
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
845
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
846 if (FRAME_MSPRINTER_CHARWIDTH(f) > 0)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
847 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
848 char_to_real_pixel_size (f, FRAME_MSPRINTER_CHARWIDTH(f), 0,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
849 &frame_width, NULL);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
850 FRAME_MSPRINTER_RIGHT_MARGIN(f) =
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
851 MulDiv (GetDeviceCaps (hdc, PHYSICALWIDTH)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
852 - (frame_left + frame_width), 1440,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
853 GetDeviceCaps (hdc, LOGPIXELSX));
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
854 }
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
855 else
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
856 frame_width = (GetDeviceCaps (hdc, PHYSICALWIDTH)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
857 - frame_left
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
858 - MulDiv (GetDeviceCaps (hdc, LOGPIXELSX),
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
859 FRAME_MSPRINTER_RIGHT_MARGIN(f), 1440));
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
860
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
861 frame_top = (MulDiv (GetDeviceCaps (hdc, LOGPIXELSY),
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
862 FRAME_MSPRINTER_TOP_MARGIN(f), 1440)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
863 - GetDeviceCaps (hdc, PHYSICALOFFSETY));
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
864
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
865 if (FRAME_MSPRINTER_CHARHEIGHT(f) > 0)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
866 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
867 char_to_real_pixel_size (f, 0, FRAME_MSPRINTER_CHARHEIGHT(f),
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
868 NULL, &frame_height);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
869
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
870 FRAME_MSPRINTER_BOTTOM_MARGIN(f) =
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
871 MulDiv (GetDeviceCaps (hdc, PHYSICALHEIGHT)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
872 - (frame_top + frame_height), 1440,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
873 GetDeviceCaps (hdc, LOGPIXELSY));
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
874 }
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
875 else
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
876 frame_height = (GetDeviceCaps (hdc, PHYSICALHEIGHT)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
877 - frame_top
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
878 - MulDiv (GetDeviceCaps (hdc, LOGPIXELSY),
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
879 FRAME_MSPRINTER_BOTTOM_MARGIN(f), 1440));
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 /* Geometry sanity checks */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
882 if (!frame_pixsize_valid_p (f, frame_width, frame_height))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
883 invalid_operation ("Area inside print margins has shrunk to naught",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
884 STRINGP (f->name) ? f->name : Qunbound);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
885
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
886 if (frame_left < 0
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
887 || frame_top < 0
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
888 || frame_left + frame_width > GetDeviceCaps (hdc, HORZRES)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
889 || frame_top + frame_height > GetDeviceCaps (hdc, VERTRES))
546
666d73d6ac56 [xemacs-hg @ 2001-05-20 01:17:07 by ben]
ben
parents: 536
diff changeset
890 invalid_operation ("Print area is outside of the printer's "
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
891 "hardware printable area",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
892 STRINGP (f->name) ? f->name : Qunbound);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
893
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
894 /* Apply XEmacs frame geometry and layout windows */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
895 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
896 int rows, columns;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
897 FRAME_PIXWIDTH(f) = frame_width;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
898 FRAME_PIXHEIGHT(f) = frame_height;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
899 pixel_to_char_size (f, frame_width, frame_height, &columns, &rows);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
900 change_frame_size (f, rows, columns, 0);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
901 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
902
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
903 FRAME_MSPRINTER_PIXLEFT(f) = frame_left;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
904 FRAME_MSPRINTER_PIXTOP(f) = frame_top;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
905
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
906 /* Start print job */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
907 di.cbSize = sizeof (di);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
908 di.lpszDocName = (STRINGP(f->name)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
909 ? (char*) XSTRING_DATA(f->name)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
910 : "XEmacs print document");
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
911 di.lpszOutput = NULL;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
912 di.lpszDatatype = NULL;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
913 di.fwType = 0;
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 if (StartDoc (hdc, &di) <= 0)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
916 invalid_operation ("Cannot start print job",
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
917 STRINGP (f->name) ? f->name : Qunbound);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
918
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
919 apply_dc_geometry (f);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
920
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
921 /* Finish frame setup */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
922 FRAME_MSPRINTER_JOB_STARTED (f) = 1;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
923 FRAME_VISIBLE_P(f) = 0;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
924 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
925
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
926 static void
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
927 msprinter_mark_frame (struct frame *f)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
928 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
929 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
930
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
931 static void
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
932 msprinter_delete_frame (struct frame *f)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
933 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
934 if (f->frame_data)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
935 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
936 HDC hdc = DEVICE_MSPRINTER_HDC (XDEVICE (FRAME_DEVICE (f)));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
937 if (FRAME_MSPRINTER_PAGE_STARTED (f))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
938 EndPage (hdc);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
939 if (FRAME_MSPRINTER_JOB_STARTED (f))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
940 EndDoc (hdc);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
941 xfree (f->frame_data);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
942 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
943
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
944 f->frame_data = 0;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
945 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
946
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
947 static Lisp_Object
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
948 msprinter_frame_property (struct frame *f, Lisp_Object property)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
949 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
950 if (EQ (Qleft_margin, property))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
951 return make_int (FRAME_MSPRINTER_LEFT_MARGIN(f));
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
952 else if (EQ (Qtop_margin, property))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
953 return make_int (FRAME_MSPRINTER_TOP_MARGIN(f));
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
954 if (EQ (Qright_margin, property))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
955 return make_int (FRAME_MSPRINTER_RIGHT_MARGIN(f));
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
956 else if (EQ (Qbottom_margin, property))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
957 return make_int (FRAME_MSPRINTER_BOTTOM_MARGIN(f));
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
958 else
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
959 return Qunbound;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
960 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
961
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
962 static int
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
963 msprinter_internal_frame_property_p (struct frame *f, Lisp_Object property)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
964 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
965 return (EQ (Qleft_margin, property) || EQ (Qtop_margin, property) ||
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
966 EQ (Qright_margin, property) || EQ (Qbottom_margin, property));
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
967 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
968
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
969 static Lisp_Object
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
970 msprinter_frame_properties (struct frame *f)
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 Lisp_Object props = Qnil;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
973 props = cons3 (Qbottom_margin,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
974 make_int (FRAME_MSPRINTER_BOTTOM_MARGIN(f)), props);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
975 props = cons3 (Qright_margin,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
976 make_int (FRAME_MSPRINTER_RIGHT_MARGIN(f)), props);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
977 props = cons3 (Qtop_margin,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
978 make_int (FRAME_MSPRINTER_TOP_MARGIN(f)), props);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
979 props = cons3 (Qleft_margin,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
980 make_int (FRAME_MSPRINTER_LEFT_MARGIN(f)), props);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
981 return props;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
982 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
983
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
984 static void
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
985 msprinter_set_frame_properties (struct frame *f, Lisp_Object plist)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
986 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
987 Lisp_Object tail;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
988
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
989 /* Extract the properties from plist */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
990 for (tail = plist; !NILP (tail); tail = Fcdr (Fcdr (tail)))
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 Lisp_Object prop = Fcar (tail);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
993 Lisp_Object val = Fcar (Fcdr (tail));
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
994
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
995 if (SYMBOLP (prop))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
996 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
997 if (EQ (prop, Qwidth))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
998 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
999 maybe_error_if_job_active (f);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1000 if (!NILP (val))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1001 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1002 CHECK_NATNUM (val);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1003 FRAME_MSPRINTER_CHARWIDTH(f) = XINT (val);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1004 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1005 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1006 if (EQ (prop, Qheight))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1007 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1008 maybe_error_if_job_active (f);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1009 if (!NILP (val))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1010 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1011 CHECK_NATNUM (val);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1012 FRAME_MSPRINTER_CHARHEIGHT(f) = XINT (val);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1013 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1014 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1015 else if (EQ (prop, Qleft_margin))
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 maybe_error_if_job_active (f);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1018 CHECK_NATNUM (val);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1019 FRAME_MSPRINTER_LEFT_MARGIN(f) = XINT (val);
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 else if (EQ (prop, Qtop_margin))
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 maybe_error_if_job_active (f);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1024 CHECK_NATNUM (val);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1025 FRAME_MSPRINTER_TOP_MARGIN(f) = XINT (val);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1026 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1027 else if (EQ (prop, Qright_margin))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1028 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1029 maybe_error_if_job_active (f);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1030 CHECK_NATNUM (val);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1031 FRAME_MSPRINTER_RIGHT_MARGIN(f) = XINT (val);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1032 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1033 else if (EQ (prop, Qbottom_margin))
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 maybe_error_if_job_active (f);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1036 CHECK_NATNUM (val);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1037 FRAME_MSPRINTER_BOTTOM_MARGIN(f) = XINT (val);
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 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1040 }
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
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1043 static void
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1044 msprinter_set_frame_size (struct frame *f, int width, int height)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1045 {
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1046 /* We're absolutely unsizeable */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1047 error_frame_unsizable (f);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1048 }
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1049
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1050 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1051 msprinter_eject_page (struct frame *f)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1052 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1053 /* #### Should we eject empty pages? */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1054 if (FRAME_MSPRINTER_PAGE_STARTED (f))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1055 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1056 FRAME_MSPRINTER_PAGE_STARTED (f) = 0;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1057 EndPage (DEVICE_MSPRINTER_HDC (XDEVICE (FRAME_DEVICE (f))));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1058 apply_dc_geometry (f);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1059 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1060 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1061
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1062
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1063 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1064 console_type_create_frame_mswindows (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1065 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1066 /* Display frames */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1067 CONSOLE_HAS_METHOD (mswindows, init_frame_1);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1068 CONSOLE_HAS_METHOD (mswindows, init_frame_2);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1069 CONSOLE_HAS_METHOD (mswindows, init_frame_3);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1070 CONSOLE_HAS_METHOD (mswindows, after_init_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1071 CONSOLE_HAS_METHOD (mswindows, mark_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1072 CONSOLE_HAS_METHOD (mswindows, focus_on_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1073 CONSOLE_HAS_METHOD (mswindows, delete_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1074 CONSOLE_HAS_METHOD (mswindows, get_mouse_position);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1075 CONSOLE_HAS_METHOD (mswindows, set_mouse_position);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1076 CONSOLE_HAS_METHOD (mswindows, raise_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1077 CONSOLE_HAS_METHOD (mswindows, lower_frame);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1078 CONSOLE_HAS_METHOD (mswindows, enable_frame);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1079 CONSOLE_HAS_METHOD (mswindows, disable_frame);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1080 CONSOLE_HAS_METHOD (mswindows, make_frame_visible);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1081 CONSOLE_HAS_METHOD (mswindows, make_frame_invisible);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1082 CONSOLE_HAS_METHOD (mswindows, iconify_frame);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1083 CONSOLE_HAS_METHOD (mswindows, set_frame_size);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1084 CONSOLE_HAS_METHOD (mswindows, set_frame_position);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1085 CONSOLE_HAS_METHOD (mswindows, frame_property);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1086 CONSOLE_HAS_METHOD (mswindows, internal_frame_property_p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1087 CONSOLE_HAS_METHOD (mswindows, frame_properties);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1088 CONSOLE_HAS_METHOD (mswindows, set_frame_properties);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 593
diff changeset
1089 CONSOLE_HAS_METHOD (mswindows, set_title_from_intbyte);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 593
diff changeset
1090 /* CONSOLE_HAS_METHOD (mswindows, set_icon_name_from_intbyte); */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1091 CONSOLE_HAS_METHOD (mswindows, frame_visible_p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1092 CONSOLE_HAS_METHOD (mswindows, frame_totally_visible_p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1093 CONSOLE_HAS_METHOD (mswindows, frame_iconified_p);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1094 CONSOLE_HAS_METHOD (mswindows, set_frame_pointer);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1095 CONSOLE_HAS_METHOD (mswindows, set_frame_icon);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1096 CONSOLE_HAS_METHOD (mswindows, get_frame_parent);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1097 CONSOLE_HAS_METHOD (mswindows, update_frame_external_traits);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1098 CONSOLE_HAS_METHOD (mswindows, frame_size_fixed_p);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1099
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1100 /* Printer frames, aka print jobs */
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1101 CONSOLE_HAS_METHOD (msprinter, init_frame_1);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1102 CONSOLE_HAS_METHOD (msprinter, init_frame_3);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1103 CONSOLE_HAS_METHOD (msprinter, mark_frame);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1104 CONSOLE_HAS_METHOD (msprinter, delete_frame);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1105 CONSOLE_HAS_METHOD (msprinter, frame_property);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1106 CONSOLE_HAS_METHOD (msprinter, internal_frame_property_p);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1107 CONSOLE_HAS_METHOD (msprinter, frame_properties);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1108 CONSOLE_HAS_METHOD (msprinter, set_frame_properties);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1109 CONSOLE_HAS_METHOD (msprinter, set_frame_size);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1110 CONSOLE_HAS_METHOD (msprinter, eject_page);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1111 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1112
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1113 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1114 syms_of_frame_mswindows (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1115 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1116 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1117
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1118 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1119 reinit_vars_of_frame_mswindows (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1120 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1121 /* Needn't staticpro -- see comment above. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1122 Vmswindows_frame_being_created = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1123 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1124
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1125 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1126 vars_of_frame_mswindows (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1127 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1128 reinit_vars_of_frame_mswindows ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1129
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1130 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
1131 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
1132 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
1133 then the system will choose default sizes for the frame.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1134 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1135 Vmswindows_use_system_frame_size_defaults = Qnil;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1136
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1137 DEFVAR_LISP ("default-mswindows-frame-plist", &Vdefault_mswindows_frame_plist /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1138 Plist of default frame-creation properties for mswindows frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1139 These override what is specified in `default-frame-plist', but are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1140 overridden by the arguments to the particular call to `make-frame'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1141
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1142 Note: In many cases, properties of a frame are available as specifiers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1143 instead of through the frame-properties mechanism.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1144
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1145 Here is a list of recognized frame properties, other than those
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1146 documented in `set-frame-properties' (they can be queried and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1147 set at any time, except as otherwise noted):
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1148
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1149 initially-unmapped If non-nil, the frame will not be visible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1150 when it is created. In this case, you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1151 need to call `make-frame-visible' to make
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1152 the frame appear.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1153 popup If non-nil, it should be a frame, and this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1154 frame will be created as a "popup" frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1155 whose parent is the given frame. This
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1156 will make the window manager treat the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1157 frame as a dialog box, which may entail
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1158 doing different things (e.g. not asking
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1159 for positioning, and not iconifying
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1160 separate from its parent).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1161 top Y position (in pixels) of the upper-left
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1162 outermost corner of the frame (i.e. the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1163 upper-left of the window-manager
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1164 decorations).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1165 left X position (in pixels) of the upper-left
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1166 outermost corner of the frame (i.e. the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1167 upper-left of the window-manager
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1168 decorations).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1169
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1170 See also `default-frame-plist', which specifies properties which apply
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1171 to all frames, not just mswindows frames.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1172 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1173 Vdefault_mswindows_frame_plist = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1174
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1175 mswindows_console_methods->device_specific_frame_props =
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1176 &Vdefault_mswindows_frame_plist;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1177
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1178 DEFVAR_LISP ("default-msprinter-frame-plist", &Vdefault_msprinter_frame_plist /*
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1179 Plist of default frame-creation properties for msprinter print job frames.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1180 These override what is specified in `default-frame-plist', but are
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1181 overridden by the arguments to the particular call to `make-frame'.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1182
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1183 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
1184 instead of through the frame-properties mechanism.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1185
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1186 Here is a list of recognized frame properties, other than those
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1187 documented in `set-frame-properties' (they can be queried and
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1188 set at any time, except as otherwise noted):
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1189
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1190 left-margin Margin of the page, in twips. Twip is a
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1191 top-margin typographical unit of measurement,
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1192 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
1193 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
1194 millimeter. If not specified, the left
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
1195 and right margins default to 1 inch
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
1196 (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
1197 to 0.5 inch (12.7 mm).
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1198
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1199 MARGINS NOTE. right-margin and bottom-margin are overridden by
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1200 the height and width properties. If you want to specify size
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1201 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
1202 use these properties. If height and/or width are nil, then
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1203 corresponding margin setting is taken into account. If you
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1204 specify height and/or width in `default-frame-plist', but still
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1205 want to specify right/bottom margins, set height/width in this
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1206 plist to nil, as in this example:
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1207
506
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
1208 (setq default-frame-plist '(height 55 width 80)
39ccc7dd8077 [xemacs-hg @ 2001-05-05 08:39:59 by ben]
ben
parents: 464
diff changeset
1209 default-msprinter-frame-plist '(height nil width nil))
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1210
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1211 See also `default-frame-plist', which specifies properties which apply
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1212 to all frames, not just mswindows frames.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1213 */ );
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1214 Vdefault_msprinter_frame_plist = Qnil;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1215
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1216 msprinter_console_methods->device_specific_frame_props =
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
1217 &Vdefault_msprinter_frame_plist;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1218 }