Lisp_Object Qheight, Qwidth;
Lisp_Object Qleft, Qright;
Lisp_Object Qicon_left, Qicon_top, Qicon_type, Qicon_name;
+Lisp_Object Qtooltip;
Lisp_Object Qinternal_border_width;
Lisp_Object Qmouse_color;
Lisp_Object Qminibuffer;
Lisp_Object Qtitle, Qname;
Lisp_Object Qexplicit_name;
Lisp_Object Qunsplittable;
-Lisp_Object Qmenu_bar_lines, Qtool_bar_lines;
+Lisp_Object Qmenu_bar_lines, Qtool_bar_lines, Qtool_bar_position;
Lisp_Object Vmenu_bar_mode, Vtool_bar_mode;
Lisp_Object Qleft_fringe, Qright_fringe;
Lisp_Object Qbuffer_predicate, Qbuffer_list, Qburied_buffer_list;
\f
Lisp_Object Vframe_list;
-extern Lisp_Object Vminibuffer_list;
-extern Lisp_Object get_minibuffer (int);
-extern Lisp_Object Fhandle_switch_frame (Lisp_Object event);
-extern Lisp_Object Fredirect_frame_focus (Lisp_Object frame, Lisp_Object focus_frame);
-extern Lisp_Object x_get_focus_frame (struct frame *frame);
-extern Lisp_Object QCname, Qfont_param;
-
\f
DEFUN ("framep", Fframep, Sframep, 1, 1, 0,
doc: /* Return non-nil if OBJECT is a frame.
`ns' for an Emacs frame on a GNUstep or Macintosh Cocoa display,
`pc' for a direct-write MS-DOS frame.
See also `frame-live-p'. */)
- (object)
- Lisp_Object object;
+ (Lisp_Object object)
{
if (!FRAMEP (object))
return Qnil;
frame, the return value indicates what sort of terminal device it is
displayed on. See the documentation of `framep' for possible
return values. */)
- (object)
- Lisp_Object object;
+ (Lisp_Object object)
{
return ((FRAMEP (object)
&& FRAME_LIVE_P (XFRAME (object)))
The value is nil if Emacs is using a text-only terminal.
FRAME defaults to the currently selected frame. */)
- (frame)
- Lisp_Object frame;
+ (Lisp_Object frame)
{
Lisp_Object type;
if (NILP (frame))
f->menu_bar_window = Qnil;
f->tool_bar_window = Qnil;
f->tool_bar_items = Qnil;
+ f->tool_bar_position = Qtop;
f->desired_tool_bar_string = f->current_tool_bar_string = Qnil;
f->n_tool_bar_items = 0;
f->left_fringe_width = f->right_fringe_width = 0;
f->fringe_cols = 0;
+ f->menu_bar_lines = 0;
+ f->tool_bar_lines = 0;
f->scroll_bar_actual_width = 0;
f->border_width = 0;
f->internal_border_width = 0;
FRAME_CAN_HAVE_SCROLL_BARS (f) = 0;
FRAME_VERTICAL_SCROLL_BAR_TYPE (f) = vertical_scroll_bar_none;
+ /* The default value of menu-bar-mode is t. */
+ set_menu_bar_lines (f, make_number (1), Qnil);
+
#ifdef CANNOT_DUMP
if (!noninteractive)
init_frame_faces (f);
FRAME_CAN_HAVE_SCROLL_BARS (f) = 0;
FRAME_VERTICAL_SCROLL_BAR_TYPE (f) = vertical_scroll_bar_none;
+ FRAME_MENU_BAR_LINES(f) = NILP (Vmenu_bar_mode) ? 0 : 1;
/* Set the top frame to the newly created frame. */
if (FRAMEP (FRAME_TTY (f)->top_frame)
Note that changing the size of one terminal frame automatically
affects all frames on the same terminal device. */)
- (parms)
- Lisp_Object parms;
+ (Lisp_Object parms)
{
struct frame *f;
struct terminal *t = NULL;
next redisplay will display FRAME.
This function returns FRAME, or nil if FRAME has been deleted. */)
- (frame, norecord)
- Lisp_Object frame, norecord;
+ (Lisp_Object frame, Lisp_Object norecord)
{
return do_switch_frame (frame, 1, 0, norecord);
}
If EVENT is frame object, handle it as if it were a switch-frame event
to that frame. */)
- (event)
- Lisp_Object event;
+ (Lisp_Object event)
{
/* Preserve prefix arg that the command loop just cleared. */
current_kboard->Vprefix_arg = Vcurrent_prefix_arg;
DEFUN ("selected-frame", Fselected_frame, Sselected_frame, 0, 0, 0,
doc: /* Return the frame that is now selected. */)
- ()
+ (void)
{
return selected_frame;
}
\f
DEFUN ("window-frame", Fwindow_frame, Swindow_frame, 1, 1, 0,
doc: /* Return the frame object that window WINDOW is on. */)
- (window)
- Lisp_Object window;
+ (Lisp_Object window)
{
CHECK_LIVE_WINDOW (window);
return XWINDOW (window)->frame;
DEFUN ("frame-first-window", Fframe_first_window, Sframe_first_window, 0, 1, 0,
doc: /* Returns the topmost, leftmost window of FRAME.
If omitted, FRAME defaults to the currently selected frame. */)
- (frame)
- Lisp_Object frame;
+ (Lisp_Object frame)
{
Lisp_Object w;
DEFUN ("active-minibuffer-window", Factive_minibuffer_window,
Sactive_minibuffer_window, 0, 0, 0,
doc: /* Return the currently active minibuffer window, or nil if none. */)
- ()
+ (void)
{
return minibuf_level ? minibuf_window : Qnil;
}
DEFUN ("frame-root-window", Fframe_root_window, Sframe_root_window, 0, 1, 0,
doc: /* Returns the root-window of FRAME.
If omitted, FRAME defaults to the currently selected frame. */)
- (frame)
- Lisp_Object frame;
+ (Lisp_Object frame)
{
Lisp_Object window;
Sframe_selected_window, 0, 1, 0,
doc: /* Return the selected window of FRAME.
FRAME defaults to the currently selected frame. */)
- (frame)
- Lisp_Object frame;
+ (Lisp_Object frame)
{
Lisp_Object window;
Optional argument NORECORD non-nil means to neither change the
order of recently selected windows nor the buffer list.
Return WINDOW. */)
- (frame, window, norecord)
- Lisp_Object frame, window, norecord;
+ (Lisp_Object frame, Lisp_Object window, Lisp_Object norecord)
{
if (NILP (frame))
frame = selected_frame;
DEFUN ("frame-list", Fframe_list, Sframe_list,
0, 0, 0,
doc: /* Return a list of all live frames. */)
- ()
+ (void)
{
Lisp_Object frames;
frames = Fcopy_sequence (Vframe_list);
If MINIFRAME is `visible', include all visible frames.
If MINIFRAME is 0, include all visible and iconified frames.
Otherwise, include all frames. */)
- (frame, miniframe)
- Lisp_Object frame, miniframe;
+ (Lisp_Object frame, Lisp_Object miniframe)
{
if (NILP (frame))
frame = selected_frame;
If MINIFRAME is `visible', include all visible frames.
If MINIFRAME is 0, include all visible and iconified frames.
Otherwise, include all frames. */)
- (frame, miniframe)
- Lisp_Object frame, miniframe;
+ (Lisp_Object frame, Lisp_Object miniframe)
{
if (NILP (frame))
frame = selected_frame;
return 1;
}
-/* Error handler for `delete-frame-functions'. */
-static Lisp_Object
-delete_frame_handler (Lisp_Object arg)
-{
- add_to_log ("Error during `delete-frame': %s", arg, Qnil);
- return Qnil;
-}
-
-extern Lisp_Object Qrun_hook_with_args;
-
/* Delete FRAME. When FORCE equals Qnoelisp, delete FRAME
unconditionally. x_connection_closed and delete_terminal use
this. Any other value of FORCE implements the semantics
/* If we use `register' here, gcc-4.0.2 on amd64 using
-DUSE_LISP_UNION_TYPE complains further down that we're getting the
address of `force'. Go figure. */
-
+
{
struct frame *f;
struct frame *sf = SELECTED_FRAME ();
struct kboard *kb;
- int minibuffer_selected;
+ int minibuffer_selected, tooltip_frame;
if (EQ (frame, Qnil))
{
}
}
+ tooltip_frame = !NILP (Fframe_parameter (frame, intern ("tooltip")));
+
/* Run `delete-frame-functions' unless FORCE is `noelisp' or
frame is a tooltip. FORCE is set to `noelisp' when handling
a disconnect from the terminal, so we don't dare call Lisp
code. */
- if (NILP (Vrun_hooks) || !NILP (Fframe_parameter (frame, intern ("tooltip"))))
+ if (NILP (Vrun_hooks) || tooltip_frame)
;
- if (EQ (force, Qnoelisp))
+ else if (EQ (force, Qnoelisp))
pending_funcalls
= Fcons (list3 (Qrun_hook_with_args, Qdelete_frame_functions, frame),
pending_funcalls);
}
/* Cause frame titles to update--necessary if we now have just one frame. */
- update_mode_lines = 1;
+ if (!tooltip_frame)
+ update_mode_lines = 1;
return Qnil;
}
This function runs `delete-frame-functions' before actually
deleting the frame, unless the frame is a tooltip.
The functions are run with one argument, the frame to be deleted. */)
- (frame, force)
- Lisp_Object frame, force;
+ (Lisp_Object frame, Lisp_Object force)
{
return delete_frame (frame, !NILP (force) ? Qt : Qnil);
}
If `mouse-position-function' is non-nil, `mouse-position' calls it,
passing the normal return value to that function as an argument,
and returns whatever that function returns. */)
- ()
+ (void)
{
FRAME_PTR f;
Lisp_Object lispy_dummy;
If Emacs is running on a mouseless terminal or hasn't been programmed
to read the mouse position, it returns the selected frame for FRAME
and nil for X and Y. */)
- ()
+ (void)
{
FRAME_PTR f;
Lisp_Object lispy_dummy;
If you have just created a frame, you must wait for it to become visible
before calling this function on it, like this.
(while (not (frame-visible-p frame)) (sleep-for .5)) */)
- (frame, x, y)
- Lisp_Object frame, x, y;
+ (Lisp_Object frame, Lisp_Object x, Lisp_Object y)
{
CHECK_LIVE_FRAME (frame);
CHECK_NUMBER (x);
If you have just created a frame, you must wait for it to become visible
before calling this function on it, like this.
(while (not (frame-visible-p frame)) (sleep-for .5)) */)
- (frame, x, y)
- Lisp_Object frame, x, y;
+ (Lisp_Object frame, Lisp_Object x, Lisp_Object y)
{
CHECK_LIVE_FRAME (frame);
CHECK_NUMBER (x);
0, 1, "",
doc: /* Make the frame FRAME visible (assuming it is an X window).
If omitted, FRAME defaults to the currently selected frame. */)
- (frame)
- Lisp_Object frame;
+ (Lisp_Object frame)
{
if (NILP (frame))
frame = selected_frame;
This function has no effect on text-only terminal frames. Such frames
are always considered visible, whether or not they are currently being
displayed in the terminal. */)
- (frame, force)
- Lisp_Object frame, force;
+ (Lisp_Object frame, Lisp_Object force)
{
if (NILP (frame))
frame = selected_frame;
0, 1, "",
doc: /* Make the frame FRAME into an icon.
If omitted, FRAME defaults to the currently selected frame. */)
- (frame)
- Lisp_Object frame;
+ (Lisp_Object frame)
{
if (NILP (frame))
frame = selected_frame;
If FRAME is a text-only terminal frame, this always returns t.
Such frames are always considered visible, whether or not they are
currently being displayed on the terminal. */)
- (frame)
- Lisp_Object frame;
+ (Lisp_Object frame)
{
CHECK_LIVE_FRAME (frame);
DEFUN ("visible-frame-list", Fvisible_frame_list, Svisible_frame_list,
0, 0, 0,
doc: /* Return a list of all frames now \"visible\" (being updated). */)
- ()
+ (void)
{
Lisp_Object tail, frame;
struct frame *f;
If you don't specify a frame, the selected frame is used.
If Emacs is displaying on an ordinary terminal or some other device which
doesn't support multiple overlapping frames, this function selects FRAME. */)
- (frame)
- Lisp_Object frame;
+ (Lisp_Object frame)
{
struct frame *f;
if (NILP (frame))
If you don't specify a frame, the selected frame is used.
If Emacs is displaying on an ordinary terminal or some other device which
doesn't support multiple overlapping frames, this function does nothing. */)
- (frame)
- Lisp_Object frame;
+ (Lisp_Object frame)
{
struct frame *f;
is affected by `select-frame', while the latter is not.
The redirection lasts until `redirect-frame-focus' is called to change it. */)
- (frame, focus_frame)
- Lisp_Object frame, focus_frame;
+ (Lisp_Object frame, Lisp_Object focus_frame)
{
struct frame *f;
doc: /* Return the frame to which FRAME's keystrokes are currently being sent.
This returns nil if FRAME's focus is not redirected.
See `redirect-frame-focus'. */)
- (frame)
- Lisp_Object frame;
+ (Lisp_Object frame)
{
CHECK_LIVE_FRAME (frame);
It is a list of elements of the form (PARM . VALUE), where PARM is a symbol.
The meaningful PARMs depend on the kind of frame.
If FRAME is omitted, return information on the currently selected frame. */)
- (frame)
- Lisp_Object frame;
+ (Lisp_Object frame)
{
Lisp_Object alist;
FRAME_PTR f;
DEFUN ("frame-parameter", Fframe_parameter, Sframe_parameter, 2, 2, 0,
doc: /* Return FRAME's value for parameter PARAMETER.
If FRAME is nil, describe the currently selected frame. */)
- (frame, parameter)
- Lisp_Object frame, parameter;
+ (Lisp_Object frame, Lisp_Object parameter)
{
struct frame *f;
Lisp_Object value;
enabled such bindings for that variable with `make-variable-frame-local'.
Note that this functionality is obsolete as of Emacs 22.2, and its
use is not recommended. Explicitly check for a frame-parameter instead. */)
- (frame, alist)
- Lisp_Object frame, alist;
+ (Lisp_Object frame, Lisp_Object alist)
{
FRAME_PTR f;
register Lisp_Object tail, prop, val;
doc: /* Height in pixels of a line in the font in frame FRAME.
If FRAME is omitted, the selected frame is used.
For a terminal frame, the value is always 1. */)
- (frame)
- Lisp_Object frame;
+ (Lisp_Object frame)
{
struct frame *f;
If FRAME is omitted, the selected frame is used.
On a graphical screen, the width is the standard width of the default font.
For a terminal screen, the value is always 1. */)
- (frame)
- Lisp_Object frame;
+ (Lisp_Object frame)
{
struct frame *f;
For a text-only terminal, it includes the menu bar. In this case, the
result is really in characters rather than pixels (i.e., is identical
to `frame-height'). */)
- (frame)
- Lisp_Object frame;
+ (Lisp_Object frame)
{
struct frame *f;
doc: /* Return FRAME's width in pixels.
For a terminal frame, the result really gives the width in characters.
If FRAME is omitted, the selected frame is used. */)
- (frame)
- Lisp_Object frame;
+ (Lisp_Object frame)
{
struct frame *f;
doc: /* Specify that the frame FRAME has LINES lines.
Optional third arg non-nil means that redisplay should use LINES lines
but that the idea of the actual height of the frame should not be changed. */)
- (frame, lines, pretend)
- Lisp_Object frame, lines, pretend;
+ (Lisp_Object frame, Lisp_Object lines, Lisp_Object pretend)
{
register struct frame *f;
doc: /* Specify that the frame FRAME has COLS columns.
Optional third arg non-nil means that redisplay should use COLS columns
but that the idea of the actual width of the frame should not be changed. */)
- (frame, cols, pretend)
- Lisp_Object frame, cols, pretend;
+ (Lisp_Object frame, Lisp_Object cols, Lisp_Object pretend)
{
register struct frame *f;
CHECK_NUMBER (cols);
DEFUN ("set-frame-size", Fset_frame_size, Sset_frame_size, 3, 3, 0,
doc: /* Sets size of FRAME to COLS by ROWS, measured in characters. */)
- (frame, cols, rows)
- Lisp_Object frame, cols, rows;
+ (Lisp_Object frame, Lisp_Object cols, Lisp_Object rows)
{
register struct frame *f;
This is actually the position of the upper left corner of the frame.
Negative values for XOFFSET or YOFFSET are interpreted relative to
the rightmost or bottommost possible position (that stays within the screen). */)
- (frame, xoffset, yoffset)
- Lisp_Object frame, xoffset, yoffset;
+ (Lisp_Object frame, Lisp_Object xoffset, Lisp_Object yoffset)
{
register struct frame *f;
Lisp_Object *variable;
};
-static struct frame_parm_table frame_parms[] =
+static const struct frame_parm_table frame_parms[] =
{
{"auto-raise", &Qauto_raise},
{"auto-lower", &Qauto_lower},
{"font-backend", &Qfont_backend},
{"alpha", &Qalpha},
{"sticky", &Qsticky},
+ {"tool-bar-position", &Qtool_bar_position},
};
#ifdef HAVE_WINDOW_SYSTEM
-extern Lisp_Object Qbox;
-extern Lisp_Object Qtop;
-
/* Calculate fullscreen size. Return in *TOP_POS and *LEFT_POS the
wanted positions of the WM window (not Emacs window).
Return in *WIDTH and *HEIGHT the wanted width and height of Emacs
XSETFASTINT (tem, FRAME_X_OUTPUT (f)->parent_desc);
store_in_alist (alistptr, Qexplicit_name, (f->explicit_name ? Qt : Qnil));
store_in_alist (alistptr, Qparent_id, tem);
+ store_in_alist (alistptr, Qtool_bar_position, f->tool_bar_position);
}
x_set_fringe_width (struct frame *f, Lisp_Object new_value, Lisp_Object old_value)
{
compute_fringe_widths (f, 1);
+#ifdef HAVE_X_WINDOWS
+ /* Must adjust this so window managers report correct number of columns. */
+ if (FRAME_X_WINDOW (f) != 0)
+ x_wm_set_size_hint (f, 0, 0);
+#endif
}
void
if (STRINGP (Vx_resource_name))
{
unsigned char *p = SDATA (Vx_resource_name);
- int i;
len = SBYTES (Vx_resource_name);
}
-extern char *x_get_string_resource (XrmDatabase, char *, char *);
+extern char *x_get_string_resource (XrmDatabase, const char *, const char *);
extern Display_Info *check_x_display_info (Lisp_Object);
class, respectively. You must specify both of them or neither.
If you specify them, the key is `INSTANCE.COMPONENT.ATTRIBUTE'
and the class is `Emacs.CLASS.SUBCLASS'. */)
- (attribute, class, component, subclass)
- Lisp_Object attribute, class, component, subclass;
+ (Lisp_Object attribute, Lisp_Object class, Lisp_Object component, Lisp_Object subclass)
{
#ifdef HAVE_X_WINDOWS
check_x ();
/* Used when C code wants a resource value. */
/* Called from oldXMenu/Create.c. */
char *
-x_get_resource_string (char *attribute, char *class)
+x_get_resource_string (const char *attribute, const char *class)
{
char *name_key;
char *class_key;
and don't let it get stored in any Lisp-visible variables! */
Lisp_Object
-x_get_arg (Display_Info *dpyinfo, Lisp_Object alist, Lisp_Object param, char *attribute, char *class, enum resource_types type)
+x_get_arg (Display_Info *dpyinfo, Lisp_Object alist, Lisp_Object param,
+ const char *attribute, const char *class, enum resource_types type)
{
register Lisp_Object tem;
}
Lisp_Object
-x_frame_get_arg (struct frame *f, Lisp_Object alist, Lisp_Object param, char *attribute, char *class, enum resource_types type)
+x_frame_get_arg (struct frame *f, Lisp_Object alist, Lisp_Object param,
+ const char *attribute, const char *class,
+ enum resource_types type)
{
return x_get_arg (FRAME_X_DISPLAY_INFO (f),
alist, param, attribute, class, type);
/* Like x_frame_get_arg, but also record the value in f->param_alist. */
Lisp_Object
-x_frame_get_and_record_arg (struct frame *f, Lisp_Object alist, Lisp_Object param, char *attribute, char *class, enum resource_types type)
+x_frame_get_and_record_arg (struct frame *f, Lisp_Object alist,
+ Lisp_Object param,
+ const char *attribute, const char *class,
+ enum resource_types type)
{
Lisp_Object value;
If that is not found either, use the value DEFLT. */
Lisp_Object
-x_default_parameter (struct frame *f, Lisp_Object alist, Lisp_Object prop, Lisp_Object deflt, char *xprop, char *xclass, enum resource_types type)
+x_default_parameter (struct frame *f, Lisp_Object alist, Lisp_Object prop,
+ Lisp_Object deflt, const char *xprop, const char *xclass,
+ enum resource_types type)
{
Lisp_Object tem;
or a list (+ N) meaning N pixels relative to top/left corner,
or a list (- N) meaning -N pixels relative to bottom/right corner.
On Nextstep, this just calls `ns-parse-geometry'. */)
- (string)
- Lisp_Object string;
+ (Lisp_Object string)
{
#ifdef HAVE_NS
call1 (Qns_parse_geometry, string);
staticpro (&Qicon_left);
Qicon_top = intern_c_string ("icon-top");
staticpro (&Qicon_top);
+ Qtooltip = intern_c_string ("tooltip");
+ staticpro (&Qtooltip);
Qleft = intern_c_string ("left");
staticpro (&Qleft);
Qright = intern_c_string ("right");