1 /* Functions for the mswindows window system.
2 Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
3 Copyright (C) 1995, 1996 Ben Wing.
5 This file is part of XEmacs.
7 XEmacs is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 2, or (at your option) any
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with XEmacs; see the file COPYING. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
22 /* Synched up with: Not synched with FSF. */
26 Ultimately based on FSF.
27 Substantially rewritten for XEmacs by Ben Wing.
28 Rewritten for mswindows by Jonathan Harris, November 1997 for 21.0.
29 Graphics features added and frame resizing fiddled with by Andy Piper.
37 #include "console-msw.h"
38 #include "glyphs-msw.h"
43 #include "redisplay.h"
46 #define MSWINDOWS_FRAME_STYLE (WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_OVERLAPPEDWINDOW)
47 #define MSWINDOWS_POPUP_STYLE (WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_POPUP \
48 | WS_CAPTION | WS_BORDER | WS_SYSMENU | WS_MINIMIZEBOX)
50 #define MSWINDOWS_FRAME_EXSTYLE WS_EX_OVERLAPPEDWINDOW
51 #define MSWINDOWS_POPUP_EXSTYLE WS_EX_PALETTEWINDOW
53 /* Default popup left top corner offset from the same
54 corner of the parent frame, in pixel */
55 #define POPUP_OFFSET 30
57 /* Default popup size, in characters */
58 #define POPUP_WIDTH 30
59 #define POPUP_HEIGHT 10
61 /* Default popup size, in characters */
62 #define DEFAULT_FRAME_WIDTH 80
63 #define DEFAULT_FRAME_HEIGHT 35
66 #define ADJR_MENUFLAG TRUE
68 #define ADJR_MENUFLAG FALSE
71 /* Default properties to use when creating frames. */
72 Lisp_Object Vdefault_mswindows_frame_plist;
73 Lisp_Object Vmswindows_use_system_frame_size_defaults;
75 /* This does not need to be GC protected, as it holds a
76 frame Lisp_Object already protected by Fmake_frame */
77 Lisp_Object Vmswindows_frame_being_created;
80 mswindows_init_frame_1 (struct frame *f, Lisp_Object props)
82 Lisp_Object initially_unmapped;
83 Lisp_Object name, height, width, popup, top, left;
84 Lisp_Object frame_obj = Qnil;
86 XEMACS_RECT_WH rect_default;
88 HWND hwnd, hwnd_parent;
90 /* Pick up relevant properties */
91 initially_unmapped = Fplist_get (props, Qinitially_unmapped, Qnil);
92 name = Fplist_get (props, Qname, Qnil);
94 popup = Fplist_get (props, Qpopup, Qnil);
96 popup = Fselected_frame (Qnil);
98 left = Fplist_get (props, Qleft, Qnil);
102 top = Fplist_get (props, Qtop, Qnil);
106 width = Fplist_get (props, Qwidth, Qnil);
110 height = Fplist_get (props, Qheight, Qnil);
114 f->frame_data = xnew_and_zero (struct mswindows_frame);
115 FRAME_MSWINDOWS_TARGET_RECT (f) = xnew_and_zero (XEMACS_RECT_WH);
117 FRAME_MSWINDOWS_TARGET_RECT (f)->left = NILP (left) ? -1 : abs (XINT (left));
118 FRAME_MSWINDOWS_TARGET_RECT (f)->top = NILP (top) ? -1 : abs (XINT (top));
119 FRAME_MSWINDOWS_TARGET_RECT (f)->width = NILP (width) ? -1 :
121 FRAME_MSWINDOWS_TARGET_RECT (f)->height = NILP (height) ? -1 :
124 /* Misc frame stuff */
125 FRAME_MSWINDOWS_DATA(f)->button2_need_lbutton = 0;
126 FRAME_MSWINDOWS_DATA(f)->button2_need_rbutton = 0;
127 FRAME_MSWINDOWS_DATA(f)->button2_is_down = 0;
128 FRAME_MSWINDOWS_DATA(f)->ignore_next_lbutton_up = 0;
129 FRAME_MSWINDOWS_DATA(f)->ignore_next_rbutton_up = 0;
130 FRAME_MSWINDOWS_DATA(f)->sizing = 0;
131 FRAME_MSWINDOWS_MENU_HASH_TABLE(f) = Qnil;
133 FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE(f) =
134 make_lisp_hash_table (50, HASH_TABLE_NON_WEAK, HASH_TABLE_EQUAL);
136 /* hashtable of instantiated glyphs on the frame. */
137 FRAME_MSWINDOWS_WIDGET_HASH_TABLE (f) =
138 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, HASH_TABLE_EQUAL);
139 /* Will initialize these in WM_SIZE handler. We cannot do it now,
140 because we do not know what is CW_USEDEFAULT height and width */
142 FRAME_HEIGHT (f) = 0;
143 FRAME_PIXWIDTH (f) = 0;
144 FRAME_PIXHEIGHT (f) = 0;
148 style = MSWINDOWS_FRAME_STYLE;
149 exstyle = MSWINDOWS_FRAME_EXSTYLE;
152 rect_default.left = rect_default.top = CW_USEDEFAULT;
153 rect_default.width = rect_default.height = CW_USEDEFAULT;
157 style = MSWINDOWS_POPUP_STYLE;
158 exstyle = MSWINDOWS_POPUP_EXSTYLE;
160 CHECK_MSWINDOWS_FRAME (popup);
161 hwnd_parent = FRAME_MSWINDOWS_HANDLE (XFRAME (popup));
162 assert (IsWindow (hwnd_parent));
164 /* We cannot use CW_USEDEFAULT when creating a popup window.
165 So by default, we offset the new popup 30 pixels right
166 and down from its parent, and give it size of 30x10 characters.
167 These dimensions look adequate on both high and low res monitors */
168 GetWindowRect (hwnd_parent, &rect);
169 rect_default.left = rect.left + POPUP_OFFSET;
170 rect_default.top = rect.top + POPUP_OFFSET;
171 char_to_real_pixel_size (f, POPUP_WIDTH, POPUP_HEIGHT,
172 &rect_default.width, &rect_default.height);
175 AdjustWindowRectEx(&rect, style, ADJR_MENUFLAG, exstyle);
177 XSETFRAME (frame_obj, f);
179 Vmswindows_frame_being_created = frame_obj;
181 hwnd = CreateWindowEx (exstyle,
183 STRINGP(f->name) ? XSTRING_DATA(f->name) :
185 (CONST Extbyte*)XSTRING_DATA(name) :
186 (CONST Extbyte*)XEMACS_CLASS),
188 rect_default.left, rect_default.top,
189 rect_default.width, rect_default.height,
190 hwnd_parent, NULL, NULL, NULL);
192 Vmswindows_frame_being_created = Qnil;
195 error ("System call to create frame failed");
197 FRAME_MSWINDOWS_HANDLE(f) = hwnd;
199 SetWindowLong (hwnd, XWL_FRAMEOBJ, (LONG)LISP_TO_VOID(frame_obj));
200 FRAME_MSWINDOWS_DC(f) = GetDC (hwnd);
201 FRAME_MSWINDOWS_CDC(f) = CreateCompatibleDC (FRAME_MSWINDOWS_CDC(f));
202 SetTextAlign (FRAME_MSWINDOWS_DC(f), TA_BASELINE | TA_LEFT | TA_NOUPDATECP);
206 mswindows_init_frame_2 (struct frame *f, Lisp_Object props)
208 if (NILP (Vmswindows_use_system_frame_size_defaults))
210 /* I don't think anything can set the frame size before this
211 since we don't have X resources. This may change if we look
212 at the registry. Even so these values can get overridden
214 XEMACS_RECT_WH dest = { -1, -1, DEFAULT_FRAME_WIDTH,
215 DEFAULT_FRAME_HEIGHT };
216 mswindows_size_frame_internal (f, &dest);
220 /* Called after frame's properties are set */
222 mswindows_init_frame_3 (struct frame *f)
224 /* Don't do this earlier or we get a WM_PAINT before the frame is ready.
225 * The SW_x parameter in the first call that an app makes to ShowWindow is
226 * ignored, and the parameter specified in the caller's STARTUPINFO is
227 * substituted instead. That parameter is SW_HIDE if we were started by
228 * runemacs, so call this twice. #### runemacs is evil */
229 ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_SHOWNORMAL);
230 ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_SHOWNORMAL);
231 SetForegroundWindow (FRAME_MSWINDOWS_HANDLE(f));
232 DragAcceptFiles (FRAME_MSWINDOWS_HANDLE(f), TRUE);
236 mswindows_after_init_frame (struct frame *f, int first_on_device,
237 int first_on_console)
239 /* Windows, unlike X, is very synchronous. After the initial
240 frame is created, it will never be displayed, except for
241 hollow border, unless we start pumping messages. Load progress
242 messages show in the bottom of the hollow frame, which is ugly.
243 We redisplay the initial frame here, so modeline and root window
246 if (first_on_console)
251 mswindows_mark_frame (struct frame *f, void (*markobj) (Lisp_Object))
253 markobj (FRAME_MSWINDOWS_MENU_HASH_TABLE (f));
255 markobj (FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE (f));
257 markobj (FRAME_MSWINDOWS_WIDGET_HASH_TABLE (f));
261 mswindows_focus_on_frame (struct frame *f)
263 SetForegroundWindow (FRAME_MSWINDOWS_HANDLE(f));
267 mswindows_delete_frame (struct frame *f)
271 DeleteDC(FRAME_MSWINDOWS_CDC(f));
272 ReleaseDC(FRAME_MSWINDOWS_HANDLE(f), FRAME_MSWINDOWS_DC(f));
273 DestroyWindow(FRAME_MSWINDOWS_HANDLE(f));
274 xfree (f->frame_data);
280 mswindows_set_frame_size (struct frame *f, int width, int height)
283 rect.left = rect.top = 0;
285 rect.bottom = height;
287 AdjustWindowRectEx (&rect,
288 GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), GWL_STYLE),
289 GetMenu (FRAME_MSWINDOWS_HANDLE(f)) != NULL,
290 GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), GWL_EXSTYLE));
292 if (IsIconic (FRAME_MSWINDOWS_HANDLE(f)) || IsZoomed (FRAME_MSWINDOWS_HANDLE(f)))
293 ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_RESTORE);
295 SetWindowPos (FRAME_MSWINDOWS_HANDLE(f), NULL,
296 0, 0, rect.right-rect.left, rect.bottom-rect.top,
297 SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSENDCHANGING | SWP_NOMOVE);
301 mswindows_set_frame_position (struct frame *f, int xoff, int yoff)
303 SetWindowPos (FRAME_MSWINDOWS_HANDLE(f), NULL,
305 SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSENDCHANGING | SWP_NOSIZE);
309 mswindows_make_frame_visible (struct frame *f)
312 ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_RESTORE);
314 ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_SHOWNORMAL);
320 mswindows_make_frame_invisible (struct frame *f)
322 ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_HIDE);
327 mswindows_frame_totally_visible_p (struct frame *f)
329 RECT rc_me, rc_other, rc_temp;
330 HWND hwnd = FRAME_MSWINDOWS_HANDLE(f);
332 /* We test against not a whole window rectangle, only against its
333 client part. So, if non-client are is covered and client area is
334 not, we return true. */
335 GetClientRect (hwnd, &rc_me);
336 MapWindowPoints (hwnd, HWND_DESKTOP, (LPPOINT)&rc_me, 2);
338 /* First see if we're off the desktop */
339 GetWindowRect (GetDesktopWindow(), &rc_other);
340 UnionRect(&rc_temp, &rc_me, &rc_other);
341 if (!EqualRect (&rc_temp, &rc_other))
344 /* Then see if any window above us obscures us */
345 while ((hwnd = GetWindow (hwnd, GW_HWNDPREV)) != NULL)
346 if (IsWindowVisible (hwnd))
348 GetWindowRect (hwnd, &rc_other);
349 if (IntersectRect(&rc_temp, &rc_me, &rc_other))
357 mswindows_frame_visible_p (struct frame *f)
359 return IsWindowVisible (FRAME_MSWINDOWS_HANDLE(f))
360 && !IsIconic (FRAME_MSWINDOWS_HANDLE(f));
365 mswindows_iconify_frame (struct frame *f)
367 ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_MINIMIZE);
373 mswindows_frame_iconified_p (struct frame *f)
375 return IsIconic (FRAME_MSWINDOWS_HANDLE(f));
379 mswindows_set_frame_icon (struct frame *f)
381 if (IMAGE_INSTANCEP (f->icon)
382 && IMAGE_INSTANCE_PIXMAP_TYPE_P (XIMAGE_INSTANCE (f->icon)))
384 if (!XIMAGE_INSTANCE_MSWINDOWS_ICON (f->icon))
386 mswindows_initialize_image_instance_icon (XIMAGE_INSTANCE (f->icon),
390 SetClassLong (FRAME_MSWINDOWS_HANDLE (f), GCL_HICON,
391 (LONG) XIMAGE_INSTANCE_MSWINDOWS_ICON (f->icon));
396 mswindows_set_frame_pointer (struct frame *f)
398 if (IMAGE_INSTANCEP (f->pointer)
399 && IMAGE_INSTANCE_TYPE (XIMAGE_INSTANCE (f->pointer)) == IMAGE_POINTER)
401 SetClassLong (FRAME_MSWINDOWS_HANDLE (f), GCL_HCURSOR,
402 (LONG) XIMAGE_INSTANCE_MSWINDOWS_ICON (f->pointer));
403 /* we only have to do this because GC doesn't cause a mouse
404 event and doesn't give time to event processing even if it
406 SetCursor (XIMAGE_INSTANCE_MSWINDOWS_ICON (f->pointer));
411 mswindows_set_mouse_position (struct window *w, int x, int y)
413 struct frame *f = XFRAME (w->frame);
416 pt.x = w->pixel_left + x;
417 pt.y = w->pixel_top + y;
418 ClientToScreen (FRAME_MSWINDOWS_HANDLE(f), &pt);
419 SetCursorPos (pt.x, pt.y);
423 mswindows_get_mouse_position (struct device *d, Lisp_Object *frame, int *x, int *y)
430 /* What's under cursor? */
431 hwnd = WindowFromPoint (pt);
435 /* Get grandest parent of the window */
438 while ((hwnd_parent = GetParent (hwnd)) != NULL)
442 /* Make sure it belongs to us */
443 if (GetWindowThreadProcessId (hwnd, NULL) != GetCurrentThreadId ())
446 /* And that the window is an XEmacs frame */
448 char class_name [sizeof(XEMACS_CLASS) + 1];
449 if (!GetClassName (hwnd, class_name, sizeof(XEMACS_CLASS))
450 || strcmp (class_name, XEMACS_CLASS) != 0)
455 ScreenToClient (hwnd, &pt);
456 VOID_TO_LISP (*frame, GetWindowLong (hwnd, XWL_FRAMEOBJ));
463 mswindows_raise_frame (struct frame *f)
465 BringWindowToTop (FRAME_MSWINDOWS_HANDLE(f));
466 /* XXX Should we do SetWindowForeground too ? */
470 mswindows_lower_frame (struct frame *f)
472 SetWindowPos (FRAME_MSWINDOWS_HANDLE(f), HWND_BOTTOM, 0, 0, 0, 0,
473 SWP_NOSIZE | SWP_NOMOVE | SWP_NOSENDCHANGING);
477 mswindows_set_title_from_bufbyte (struct frame *f, Bufbyte *title)
479 unsigned int new_checksum = hash_string (title, strlen (title));
480 if (new_checksum != FRAME_MSWINDOWS_TITLE_CHECKSUM(f))
482 FRAME_MSWINDOWS_TITLE_CHECKSUM(f) = new_checksum;
483 SetWindowText (FRAME_MSWINDOWS_HANDLE(f), title);
488 mswindows_frame_property (struct frame *f, Lisp_Object property)
490 if (EQ (Qleft, property) || EQ (Qtop, property))
493 GetWindowRect (FRAME_MSWINDOWS_HANDLE(f), &rc);
494 return make_int (EQ (Qtop, property) ? rc.top : rc.left);
500 mswindows_internal_frame_property_p (struct frame *f, Lisp_Object property)
502 return EQ (property, Qleft)
503 || EQ (property, Qtop);
504 /* #### frame-x.c has also this. Why?
505 || STRINGP (property);
510 mswindows_frame_properties (struct frame *f)
512 Lisp_Object props = Qnil;
514 GetWindowRect (FRAME_MSWINDOWS_HANDLE(f), &rc);
516 props = cons3 (Qtop, make_int (rc.top), props);
517 props = cons3 (Qleft, make_int (rc.left), props);
523 mswindows_set_frame_properties (struct frame *f, Lisp_Object plist)
526 int width = -1, height = -1;
527 BOOL width_specified_p = FALSE;
528 BOOL height_specified_p = FALSE;
529 BOOL x_specified_p = FALSE;
530 BOOL y_specified_p = FALSE;
533 /* Extract the properties from plist */
534 for (tail = plist; !NILP (tail); tail = Fcdr (Fcdr (tail)))
536 Lisp_Object prop = Fcar (tail);
537 Lisp_Object val = Fcar (Fcdr (tail));
541 /* Kludge to handle the font property. */
542 if (EQ (prop, Qfont))
544 /* If the value is not a string we silently ignore it. */
547 Lisp_Object frm, font_spec;
550 font_spec = Fget (Fget_face (Qdefault), Qfont, Qnil);
552 Fadd_spec_to_specifier (font_spec, val, frm, Qnil, Qnil);
553 update_frame_face_values (f);
556 else if (EQ (prop, Qwidth))
560 width_specified_p = TRUE;
562 else if (EQ (prop, Qheight))
566 height_specified_p = TRUE;
568 else if (EQ (prop, Qleft))
572 x_specified_p = TRUE;
574 else if (EQ (prop, Qtop))
578 y_specified_p = TRUE;
583 /* Now we've extracted the properties, apply them.
584 Do not apply geometric properties during frame creation. This
585 is excessive anyways, and this loses becuase WM_SIZE has not
586 been sent yet, so frame width and height fields are not initialized.
588 unfortunately WM_SIZE loses as well since the resize is only
589 applied once and the first time WM_SIZE is applied not everything
590 is initialised in the frame (toolbars for instance). enabling
591 this always makes no visible difference and fixes a whole host of
592 bugs (and is more consistent with X) so I am going to reenable it.
594 if ( FRAME_PIXWIDTH (f) && FRAME_PIXHEIGHT (f)
595 && (width_specified_p || height_specified_p || x_specified_p || y_specified_p))
597 XEMACS_RECT_WH dest = { x, y, width, height };
599 mswindows_size_frame_internal (f, &dest);
603 void mswindows_size_frame_internal (struct frame* f, XEMACS_RECT_WH* dest)
606 int pixel_width, pixel_height;
607 int size_p = (dest->width >=0 || dest->height >=0);
608 int move_p = (dest->top >=0 || dest->left >=0);
609 struct device* d = XDEVICE (FRAME_DEVICE (f));
610 char_to_real_pixel_size (f, dest->width, dest->height, &pixel_width, &pixel_height);
613 pixel_width = FRAME_PIXWIDTH (f);
614 if (dest->height < 0)
615 pixel_height = FRAME_PIXHEIGHT (f);
617 GetWindowRect (FRAME_MSWINDOWS_HANDLE(f), &rect);
619 dest->left = rect.left;
621 dest->top = rect.top;
623 rect.left = rect.top = 0;
624 rect.right = pixel_width;
625 rect.bottom = pixel_height;
627 AdjustWindowRectEx (&rect,
628 GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), GWL_STYLE),
629 GetMenu (FRAME_MSWINDOWS_HANDLE(f)) != NULL,
630 GetWindowLong (FRAME_MSWINDOWS_HANDLE(f), GWL_EXSTYLE));
632 /* resize and move the window so that it fits on the screen. This is
633 not restrictive since this will happen later anyway in WM_SIZE. We
634 have to do this after adjusting the rect to account for menubar
636 pixel_width = rect.right - rect.left;
637 pixel_height = rect.bottom - rect.top;
638 if (pixel_width > DEVICE_MSWINDOWS_HORZRES(d))
640 pixel_width = DEVICE_MSWINDOWS_HORZRES(d);
643 if (pixel_height > DEVICE_MSWINDOWS_VERTRES(d))
645 pixel_height = DEVICE_MSWINDOWS_VERTRES(d);
649 /* adjust position so window is on screen */
650 if (dest->left + pixel_width > DEVICE_MSWINDOWS_HORZRES(d))
652 dest->left = DEVICE_MSWINDOWS_HORZRES(d) - pixel_width;
655 if (dest->top + pixel_height > DEVICE_MSWINDOWS_VERTRES(d))
657 dest->top = DEVICE_MSWINDOWS_VERTRES(d) - pixel_height;
661 if (IsIconic (FRAME_MSWINDOWS_HANDLE(f))
662 || IsZoomed (FRAME_MSWINDOWS_HANDLE(f)))
663 ShowWindow (FRAME_MSWINDOWS_HANDLE(f), SW_RESTORE);
665 SetWindowPos (FRAME_MSWINDOWS_HANDLE(f), NULL,
666 dest->left, dest->top, pixel_width, pixel_height,
667 SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSENDCHANGING
668 | (size_p ? 0 : SWP_NOSIZE)
669 | (move_p ? 0 : SWP_NOMOVE));
673 mswindows_get_frame_parent (struct frame *f)
675 HWND hwnd = FRAME_MSWINDOWS_HANDLE(f);
676 hwnd = GetParent (hwnd);
680 VOID_TO_LISP (parent, GetWindowLong (hwnd, XWL_FRAMEOBJ));
681 assert (FRAME_MSWINDOWS_P (XFRAME (parent)));
689 mswindows_update_frame_external_traits (struct frame* frm, Lisp_Object name)
694 mswindows_frame_size_fixed_p (struct frame *f)
696 /* Frame size cannot change if the frame is maximized */
697 return IsZoomed (FRAME_MSWINDOWS_HANDLE (f));
701 console_type_create_frame_mswindows (void)
704 CONSOLE_HAS_METHOD (mswindows, init_frame_1);
705 CONSOLE_HAS_METHOD (mswindows, init_frame_2);
706 CONSOLE_HAS_METHOD (mswindows, init_frame_3);
707 CONSOLE_HAS_METHOD (mswindows, after_init_frame);
708 CONSOLE_HAS_METHOD (mswindows, mark_frame);
709 CONSOLE_HAS_METHOD (mswindows, focus_on_frame);
710 CONSOLE_HAS_METHOD (mswindows, delete_frame);
711 CONSOLE_HAS_METHOD (mswindows, get_mouse_position);
712 CONSOLE_HAS_METHOD (mswindows, set_mouse_position);
713 CONSOLE_HAS_METHOD (mswindows, raise_frame);
714 CONSOLE_HAS_METHOD (mswindows, lower_frame);
715 CONSOLE_HAS_METHOD (mswindows, make_frame_visible);
716 CONSOLE_HAS_METHOD (mswindows, make_frame_invisible);
717 CONSOLE_HAS_METHOD (mswindows, iconify_frame);
718 CONSOLE_HAS_METHOD (mswindows, set_frame_size);
719 CONSOLE_HAS_METHOD (mswindows, set_frame_position);
720 CONSOLE_HAS_METHOD (mswindows, frame_property);
721 CONSOLE_HAS_METHOD (mswindows, internal_frame_property_p);
722 CONSOLE_HAS_METHOD (mswindows, frame_properties);
723 CONSOLE_HAS_METHOD (mswindows, set_frame_properties);
724 CONSOLE_HAS_METHOD (mswindows, set_title_from_bufbyte);
725 /* CONSOLE_HAS_METHOD (mswindows, set_icon_name_from_bufbyte); */
726 CONSOLE_HAS_METHOD (mswindows, frame_visible_p);
727 CONSOLE_HAS_METHOD (mswindows, frame_totally_visible_p);
728 CONSOLE_HAS_METHOD (mswindows, frame_iconified_p);
729 CONSOLE_HAS_METHOD (mswindows, set_frame_pointer);
730 CONSOLE_HAS_METHOD (mswindows, set_frame_icon);
731 CONSOLE_HAS_METHOD (mswindows, get_frame_parent);
732 CONSOLE_HAS_METHOD (mswindows, update_frame_external_traits);
733 CONSOLE_HAS_METHOD (mswindows, frame_size_fixed_p);
737 syms_of_frame_mswindows (void)
742 vars_of_frame_mswindows (void)
744 /* Needn't staticpro -- see comment above. */
745 Vmswindows_frame_being_created = Qnil;
747 DEFVAR_LISP ("mswindows-use-system-frame-size-defaults", &Vmswindows_use_system_frame_size_defaults /*
748 Controls whether to use system or XEmacs defaults for frame size.
749 If nil then reasonable defaults are used for intial frame sizes. If t
750 then the system will choose default sizes for the frame.
752 Vmswindows_use_system_frame_size_defaults = Qnil;
754 DEFVAR_LISP ("default-mswindows-frame-plist", &Vdefault_mswindows_frame_plist /*
755 Plist of default frame-creation properties for mswindows frames.
756 These override what is specified in `default-frame-plist', but are
757 overridden by the arguments to the particular call to `make-frame'.
759 Note: In many cases, properties of a frame are available as specifiers
760 instead of through the frame-properties mechanism.
762 Here is a list of recognized frame properties, other than those
763 documented in `set-frame-properties' (they can be queried and
764 set at any time, except as otherwise noted):
766 initially-unmapped If non-nil, the frame will not be visible
767 when it is created. In this case, you
768 need to call `make-frame-visible' to make
770 popup If non-nil, it should be a frame, and this
771 frame will be created as a "popup" frame
772 whose parent is the given frame. This
773 will make the window manager treat the
774 frame as a dialog box, which may entail
775 doing different things (e.g. not asking
776 for positioning, and not iconifying
777 separate from its parent).
778 top Y position (in pixels) of the upper-left
779 outermost corner of the frame (i.e. the
780 upper-left of the window-manager
782 left X position (in pixels) of the upper-left
783 outermost corner of the frame (i.e. the
784 upper-left of the window-manager
787 See also `default-frame-plist', which specifies properties which apply
788 to all frames, not just mswindows frames.
790 Vdefault_mswindows_frame_plist = Qnil;
792 mswindows_console_methods->device_specific_frame_props =
793 &Vdefault_mswindows_frame_plist;