Commit graph

47009 commits

Author SHA1 Message Date
Po Lu
9313551fae ; * src/xterm.c (x_sync_init_fences): Fix number of fences announced. 2022-08-04 19:58:22 +08:00
Po Lu
78129dcf53 Correctly implement refresh synchronization fences
* configure.ac (HAVE_XSYNC): Also check for XSyncTriggerFence.

* src/xfns.c (Fx_create_frame): Create fences.
* src/xterm.c (x_atom_refs): New atom.
(x_sync_trigger_fence, x_sync_init_fences, x_sync_free_fences):
New functions.
(x_sync_update_finish): Trigger the appropriate fence.
(x_free_frame_resources): Free fences.
* src/xterm.h (struct x_display_info): New atom
`_NET_WM_SYNC_FENCES'.
(struct x_output): New field `sync_fences'.
2022-08-04 15:38:23 +08:00
Lars Ingebrigtsen
50e4fc9f0e Adjust src/Makefile.in comments about make-docfile
* src/Makefile.in ($(etc)/DOC): Remove comment aboout make-docfile
being run twice (because it no longer is).
2022-08-04 08:05:25 +02:00
Po Lu
d6dbaecb2e Reduce code duplication in XI scroll bar code
* src/xterm.c (xi_select_scroll_bar_events): New function.
(x_create_toolkit_scroll_bar)
(x_create_horizontal_toolkit_scroll_bar, x_scroll_bar_create):
Factor out input extension code there.
2022-08-04 13:59:27 +08:00
Lars Ingebrigtsen
c2bddf8fe7 Remove read_string_literal purify doc string hack
* src/lread.c (read_string_literal): Since we're now
byte-compiling the loaddefs files (so doc strings come from the
.elc files), remove the hack that make this return 0 when the
string starts with "\\n".
2022-08-04 07:23:59 +02:00
Lars Ingebrigtsen
40c1132711 Remove VCSWITNESS dependency, since we're always rescanning now
* Makefile.in (VCSWITNESS): Remove, since we're always rescanning
for loaddefs.
* src/Makefile.in ($(lispsource)/loaddefs.el): Remove VCSWITNESS
dependency.
2022-08-04 07:03:52 +02:00
Po Lu
cb8eb5e830 Avoid redundant calls to XFlush in x_make_frame_visible
* src/xterm.c (x_make_frame_visible): Keep track of whether or
not the output buffer was implictly flushed before issuing
XFlush.
2022-08-04 09:13:53 +08:00
Lars Ingebrigtsen
261d6afd6e Byte-compile the in-tree loaddefs.el files
* lisp/Makefile.in (all): Add "autoloads", which now otherwise
won't be done.
($(lisp)/loaddefs.el): Remove this target, since it's always done,
and would then trigger a re-compilation of loaddefs.elc.

* lisp/loadup.el: Load loaddefs.elc (if it exists).

* lisp/emacs-lisp/loaddefs-gen.el (loaddefs-generate): Don't
include no-byte-compile cookies in the Emacs build.

* src/Makefile.in ($(pdmp)): Depend on loaddefs.elc to ensure that
it's built by this point.
($(etc)/DOC): Don't scan loaddefs.el for doc strings, since they
are now picked up from the .elc file (bug#53024).
2022-08-03 14:22:16 +02:00
Po Lu
6fb206329f ; * src/xterm.c (x_if_event): Minor speed improvements. 2022-08-03 20:17:31 +08:00
Po Lu
bb56cc4cad Fix crash on setting frame background color
* src/xfns.c (x_set_background_color): Stop setting scroll bar
window background, since this is now taken care of
automatically.
2022-08-03 20:17:31 +08:00
Po Lu
bb3e281236 Improve X server time computation
* src/xterm.c (x_sync_get_monotonic_time): Use that if
available.
(x_display_set_last_user_time): Compute an offset between the
monotonic time and the X server time if they are not identical.
* src/xterm.h (struct x_display_info): New field
`server_time_offset'.
2022-08-03 15:14:29 +08:00
Po Lu
9a9634dc72 Add preparations for animation frame timing support
* src/xterm.c (x_sync_get_monotonic_time)
(x_sync_current_monotonic_time, x_sync_note_frame_times): New
functions.
(x_sync_wait_for_frame_drawn_event, x_sync_update_begin)
(x_sync_handle_frame_drawn): Note frame times.
(x_display_set_last_user_time): Check if the X server time is
probably the same as CLOCK_MONOTONIC.

* src/xterm.h (struct x_display_info, struct x_output): New
fields and flags for clock handling and frame times.
2022-08-03 11:38:27 +08:00
Po Lu
fdbe3362c5 Fix window iconification, raising and lowering frames, etc
* src/xterm.c (XFlush): Remove define to 0.
(x_clear_frame, x_scroll_run, x_draw_window_cursor)
(x_free_frame_resources): Remove calls to XFlush where it is not
really necessary.  Leave the calls that actually are intact.
2022-08-03 09:28:44 +08:00
Stefan Monnier
8783700b23 * src/xdisp.c (redisplay_window): Use BEG rather than hard coding 1 2022-08-02 13:06:51 -04:00
Eli Zaretskii
7f59cadf6f ; Clarify documentation of "locked narrowing"
* src/editfns.c (Fwiden, Fnarrow_to_region):
* doc/lispref/positions.texi (Narrowing): Explain when
'narrow-to-region' and 'widen' might have no effect.
2022-08-02 16:24:00 +03:00
Po Lu
0b233d3e5f Further reduce monitor change event duplication
* src/xterm.c (handle_one_xevent): Also don't store duplicate
events for ConfigureNotify events bound for the root window.
2022-08-02 15:17:11 +08:00
Po Lu
0c910f689b Avoid extra consing on monitor configuration change
* src/xterm.c (x_find_monitors_changed_event): New function.
(x_monitors_changed_cb, handle_one_xevent): Look through the
entire event queue to skip delivering monitor change events.
2022-08-02 09:41:02 +08:00
Gregory Heytings
9d8a6c8283 Fix the bytecode incompatibility due to the change to 'narrow-to-region'.
* src/editfns.c (narrow_to_region_internal): New function, which
contains the body previously in 'Fnarrow_to_region' but accepts
a third argument.
(Fnarrow_to_region): Use the new function. Update the docstring.
(Fwiden): Update the docstring.

* src/lisp.h: Prototype of the new function.

* src/xdisp.c (handle_fontified_prop): Use the new function instead
of 'Fnarrow_to_region'.

* src/process.c (Finternal_default_process_filter):
* src/lread.c (readevalloop): Remove the third argument to
'Fnarrow_to_region'.

* src/bytecode.c (exec_byte_code):
* lisp/emacs-lisp/comp.el (comp-limplify-lap-inst):
* lisp/emacs-lisp/bytecomp.el: Restore the statu quo ante.

* etc/NEWS: Remove the entry about the new optional argument.

* doc/lispref/positions.texi (Narrowing): Update the documentation.
2022-08-01 21:11:49 +02:00
Eli Zaretskii
914f6b3c2c * src/eval.c (Fdefvaralias): Clarify error messages. (Bug#56863) 2022-08-01 20:01:51 +03:00
Po Lu
e976a935f8 Improve handling of xsettings events
* src/xsettings.c (xft_settings_event):
* src/xsettings.h: Return if the event was handled.
* src/xterm.c (handle_one_xevent): If it was, don't handle the
event any further.
2022-08-01 19:01:37 +08:00
Paul Eggert
bec8474a45 Improve GCC pacification in xterm.c
* src/xterm.c (x_dnd_free_toplevels, x_composite_image):
Use UNINIT for initialization needed only to pacify GCC.
(x_dnd_free_toplevels): Add an eassume to pacify GCC 12.1 x86-64
-Wanalyzer-null-dereference.

2022-07-31  Paul Eggert  <eggert@cs.ucla.edu>
2022-08-01 01:17:19 -07:00
Paul Eggert
2fd2008e67 * src/timefns.c (Ffloat_time): Fix doc string. 2022-08-01 01:17:14 -07:00
Paul Eggert
24e1123241 Improve time-equal-p etc. performance
* src/timefns.c (time_cmp): Return EMACS_INT, not int; no need to
change callers.  Compare (X . Z) to (Y . Z) quickly if X and Y are
fixnums.
2022-08-01 01:17:14 -07:00
Paul Eggert
0a4477415c Improve float-time etc. performance
* src/timefns.c (decode_float_time): Assume T is finite.
All callers changed.
(decode_time_components): Assume FORM is not TIMEFORM_FLOAT.
All callers changed.
(decode_lisp_time): If the specified time is a float,
signal an error if it is not finite.
(Ffloat_time): If the specified time is a float,
simply return it.
2022-08-01 01:17:14 -07:00
Paul Eggert
914cf4b91b Make time arithmetic more like comparison
Since time comparison says X == X, have time arithmetic behave
similarly for X - X.  This should also be a bit faster due to not
having to test for floats and NaNs.
* src/timefns.c (time_arith, time_cmp):
Simplify by not worrying about NaNs, which are not time values.
(time_arith): Simplify by not worrying about subtracting nil from
nil; the caller now handles this.
(Ftime_subtract): Handle subtracting X from X specially.
2022-08-01 01:17:13 -07:00
Paul Eggert
e3b6242938 Fix get-internal-runtime precision
* src/sysdep.c (make_lisp_s_us): Also define if HAVE_GETRUSAGE.
(Fget_internal_run_time): Don’t generate more precision than the
underlying primitives.
2022-08-01 01:17:13 -07:00
Paul Eggert
9d4633e934 (time-equal-p nil X) returns nil
* src/timefns.c (Ftime_equal_p): nil compares unequal to non-nil.
2022-08-01 01:17:13 -07:00
Paul Eggert
932c0bc1fc Tune blv_found
* src/lisp.h (blv_found): Prefer BASE_EQ to EQ where either will do.
2022-08-01 01:17:12 -07:00
Po Lu
dd937784a3 Improve frame synchronization support on Haiku
* src/ftcrfont.c (ftcrfont_draw):
* src/haikufns.c (haiku_set_background_color):
* src/haikuterm.c (haiku_clip_to_string):
(haiku_clip_to_string_exactly):
(haiku_clear_frame_area):
(haiku_clear_frame):
(haiku_draw_box_rect):
(haiku_draw_relief_rect):
(haiku_draw_underwave):
(haiku_draw_text_decoration):
(haiku_draw_plain_background):
(haiku_draw_stipple_background):
(haiku_draw_glyph_string_foreground):
(haiku_draw_glyphless_glyph_string_foreground):
(haiku_draw_stretch_glyph_string):
(haiku_start_clip):
(haiku_end_clip):
(haiku_clip_to_row):
(haiku_draw_composite_glyph_string_foreground):
(haiku_draw_image_glyph_string):
(haiku_draw_glyph_string):
(haiku_after_update_window_line):
(haiku_draw_hollow_cursor):
(haiku_draw_bar_cursor):
(haiku_draw_vertical_window_border):
(haiku_draw_window_divider):
(haiku_scroll_bar_create):
(haiku_set_horizontal_scroll_bar):
(haiku_set_vertical_scroll_bar):
(haiku_draw_fringe_bitmap):
(haiku_scroll_run):
(haiku_read_socket):
(haiku_flash):
(haiku_clear_under_internal_border):
(haiku_scroll_bar_remove):
* src/haikuterm.h (MAKE_FRAME_DIRTY):
(FRAME_CR_CONTEXT): Don't dirty frames if not necessary.
2022-08-01 06:24:15 +00:00
Po Lu
99754dad3c Implement primitive frame synchronization on Haiku
Instead of relying on a compositor to do the work, we simply
wait for VBLANK and hope that the update finishes soon enough.

* doc/lispref/frames.texi (Management Parameters): Document that
frame synchronization is now supported on Haiku.

* src/haiku_support.cc (class EmacsView): New field
`use_frame_synchronization'.
(FlipBuffers): Wait for vertical blanking period.
(be_set_use_frame_synchronization): New function.
* src/haiku_support.h: Update prototypes.
* src/haikufns.c (haiku_create_frame): Set
`use-frame-synchronization'.

(haiku_set_use_frame_synchronization)
(haiku_frame_parm_handlers): New param handler.
2022-08-01 05:51:59 +00:00
Po Lu
3b5c03eeb2 Make frame synchronization a frame parameter
* doc/lispref/frames.texi (Management Parameters): Document
`use-frame-synchronization'.
* etc/NEWS: Update entry.

* src/frame.c (frame_parms): New frame parameter
`use-frame-synchronization'.
(syms_of_frame): New defsym.
* src/haikufns.c (haiku_frame_parm_handlers):
* src/nsfns.m (ns_frame_parm_handlers):
* src/pgtkfns.c (pgtk_frame_parm_handlers):
* src/w32fns.c (w32_frame_parm_handlers): Update frame param
handlers correctly.
* src/xfns.c (x_set_use_frame_synchronization): New function.
(Fx_create_frame): Set default value of said parameter.
(x_frame_parm_handlers): Add handler.

* src/xterm.c (x_sync_wait_for_frame_drawn_event): Clear
parameter if sync fails.
2022-08-01 09:56:12 +08:00
Po Lu
57100e0a36 ; * src/xterm.c (XTset_vertical_scroll_bar): Fix yet another typo.
Reported by Lars Ingebrigtsen <larsi@gnus.org>.
2022-07-31 15:12:22 +08:00
Stefan Kangas
d9bd334ef3 Merge from origin/emacs-28
eb11dae499 Improve documentation of column-related functions
c95a34c960 * src/macfont.m (macfont_open): Initialize font->space_wid...
31a6a37d45 Improve indexing of keymap variables
2022-07-31 06:30:25 +02:00
Po Lu
3d6af11c42 Fix NS unexec build
* nextstep/Makefile.in (all): Only build Emacs.pdmp on pdumper
builds.

* src/sheap.h: Make STATIC_HEAP_SIZE bigger, otherwise I get:
static heap exhausted: avail 67108864 used 67101824 failed
request 20480
2022-07-31 10:55:06 +08:00
Po Lu
b7f227ed8b ; * src/xterm.c (XTset_vertical_scroll_bar): Fix typo in last change. 2022-07-31 10:42:51 +08:00
Po Lu
a66e654276 Fix frame synchronization with scroll bar movement
* src/xfns.c (x_set_inhibit_double_buffering): Stop condeming
scroll bars.

* src/xterm.c (x_scroll_bar_create): Create an InputOnly window.
Update event masks accordingly and stop allocating back buffer.
(x_scroll_bar_remove): Stop deallocating back buffer.
(XTset_vertical_scroll_bar, x_scroll_bar_set_handle): Draw onto
the edit window so they can be synchronized with buffer flips.
(x_scroll_bar_clear): Redraw scroll bars instead of just
clearing them.
(x_scroll_bar_handle_expose, x_scroll_bar_redraw): New
functions.
(x_scroll_bar_expose, x_scroll_bar_end_update): Delete
functions.
(handle_one_xevent): Update exposure logic accordingly.

* src/xterm.h (struct scroll_bar): Remove `x_drawable' field.
2022-07-31 10:41:58 +08:00
Stefan Kangas
5b29f8cd98 Delete redisplay-end-trigger-functions and related defuns
This variable and related functions have been obsolete since 23.1.
The last things to depend on this (fast-lock.el and lazy-lock.el) were
recently removed.

* src/dispextern.h (struct it): Delete field
'redisplay_end_trigger_charpos'.
* src/window.c (Fwindow_redisplay_end_trigger)
(Fset_window_redisplay_end_trigger): Delete defuns and corresponding
defsubrs for functions obsolete since 23.1.
* src/window.h (wset_redisplay_end_trigger): Delete function.
(GCALIGNED_STRUCT): Delete 'redisplay_end_trigger'.
* src/xdisp.c (run_redisplay_end_trigger_hook): Delete function.
(syms_of_xdisp) <redisplay_end_trigger_functions>: Delete
variable obsolete since 23.1.
(init_iterator, next_element_from_buffer): Don't run or set above
deleted hook variable.

* lisp/subr.el: Delete obsoletion definitions for above deleted
defuns and variable.
* doc/lispref/hooks.texi (Standard Hooks):
* lisp/emacs-lisp/byte-opt.el (side-effect-free-fns):
* lisp/loadhist.el (unload-feature-special-hooks): Don't mention
above deleted variable.
* admin/coccinelle/window.cocci: Adjust for above changes.
2022-07-31 01:44:22 +02:00
Eli Zaretskii
eb11dae499 Improve documentation of column-related functions
* doc/lispref/text.texi (Primitive Indent, Columns):
* src/indent.c (Fcurrent_indentation, Fmove_to_column): Document
that column counting ignores invisible text.  (Bug#56837)
2022-07-30 19:34:38 +03:00
Gerd Möllmann
ff57f30bee ; Fix warnings from #pragma GCC iagnostic pop on macOS
* src/comp.c: Add #pragma GCC diagnostic push in some places.
2022-07-30 17:36:27 +02:00
Eli Zaretskii
76f49943c3 Make sure to preserve point across locked narrowing
* src/editfns.c (Fnarrow_to_region): Save the position of point
when locking the restriction, since this function can move point.
2022-07-30 16:11:43 +03:00
Gregory Heytings
a5adcbdf28 Handle the optional argument of 'narrow-to-region' in byte-compiled code.
* lisp/emacs-lisp/bytecomp.el: Adapt the specifications.

* src/bytecode.c (exec_byte_code): Get the optional argument.
2022-07-30 14:03:37 +02:00
YAMAMOTO Mitsuharu
c95a34c960 * src/macfont.m (macfont_open): Initialize font->space_width. (Bug#56808) 2022-07-30 17:21:54 +09:00
Po Lu
a1975a69b2 Fix failure caused by misreading the frame synchronization spec
* src/xterm.c (x_sync_update_begin): Ensure value % 4 is 1.
(x_sync_update_finish): Then, add 3.
2022-07-30 10:04:26 +08:00
Po Lu
af152ffab1 Don't freeze if the compositing manager crashes
* src/xterm.c (x_if_event): New function, like XIfEvent but with
a timeout.
(x_sync_wait_for_frame_drawn_event): Disable frame
synchronization if x_if_event times out after 1 second.
2022-07-30 09:40:00 +08:00
Gregory Heytings
4b5b447b7f ; * src/xdisp.c (handle_fontified_prop): Fix BOB case. 2022-07-29 19:21:20 +02:00
Gregory Heytings
9c12c3b7c5 Improve narrowing when iterator has moved outside of narrowing bounds.
* src/xdisp.c (get_narrowed_begv, get_narrowed_zv): Add 'pos'
parameter.
(init_iterator): Add arguments to 'get_narrowed_begv' and
'get_narrowed_zv'.
(handle_fontified_prop): Recompute the narrowing when iterator
has moved outside of narrowing bounds.

* src/dispextern.h (get_narrowed_begv, get_narrowed_zv): Adapt
prototypes.

* src/composite.c (find_automatic_composition): Add argument
to 'get_narrowed_begv'.
2022-07-29 18:28:44 +02:00
Gregory Heytings
ebe9cd3e9f Improvement for long line optimizations.
* src/xdisp.c (handle_fontified_prop): Also apply the forced
narrowing at BOB.
2022-07-29 17:33:29 +02:00
Po Lu
9547c28583 Fix handling of extended frame resize synchronization
* src/xterm.c (x_sync_wait_for_frame_drawn_event): Don't wait if
the frame is invisible.  If it is mapped again the compositing
manager is obliged to send us another event, so we can wait in
that case.
(x_sync_update_begin, x_sync_update_finish): Handle extended
resize synchronization here.
(XTframe_up_to_date, handle_one_xevent): Save stuff here.

* src/xterm.h (struct x_output): New field
`resize_counter_value'.
2022-07-29 21:00:59 +08:00
Eli Zaretskii
01ca1c70ae ; Minor copyedits of documentation related to long-line handling
* src/xdisp.c (syms_of_xdisp) <fontification-functions>:
* etc/NEWS: Fix documentation related to long lines.  (Bug#56682)
2022-07-29 13:20:38 +03:00
Po Lu
02b180e955 ; * src/xterm.c (x_update_begin): Fix build without DBE. 2022-07-29 17:27:37 +08:00