#include "msdos.h"
#endif
-#ifdef MULTI_FRAME
-
-#include "buffer.h"
-
-/* These help us bind and responding to switch-frame events. */
-#include "commands.h"
-#include "keyboard.h"
-
-Lisp_Object Vemacs_iconified;
-Lisp_Object Vframe_list;
-Lisp_Object Vterminal_frame;
-Lisp_Object Vdefault_frame_alist;
-
/* Evaluate this expression to rebuild the section of syms_of_frame
that initializes and staticpros the symbols declared below. Note
that Emacs 18 has a bug that keeps C-x C-e from being able to
(setq symbol-list (cdr symbol-list)))))
*/
+/* We need most of these symbols even if not MULTI_FRAME;
+ easiest to define them all, all of the time. */
/*&&& symbols declared here &&&*/
Lisp_Object Qframep;
Lisp_Object Qframe_live_p;
Lisp_Object Qmenu_bar_lines;
Lisp_Object Qwidth;
Lisp_Object Qx;
+Lisp_Object Qwin32;
Lisp_Object Qvisible;
Lisp_Object Qbuffer_predicate;
+Lisp_Object Vterminal_frame;
+Lisp_Object Vdefault_frame_alist;
+
+Lisp_Object Qmouse_leave_buffer_hook;
+
+static void
+syms_of_frame_1 ()
+{
+ /*&&& init symbols here &&&*/
+ Qframep = intern ("framep");
+ staticpro (&Qframep);
+ Qframe_live_p = intern ("frame-live-p");
+ staticpro (&Qframe_live_p);
+ Qheight = intern ("height");
+ staticpro (&Qheight);
+ Qicon = intern ("icon");
+ staticpro (&Qicon);
+ Qminibuffer = intern ("minibuffer");
+ staticpro (&Qminibuffer);
+ Qmodeline = intern ("modeline");
+ staticpro (&Qmodeline);
+ Qname = intern ("name");
+ staticpro (&Qname);
+ Qonly = intern ("only");
+ staticpro (&Qonly);
+ Qunsplittable = intern ("unsplittable");
+ staticpro (&Qunsplittable);
+ Qmenu_bar_lines = intern ("menu-bar-lines");
+ staticpro (&Qmenu_bar_lines);
+ Qwidth = intern ("width");
+ staticpro (&Qwidth);
+ Qx = intern ("x");
+ staticpro (&Qx);
+ Qwin32 = intern ("win32");
+ staticpro (&Qwin32);
+ Qvisible = intern ("visible");
+ staticpro (&Qvisible);
+ Qbuffer_predicate = intern ("buffer-predicate");
+ staticpro (&Qbuffer_predicate);
+
+ Qmouse_leave_buffer_hook = intern ("mouse-leave-buffer-hook");
+ staticpro (&Qmouse_leave_buffer_hook);
+
+ DEFVAR_LISP ("default-frame-alist", &Vdefault_frame_alist,
+ "Alist of default values for frame creation.\n\
+These may be set in your init file, like this:\n\
+ (setq default-frame-alist '((width . 80) (height . 55) (menu-bar-lines . 1))\n\
+These override values given in window system configuration data,\n\
+ including X Windows' defaults database.\n\
+For values specific to the first Emacs frame, see `initial-frame-alist'.\n\
+For values specific to the separate minibuffer frame, see\n\
+ `minibuffer-frame-alist'.\n\
+The `menu-bar-lines' element of the list controls whether new frames\n\
+ have menu bars; `menu-bar-mode' works by altering this element.");
+ Vdefault_frame_alist = Qnil;
+}
+\f
+static void
+set_menu_bar_lines_1 (window, n)
+ Lisp_Object window;
+ int n;
+{
+ struct window *w = XWINDOW (window);
+
+ XSETFASTINT (w->last_modified, 0);
+ XSETFASTINT (w->top, XFASTINT (w->top) + n);
+ XSETFASTINT (w->height, XFASTINT (w->height) - n);
+
+ /* Handle just the top child in a vertical split. */
+ if (!NILP (w->vchild))
+ set_menu_bar_lines_1 (w->vchild, n);
+
+ /* Adjust all children in a horizontal split. */
+ for (window = w->hchild; !NILP (window); window = w->next)
+ {
+ w = XWINDOW (window);
+ set_menu_bar_lines_1 (window, n);
+ }
+}
+
+static void
+set_menu_bar_lines (f, value, oldval)
+ struct frame *f;
+ Lisp_Object value, oldval;
+{
+ int nlines;
+ int olines = FRAME_MENU_BAR_LINES (f);
+
+ /* Right now, menu bars don't work properly in minibuf-only frames;
+ most of the commands try to apply themselves to the minibuffer
+ frame itslef, and get an error because you can't switch buffers
+ in or split the minibuffer window. */
+ if (FRAME_MINIBUF_ONLY_P (f))
+ return;
+
+ if (INTEGERP (value))
+ nlines = XINT (value);
+ else
+ nlines = 0;
+
+ if (nlines != olines)
+ {
+ windows_or_buffers_changed++;
+ FRAME_WINDOW_SIZES_CHANGED (f) = 1;
+ FRAME_MENU_BAR_LINES (f) = nlines;
+ set_menu_bar_lines_1 (f->root_window, nlines - olines);
+ }
+}
+\f
+#ifdef MULTI_FRAME
+
+#include "buffer.h"
+
+/* These help us bind and responding to switch-frame events. */
+#include "commands.h"
+#include "keyboard.h"
+
+Lisp_Object Vemacs_iconified;
+Lisp_Object Vframe_list;
+
extern Lisp_Object Vminibuffer_list;
extern Lisp_Object get_minibuffer ();
extern Lisp_Object Fhandle_switch_frame ();
return Qt;
case output_x_window:
return Qx;
+ case output_win32:
+ return Qwin32;
/* The `pc' case is in the Fframep below. */
default:
abort ();
f->desired_glyphs = 0;
f->visible = 0;
f->async_visible = 0;
- f->display.nothing = 0;
+ f->output_data.nothing = 0;
f->iconified = 0;
f->async_iconified = 0;
f->wants_modeline = 1;
f->visible = 1; /* FRAME_SET_VISIBLE wd set frame_garbaged. */
f->async_visible = 1; /* Don't let visible be cleared later. */
- f->display.nothing = 1; /* Nonzero means frame isn't deleted. */
+ f->output_data.nothing = 1; /* Nonzero means frame isn't deleted. */
return f;
}
calculate_costs (f);
XSETFRAME (frame, f);
Fmodify_frame_parameters (frame, parms);
+ f->face_alist = selected_frame->face_alist;
return frame;
}
\f
-static Lisp_Object
+Lisp_Object
do_switch_frame (frame, no_enter, track)
Lisp_Object frame, no_enter;
int track;
}
#else /* ! 0 */
/* Instead, apply it only to the frame we're pointing to. */
-#ifdef HAVE_X_WINDOWS
- if (track && FRAME_X_P (XFRAME (frame)))
+#ifdef HAVE_WINDOW_SYSTEM
+ if (track && (FRAME_WINDOW_P (XFRAME (frame))))
{
Lisp_Object focus, xfocus;
#endif /* HAVE_X_WINDOWS */
#endif /* ! 0 */
- if (FRAME_TERMCAP_P (XFRAME (frame)))
- {
- /* Since frames on an ASCII terminal share the same display area,
- switching means we must redisplay the whole thing. */
- windows_or_buffers_changed++;
- SET_FRAME_GARBAGED (XFRAME (frame));
- XSETFRAME (Vterminal_frame, frame);
- }
-
selected_frame = XFRAME (frame);
if (! FRAME_MINIBUF_ONLY_P (selected_frame))
last_nonminibuf_frame = selected_frame;
Fselect_window (XFRAME (frame)->selected_window);
- choose_minibuf_frame ();
/* We want to make sure that the next event generates a frame-switch
event to the appropriate frame. This seems kludgy to me, but
{
/* Preserve prefix arg that the command loop just cleared. */
current_kboard->Vprefix_arg = Vcurrent_prefix_arg;
+ call1 (Vrun_hooks, Qmouse_leave_buffer_hook);
return do_switch_frame (frame, no_enter, 0);
}
Lisp_Object f;
f = XCONS (tail)->car;
- if (passed)
+
+ if (passed
+ && FRAME_KBOARD (XFRAME (f)) == FRAME_KBOARD (XFRAME (frame)))
{
/* Decide whether this frame is eligible to be returned. */
if (EQ (frame, f) && !NILP (prev))
return prev;
- /* Decide whether this frame is eligible to be returned,
- according to minibuf. */
- if (NILP (minibuf))
+ if (FRAME_KBOARD (XFRAME (f)) == FRAME_KBOARD (XFRAME (frame)))
{
- if (! FRAME_MINIBUF_ONLY_P (XFRAME (f)))
- prev = f;
- }
- else if (WINDOWP (minibuf))
- {
- if (EQ (FRAME_MINIBUF_WINDOW (XFRAME (f)), minibuf)
- /* Check that F either is, or has forwarded its focus to,
- MINIBUF's frame. */
- && (EQ (WINDOW_FRAME (XWINDOW (minibuf)), f)
- || EQ (WINDOW_FRAME (XWINDOW (minibuf)),
- FRAME_FOCUS_FRAME (XFRAME (f)))))
- prev = f;
- }
- else if (EQ (minibuf, Qvisible))
- {
- FRAME_SAMPLE_VISIBILITY (XFRAME (f));
- if (FRAME_VISIBLE_P (XFRAME (f)))
- prev = f;
- }
- else if (XFASTINT (minibuf) == 0)
- {
- FRAME_SAMPLE_VISIBILITY (XFRAME (f));
- if (FRAME_VISIBLE_P (XFRAME (f))
- || FRAME_ICONIFIED_P (XFRAME (f)))
+ /* Decide whether this frame is eligible to be returned,
+ according to minibuf. */
+ if (NILP (minibuf))
+ {
+ if (! FRAME_MINIBUF_ONLY_P (XFRAME (f)))
+ prev = f;
+ }
+ else if (WINDOWP (minibuf))
+ {
+ if (EQ (FRAME_MINIBUF_WINDOW (XFRAME (f)), minibuf)
+ /* Check that F either is, or has forwarded its focus to,
+ MINIBUF's frame. */
+ && (EQ (WINDOW_FRAME (XWINDOW (minibuf)), f)
+ || EQ (WINDOW_FRAME (XWINDOW (minibuf)),
+ FRAME_FOCUS_FRAME (XFRAME (f)))))
+ prev = f;
+ }
+ else if (EQ (minibuf, Qvisible))
+ {
+ FRAME_SAMPLE_VISIBILITY (XFRAME (f));
+ if (FRAME_VISIBLE_P (XFRAME (f)))
+ prev = f;
+ }
+ else if (XFASTINT (minibuf) == 0)
+ {
+ FRAME_SAMPLE_VISIBILITY (XFRAME (f));
+ if (FRAME_VISIBLE_P (XFRAME (f))
+ || FRAME_ICONIFIED_P (XFRAME (f)))
+ prev = f;
+ }
+ else
prev = f;
}
- else
- prev = f;
}
/* We've scanned the entire list. */
DEFUN ("next-frame", Fnext_frame, Snext_frame, 0, 2, 0,
"Return the next frame in the frame list after FRAME.\n\
+It considers only frames on the same terminal as FRAME.\n\
By default, skip minibuffer-only frames.\n\
If omitted, FRAME defaults to the selected frame.\n\
If optional argument MINIFRAME is nil, exclude minibuffer-only frames.\n\
-If MINIBUF is a window, include only its own frame\n\
+If MINIFRAME is a window, include only its own frame\n\
and any frame now using that window as the minibuffer.\n\
If MINIFRAME is `visible', include all visible frames.\n\
-If MINIBUF is 0, include all visible and iconified frames.\n\
+If MINIFRAME is 0, include all visible and iconified frames.\n\
Otherwise, include all frames.")
(frame, miniframe)
Lisp_Object frame, miniframe;
DEFUN ("previous-frame", Fprevious_frame, Sprevious_frame, 0, 2, 0,
"Return the previous frame in the frame list before FRAME.\n\
+It considers only frames on the same terminal as FRAME.\n\
By default, skip minibuffer-only frames.\n\
If omitted, FRAME defaults to the selected frame.\n\
If optional argument MINIFRAME is nil, exclude minibuffer-only frames.\n\
-If MINIBUF is a window, include only its own frame\n\
+If MINIFRAME is a window, include only its own frame\n\
and any frame now using that window as the minibuffer.\n\
If MINIFRAME is `visible', include all visible frames.\n\
-If MINIBUF is 0, include all visible and iconified frames.\n\
+If MINIFRAME is 0, include all visible and iconified frames.\n\
Otherwise, include all frames.")
(frame, miniframe)
Lisp_Object frame, miniframe;
/* Verify that the frame's window still exists
and we can still talk to it. And note any recent change
in visibility. */
-#ifdef HAVE_X_WINDOWS
- if (FRAME_X_P (XFRAME (this)))
+#ifdef HAVE_WINDOW_SYSTEM
+ if (FRAME_WINDOW_P (XFRAME (this)))
{
x_sync (XFRAME (this));
FRAME_SAMPLE_VISIBILITY (XFRAME (this));
|| FRAME_ICONIFIED_P (XFRAME (this))
/* Allow deleting the terminal frame when at least
one X frame exists! */
- || (FRAME_X_P (XFRAME (this)) && !FRAME_X_P (f)))
+ || (FRAME_WINDOW_P (XFRAME (this)) && !FRAME_WINDOW_P (f)))
count++;
}
return count > 1;
/* Don't let the frame remain selected. */
if (f == selected_frame)
- Fhandle_switch_frame (next_frame (frame, Qt), Qnil);
+ {
+ Lisp_Object tail, frame1;
+
+ /* Look for another visible frame on the same terminal. */
+ frame1 = next_frame (frame, Qvisible);
+
+ /* If there is none, find *some* other frame. */
+ if (NILP (frame1) || EQ (frame1, frame))
+ {
+ FOR_EACH_FRAME (tail, frame1)
+ {
+ if (! EQ (frame, frame1))
+ break;
+ }
+ }
+
+ do_switch_frame (frame1, Qnil, 0);
+ }
/* Don't allow minibuf_window to remain on a deleted frame. */
if (EQ (f->minibuffer_window, minibuf_window))
called the window-system-dependent frame destruction routine. */
/* I think this should be done with a hook. */
-#ifdef HAVE_X_WINDOWS
- if (FRAME_X_P (f))
+#ifdef HAVE_WINDOW_SYSTEM
+ if (FRAME_WINDOW_P (f))
x_destroy_window (f);
#endif
- f->display.nothing = 0;
+ f->output_data.nothing = 0;
/* If we've deleted the last_nonminibuf_frame, then try to find
another one. */
/* The last frame we saw with a minibuffer, minibuffer-only or not. */
Lisp_Object frame_with_minibuf;
+ /* Some frame we found on the same kboard, or nil if there are none. */
+ Lisp_Object frame_on_same_kboard;
+ frame_on_same_kboard = Qnil;
frame_with_minibuf = Qnil;
+
for (frames = Vframe_list;
CONSP (frames);
frames = XCONS (frames)->cdr)
if (FRAME_MINIBUF_ONLY_P (f1))
break;
}
+
+ if (FRAME_KBOARD (f) == FRAME_KBOARD (f1))
+ frame_on_same_kboard = this;
}
- /* We know that there must be some frame with a minibuffer out
- there. If this were not true, all of the frames present
- would have to be minibufferless, which implies that at some
- point their minibuffer frames must have been deleted, but
- that is prohibited at the top; you can't delete surrogate
- minibuffer frames. */
- if (NILP (frame_with_minibuf))
- abort ();
+ if (!NILP (frame_on_same_kboard))
+ {
+ /* We know that there must be some frame with a minibuffer out
+ there. If this were not true, all of the frames present
+ would have to be minibufferless, which implies that at some
+ point their minibuffer frames must have been deleted, but
+ that is prohibited at the top; you can't delete surrogate
+ minibuffer frames. */
+ if (NILP (frame_with_minibuf))
+ abort ();
- FRAME_KBOARD (f)->Vdefault_minibuffer_frame = frame_with_minibuf;
+ FRAME_KBOARD (f)->Vdefault_minibuffer_frame = frame_with_minibuf;
+ }
+ else
+ /* No frames left on this kboard--say no minibuffer either. */
+ FRAME_KBOARD (f)->Vdefault_minibuffer_frame = Qnil;
}
return Qnil;
DEFUN ("set-mouse-position", Fset_mouse_position, Sset_mouse_position, 3, 3, 0,
"Move the mouse pointer to the center of character cell (X,Y) in FRAME.\n\
-WARNING: If you use this under X windows,\n\
-you should call `unfocus-frame' afterwards.")
+Note, this is a no-op for an X frame that is not visible.\n\
+If you have just created a frame, you must wait for it to become visible\n\
+before calling this function on it, like this.\n\
+ (while (not (frame-visible-p frame)) (sleep-for .5))")
(frame, x, y)
Lisp_Object frame, x, y;
{
CHECK_NUMBER (y, 1);
/* I think this should be done with a hook. */
-#ifdef HAVE_X_WINDOWS
- if (FRAME_X_P (XFRAME (frame)))
+#ifdef HAVE_WINDOW_SYSTEM
+ if (FRAME_WINDOW_P (XFRAME (frame)))
/* Warping the mouse will cause enternotify and focus events. */
x_set_mouse_position (XFRAME (frame), x, y);
#endif
DEFUN ("set-mouse-pixel-position", Fset_mouse_pixel_position,
Sset_mouse_pixel_position, 3, 3, 0,
"Move the mouse pointer to pixel position (X,Y) in FRAME.\n\
-WARNING: If you use this under X windows,\n\
-you should call `unfocus-frame' afterwards.")
+Note, this is a no-op for an X frame that is not visible.\n\
+If you have just created a frame, you must wait for it to become visible\n\
+before calling this function on it, like this.\n\
+ (while (not (frame-visible-p frame)) (sleep-for .5))")
(frame, x, y)
Lisp_Object frame, x, y;
{
CHECK_NUMBER (y, 1);
/* I think this should be done with a hook. */
-#ifdef HAVE_X_WINDOWS
- if (FRAME_X_P (XFRAME (frame)))
+#ifdef HAVE_WINDOW_SYSTEM
+ if (FRAME_WINDOW_P (XFRAME (frame)))
/* Warping the mouse will cause enternotify and focus events. */
x_set_mouse_pixel_position (XFRAME (frame), x, y);
#endif
CHECK_LIVE_FRAME (frame, 0);
/* I think this should be done with a hook. */
-#ifdef HAVE_X_WINDOWS
- if (FRAME_X_P (XFRAME (frame)))
+#ifdef HAVE_WINDOW_SYSTEM
+ if (FRAME_WINDOW_P (XFRAME (frame)))
{
FRAME_SAMPLE_VISIBILITY (XFRAME (frame));
x_make_frame_visible (XFRAME (frame));
#if 0 /* This isn't logically necessary, and it can do GC. */
/* Don't let the frame remain selected. */
if (XFRAME (frame) == selected_frame)
- Fhandle_switch_frame (next_frame (frame, Qt), Qnil);
+ do_switch_frame (next_frame (frame, Qt), Qnil, 0)
#endif
/* Don't allow minibuf_window to remain on a deleted frame. */
}
/* I think this should be done with a hook. */
-#ifdef HAVE_X_WINDOWS
- if (FRAME_X_P (XFRAME (frame)))
+#ifdef HAVE_WINDOW_SYSTEM
+ if (FRAME_WINDOW_P (XFRAME (frame)))
x_make_frame_invisible (XFRAME (frame));
#endif
}
/* I think this should be done with a hook. */
-#ifdef HAVE_X_WINDOWS
- if (FRAME_X_P (XFRAME (frame)))
+#ifdef HAVE_WINDOW_SYSTEM
+ if (FRAME_WINDOW_P (XFRAME (frame)))
x_iconify_frame (XFRAME (frame));
#endif
XFRAME (frame)->focus_frame = focus_frame;
/* I think this should be done with a hook. */
-#ifdef HAVE_X_WINDOWS
+#ifdef HAVE_WINDOW_SYSTEM
if (!NILP (focus_frame) && ! EQ (focus_frame, frame)
- && FRAME_X_P (XFRAME (focus_frame)))
+ && (FRAME_WINDOW_P (XFRAME (focus_frame))))
Ffocus_frame (focus_frame);
#endif
if (EQ (prop, Qbuffer_predicate))
f->buffer_predicate = val;
+ if (! FRAME_WINDOW_P (f))
+ if (EQ (prop, Qmenu_bar_lines))
+ set_menu_bar_lines (f, val, make_number (FRAME_MENU_BAR_LINES (f)));
+
if (EQ (prop, Qminibuffer) && WINDOWP (val))
{
if (! MINI_WINDOW_P (XWINDOW (val)))
store_in_alist (&alist, Qunsplittable, (FRAME_NO_SPLIT_P (f) ? Qt : Qnil));
/* I think this should be done with a hook. */
-#ifdef HAVE_X_WINDOWS
- if (FRAME_X_P (f))
+#ifdef HAVE_WINDOW_SYSTEM
+ if (FRAME_WINDOW_P (f))
x_report_frame_params (f, &alist);
else
#endif
}
/* I think this should be done with a hook. */
-#ifdef HAVE_X_WINDOWS
- if (FRAME_X_P (f))
+#ifdef HAVE_WINDOW_SYSTEM
+ if (FRAME_WINDOW_P (f))
x_set_frame_parameters (f, alist);
else
#endif
f = XFRAME (frame);
}
-#ifdef HAVE_X_WINDOWS
- if (FRAME_X_P (f))
+#ifdef HAVE_WINDOW_SYSTEM
+ if (FRAME_WINDOW_P (f))
return make_number (x_char_height (f));
else
#endif
f = XFRAME (frame);
}
-#ifdef HAVE_X_WINDOWS
- if (FRAME_X_P (f))
+#ifdef HAVE_WINDOW_SYSTEM
+ if (FRAME_WINDOW_P (f))
return make_number (x_char_width (f));
else
#endif
f = XFRAME (frame);
}
-#ifdef HAVE_X_WINDOWS
- if (FRAME_X_P (f))
+#ifdef HAVE_WINDOW_SYSTEM
+ if (FRAME_WINDOW_P (f))
return make_number (x_pixel_height (f));
else
#endif
f = XFRAME (frame);
}
-#ifdef HAVE_X_WINDOWS
- if (FRAME_X_P (f))
+#ifdef HAVE_WINDOW_SYSTEM
+ if (FRAME_WINDOW_P (f))
return make_number (x_pixel_width (f));
else
#endif
}
/* I think this should be done with a hook. */
-#ifdef HAVE_X_WINDOWS
- if (FRAME_X_P (f))
+#ifdef HAVE_WINDOW_SYSTEM
+ if (FRAME_WINDOW_P (f))
{
if (XINT (rows) != f->height)
x_set_window_size (f, 1, f->width, XINT (rows));
}
/* I think this should be done with a hook. */
-#ifdef HAVE_X_WINDOWS
- if (FRAME_X_P (f))
+#ifdef HAVE_WINDOW_SYSTEM
+ if (FRAME_WINDOW_P (f))
{
if (XINT (cols) != f->width)
x_set_window_size (f, 1, XINT (cols), f->height);
f = XFRAME (frame);
/* I think this should be done with a hook. */
-#ifdef HAVE_X_WINDOWS
- if (FRAME_X_P (f))
+#ifdef HAVE_WINDOW_SYSTEM
+ if (FRAME_WINDOW_P (f))
{
if (XINT (rows) != f->height || XINT (cols) != f->width)
x_set_window_size (f, 1, XINT (cols), XINT (rows));
f = XFRAME (frame);
/* I think this should be done with a hook. */
-#ifdef HAVE_X_WINDOWS
- if (FRAME_X_P (f))
+#ifdef HAVE_WINDOW_SYSTEM
+ if (FRAME_WINDOW_P (f))
x_set_offset (f, XINT (xoffset), XINT (yoffset), 1);
#endif
}
\f
-choose_minibuf_frame ()
-{
- /* For lowest-level minibuf, put it on currently selected frame
- if frame has a minibuffer. */
-
- if (minibuf_level == 0
- && selected_frame != 0
- && !EQ (minibuf_window, selected_frame->minibuffer_window))
- {
- /* I don't think that any frames may validly have a null minibuffer
- window anymore. */
- if (NILP (selected_frame->minibuffer_window))
- abort ();
-
- Fset_window_buffer (selected_frame->minibuffer_window,
- XWINDOW (minibuf_window)->buffer);
- minibuf_window = selected_frame->minibuffer_window;
- }
-}
-\f
syms_of_frame ()
{
- /*&&& init symbols here &&&*/
- Qframep = intern ("framep");
- staticpro (&Qframep);
- Qframe_live_p = intern ("frame-live-p");
- staticpro (&Qframe_live_p);
- Qheight = intern ("height");
- staticpro (&Qheight);
- Qicon = intern ("icon");
- staticpro (&Qicon);
- Qminibuffer = intern ("minibuffer");
- staticpro (&Qminibuffer);
- Qmodeline = intern ("modeline");
- staticpro (&Qmodeline);
- Qname = intern ("name");
- staticpro (&Qname);
- Qonly = intern ("only");
- staticpro (&Qonly);
- Qunsplittable = intern ("unsplittable");
- staticpro (&Qunsplittable);
- Qmenu_bar_lines = intern ("menu-bar-lines");
- staticpro (&Qmenu_bar_lines);
- Qwidth = intern ("width");
- staticpro (&Qwidth);
- Qx = intern ("x");
- staticpro (&Qx);
- Qvisible = intern ("visible");
- staticpro (&Qvisible);
- Qbuffer_predicate = intern ("buffer-predicate");
- staticpro (&Qbuffer_predicate);
+ syms_of_frame_1 ();
staticpro (&Vframe_list);
current set of frames, or where the minibuffer is currently being\n\
displayed.");
- DEFVAR_LISP ("default-frame-alist", &Vdefault_frame_alist,
- "Alist of default values for frame creation.\n\
-These may be set in your init file, like this:\n\
- (setq default-frame-alist '((width . 80) (height . 55) (menu-bar-lines . 1))\n\
-These override values given in window system configuration data,\n\
- including X Windows' defaults database.\n\
-For values specific to the first Emacs frame, see `initial-frame-alist'.\n\
-For values specific to the separate minibuffer frame, see\n\
- `minibuffer-frame-alist'.\n\
-The `menu-bar-lines' element of the list controls whether new frames\n\
- have menu bars; `menu-bar-mode' works by altering this element.");
- Vdefault_frame_alist = Qnil;
-
defsubr (&Sactive_minibuffer_window);
defsubr (&Sframep);
defsubr (&Sframe_live_p);
/* If we're not using multi-frame stuff, we still need to provide some
support functions. */
-Lisp_Object Qheight;
-Lisp_Object Qminibuffer;
-Lisp_Object Qmodeline;
-Lisp_Object Qname;
-Lisp_Object Qunsplittable;
-Lisp_Object Qmenu_bar_lines;
-Lisp_Object Qwidth;
-
-Lisp_Object Vterminal_frame;
-
/* Unless this function is defined, providing set-frame-height and
set-frame-width doesn't help compatibility any, since they both
want this as their first argument. */
return tem;
}
+DEFUN ("active-minibuffer-window", Factive_minibuffer_window,
+ Sactive_minibuffer_window, 0, 0, 0,
+ /* Don't confuse make-docfile by having two doc strings for this function.
+ make-docfile does not pay attention to #if, for good reason! */
+ 0)
+ ()
+{
+ return minibuf_level ? minibuf_window : Qnil;
+}
+
DEFUN ("window-frame", Fwindow_frame, Swindow_frame, 1, 1, 0,
/* Don't confuse make-docfile by having two doc strings for this function.
make-docfile does not pay attention to #if, for good reason! */
(frame, alist)
Lisp_Object frame, alist;
{
+ Lisp_Object tail, elt, prop, val;
+ FRAME_PTR f;
+
+ if (NILP (frame))
+ f = selected_frame;
+ else
+ {
+ CHECK_LIVE_FRAME (frame, 0);
+ f = XFRAME (frame);
+ }
+
#ifdef MSDOS
if (FRAME_X_P (frame))
IT_set_frame_parameters (XFRAME (frame), alist);
+ else
#endif
+ for (tail = alist; !EQ (tail, Qnil); tail = Fcdr (tail))
+ {
+ elt = Fcar (tail);
+ prop = Fcar (elt);
+ val = Fcdr (elt);
+ if (EQ (prop, Qmenu_bar_lines))
+ set_menu_bar_lines (f, val, make_number (FRAME_MENU_BAR_LINES (f)));
+ }
+
return Qnil;
}
return Qt;
}
+DEFUN ("frame-visible-p", Fframe_visible_p, Sframe_visible_p, 1, 1, 0,
+ /* Don't confuse make-docfile by having two doc strings for this function.
+ make-docfile does not pay attention to #if, for good reason! */
+ 0)
+ (frame)
+ Lisp_Object frame;
+{
+ return Qt;
+}
+
DEFUN ("frame-list", Fframe_list, Sframe_list, 0, 0, 0,
/* Don't confuse make-docfile by having two doc strings for this function.
make-docfile does not pay attention to #if, for good reason! */
{
return Fcons (Fselected_frame (), Qnil);
}
-
+\f
syms_of_frame ()
{
- Qheight = intern ("height");
- staticpro (&Qheight);
- Qminibuffer = intern ("minibuffer");
- staticpro (&Qminibuffer);
- Qmodeline = intern ("modeline");
- staticpro (&Qmodeline);
- Qname = intern ("name");
- staticpro (&Qname);
- Qunsplittable = intern ("unsplittable");
- staticpro (&Qunsplittable);
- Qmenu_bar_lines = intern ("menu-bar-lines");
- staticpro (&Qmenu_bar_lines);
- Qwidth = intern ("width");
- staticpro (&Qwidth);
+ syms_of_frame_1 ();
DEFVAR_LISP ("terminal-frame", &Vterminal_frame,
/* Don't confuse make-docfile by having two doc strings for this variable.
XSETFASTINT (Vterminal_frame, 0);
defsubr (&Sselected_frame);
+ defsubr (&Sactive_minibuffer_window);
defsubr (&Swindow_frame);
defsubr (&Sframe_first_window);
defsubr (&Sframep);
defsubr (&Sframe_parameters);
defsubr (&Smodify_frame_parameters);
defsubr (&Sframe_live_p);
+ defsubr (&Sframe_visible_p);
defsubr (&Sframe_list);
#ifdef MSDOS