comparison src/termhooks.h @ 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 20862b54b932
children 5d58b9f1ff22
comparison
equal deleted inserted replaced
1716:95db936d47c0 1717:aa7d6d57504b
43 extern int (*update_end_hook) (); 43 extern int (*update_end_hook) ();
44 extern int (*set_terminal_window_hook) (); 44 extern int (*set_terminal_window_hook) ();
45 45
46 extern int (*read_socket_hook) (); 46 extern int (*read_socket_hook) ();
47 47
48 /* Return the current position of the mouse. This should clear 48 enum scrollbar_part {
49 mouse_moved until the next motion event arrives. */ 49 scrollbar_above_handle,
50 scrollbar_handle,
51 scrollbar_below_handle
52 };
53
54 /* Return the current position of the mouse.
55 Set `bar' to point to the scrollbar if the mouse movement started
56 in a scrollbar, or zero if it started elsewhere in the frame.
57 This should clear mouse_moved until the next motion event arrives. */
50 extern void (*mouse_position_hook) ( /* FRAME_PTR *f, 58 extern void (*mouse_position_hook) ( /* FRAME_PTR *f,
59 struct scrollbar **bar,
60 enum scrollbar_part *part,
51 Lisp_Object *x, 61 Lisp_Object *x,
52 Lisp_Object *y, 62 Lisp_Object *y,
53 unsigned long *time */ ); 63 unsigned long *time */ );
54 64
55 /* The window system handling code should set this if the mouse has 65 /* The window system handling code should set this if the mouse has
59 69
60 /* When a frame's focus redirection is changed, this hook tells the 70 /* When a frame's focus redirection is changed, this hook tells the
61 window system code to re-decide where to put the highlight. Under 71 window system code to re-decide where to put the highlight. Under
62 X, this means that Emacs lies about where the focus is. */ 72 X, this means that Emacs lies about where the focus is. */
63 extern void (*frame_rehighlight_hook) ( /* void */ ); 73 extern void (*frame_rehighlight_hook) ( /* void */ );
74
75 /* Set vertical scollbar BAR to have its upper left corner at (TOP,
76 LEFT), and be LENGTH rows high. Set its handle to indicate that we
77 are displaying PORTION characters out of a total of WHOLE
78 characters, starting at POSITION. Return BAR. If BAR is zero,
79 create a new scrollbar and return a pointer to it. */
80 extern struct scrollbar *(*set_vertical_scrollbar_hook)
81 ( /* struct scrollbar *BAR,
82 struct window *window,
83 int portion, int whole, int position */ );
84
85
86 /* The following three hooks are used when we're doing a thorough
87 redisplay of the frame. We don't explicitly know which scrollbars
88 are going to be deleted, because keeping track of when windows go
89 away is a real pain - can you say set-window-configuration?
90 Instead, we just assert at the beginning of redisplay that *all*
91 scrollbars are to be removed, and then save scrollbars from the
92 firey pit when we actually redisplay their window. */
93
94 /* Arrange for all scrollbars on FRAME to be removed at the next call
95 to `*judge_scrollbars_hook'. A scrollbar may be spared if
96 `*redeem_scrollbar_hook' is applied to it before the judgement. */
97 extern void (*condemn_scrollbars_hook)( /* FRAME_PTR *FRAME */ );
98
99 /* Unmark BAR for deletion in this judgement cycle. */
100 extern void (*redeem_scrollbar_hook)( /* struct scrollbar *BAR */ );
101
102 /* Remove all scrollbars on FRAME that haven't been saved since the
103 last call to `*condemn_scrollbars_hook'. */
104 extern void (*judge_scrollbars_hook)( /* FRAME_PTR *FRAME */ );
105
106
64 107
65 /* If nonzero, send all terminal output characters to this stream also. */ 108 /* If nonzero, send all terminal output characters to this stream also. */
66 extern FILE *termscript; 109 extern FILE *termscript;
67 110
68 /* Expedient hack: only provide the below definitions to files that 111 /* Expedient hack: only provide the below definitions to files that
110 in characters, within the window. 153 in characters, within the window.
111 .frame gives the frame the mouse 154 .frame gives the frame the mouse
112 click occurred in. 155 click occurred in.
113 .timestamp gives a timestamp (in 156 .timestamp gives a timestamp (in
114 milliseconds) for the click. */ 157 milliseconds) for the click. */
115 scrollbar_click, /* .code gives the number of the mouse 158
116 button that was clicked. 159 scrollbar_click, /* .code gives the number of the mouse button
160 that was clicked.
161 .modifiers holds the state of the modifier
162 keys.
117 .part is a lisp symbol indicating which 163 .part is a lisp symbol indicating which
118 part of the scrollbar got clicked. This 164 part of the scrollbar got clicked.
119 indicates whether the scroll bar was 165 .scrollbar is a pointer to the scrollbar
120 horizontal or vertical. 166 clicked on. Since redisplay may delete
121 .modifiers gives the state of the 167 scrollbars at any time, you may not assume
122 modifier keys. 168 that this scrollbar still exists when you
123 .x gives the distance from the start 169 dequeue this event. You have to traverse
124 of the scroll bar of the click; .y gives 170 the window tree to make it's in a valid
125 the total length of the scroll bar. 171 window.
126 .frame gives the frame the click 172 .x gives the distance from the start of the
127 should apply to. 173 scroll bar of the click; .y gives the total
174 length of the scroll bar.
175 .frame gives the frame the click should
176 apply to.
128 .timestamp gives a timestamp (in 177 .timestamp gives a timestamp (in
129 milliseconds) for the click. */ 178 milliseconds) for the click. */
130 #if 0
131 frame_selected, /* The user has moved the focus to another
132 frame.
133 .frame is the frame that should become
134 selected at the next convenient time. */
135 #endif
136 } kind; 179 } kind;
137 180
138 Lisp_Object code; 181 Lisp_Object code;
139 Lisp_Object part; 182 enum scrollbar_part part;
183 struct scrollbar *scrollbar;
140 184
141 /* This is obviously wrong, but I'm not sure what else I should do. 185 /* This is obviously wrong, but I'm not sure what else I should do.
142 Obviously, this should be a FRAME_PTR. But that would require that 186 Obviously, this should be a FRAME_PTR. But that would require that
143 every file which #includes this one should also #include "frame.h", 187 every file which #includes this one should also #include "frame.h",
144 which would mean that files like cm.c and other innocents would be 188 which would mean that files like cm.c and other innocents would be