aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJim Blandy1993-01-14 15:17:39 +0000
committerJim Blandy1993-01-14 15:17:39 +0000
commit7c299e7aa414620d0986da9fe0ca6e9d71f5bc19 (patch)
treec2cca0de133495c9e1ab4114d094ee1183dd7397 /src
parent535e0b8ef6dc77f1a730c71c0df6316b9bb6535a (diff)
downloademacs-7c299e7aa414620d0986da9fe0ca6e9d71f5bc19.tar.gz
emacs-7c299e7aa414620d0986da9fe0ca6e9d71f5bc19.zip
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.
Diffstat (limited to 'src')
-rw-r--r--src/alloc.c6
-rw-r--r--src/frame.c5
-rw-r--r--src/window.h11
3 files changed, 13 insertions, 9 deletions
diff --git a/src/alloc.c b/src/alloc.c
index 9fecc60d09f..f49dbdf9e81 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -1,11 +1,11 @@
1/* Storage allocation and gc for GNU Emacs Lisp interpreter. 1/* Storage allocation and gc for GNU Emacs Lisp interpreter.
2 Copyright (C) 1985, 1986, 1988, 1992 Free Software Foundation, Inc. 2 Copyright (C) 1985, 1986, 1988, 1992, 1993 Free Software Foundation, Inc.
3 3
4This file is part of GNU Emacs. 4This file is part of GNU Emacs.
5 5
6GNU Emacs is free software; you can redistribute it and/or modify 6GNU Emacs is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by 7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 1, or (at your option) 8the Free Software Foundation; either version 2, or (at your option)
9any later version. 9any later version.
10 10
11GNU Emacs is distributed in the hope that it will be useful, 11GNU Emacs is distributed in the hope that it will be useful,
@@ -1497,6 +1497,8 @@ mark_object (objptr)
1497 mark_object (&ptr->selected_window); 1497 mark_object (&ptr->selected_window);
1498 mark_object (&ptr->minibuffer_window); 1498 mark_object (&ptr->minibuffer_window);
1499 mark_object (&ptr->param_alist); 1499 mark_object (&ptr->param_alist);
1500 mark_object (&ptr->scrollbars);
1501 mark_object (&ptr->condemned_scrollbars);
1500 } 1502 }
1501 break; 1503 break;
1502#endif /* not MULTI_FRAME */ 1504#endif /* not MULTI_FRAME */
diff --git a/src/frame.c b/src/frame.c
index 7ac1682830a..e393e597e0a 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -1,5 +1,5 @@
1/* Generic frame functions. 1/* Generic frame functions.
2 Copyright (C) 1989, 1992 Free Software Foundation. 2 Copyright (C) 1989, 1992, 1993 Free Software Foundation.
3 3
4This file is part of GNU Emacs. 4This file is part of GNU Emacs.
5 5
@@ -160,8 +160,9 @@ make_frame (mini_p)
160 f->explicit_name = 0; 160 f->explicit_name = 0;
161 f->can_have_scrollbars = 0; 161 f->can_have_scrollbars = 0;
162 f->has_vertical_scrollbars = 0; 162 f->has_vertical_scrollbars = 0;
163
164 f->param_alist = Qnil; 163 f->param_alist = Qnil;
164 f->scrollbars = Qnil;
165 f->condemned_scrollbars = Qnil;
165 166
166 root_window = make_window (); 167 root_window = make_window ();
167 if (mini_p) 168 if (mini_p)
diff --git a/src/window.h b/src/window.h
index b05386d978d..51a27157d59 100644
--- a/src/window.h
+++ b/src/window.h
@@ -1,5 +1,5 @@
1/* Window definitions for GNU Emacs. 1/* Window definitions for GNU Emacs.
2 Copyright (C) 1985, 1986, 1992 Free Software Foundation, Inc. 2 Copyright (C) 1985, 1986, 1992, 1993 Free Software Foundation, Inc.
3 3
4This file is part of GNU Emacs. 4This file is part of GNU Emacs.
5 5
@@ -123,10 +123,11 @@ struct window
123 Lisp_Object last_modified; 123 Lisp_Object last_modified;
124 /* Value of point at that time */ 124 /* Value of point at that time */
125 Lisp_Object last_point; 125 Lisp_Object last_point;
126 /* Pointer to this window's vertical scrollbar, tagged as an 126 /* This window's vertical scrollbar. This field is only for use
127 integer. If this window is newly created and we haven't 127 by the window-system-dependent code which implements the
128 displayed a scrollbar in it yet, or if the frame doesn't have 128 scrollbars; it can store anything it likes here. If this
129 any scrollbars, this is nil. */ 129 window is newly created and we haven't displayed a scrollbar in
130 it yet, or if the frame doesn't have any scrollbars, this is nil. */
130 Lisp_Object vertical_scrollbar; 131 Lisp_Object vertical_scrollbar;
131 132
132/* The rest are currently not used or only half used */ 133/* The rest are currently not used or only half used */