Mercurial > emacs
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 |
