Commit 7c299e7a authored by Jim Blandy's avatar Jim Blandy

Make scrollbar structures into lisp objects, so that they can be

	GC'd; this allows windows and scrollbars can refer to each other
	without worrying about dangling pointers.
	* xterm.h (struct x_display): vertical_scrollbars and
	judge_timestamp members deleted.
	(struct scrollbar): Redesigned to be a template for a Lisp_Vector.
	(SCROLLBAR_VEC_SIZE, XSCROLLBAR, SCROLLBAR_PACK, SCROLLBAR_UNPACK,
	SCROLLBAR_X_WINDOW, SET_SCROLLBAR_X_WINDOW,
	VERTICAL_SCROLLBAR_INSIDE_WIDTH, VERTICAL_SCROLLBAR_TOP_RANGE,
	VERTICAL_SCROLLBAR_INSIDE_HEIGHT, VERTICAL_SCROLLBAR_MIN_HANDLE):
	New macros, to help deal with the lispy structures, and deal with
	the graphics.
	* frame.h (WINDOW_VERTICAL_SCROLLBAR): Macro deleted.
	(struct frame): New fields `scrollbars' and
	`condemned_scrollbars', for use by the scrollbar implementation.
	[MULTI_FRAME and not MULTI_FRAME] (FRAME_SCROLLBARS,
	FRAME_CONDEMNED_SCROLLBARS): Accessors for the new field.
	* window.h (struct window): Doc fix for vertical_scrollbar field.
	* frame.c (make_frame): Initialize the `scrollbars' and
	`condemned_scrollbars' fields of the new frame.
	* alloc.c (mark_object): Mark the `scrollbars' and
	`condemned_scrollbars' slots of frames.
	* xterm.c (x_window_to_scrollbar): Scrollbars are chained on
	frames' scrollbar field, not their x.display->vertical_scrollbars
	field.
	(x_scrollbar_create, x_scrollbar_set_handle, x_scrollbar_move,
	x_scrollbar_remove, XTset_vertical_scrollbar,
	XTcondemn_scrollbars, XTredeem_scrollbar, XTjudge_scrollbars,
	x_scrollbar_expose, x_scrollbar_handle_click,
	x_scrollbar_handle_motion): Substantially rewritten to correct
	typos and brainos, and to accomodate the lispy structures.
parent 535e0b8e
/* Storage allocation and gc for GNU Emacs Lisp interpreter.
Copyright (C) 1985, 1986, 1988, 1992 Free Software Foundation, Inc.
Copyright (C) 1985, 1986, 1988, 1992, 1993 Free Software Foundation, Inc.
This file is part of GNU Emacs.
GNU Emacs 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 1, or (at your option)
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Emacs is distributed in the hope that it will be useful,
......@@ -1497,6 +1497,8 @@ mark_object (objptr)
mark_object (&ptr->selected_window);
mark_object (&ptr->minibuffer_window);
mark_object (&ptr->param_alist);
mark_object (&ptr->scrollbars);
mark_object (&ptr->condemned_scrollbars);
}
break;
#endif /* not MULTI_FRAME */
......
/* Generic frame functions.
Copyright (C) 1989, 1992 Free Software Foundation.
Copyright (C) 1989, 1992, 1993 Free Software Foundation.
This file is part of GNU Emacs.
......@@ -160,8 +160,9 @@ make_frame (mini_p)
f->explicit_name = 0;
f->can_have_scrollbars = 0;
f->has_vertical_scrollbars = 0;
f->param_alist = Qnil;
f->scrollbars = Qnil;
f->condemned_scrollbars = Qnil;
root_window = make_window ();
if (mini_p)
......
/* Window definitions for GNU Emacs.
Copyright (C) 1985, 1986, 1992 Free Software Foundation, Inc.
Copyright (C) 1985, 1986, 1992, 1993 Free Software Foundation, Inc.
This file is part of GNU Emacs.
......@@ -123,10 +123,11 @@ struct window
Lisp_Object last_modified;
/* Value of point at that time */
Lisp_Object last_point;
/* Pointer to this window's vertical scrollbar, tagged as an
integer. If this window is newly created and we haven't
displayed a scrollbar in it yet, or if the frame doesn't have
any scrollbars, this is nil. */
/* This window's vertical scrollbar. This field is only for use
by the window-system-dependent code which implements the
scrollbars; it can store anything it likes here. If this
window is newly created and we haven't displayed a scrollbar in
it yet, or if the frame doesn't have any scrollbars, this is nil. */
Lisp_Object vertical_scrollbar;
/* The rest are currently not used or only half used */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment