1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-14 09:39:42 +00:00
emacs/oldXMenu
Daniel Colascione c29071587c Add double-buffering support to reduce flicker
* src/dispextern.h (struct glyph_string): Remove window member
(block_buffer_flips, unblock_buffer_flips)
(buffer_flipping_blocked_p): Declare.

* src/xterm.h (struct x_display_info): New member supports_xdbe.
(struct x_output): New members draw_desc and need_buffer_flip.
(FRAME_X_DRAWABLE, FRAME_X_RAW_DRAWABLE)
(FRAME_X_DOUBLE_BUFFERED_P)
(FRAME_X_NEED_BUFFER_FLIP): New macros.
(set_up_x_back_buffer, tear_down_x_back_buffer)
(initial_set_up_x_back_buffer): Declare.

* src/xterm.c: Include Xdbe.h.
(x_begin_cr_clip, x_fill_rectangle, x_draw_rectangle)
(x_draw_vertical_window_border, x_update_end)
(x_setup_relief_color, x_draw_relief_rect)
(x_draw_fringe_bitmap, x_shift_glyphs_for_insert)
(x_scroll_run, x_draw_hollow_cursor, x_draw_bar_cursor): Use
FRAME_X_DRAWABLE instead of FRAME_X_WINDOW; rename local
variables appropriately; substitute calls to XClearArea with
x_clear_area, which DTRT for double buffering.
(x_clear_window, x_clear_area): In double-buffering mode, use
rect-drawing X functions instead of XClearWindow and
XClearArea, which always operate on the front buffer.
(show_back_buffer): New function.
(XTframe_up_to_date): Call show_back_buffer when done.
(x_clear_frame, x_clear_frame_area): Remove obsolete calls to
gtk_widget_queue_draw to refresh scroll bars; scroll bars are
now independent X windows.
(handle_one_xevent): Call font_drop_xrender_surfaces when
XftDraw might need regenerating; perform buffer flip when
responding to Expose events; issue front-buffer clearing
commands as stopgap while we wait for redisplay.
Call flush_dirty_back_buffers.
(x_make_frame_visible): Un-bitrot comment; move XSETFRAME
earlier in function.
(x_free_frame_resources): Call tear_down_x_back_buffer when
destroying frame.
(x_term_init): Attempt to initialize double buffer extension.
(x_flip_and_flush): New function.
(x_redisplay_interface): Point to x_flip_and_flush instead of
x_flip directly.
(flush_dirty_back_buffers): New function.
(x_create_terminal): Register buffer_flipping_unblocked_hook.

* src/xftfont.c (xftfont_drop_xrender_surfaces): Use
FRAME_X_DRAWABLE instead of FRAME_X_WINDOW.
(xftfont_draw): Call x_mark_frame_dirty.
(xftfont_drop_xrender_surfaces): New function.
(syms_of_xftfont): Register it.

* src/xfont.c (xfont_draw): Use FRAME_X_DRAWABLE instead of
FRAME_X_WINDOW.

* src/xfns.c: Include Xdbe.h.
(x_set_inhibit_double_buffering, set_up_x_back_buffer)
(Fx_double_buffered_p): New functions.
(x_window): Call initial_set_up_x_back_buffer.
(x_make_gc): Use FRAME_X_DRAWABLE instead of FRAME_X_WINDOW.
(Fx_create_frame): Configure `inhibit-double-buffering'
frame parameter.
(x_create_tip_frame): Call initial_set_up_x_back_buffer.
(x_frame_parm_handlers): Register
x_set_inhibit_double_buffering.
(syms_of_xfns): Register Sx_double_buffered_p.
(x_mark_frame_dirty): Define.

* src/xfaces.c (x_create_gc): Use FRAME_X_DRAWABLE instead of
FRAME_X_WINDOW.

* src/xdisp.c (remember_mouse_glyph, init_glyph_string): Use
FRAME_X_DRAWABLE instead of FRAME_X_WINDOW.
(redisplay_internal): Restart redisplay if a frame is garbaged
during updating; explain why. Block buffer flips
during redisplay.
(redisplay_preserve_echo_area): Block buffer flip during call
to redisplay_internal.
(buffer_flip_blocked_depth): New variable.
(block_buffer_flips, unblock_buffer_flips)
(buffer_flipping_blocked_p): New functions.
(init_glyph_string): Stop setting window member of struct
glyph_string.

* src/w32fns.c (w32_frame_parm_handlers): Add placeholder for
x_set_inhibit_double_buffering.

* src/termhooks.h (struct terminal): Add
buffer_flipping_unblocked_hook.

* src/nsfns.m (ns_frame_parm_handlers): Add placeholder for
x_set_inhibit_double_buffering.

* src/image.c (x_create_bitmap_from_data)
(x_create_bitmap_from_file, x_create_x_image_and_pixmap)
(Create_Pixmap_From_Bitmap_Data)
(x_create_bitmap_from_xpm_data, xpm_load, gs_load): Use
FRAME_X_DRAWABLE instead of FRAME_X_WINDOW; rename local
variables appropriately.

* src/gtkutil.c: Include Xdbe.h.
(xg_get_widget_from_map): Forward declare.
(xg_clear_under_internal_border): Remove obsolete calls to
refresh scroll bars.
(xg_create_frame_widgets): Call initial_set_up_x_back_buffer.
(xg_free_frame_widgets): Call tear_down_x_back_buffer; reset
FRAME_X_DRAWABLE as well as FRAME_X_WINDOW and for the
same reason.
(xg_set_background_color): Set scroll bar background colors.
(xg_finish_scroll_bar_creation): New function with common
logic of xg_create_scroll_bar, xg_create_horizontal_scroll_bar. Force
scroll bars to be real X11 windows.
(xg_create_scroll_bar, xg_create_horizontal_scroll_bar): Call
xg_finish_scroll_bar_creation.
(xg_update_scrollbar_pos, xg_update_horizontal_scrollbar_pos):
Remove obsolete calls to refresh scroll bars; fix comments.

* src/ftxfont.c (ftxfont_get_gcs, ftxfont_draw_bitmap,
(ftxfont_draw_background): Use FRAME_X_DRAWABLE instead of
FRAME_X_WINDOW.

* src/frame.c (frame_parms): Add table entry for new
`inhibit-double-buffering' frame parameter
(syms_of_frame): Register Qinhibit_double_buffering.

