comparison src/term.c @ 1717:aa7d6d57504b

* frame.h (struct frame): New fields `can_have_scrollbars' and `has_vertical_scrollbars'. (FRAME_CAN_HAVE_SCROLLBARS, FRAME_HAS_VERTICAL_SCROLLBARS): New accessors, for both the MULTI_FRAME and non-MULTI_FRAME. (VERTICAL_SCROLLBAR_WIDTH, WINDOW_VERTICAL_SCROLLBAR, WINDOW_VERTICAL_SCROLLBAR_COLUMN, WINDOW_VERTICAL_SCROLLBAR_HEIGHT): New macros. * window.h (struct window): New field `vertical_scrollbar'. * xterm.h (struct x_display): vertical_scrollbars, judge_timestamp, vertical_scrollbar_extra: New fields. (struct scrollbar): New struct. (VERTICAL_SCROLLBAR_PIXEL_WIDTH, VERTICAL_SCROLLBAR_PIXEL_HEIGHT, VERTICAL_SCROLLBAR_LEFT_BORDER, VERTICAL_SCROLLBAR_RIGHT_BORDER, VERTICAL_SCROLLBAR_TOP_BORDER, VERTICAL_SCROLLBAR_BOTTOM_BORDER, CHAR_TO_PIXEL_WIDTH, CHAR_TO_PIXEL_HEIGHT, PIXEL_TO_CHAR_WIDTH, PIXEL_TO_CHAR_HEIGHT): New accessors and macros. * frame.c (make_frame): Initialize the `can_have_scrollbars' and `has_vertical_scrollbars' fields of the frame. * term.c (term_init): Note that TERMCAP terminals don't support scrollbars. (mouse_position_hook): Document new args. (set_vertical_scrollbar_hook, condemn_scrollbars_hook, redeem_scrollbar_hook, judge_scrollbars_hook): New hooks. * termhooks.h: Declare and document them. (enum scrollbar_part): New type. (struct input_event): Describe the new form of the scrollbar_click event type. Change `part' from a Lisp_Object to an enum scrollbar_part. Add a new field `scrollbar'. * keyboard.c (kbd_buffer_get_event): Pass appropriate new parameters to *mouse_position_hook, and make_lispy_movement. * xfns.c (x_set_vertical_scrollbar): New function. (x_figure_window_size): Use new macros to calculate frame size. (Fx_create_frame): Note that X Windows frames do support scroll bars. Default to "yes". * xterm.c: #include <X11/cursorfont.h> and "window.h". (x_vertical_scrollbar_cursor): New variable. (x_term_init): Initialize it. (last_mouse_bar, last_mouse_bar_frame, last_mouse_part, last_mouse_scroll_range_start, last_mouse_scroll_range_end): New variables. (XTmouse_position): Use them to return scrollbar movement events. Take new arguments, for that purpose. (x_window_to_scrollbar, x_scrollbar_create, x_scrollbar_set_handle, x_scrollbar_remove, x_scrollbar_move, XTset_scrollbar, XTcondemn_scrollbars, XTredeem_scrollbar, XTjudge_scrollbars, x_scrollbar_expose, x_scrollbar_background_expose, x_scrollbar_handle_click, x_scrollbar_handle_motion): New functions to implement scrollbars. (x_term_init): Set the termhooks.h hooks to point to them. (x_set_window_size): Use new macros to calculate frame size. Set vertical_scrollbar_extra field. (x_make_frame_visible): Use the frame accessor FRAME_HAS_VERTICAL_SCROLLBARS to decide if we need to map the frame's subwindows as well. (XTread_socket): Use new size-calculation macros from xterm.h when processing ConfigureNotify events. (x_wm_set_size_hint): Use PIXEL_TO_CHAR_WIDTH and PIXEL_TO_CHAR_HEIGHT macros. * ymakefile (xdisp.o): This now depends on termhooks.h. (xterm.o): This now depends on window.h.
author Jim Blandy <jimb@redhat.com>
date Thu, 24 Dec 1992 06:17:18 +0000
parents 58c373be762c
children 3f161f6701b1
comparison
equal deleted inserted replaced
1716:95db936d47c0 1717:aa7d6d57504b
91 int (*update_end_hook) (); 91 int (*update_end_hook) ();
92 int (*set_terminal_window_hook) (); 92 int (*set_terminal_window_hook) ();
93 93
94 int (*read_socket_hook) (); 94 int (*read_socket_hook) ();
95 95
96 /* Return the current position of the mouse. This should clear 96 /* Return the current position of the mouse.
97 mouse_moved until the next motion event arrives. */ 97 Set `bar' to point to the scrollbar if the mouse movement started
98 in a scrollbar, or zero if it started elsewhere in the frame.
99 This should clear mouse_moved until the next motion event arrives. */
98 void (*mouse_position_hook) ( /* FRAME_PTR *f, 100 void (*mouse_position_hook) ( /* FRAME_PTR *f,
99 Lisp_Object *x, 101 struct scrollbar **bar,
100 Lisp_Object *y, 102 enum scrollbar_part *part,
101 unsigned long *time */ ); 103 Lisp_Object *x,
104 Lisp_Object *y,
105 unsigned long *time */ );
102 106
103 /* When reading from a minibuffer in a different frame, Emacs wants 107 /* When reading from a minibuffer in a different frame, Emacs wants
104 to shift the highlight from the selected frame to the minibuffer's 108 to shift the highlight from the selected frame to the minibuffer's
105 frame; under X, this means it lies about where the focus is. 109 frame; under X, this means it lies about where the focus is.
106 This hook tells the window system code to re-decide where to put 110 This hook tells the window system code to re-decide where to put
107 the highlight. */ 111 the highlight. */
108 void (*frame_rehighlight_hook) ( /* FRAME_PTR f */ ); 112 void (*frame_rehighlight_hook) ( /* FRAME_PTR f */ );
113
114 /* Set vertical scollbar BAR to have its upper left corner at (TOP,
115 LEFT), and be LENGTH rows high. Set its handle to indicate that we
116 are displaying PORTION characters out of a total of WHOLE
117 characters, starting at POSITION. Return BAR. If BAR is zero,
118 create a new scrollbar and return a pointer to it. */
119 struct scrollbar *(*set_vertical_scrollbar_hook)
120 ( /* struct scrollbar *BAR,
121 struct window *window,
122 int portion, int whole, int position */ );
123
124 /* The following three hooks are used when we're doing a thorough
125 redisplay of the frame. We don't explicitly know which scrollbars
126 are going to be deleted, because keeping track of when windows go
127 away is a real pain - can you say set-window-configuration?
128 Instead, we just assert at the beginning of redisplay that *all*
129 scrollbars are to be removed, and then save scrollbars from the
130 firey pit when we actually redisplay their window. */
131
132 /* Arrange for all scrollbars on FRAME to be removed at the next call
133 to `*judge_scrollbars_hook'. A scrollbar may be spared if
134 `*redeem_scrollbar_hook' is applied to it before the judgement. */
135 void (*condemn_scrollbars_hook)( /* FRAME_PTR *FRAME */ );
136
137 /* Unmark BAR for deletion in this judgement cycle. */
138 void (*redeem_scrollbar_hook)( /* struct scrollbar *BAR */ );
139
140 /* Remove all scrollbars on FRAME that haven't been saved since the
141 last call to `*condemn_scrollbars_hook'. */
142 void (*judge_scrollbars_hook)( /* FRAME_PTR *FRAME */ );
143
144
109 145
110 /* Strings, numbers and flags taken from the termcap entry. */ 146 /* Strings, numbers and flags taken from the termcap entry. */
111 147
112 char *TS_ins_line; /* termcap "al" */ 148 char *TS_ins_line; /* termcap "al" */
113 char *TS_ins_multi_lines; /* "AL" (one parameter, # lines to insert) */ 149 char *TS_ins_multi_lines; /* "AL" (one parameter, # lines to insert) */
1412 1448
1413 init_baud_rate (); 1449 init_baud_rate ();
1414 if (read_socket_hook) /* Baudrate is somewhat */ 1450 if (read_socket_hook) /* Baudrate is somewhat */
1415 /* meaningless in this case */ 1451 /* meaningless in this case */
1416 baud_rate = 9600; 1452 baud_rate = 9600;
1453
1454 FRAME_CAN_HAVE_SCROLLBARS (selected_frame) = 0;
1455 FRAME_HAS_VERTICAL_SCROLLBARS (selected_frame) = 0;
1417 } 1456 }
1418 1457
1419 /* VARARGS 1 */ 1458 /* VARARGS 1 */
1420 fatal (str, arg1, arg2) 1459 fatal (str, arg1, arg2)
1421 char *str, *arg1, *arg2; 1460 char *str, *arg1, *arg2;