the dynamic allocation time adds up. */
static Emchar_dynarr *title_string_emchar_dynarr;
-EXFUN (Fset_frame_properties, 2);
-
\f
static Lisp_Object
mark_frame (Lisp_Object obj)
f->subwindow_exposures = 0;
f->subwindow_exposures_tail = 0;
+ FRAME_SET_PAGENUMBER (f, 1);
+
/* Choose a buffer for the frame's root window. */
XWINDOW (root_window)->buffer = Qt;
{
a space), try to find another one. */
if (string_char (XSTRING (Fbuffer_name (buf)), 0) == ' ')
buf = Fother_buffer (buf, Qnil, Qnil);
- Fset_window_buffer (root_window, buf);
+ Fset_window_buffer (root_window, buf, Qnil);
}
return f;
f->has_minibuffer = 1;
XWINDOW (mini_window)->buffer = Qt;
- Fset_window_buffer (mini_window, Vminibuffer_zero);
+ Fset_window_buffer (mini_window, Vminibuffer_zero, Qt);
}
/* Make a frame using a separate minibuffer window on another frame.
/* Install the chosen minibuffer window, with proper buffer. */
store_minibuf_frame_prop (f, mini_window);
- Fset_window_buffer (mini_window, Vminibuffer_zero);
+ Fset_window_buffer (mini_window, Vminibuffer_zero, Qt);
}
/* Make a frame containing only a minibuffer window. */
/* Put the proper buffer in that window. */
- Fset_window_buffer (mini_window, Vminibuffer_zero);
+ Fset_window_buffer (mini_window, Vminibuffer_zero, Qt);
}
static Lisp_Object
else
name = build_string ("emacs");
- if (!NILP (Fstring_match (make_string ((CONST Bufbyte *) "\\.", 2), name,
+ if (!NILP (Fstring_match (make_string ((const Bufbyte *) "\\.", 2), name,
Qnil, Qnil)))
signal_simple_error (". not allowed in frame names", name);
reset_face_cachels (XWINDOW (FRAME_SELECTED_WINDOW (f)));
reset_glyph_cachels (XWINDOW (FRAME_SELECTED_WINDOW (f)));
reset_subwindow_cachels (f);
- change_frame_size (f, f->height, f->width, 0);
+ change_frame_size (f, f->height, f->width, 0);
}
MAYBE_FRAMEMETH (f, init_frame_2, (f, props));
Fset_frame_properties (frame, props);
MAYBE_FRAMEMETH (f, init_frame_3, (f));
- /* now initialise the gutters, this won't change the frame size
- so is ok here. */
- if (!DEVICE_STREAM_P (d))
- init_frame_gutters (f);
-
/* Hallelujah, praise the lord. */
f->init_finished = 1;
MAYBE_FRAMEMETH (f, after_init_frame, (f, first_frame_on_device,
first_frame_on_console));
+ if (!DEVICE_STREAM_P (d))
+ {
+ /* Now initialise the gutters. This won't change the frame size,
+ but is needed as input to the layout that change_frame_size
+ will eventually do. Unfortunately gutter sizing code relies
+ on the frame in question being visible so we can't do this
+ earlier. */
+ init_frame_gutters (f);
+
+ change_frame_size (f, f->height, f->width, 0);
+ }
+
if (first_frame_on_device)
{
if (first_frame_on_console)
f->selected_window = window;
if (!MINI_WINDOW_P (XWINDOW (window)) || FRAME_MINIBUF_ONLY_P (f))
{
-#ifdef HAVE_TOOLBARS
if (!EQ (f->last_nonminibuf_window, window))
{
+#ifdef HAVE_TOOLBARS
MARK_TOOLBAR_CHANGED;
+#endif
MARK_GUTTER_CHANGED;
}
-#endif
f->last_nonminibuf_window = window;
}
}
console = DEVICE_CONSOLE (d);
con = XCONSOLE (console);
- if (!called_from_delete_device)
+ if (!called_from_delete_device &&
+ !(MAYBE_INT_DEVMETH (d, device_implementation_flags, ())
+ & XDEVIMPF_FRAMELESS_OK))
{
/* If we're deleting the only non-minibuffer frame on the
device, delete the device. */
next_frame_internal (frame, Qt, device,
called_from_delete_device);
if (NILP (next_f) || EQ (next_f, frame))
- ;
+ set_device_selected_frame (d, Qnil);
else
set_device_selected_frame (d, next_f);
}
{
struct frame *sel_frame = selected_frame ();
Fset_window_buffer (sel_frame->minibuffer_window,
- XWINDOW (minibuf_window)->buffer);
+ XWINDOW (minibuf_window)->buffer, Qt);
minibuf_window = sel_frame->minibuffer_window;
/* If the dying minibuffer window was selected,
if (EQ (f->minibuffer_window, minibuf_window))
{
Fset_window_buffer (sel_frame->minibuffer_window,
- XWINDOW (minibuf_window)->buffer);
+ XWINDOW (minibuf_window)->buffer, Qt);
minibuf_window = sel_frame->minibuffer_window;
}
if (EQ (f->minibuffer_window, minibuf_window))
{
Fset_window_buffer (sel_frame->minibuffer_window,
- XWINDOW (minibuf_window)->buffer);
+ XWINDOW (minibuf_window)->buffer, Qt);
minibuf_window = sel_frame->minibuffer_window;
}
/* Ben thinks there is no need for `redirect-frame-focus' or `frame-focus',
crockish FSFmacs functions. See summary on focus in event-stream.c. */
+\f
+DEFUN ("print-job-page-number", Fprint_job_page_number, 1, 1, 0, /*
+Return current page number for the print job FRAME.
+*/
+ (frame))
+{
+ CHECK_PRINTER_FRAME (frame);
+ return make_int (FRAME_PAGENUMBER (XFRAME (frame)));
+}
+
+DEFUN ("print-job-eject-page", Fprint_job_eject_page, 1, 1, 0, /*
+Eject page in the print job FRAME.
+*/
+ (frame))
+{
+ struct frame *f;
+
+ CHECK_PRINTER_FRAME (frame);
+ f = XFRAME (frame);
+ FRAMEMETH (f, eject_page, (f));
+ FRAME_SET_PAGENUMBER (f, 1 + FRAME_PAGENUMBER (f));
+ f->clear = 1;
+
+ return Qnil;
+}
\f
/***************************************************************************/
Lisp_Object *face_prop_out)
{
Lisp_Object list = Vbuilt_in_face_specifiers;
- struct Lisp_String *s;
+ Lisp_String *s;
if (!SYMBOLP (sym))
return 0;
while (!NILP (list))
{
Lisp_Object prop = Fcar (list);
- struct Lisp_String *prop_name;
+ Lisp_String *prop_name;
if (!SYMBOLP (prop))
continue;
minibuffer Gives the minibuffer behavior for this frame. Either
t (frame has its own minibuffer), `only' (frame is
- a minibuffer-only frame), or a window (frame uses that
- window, which is on another frame, as the minibuffer).
+ a minibuffer-only frame), `none' (frame has no minibuffer)
+ or a window (frame uses that window, which is on another
+ frame, as the minibuffer).
unsplittable If non-nil, frame cannot be split by `display-buffer'.
left-toolbar-visible-p, right-toolbar-visible-p, toolbar-buttons-captioned-p,
top-toolbar-border-width, bottom-toolbar-border-width,
left-toolbar-border-width, right-toolbar-border-width,
- modeline-shadow-thickness, has-modeline-p
+ modeline-shadow-thickness, has-modeline-p,
+ default-gutter, top-gutter, bottom-gutter, left-gutter, right-gutter,
+ default-gutter-height, default-gutter-width, top-gutter-height,
+ bottom-gutter-height, left-gutter-width, right-gutter-width,
+ default-gutter-visible-p, top-gutter-visible-p, bottom-gutter-visible-p,
+ left-gutter-visible-p, right-gutter-visible-p, top-gutter-border-width,
+ bottom-gutter-border-width, left-gutter-border-width, right-gutter-border-width,
[Giving the name of any built-in specifier variable is
equivalent to calling `set-specifier' on the specifier,
with a locale of FRAME. Giving the name to `frame-property'
{
int adjustment, trunc_width, cont_width;
- trunc_width = glyph_width (Vtruncation_glyph,
+ trunc_width = glyph_width (Vtruncation_glyph,
FRAME_SELECTED_WINDOW (f));
- cont_width = glyph_width (Vcontinuation_glyph,
+ cont_width = glyph_width (Vcontinuation_glyph,
FRAME_SELECTED_WINDOW (f));
adjustment = max (trunc_width, cont_width);
adjustment = max (adjustment, font_width);
if (new_pixheight)
{
- XWINDOW (FRAME_ROOT_WINDOW (f))->pixel_top = FRAME_TOP_BORDER_END (f);
+ /* Adjust for gutters here so that we always get set
+ properly. */
+ new_pixheight -=
+ (FRAME_TOP_GUTTER_BOUNDS (f)
+ + FRAME_BOTTOM_GUTTER_BOUNDS (f));
+
+ XWINDOW (FRAME_ROOT_WINDOW (f))->pixel_top
+ = FRAME_TOP_BORDER_END (f) + FRAME_TOP_GUTTER_BOUNDS (f);
if (FRAME_HAS_MINIBUF_P (f)
&& ! FRAME_MINIBUF_ONLY_P (f))
new_pixheight - minibuf_height, 0);
XWINDOW (FRAME_MINIBUF_WINDOW (f))->pixel_top =
- new_pixheight - minibuf_height + FRAME_TOP_BORDER_END (f);
+ FRAME_TOP_BORDER_END (f) +
+ FRAME_TOP_GUTTER_BOUNDS (f) +
+ FRAME_BOTTOM_GUTTER_BOUNDS (f) +
+ new_pixheight - minibuf_height;
set_window_pixheight (FRAME_MINIBUF_WINDOW (f), minibuf_height, 0);
}
if (new_pixwidth)
{
- XWINDOW (FRAME_ROOT_WINDOW (f))->pixel_left = FRAME_LEFT_BORDER_END (f);
+ /* Adjust for gutters here so that we always get set
+ properly. */
+ new_pixwidth -=
+ (FRAME_LEFT_GUTTER_BOUNDS (f)
+ + FRAME_RIGHT_GUTTER_BOUNDS (f));
+
+ XWINDOW (FRAME_ROOT_WINDOW (f))->pixel_left =
+ FRAME_LEFT_BORDER_END (f) + FRAME_LEFT_GUTTER_BOUNDS (f);
set_window_pixwidth (FRAME_ROOT_WINDOW (f), new_pixwidth, 0);
if (FRAME_HAS_MINIBUF_P (f))
{
XWINDOW (FRAME_MINIBUF_WINDOW (f))->pixel_left =
- FRAME_LEFT_BORDER_END (f);
+ FRAME_LEFT_BORDER_END (f) + FRAME_LEFT_GUTTER_BOUNDS (f);
set_window_pixwidth (FRAME_MINIBUF_WINDOW (f), new_pixwidth, 0);
}
}
MARK_FRAME_TOOLBARS_CHANGED (f);
+ MARK_FRAME_GUTTERS_CHANGED (f);
MARK_FRAME_CHANGED (f);
f->echo_area_garbaged = 1;
}
void
syms_of_frame (void)
{
+ INIT_LRECORD_IMPLEMENTATION (frame);
+
defsymbol (&Qdelete_frame_hook, "delete-frame-hook");
defsymbol (&Qselect_frame_hook, "select-frame-hook");
defsymbol (&Qdeselect_frame_hook, "deselect-frame-hook");
DEFSUBR (Fset_frame_size);
DEFSUBR (Fset_frame_position);
DEFSUBR (Fset_frame_pointer);
+ DEFSUBR (Fprint_job_page_number);
+ DEFSUBR (Fprint_job_eject_page);
}
void
Vsynchronize_minibuffers = Qnil;
DEFVAR_LISP ("frame-title-format", &Vframe_title_format /*
-Controls the title of the X window corresponding to the selected frame.
+Controls the title of the window-system window of the selected frame.
This is the same format as `modeline-format' with the exception that
%- is ignored.
*/ );
+/* #### I would change this unilaterally but for the wrath of the Kyles
+of the world. */
+#ifdef WINDOWSNT
+ Vframe_title_format = build_string ("%b - XEmacs");
+#else
Vframe_title_format = build_string ("%S: %b");
+#endif
DEFVAR_LISP ("frame-icon-title-format", &Vframe_icon_title_format /*
Controls the title of the icon corresponding to the selected frame.
DEFVAR_LISP ("default-frame-name", &Vdefault_frame_name /*
The default name to assign to newly-created frames.
-This can be overridden by arguments to `make-frame'.
-This must be a string.
+This can be overridden by arguments to `make-frame'. This must be a string.
+This is used primarily for picking up X resources, and is *not* the title
+of the frame. (See `frame-title-format'.)
*/ );
#ifndef INFODOCK
Vdefault_frame_name = build_string ("emacs");