1. 14 Jan, 1993 22 commits
    • Jim Blandy's avatar
      * .gdbinit: Add "-geometry +0+0" to default args. · b2367490
      Jim Blandy authored
      	(xscrollbar): New command.
      b2367490
    • Jim Blandy's avatar
      Make scrollbar structures into lisp objects, so that they can be · 4e027793
      Jim Blandy authored
      	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.
      
      	* xterm.h (CHAR_TO_PIXEL_WIDTH, CHAR_TO_PIXEL_HEIGHT,
      	PIXEL_TO_CHAR_WIDTH, PIXEL_TO_CHAR_HEIGHT): Rewritten, using:
      	(CHAR_TO_PIXEL_ROW, CHAR_TO_PIXEL_COL, PIXEL_TO_CHAR_ROW,
      	PIXEL_TO_CHAR_COL): New macros.
      	* xfns.c [not HAVE_X11] (Fx_create_frame): Use the
      	PIXEL_TO_CHAR_{HEIGHT,WIDTH} macros to figure the frame's
      	character size, and the CHAR_TO_PIXEL* macros for vice versa.
      	* xterm.c (XTwrite_glyphs, XTclear_end_of_line, stufflines,
      	scraplines, dumprectangle, pixel_to_glyph_coords, x_draw_box,
      	clear_cursor, x_display_bar_cursor, x_draw_single_glyph,
      	x_set_mouse_position): Use the CHAR_TO_PIXEL_* macros.
      4e027793
    • Jim Blandy's avatar
      Make scrollbar structures into lisp objects, so that they can be · 12ba150f
      Jim Blandy authored
      	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.
      
      	* xterm.c (x_scrollbar_background_expose): Function deleted; we
      	don't want anything in the background there after all.
      	(XTread_socket): Don't call x_scrollbar_background_expose.  We
      	don't care.
      
      	* xterm.h (CHAR_TO_PIXEL_WIDTH, CHAR_TO_PIXEL_HEIGHT,
      	PIXEL_TO_CHAR_WIDTH, PIXEL_TO_CHAR_HEIGHT): Rewritten, using:
      	(CHAR_TO_PIXEL_ROW, CHAR_TO_PIXEL_COL, PIXEL_TO_CHAR_ROW,
      	PIXEL_TO_CHAR_COL): New macros.
      	* xfns.c [not HAVE_X11] (Fx_create_frame): Use the
      	PIXEL_TO_CHAR_{HEIGHT,WIDTH} macros to figure the frame's
      	character size, and the CHAR_TO_PIXEL* macros for vice versa.
      	* xterm.c (XTwrite_glyphs, XTclear_end_of_line, stufflines,
      	scraplines, dumprectangle, pixel_to_glyph_coords, x_draw_box,
      	clear_cursor, x_display_bar_cursor, x_draw_single_glyph,
      	x_set_mouse_position): Use the CHAR_TO_PIXEL_* macros.
      
      	* xterm.c (x_wm_set_size_hint): The max_width and max_height
      	members of the size_hints are expressed in pixels, not columns.
      
      	* xterm.c (x_set_window_size): Remove ibw var; it's not used.
      	Set FRAME_WIDTH (f) to cols instead of rows.  Duh.
      
      	* xterm.c (pixel_to_glyph_coords): Properly set *bounds to the
      	character cell bounding the position, even when the position is
      	off the frame.
      
      	* termhooks.h (mouse_position_hook): Doc fix.
      	(set_vertical_scrollbar_hook): This doesn't return anything any
      	more, and doesn't take a struct scrollbar * argument any more.
      	(condemn_scrollbars_hook, redeem_scrollbar_hook,
      	judge_scrollbars_hook): Doc fixes.
      	* term.c (mouse_position_hook): Doc fix.
      	(set_vertical_scrollbar_hook): This doesn't return
      	anything any more.  Doc fixes.
      	* keyboard.c (kbd_buffer_get_event): Receive the scrollbar's
      	window from *mouse_position_hook and pass it to
      	make_lispy_movement, instead of working with a pointer to a struct
      	scrollbar.
      	(make_lispy_event): We don't need a window_from_scrollbar function
      	anymore; we are given the window directly in *EVENT.
      	Unify the code which generates
      	text-area mouse clicks and scrollbar clicks; use the same code to
      	distinguish clicks from drags on the scrollbar as in the text area.
      	Distinguish clicks from drags by storing a copy of the lispy
      	position list returned as part of the event.
      	(button_down_location): Make this a lisp vector, rather than an
      	array of random structures.
      	(struct mouse_position): Remove this; it's been replaced by a lisp
      	list.
      	(make_lispy_movement): Accept the scrollbar's window as a
      	parameter, rather than the scrollbar itself.
      	If FRAME is zero, assume that the other arguments are garbage.
      	(syms_of_keyboard): No need to staticpro each window of
      	button_down_location now; just initialize and staticpro it.
      	* window.c (window_from_scrollbar): Function deleted; no longer
      	needed.
      	* xdisp.c (redisplay_window): Just pass the window to
      	set_vertical_scrollbar hook; don't pass the scrollbar object too.
      	* xterm.c (XTmouse_position): Don't return a pointer to the
      	scrollbar for scrollbar motion; instead, return the scrollbar's
      	window.
      
      	* xterm.c (XTmouse_position): Entirely rewritten, using
      	XTranslateCoordinates.  Call x_scrollbar_report_motion to handle
      	scrollbar movement events.
      	(x_scrollbar_report_motion): New function, to help out
      	XTmouse_position.
      
      	* termhooks.h (struct input_event): Replace the frame member with
      	a Lisp_Object member by the name of frame_or_window.  Doc fixes.
      	Remove the scrollbar member; instead, use frame_or_window to hold the
      	window whose scrollbar was clicked.
      	* keyboard.c (kbd_buffer_store_event, kbd_buffer_get_event,
      	make_lispy_event): Adjust references to frame member of struct
      	input_event to use frame_or_window now.
      	* xterm.c (construct_mouse_click, XTread_socket): Same.
      
      	* xterm.c (last_mouse_bar, last_mouse_bar_frame, last_mouse_part,
      	last_mouse_scroll_range_start, last_mouse_scroll_range_end):
      	Replaced with...
      	(last_mouse_scrollbar): New variable.
      	(note_mouse_movement): Clear last_mouse_scrollbar when we have
      	receieved a new motion.
      	(syms_of_xterm): Staticpro last_mouse_scrollbar.
      
      	* xterm.c (note_mouse_position): Renamed to note_mouse_movement,
      	because that's what it really does.
      	(x_scrollbar_handle_motion): Renamed to x_scrollbar_note_movement,
      	for consistency.
      	(XTread_socket): Adjusted.
      
      	* xterm.c (XTset_scrollbar): Renamed to XTset_vertical_scrollbar.
      	(x_term_init): Adjusted.
      
      	* emacs.c (shut_down_emacs): New function.
      	(fatal_error_signal, Fkill_emacs): Call it, instead of writing it out.
      	* xterm.c (x_connection_closed): Call shut_down_emacs instead of
      	Fkill_emacs; the latter will try to perform operations on the X
      	server and die a horrible death.
      	* lisp.h (shut_down_emacs): Add extern declaration for it.
      
      	* xterm.c (x_error_quitter): Move the abort call to after we print
      	the error message.  No harm in that.
      12ba150f
    • Jim Blandy's avatar
      * xfns.c (Fx_create_frame): After mapping the frame, call · cf177271
      Jim Blandy authored
      	SET_FRAME_GARBAGED, not just plain FRAME_GARBAGED.
      
      	* xfns.c (Qvertical_scrollbars): New symbol.  Use it as the name
      	of the parameter which decides whether or not the frame has
      	scrollbars, instead of Qvertical_scrollbar.
      	(Fx_create_frame): Adjusted accordingly.
      	(syms_of_xfns): Initialize and staticpro Qvertical_scrollbars.
      	(x_set_vertical_scrollbar): Renamed to x_set_vertical_scrollbars.
      	(x_frame_parms): Adjusted accordingly.
      
      	* xterm.h (CHAR_TO_PIXEL_WIDTH, CHAR_TO_PIXEL_HEIGHT,
      	PIXEL_TO_CHAR_WIDTH, PIXEL_TO_CHAR_HEIGHT): Rewritten, using:
      	(CHAR_TO_PIXEL_ROW, CHAR_TO_PIXEL_COL, PIXEL_TO_CHAR_ROW,
      	PIXEL_TO_CHAR_COL): New macros.
      	* xfns.c [not HAVE_X11] (Fx_create_frame): Use the
      	PIXEL_TO_CHAR_{HEIGHT,WIDTH} macros to figure the frame's
      	character size, and the CHAR_TO_PIXEL* macros for vice versa.
      	* xterm.c (XTwrite_glyphs, XTclear_end_of_line, stufflines,
      	scraplines, dumprectangle, pixel_to_glyph_coords, x_draw_box,
      	clear_cursor, x_display_bar_cursor, x_draw_single_glyph,
      	x_set_mouse_position): Use the CHAR_TO_PIXEL_* macros.
      
      	* xfns.c (x_set_name): To request that the modelines be redrawn,
      	execute the statement "update_mode_lines = 1;" instead of the
      	silly statement "update_mode_lines;".
      
      	* xfns.c (x_set_vertical_scrollbars): Don't try to set the
      	X window's size if the frame's X window hasn't been created yet.
      
      	* xfns.c (x_figure_window_size): Set the frame's
      	vertical_scrollbar_extra field before trying to calculate its
      	pixel dimensions.
      
      	* xfns.c (x_window): When calling x_implicitly_set_name for the
      	sake of drawing the name for the first time, remember to clear and
      	set the frame's explicit_name member as well as its name member.
      	(Fx_create_frame): Set the frame's explicit_name member if the
      	user specified the name explicitly.
      
      	* xfns.c (Fx_get_resource): Add CLASS argument, to give class of
      	ATTRIBUTE.
      	[not HAVE_X11]: Change definition of Fx_get_resource macro
      	accordingly.
      	(x_get_arg): Add CLASS argument, to give the class of ATTRIBUTE.
      	Pass it along to Fx_get_resource.
      	(x_figure_window_size, x_icon): Pass new argument to x_get_arg.
      	(x_default_parameter): Add XCLASS argument, to give the class of
      	XPROP.  Pass it along to x_get_arg.
      	(Fx_create_frame): Pass new args to x_get_arg and
      	x_default_parameter.
      
      	* xfns.c (Fx_create_frame): Use the same resource names and
      	classes as xterm and Emacs 18.
      cf177271
    • Jim Blandy's avatar
      * window.c (window_internal_width): New function, which accounts · b1d1124b
      Jim Blandy authored
      	for scrollbars if present.
      	* lisp.h (window_internal_height, window_internal_width): Add
      	extern declarations for these.
      	* dispnew.c (direct_output_for_insert, direct_output_forward_char,
      	buffer_posn_from_coords): Use window_internal_width instead of
      	writing out its definition.
      	* indent.c (compute_motion): Doc fix; mention scrollbars and
      	window_internal_width.
      	(pos_tab_offset, Fvertical_motion): Use window_internal_width
      	instead of writing it out.
      	* window.c (Fpos_visible_in_window_p, Fwindow_width, Fscroll_left,
      	Fscroll_right): Same.
      	* xdisp.c (redisplay, try_window, try_window_id,
      	display_text_line): Same.
      
      	* xdisp.c (display_string): Add new variable `f', to be W's
      	frame.  Use it to set desired_glyphs, and to get the frame's width
      	to decide whether or not to draw vertical bars.
      
      	* xdisp.c (display_text_line): If we're using vertical scrollbars,
      	don't draw the vertical bars separating side-by-side windows.
      	(display_string): Same thing.  Draw spaces to fill in the part of
      	the mode line that is under the scrollbar in partial-width
      	windows.
      
      	* xdisp.c (display_text_line): Use the usable internal width of
      	the window, as calculated above, as the limit on the length of the
      	overlay arrow's image, rather than using the window's width field,
      	less one.
      
      	* xdisp.c (redisplay): Call condemn_scrollbars_hook and
      	judge_scrollbars_hook whenever they are set, not just when the
      	frame has vertical scrollbars.
      
      	* termhooks.h (mouse_position_hook): Doc fix.
      	(set_vertical_scrollbar_hook): This doesn't return anything any
      	more, and doesn't take a struct scrollbar * argument any more.
      	(condemn_scrollbars_hook, redeem_scrollbar_hook,
      	judge_scrollbars_hook): Doc fixes.
      	* term.c (mouse_position_hook): Doc fix.
      	(set_vertical_scrollbar_hook): This doesn't return
      	anything any more.  Doc fixes.
      	* keyboard.c (kbd_buffer_get_event): Receive the scrollbar's
      	window from *mouse_position_hook and pass it to
      	make_lispy_movement, instead of working with a pointer to a struct
      	scrollbar.
      	(make_lispy_event): We don't need a window_from_scrollbar function
      	anymore; we are given the window directly in *EVENT.
      	Unify the code which generates
      	text-area mouse clicks and scrollbar clicks; use the same code to
      	distinguish clicks from drags on the scrollbar as in the text area.
      	Distinguish clicks from drags by storing a copy of the lispy
      	position list returned as part of the event.
      	(button_down_location): Make this a lisp vector, rather than an
      	array of random structures.
      	(struct mouse_position): Remove this; it's been replaced by a lisp
      	list.
      	(make_lispy_movement): Accept the scrollbar's window as a
      	parameter, rather than the scrollbar itself.
      	If FRAME is zero, assume that the other arguments are garbage.
      	(syms_of_keyboard): No need to staticpro each window of
      	button_down_location now; just initialize and staticpro it.
      	* window.c (window_from_scrollbar): Function deleted; no longer
      	needed.
      	* xdisp.c (redisplay_window): Just pass the window to
      	set_vertical_scrollbar hook; don't pass the scrollbar object too.
      	* xterm.c (XTmouse_position): Don't return a pointer to the
      	scrollbar for scrollbar motion; instead, return the scrollbar's
      	window.
      
      	* xdisp.c (echo_area_display): Move the assignment of f and the
      	check for visibility out of the "#ifdef MULTI_FRAME" clause; they
      	should work under any circumstances.
      
      	* xdisp.c (redisplay_window): If we're not going to redisplay this
      	window because it's a minibuffer whose contents have already been
      	updated, go ahead and jump to the scrollbar refreshing code
      	anyway; they still need to be updated.  Initialize opoint, so it's
      	known to be valid when we jump.  Calculate the scrollbar settings
      	properly for minibuffers, no matter what they are displaying at
      	the time.
      
      	* xdisp.c (redisplay_windows): Don't restore the current buffer
      	and its point before refreshing the scrollbars; we need the buffer
      	accurate.
      b1d1124b
    • Jim Blandy's avatar
      Make scrollbar structures into lisp objects, so that they can be · 7c299e7a
      Jim Blandy authored
      	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.
      7c299e7a
    • Jim Blandy's avatar
      * window.c (window_internal_width): New function, which accounts · 535e0b8e
      Jim Blandy authored
      	for scrollbars if present.
      	* lisp.h (window_internal_height, window_internal_width): Add
      	extern declarations for these.
      	* dispnew.c (direct_output_for_insert, direct_output_forward_char,
      	buffer_posn_from_coords): Use window_internal_width instead of
      	writing out its definition.
      	* indent.c (compute_motion): Doc fix; mention scrollbars and
      	window_internal_width.
      	(pos_tab_offset, Fvertical_motion): Use window_internal_width
      	instead of writing it out.
      	* window.c (Fpos_visible_in_window_p, Fwindow_width, Fscroll_left,
      	Fscroll_right): Same.
      	* xdisp.c (redisplay, try_window, try_window_id,
      	display_text_line): Same.
      
      	* termhooks.h (mouse_position_hook): Doc fix.
      	(set_vertical_scrollbar_hook): This doesn't return anything any
      	more, and doesn't take a struct scrollbar * argument any more.
      	(condemn_scrollbars_hook, redeem_scrollbar_hook,
      	judge_scrollbars_hook): Doc fixes.
      	* term.c (mouse_position_hook): Doc fix.
      	(set_vertical_scrollbar_hook): This doesn't return
      	anything any more.  Doc fixes.
      	* keyboard.c (kbd_buffer_get_event): Receive the scrollbar's
      	window from *mouse_position_hook and pass it to
      	make_lispy_movement, instead of working with a pointer to a struct
      	scrollbar.
      	(make_lispy_event): We don't need a window_from_scrollbar function
      	anymore; we are given the window directly in *EVENT.
      	Unify the code which generates
      	text-area mouse clicks and scrollbar clicks; use the same code to
      	distinguish clicks from drags on the scrollbar as in the text area.
      	Distinguish clicks from drags by storing a copy of the lispy
      	position list returned as part of the event.
      	(button_down_location): Make this a lisp vector, rather than an
      	array of random structures.
      	(struct mouse_position): Remove this; it's been replaced by a lisp
      	list.
      	(make_lispy_movement): Accept the scrollbar's window as a
      	parameter, rather than the scrollbar itself.
      	If FRAME is zero, assume that the other arguments are garbage.
      	(syms_of_keyboard): No need to staticpro each window of
      	button_down_location now; just initialize and staticpro it.
      	* window.c (window_from_scrollbar): Function deleted; no longer
      	needed.
      	* xdisp.c (redisplay_window): Just pass the window to
      	set_vertical_scrollbar hook; don't pass the scrollbar object too.
      	* xterm.c (XTmouse_position): Don't return a pointer to the
      	scrollbar for scrollbar motion; instead, return the scrollbar's
      	window.
      535e0b8e
    • Jim Blandy's avatar
      * termhooks.h (mouse_position_hook): Doc fix. · ec3f896c
      Jim Blandy authored
      	(set_vertical_scrollbar_hook): This doesn't return anything any
      	more, and doesn't take a struct scrollbar * argument any more.
      	(condemn_scrollbars_hook, redeem_scrollbar_hook,
      	judge_scrollbars_hook): Doc fixes.
      	* term.c (mouse_position_hook): Doc fix.
      	(set_vertical_scrollbar_hook): This doesn't return
      	anything any more.  Doc fixes.
      	* keyboard.c (kbd_buffer_get_event): Receive the scrollbar's
      	window from *mouse_position_hook and pass it to
      	make_lispy_movement, instead of working with a pointer to a struct
      	scrollbar.
      	(make_lispy_event): We don't need a window_from_scrollbar function
      	anymore; we are given the window directly in *EVENT.
      	Unify the code which generates
      	text-area mouse clicks and scrollbar clicks; use the same code to
      	distinguish clicks from drags on the scrollbar as in the text area.
      	Distinguish clicks from drags by storing a copy of the lispy
      	position list returned as part of the event.
      	(button_down_location): Make this a lisp vector, rather than an
      	array of random structures.
      	(struct mouse_position): Remove this; it's been replaced by a lisp
      	list.
      	(make_lispy_movement): Accept the scrollbar's window as a
      	parameter, rather than the scrollbar itself.
      	If FRAME is zero, assume that the other arguments are garbage.
      	(syms_of_keyboard): No need to staticpro each window of
      	button_down_location now; just initialize and staticpro it.
      	* window.c (window_from_scrollbar): Function deleted; no longer
      	needed.
      	* xdisp.c (redisplay_window): Just pass the window to
      	set_vertical_scrollbar hook; don't pass the scrollbar object too.
      	* xterm.c (XTmouse_position): Don't return a pointer to the
      	scrollbar for scrollbar motion; instead, return the scrollbar's
      	window.
      
      	* termhooks.h (struct input_event): Replace the frame member with
      	a Lisp_Object member by the name of frame_or_window.  Doc fixes.
      	Remove the scrollbar member; instead, use frame_or_window to hold the
      	window whose scrollbar was clicked.
      	* keyboard.c (kbd_buffer_store_event, kbd_buffer_get_event,
      	make_lispy_event): Adjust references to frame member of struct
      	input_event to use frame_or_window now.
      	* xterm.c (construct_mouse_click, XTread_socket): Same.
      ec3f896c
    • Jim Blandy's avatar
      * term.c (set_vertical_scrollbar_hook, condemn_scrollbars_hook, · 371fbaeb
      Jim Blandy authored
      	redeem_scrollbar_hook, judge_scrollbars_hook): Removed dumbo
      	"externs" from these.  They're supposed to be real definitions.
      
      	* termhooks.h (mouse_position_hook): Doc fix.
      	(set_vertical_scrollbar_hook): This doesn't return anything any
      	more, and doesn't take a struct scrollbar * argument any more.
      	(condemn_scrollbars_hook, redeem_scrollbar_hook,
      	judge_scrollbars_hook): Doc fixes.
      	* term.c (mouse_position_hook): Doc fix.
      	(set_vertical_scrollbar_hook): This doesn't return
      	anything any more.  Doc fixes.
      	* keyboard.c (kbd_buffer_get_event): Receive the scrollbar's
      	window from *mouse_position_hook and pass it to
      	make_lispy_movement, instead of working with a pointer to a struct
      	scrollbar.
      	(make_lispy_event): We don't need a window_from_scrollbar function
      	anymore; we are given the window directly in *EVENT.
      	Unify the code which generates
      	text-area mouse clicks and scrollbar clicks; use the same code to
      	distinguish clicks from drags on the scrollbar as in the text area.
      	Distinguish clicks from drags by storing a copy of the lispy
      	position list returned as part of the event.
      	(button_down_location): Make this a lisp vector, rather than an
      	array of random structures.
      	(struct mouse_position): Remove this; it's been replaced by a lisp
      	list.
      	(make_lispy_movement): Accept the scrollbar's window as a
      	parameter, rather than the scrollbar itself.
      	If FRAME is zero, assume that the other arguments are garbage.
      	(syms_of_keyboard): No need to staticpro each window of
      	button_down_location now; just initialize and staticpro it.
      	* window.c (window_from_scrollbar): Function deleted; no longer
      	needed.
      	* xdisp.c (redisplay_window): Just pass the window to
      	set_vertical_scrollbar hook; don't pass the scrollbar object too.
      	* xterm.c (XTmouse_position): Don't return a pointer to the
      	scrollbar for scrollbar motion; instead, return the scrollbar's
      	window.
      371fbaeb
    • Jim Blandy's avatar
      * frame.h (FRAME_SAMPLE_VISIBILITY): Make sure frame is marked as · 1dc77cc3
      Jim Blandy authored
      	garbaged whenever it goes from invisible to visible.
      	* dispextern.h (frame_garbaged): Move extern declaration from here...
      	* frame.h (frame_garbaged): ... to here.  The FRAME_SAMPLE_VISIBILITY
      	macro uses it now, and this seems to be just as modular.  Make a
      	new page, just for this and message_buf_print.
      	(struct frame): Doc fix for the `visible' field.
      	* process.c: #include "frame.h" instead of "dispextern.h"; the
      	only thing we care about from it is the frame_garbaged
      	declaration.
      	* ymakefile: Note dependency change.
      1dc77cc3
    • Jim Blandy's avatar
      * window.c (window_internal_width): New function. · 02213e82
      Jim Blandy authored
      	* lisp.h (window_internal_height, window_internal_width): Add
      	extern declarations for these.
      	* dispnew.c (direct_output_for_insert, direct_output_forward_char,
      	buffer_posn_from_coords): Use window_internal_width instead of
      	writing out its definition.
      	* indent.c (compute_motion): Doc fix; mention scrollbars and
      	window_internal_width.
      	(pos_tab_offset, Fvertical_motion): Use window_internal_width
      	instead of writing it out.
      	* window.c (Fpos_visible_in_window_p, Fwindow_width, Fscroll_left,
      	Fscroll_right): Same.
      	* xdisp.c (redisplay, try_window, try_window_id,
      	display_text_line): Same.
      
      	* emacs.c (shut_down_emacs): New function.
      	(fatal_error_signal, Fkill_emacs): Call it, instead of writing it out.
      	* xterm.c (x_connection_closed): Call shut_down_emacs instead of
      	Fkill_emacs; the latter will try to perform operations on the X
      	server and die a horrible death.
      	* lisp.h (shut_down_emacs): Add extern declaration for it.
      02213e82
    • Jim Blandy's avatar
      * termhooks.h (mouse_position_hook): Doc fix. · 7b4aedb9
      Jim Blandy authored
      	(set_vertical_scrollbar_hook): This doesn't return anything any
      	more, and doesn't take a struct scrollbar * argument any more.
      	(condemn_scrollbars_hook, redeem_scrollbar_hook,
      	judge_scrollbars_hook): Doc fixes.
      	* term.c (mouse_position_hook): Doc fix.
      	(set_vertical_scrollbar_hook): This doesn't return
      	anything any more.  Doc fixes.
      	* keyboard.c (kbd_buffer_get_event): Receive the scrollbar's
      	window from *mouse_position_hook and pass it to
      	make_lispy_movement, instead of working with a pointer to a struct
      	scrollbar.
      	(make_lispy_event): We don't need a window_from_scrollbar function
      	anymore; we are given the window directly in *EVENT.
      	Unify the code which generates
      	text-area mouse clicks and scrollbar clicks; use the same code to
      	distinguish clicks from drags on the scrollbar as in the text area.
      	Distinguish clicks from drags by storing a copy of the lispy
      	position list returned as part of the event.
      	(button_down_location): Make this a lisp vector, rather than an
      	array of random structures.
      	(struct mouse_position): Remove this; it's been replaced by a lisp
      	list.
      	(make_lispy_movement): Accept the scrollbar's window as a
      	parameter, rather than the scrollbar itself.
      	If FRAME is zero, assume that the other arguments are garbage.
      	(syms_of_keyboard): No need to staticpro each window of
      	button_down_location now; just initialize and staticpro it.
      	* window.c (window_from_scrollbar): Function deleted; no longer
      	needed.
      	* xdisp.c (redisplay_window): Just pass the window to
      	set_vertical_scrollbar hook; don't pass the scrollbar object too.
      	* xterm.c (XTmouse_position): Don't return a pointer to the
      	scrollbar for scrollbar motion; instead, return the scrollbar's
      	window.
      
      	* keyboard.c (apply_modifiers): Don't assume that the Qevent_kind
      	property of BASE is set when we first create the new modified
      	symbol.  Check that the Qevent_kind property is properly set each
      	time we return any symbol.
      
      	* termhooks.h (struct input_event): Replace the frame member with
      	a Lisp_Object member by the name of frame_or_window.  Doc fixes.
      	Remove the scrollbar member; instead, use frame_or_window to hold the
      	window whose scrollbar was clicked.
      	* keyboard.c (kbd_buffer_store_event, kbd_buffer_get_event,
      	make_lispy_event): Adjust references to frame member of struct
      	input_event to use frame_or_window now.
      	* xterm.c (construct_mouse_click, XTread_socket): Same.
      
      	* keyboard.c (kbd_buffer_frames): Renamed to
      	kbd_buffer_frame_or_window, and made to exist even when
      	MULTI_FRAME isn't defined; single-frame systems might have
      	scrollbars.  Use it to GCPRO the frame_or_window field in the
      	event queue.
      	(kbd_buffer_store_event, kbd_buffer_get_event,
      	stuff_buffered_input): Set and clear the
      	appropriate element of kbd_buffer_frame_or_window, whether or not
      	MULTI_FRAME is #defined.
      	(read_avail_input): When reading characters directly from stdin,
      	set the frame_or_window field of the event appropriately,
      	depending on whether or not MULTI_FRAME is #defined.
      	(Fdiscard_input, init_keyboard): Zap kbd_buffer_frame_or_window,
      	not kbd_buffer_frames.
      	(syms_of_keyboard): Initialize and staticpro
      	kbd_buffer_frame_or_window, whether or not MULTI_FRAME is
      	#defined.
      
      	* keyboard.c (head_table): Make Qscrollbar_movement have a
      	Qevent_kind property of Qmouse_movement, not Qscrollbar_movement.
      
      	* keyboard.c (read_key_sequence): If we decide to throw away a
      	mouse event which has prefix symbols (`mode-line',
      	`vertical-scrollbar', etcetera), remember that we may have to
      	unwind two characters, not just one.
      
      	* keyboard.c (read_key_sequence): Doc fixes.
      
      	* keyboard.c (kbd_buffer_store_event): Fix reversed sense of test
      	for focus redirection.
      
      	* keyboard.c (read_char): Don't echo mouse movements.
      7b4aedb9
    • Jim Blandy's avatar
      * window.c (window_internal_width): New function. · fa61c701
      Jim Blandy authored
      	* lisp.h (window_internal_height, window_internal_width): Add
      	extern declarations for these.
      	* dispnew.c (direct_output_for_insert, direct_output_forward_char,
      	buffer_posn_from_coords): Use window_internal_width instead of
      	writing out its definition.
      	* indent.c (compute_motion): Doc fix; mention scrollbars and
      	window_internal_width.
      	(pos_tab_offset, Fvertical_motion): Use window_internal_width
      	instead of writing it out.
      	* window.c (Fpos_visible_in_window_p, Fwindow_width, Fscroll_left,
      	Fscroll_right): Same.
      	* xdisp.c (redisplay, try_window, try_window_id,
      	display_text_line): Same.
      fa61c701
    • Jim Blandy's avatar
      Make scrollbar structures into lisp objects, so that they can be · 20a6c8d7
      Jim Blandy authored
      	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.
      
      	* frame.h (FRAME_SAMPLE_VISIBILITY): Make sure frame is marked as
      	garbaged whenever it goes from invisible to visible.
      	* dispextern.h (frame_garbaged): Move extern declaration from here...
      	* frame.h (frame_garbaged): ... to here.  The FRAME_SAMPLE_VISIBILITY
      	macro uses it now, and this seems to be just as modular.  Make a
      	new page, just for this and message_buf_print.
      	(struct frame): Doc fix for the `visible' field.
      	* process.c: #include "frame.h" instead of "dispextern.h"; the
      	only thing we care about from it is the frame_garbaged
      	declaration.
      	* ymakefile: Note dependency change.
      20a6c8d7
    • Jim Blandy's avatar
      * fileio.c (Fdo_auto_save): Add CURRENT_ONLY argument, as · 17857782
      Jim Blandy authored
      	described in doc string.
      17857782
    • Jim Blandy's avatar
      * emacs.c (shut_down_emacs): New function. · 40be253a
      Jim Blandy authored
      	(fatal_error_signal, Fkill_emacs): Call it, instead of writing it out.
      	* xterm.c (x_connection_closed): Call shut_down_emacs instead of
      	Fkill_emacs; the latter will try to perform operations on the X
      	server and die a horrible death.
      	* lisp.h (shut_down_emacs): Add extern declaration for it.
      40be253a
    • Jim Blandy's avatar
      * config.h.in: protect against multiple #inclusions. · 7e1fc708
      Jim Blandy authored
      	* config.h.in: Add a declaration for getenv.
      7e1fc708
    • Jim Blandy's avatar
      * scrollbar.el: New file. · 6d62a90e
      Jim Blandy authored
      	* term/x-win.el: Require 'scrollbar.
      6d62a90e
    • Jim Blandy's avatar
    • Jim Blandy's avatar
    • Jim Blandy's avatar
      * frame.el (frame-notice-user-settings): Don't try to delete the · faa3b11d
      Jim Blandy authored
      	initial frame if the user took care of that.
      faa3b11d
    • Jim Blandy's avatar
      Initial revision · 396890d1
      Jim Blandy authored
      396890d1
  2. 13 Jan, 1993 4 commits
  3. 12 Jan, 1993 2 commits
  4. 11 Jan, 1993 2 commits
  5. 10 Jan, 1993 2 commits
  6. 09 Jan, 1993 4 commits
  7. 08 Jan, 1993 4 commits