* src/font.h (struct font_driver): Add new `flush_frame_caches' hook.
(font_drop_xrender_surfaces): Declare.

* src/font.c (font_drop_xrender_surfaces): New function.

* src/Makefile.in (XDBE_LIBS, XDBE_CFLAGS): Substitute.

* etc/NEWS: Mention use of double buffering

* doc/lispref/frames.texi (Management Parameters): Document
`inhibit-double-buffering' frame parameters.
(Visibility of Frames): Document `x-double-buffered-p'.

* configure.ac: Check for the X double buffer extension
2016-10-28 19:21:39 -07:00
..
Activate.c Rework C source files to avoid ^( 2016-03-10 07:59:19 -08:00
AddPane.c Add double-buffering support to reduce flicker 2016-10-28 19:21:39 -07:00
AddSel.c Add double-buffering support to reduce flicker 2016-10-28 19:21:39 -07:00
ChangeLog.1 Update copyright year to 2016 2016-01-01 01:34:24 -08:00
ChgPane.c Include <config.h> uniformly in oldXMenu sources. 2012-12-04 12:42:29 -08:00
ChgSel.c Include <config.h> uniformly in oldXMenu sources. 2012-12-04 12:42:29 -08:00
copyright.h
Create.c Rework C source files to avoid ^( 2016-03-10 07:59:19 -08:00
DelPane.c
DelSel.c
deps.mk Update copyright year to 2016 2016-01-01 01:34:24 -08:00
Destroy.c
Error.c
EvHand.c
FindPane.c
FindSel.c Rework C source files to avoid ^( 2016-03-10 07:59:19 -08:00
InsPane.c Include <config.h> uniformly in oldXMenu sources. 2012-12-04 12:42:29 -08:00
insque.c Rework C source files to avoid ^( 2016-03-10 07:59:19 -08:00
InsSel.c Include <config.h> uniformly in oldXMenu sources. 2012-12-04 12:42:29 -08:00
Internal.c Rework C source files to avoid ^( 2016-03-10 07:59:19 -08:00
Locate.c
Makefile.in Merge from origin/emacs-25 2016-01-11 22:48:07 -08:00
Post.c
README
Recomp.c
SetAEQ.c
SetFrz.c
SetPane.c
SetSel.c
X10.h
XCrAssoc.c Add double-buffering support to reduce flicker 2016-10-28 19:21:39 -07:00
XDelAssoc.c
XDestAssoc.c
XLookAssoc.c Include <config.h> uniformly in oldXMenu sources. 2012-12-04 12:42:29 -08:00
XMakeAssoc.c Include <config.h> uniformly in oldXMenu sources. 2012-12-04 12:42:29 -08:00
XMenu.h
XMenuInt.h * XMenuInt.h (XDeleteAssoc): Remove duplicated prototype to 2014-07-12 08:06:32 +04:00

Most of the files in this directory are originally from the X11R2
XMenu library, distributed by MIT under the terms in the file copyright.h.

As of Release 2 of the X Window System, Version 11 from MIT, the XMenu
library is no longer supported.  It is not used in any software
supplied by MIT and its use is not encouraged.

In X11R1, oldXMenu/ was found in the lib/ directory of the X11 source;
but in X11R2 it was moved to contrib/.

The following files are from the X11 oldXMenu/ directory:

 Activate.c AddPane.c AddSel.c ChgPane.c ChgSel.c Create.c DelPane.c
 DelSel.c Destroy.c Error.c EvHand.c FindPane.c FindSel.c InsPane.c
 InsSel.c Internal.c Locate.c Post.c Recomp.c SetAEQ.c SetFrz.c
 SetPane.c SetSel.c XMenu.h XMenuInt.h (renamed from "XMenuInternal.h")

The following files are from the X11 oldX/ directory:

 X10.h XCrAssoc.c XDelAssoc.c XDestAssoc.c XLookAssoc.c XMakeAssoc.c

This code is used by Emacs in the absence of an X-toolkit.