Commit graph

46540 commits

Author SHA1 Message Date
Po Lu
f3162b8240 More fixes to mouse event reporting during drag-and-drop
* src/xterm.c (x_dnd_begin_drag_and_drop): Don't reset
dpyinfo->grabbed when quitting.
(handle_one_xevent): Keep track of dpyinfo->grabbed as well
inside the drag-and-drop event loop.
2022-06-08 08:49:51 +08:00
Po Lu
6a4444aa39 Fix coding style of some Haiku files
* src/haiku_support.cc: (FrameResized):
(class EmacsView, AfterResize): Fix coding and initializer
style.

* src/haiku_support.h (struct haiku_resize_event): Rename
confusingly named fields.
* src/haikuterm.c (haiku_read_socket): Update accordingly.
2022-06-07 12:13:42 +00:00
Po Lu
4918ef0915 Fix more bugs with DND selection handling
* src/xterm.c (x_defer_selection_requests)
(x_release_selection_requests): New functions.
(x_dnd_begin_drag_and_drop): Use those functions to defer
selections instead.  Fix error signalled when ownership of
XdndSelection is lost.
(handle_one_xevent): Likewise.
2022-06-07 18:24:10 +08:00
Po Lu
3bdeedd8ac Improve compatibility with some clients of the Motif drop protocol
* lisp/select.el (x-dnd-targets-list): New defvar.
(xselect-convert-to-targets): Convert XdndSelection based on the
DND targets list.
* src/xfns.c (Fx_begin_drag): Pass new argument.
* src/xselect.c (struct x_selection_request): New struct.
(x_push_current_selection_request):
(x_pop_current_selection_request): New functions.
(x_selection_request_lisp_error, x_reply_selection_request)
(x_handle_selection_request, x_convert_selection)
(syms_of_xselect_for_pdumper): Correctly handle recursive
requests for MULTIPLE by maintaining a stack of selection
requests, converted selections, and other data.
* src/xterm.c (x_dnd_begin_drag_and_drop): New argument
`selection_target_list'.  Bind it to the DND targets list.
(syms_of_xterm): New defvar and associated defsym.
* src/xterm.h: Update prototypes.
2022-06-07 13:49:41 +08:00
Po Lu
192de232bf Fix leak of event data on GTK+ 2.x
* src/xterm.c (handle_one_xevent): Fix goto XI_OTHER for
valuator motion events generated on scroll bars.
2022-06-07 12:59:37 +08:00
Po Lu
e21c761d13 Prevent crashes with very large Motif targets tables
* src/xterm.c (xm_setup_dnd_targets): Catch errors around
xm_write_targets_table lest we get a BadAlloc error.
2022-06-07 09:45:41 +08:00
Po Lu
2267b48cac Fix two crashes when a display connection is lost
This fixes errors caused by invalid error traps being left on
the error handler stack if an IO error causes a non-local exit
out of the protected code, and another crash caused by
delete_frame trying to read async input.

* src/eval.c (unwind_to_catch, push_handler_nosignal): Save and
restore the X error handler stack.
* src/lisp.h (struct handler): [HAVE_X_WINDOWS]: New field
`x_error_handler_depth'.

* src/xterm.c (struct x_error_message_stack): Make string a
regular string.
(x_unwind_errors_to): New function.
(x_error_catcher, x_catch_errors_with_handler)
(x_uncatch_errors_after_check, x_uncatch_errors): Update the
stack depth.
(x_check_errors): Stop manually unwinding since unwind_to_catch
now does that for us.
(x_had_errors_p, x_clear_errors): Update for new type of
`string'.
(x_connection_closed): Block input between just before
delete_frame to when the terminal is unlinked.

* src/xterm.h: Update prototypes.
2022-06-07 09:26:15 +08:00
Po Lu
cf599c9fb8 Update comments in X error handling code
* src/xterm.c (struct x_error_message_stack, x_error_message)
(x_error_catcher, x_catch_errors, x_had_errors_p)
(x_clear_errors): Long-overdue comment update.  Describe the
fields of the error message stack, and the fact that
`x_error_message' is a stack, not a pointer to a string (which
has been true since 2006).  Also describe the updated conditions
used to find an applicable error handler and to call
x_uncatch_errors_after_check.
2022-06-06 20:23:20 +08:00
Po Lu
3cbdd59146 Fix several more issues with running Lisp during drag-and-drop
* src/xterm.c (handle_one_xevent): Fix _NET_WM_PING cycle again
and set mouse_moved flags during drag-and-drop so reading mouse
events from Lisp continues to work.
2022-06-06 16:01:41 +08:00
Po Lu
31bc62b6ad Signal an error XdndSelection was lost during drag-and-drop
* src/xselect.c (x_handle_selection_clear): Signal an error if
ownership of XdndSelection was lost during drag-and-drop.
2022-06-06 12:48:40 +08:00
Po Lu
9062856ed0 Make mouse input work properly inside the debugger during DND
* src/xterm.c (x_dnd_begin_drag_and_drop): Set
`x_dnd_recursion_depth'.
(handle_one_xevent): If the recursive edit level is higher than
when DND started, handle mouse events normally.
2022-06-06 12:35:10 +08:00
Po Lu
b90d2a6a63 Rework X selections to make it safe to run the debugger inside converters
* src/keyboard.c (prev_kbd_event): Delete function.
(readable_events): Return 1 if
x_detect_pending_selection_requests returns true.
(kbd_buffer_unget_event): Also delete function, since nested
selection requests are really handled correctly.
(kbd_buffer_get_event): Handle events from the special X
deferred selection queue as well.

* src/keyboard.h: Update prototypes.

* src/xselect.c (struct selection_event_queue)
(selection_input_event_equal, x_queue_event)
(x_start_queuing_selection_requests)
(x_stop_queuing_selection_requests): Delete structs, since they
are no longer required.
(x_handle_selection_request, x_handle_selection_event): Allow
nested selection events.

* src/xterm.c (struct x_selection_request_event): New struct.
(x_handle_pending_selection_requests_1)
(x_handle_pending_selection_requests): Handle all events in the
new selection event queue.
(x_push_selection_request, x_detect_pending_selection_requests):
New functions.
(x_dnd_begin_drag_and_drop): Drain the selection queue here as
well.
(handle_one_xevent): When inside a nested event loop, just push
selections to that queue.
(XTread_socket): Allow reading X events if x_dnd_unwind_flag is
true, even though DND is in progress.
(x_delete_display): Delete pending selection events for the
display that is going away.

* src/xterm.h: Update prototypes.
2022-06-06 11:08:19 +08:00
Po Lu
6011d39b6a Fix drag-and-drop of files with multibyte filenames
* lisp/dired.el (dired-mouse-drag): Fix re-signalling of errors.

* lisp/select.el (xselect-convert-to-filename):
(xselect-convert-to-text-uri-list):
(xselect-convert-to-dt-netfile): Encode in raw-text-unix.

* src/xgselect.c (suppress_xg_select, release_xg_select): New
functions.
(xg_select): Respect xg_select suppression by delegating to
pselect.
* src/xgselect.h: Update prototypes.

* src/xterm.c (x_dnd_begin_drag_and_drop): Suppress xg_select
during the nested event loop.
(handle_one_xevent): Handle cases where hold_quit is nil inside
a selection event handler during DND.
2022-06-05 15:38:23 +08:00
Po Lu
e4725ab688 Fix bug#55779
* src/xterm.c (x_update_opaque_region): Don't make GTK reset the
opaque region if F is a child frame.
2022-06-05 13:05:56 +08:00
Po Lu
7d7a6f6719 Better respect window manager stacking order
* src/xfns.c (x_frame_list_z_order, Fx_frame_list_z_order): Use
_NET_CLIENT_LIST_STACKING if supported.
* src/xterm.c (x_wm_supports_1): New function.  Accept dpyinfo
instead of frame.
(x_wm_supports): Use that function instead.

* src/xterm.h: Update prototypes.
2022-06-05 13:05:56 +08:00
Stefan Kangas
d46e94f23f Merge from origin/emacs-28
1b8719835a Update to Org 9.5.4
92c5faafd7 Clarify documentation of 'string-to-unibyte'
2848512654 ; * lisp/files.el (find-file): Avoid too short lines in do...
672f9f787f Improve keystrokes in doc strings in some find-file functions
ef5651cc77 Fix segfaults when starting on 80x26 TTY frames
bfa647972f ; Fix doc string of 'delete-selection-repeat-replace-region'
a95d46e00f Make it explicit that a couple of _s in lispref are unders...
5c74c25123 Remove from FAQ the MS-Windows info about BDF fonts
edb48646f2 Fix Display Property manual example
2022-06-05 06:30:25 +02:00
Po Lu
ddfb91c0a7 Fix positioning of non-system tooltips on GTK builds
* src/xfns.c (compute_tip_xy): Fix coding style.
* src/xterm.c (handle_one_xevent): Set tooltip size immediately
on GTK builds.
2022-06-05 10:06:00 +08:00
Po Lu
f15f9ddea1 Adjust last change for GTK+ 2.x
* src/xterm.c (x_tooltip_window_to_frame): Fix build on GTK 2.x.
2022-06-05 09:30:45 +08:00
Po Lu
3f349a08ae Make `mouse-position' work correctly with GTK tooltips
* src/xterm.c (x_tooltip_window_to_frame): New parameter
`unrelated_tooltip_p'.
(XTmouse_position): Pass that, and if it turns out to be true,
look beneath the tooltip window.
2022-06-05 09:24:20 +08:00
Po Lu
fe6f1dfeb4 Fix error during DND from both Emacs and GTK at the same time
* src/xterm.c (x_dnd_get_target_window): Make mapping and
releasing the COW atomic.  This is to fix a rare bug when
MPX (multi-pointer X) is in use and the user tries to drag
from both GTK and Emacs at the same time using multiple seats.
2022-06-04 20:01:07 +08:00
Po Lu
effbd2aeef Fix file drag-and-drop on GNUstep
* src/nsselect.m (ns_decode_data_to_pasteboard): Convert URL to
path names when we're using NSFilenamesPboardType.
* src/nsterm.m: ([EmacsView performDragOperation:]): Handle
cases where plist is a string.
2022-06-04 16:19:01 +08:00
Po Lu
2ce686c049 Support dragging multiple files on NS
This has to use a deprecated pasteboard type, since Emacs uses
the "old" (but not deprecated) dragImage: method for
drag-and-drop, which can't drop file URLs.

* lisp/term/ns-win.el (x-begin-drag): Update accordingly.
* src/nsselect.m (ns_decode_data_to_pasteboard):
(Fns_begin_drag): Allow files to be a list of filenames as well.
2022-06-04 15:45:41 +08:00
Po Lu
1289d0c3dd Fix splurious drag-mouse-1 events after NS drag-and-drop
* src/nsterm.m ([EmacsWindow beginDrag:...]): Clear
dpyinfo->grabbed.
2022-06-04 15:41:39 +08:00
Po Lu
937a011352 Clear mouse face during drag-and-drop
* src/xterm.c (handle_one_xevent): Clear mouse face during drag
and drop, since note_mouse_highlight isn't called.
2022-06-04 15:19:12 +08:00
Po Lu
c259ae909f Make XTmouse_position faster during dragging with lots of frames
* src/xterm.c (x_tooltip_window_to_frame): New function.
(XTmouse_position): Use that to find tooltip frames underneath
the pointer instead.
2022-06-04 12:27:11 +08:00
Po Lu
63b3999562 Fix leak of toplevel data
* src/xterm.c (x_dnd_compute_toplevels): Make sure to free
`data'.
2022-06-04 10:05:44 +08:00
Po Lu
d49ea6de2f Fix leak of DND toplevels when return-frame is non-nil
* src/xterm.c (x_dnd_free_toplevels): Don't leak DND toplevels
if returning a frame.
(x_dnd_begin_drag_and_drop): Make this function reentrant from
the IO error handler.
2022-06-04 09:52:24 +08:00
Mattias Engdegård
28622d4dd0 Let ?\LF signal an error (bug#55738)
As suggested by Stefan Monnier.

* src/lread.c (read_escape):
Signal an error for ?\LF since it cannot reasonably be intended.
* test/src/lread-tests.el (lread-escaped-lf): Update test.
* etc/NEWS: Announce.
2022-06-03 11:23:30 +02:00
Po Lu
e65647a70e Add easier-to-use interfaces for initiating drag-and-drop
The previous interface required that users know intricacies of
the data types used to transfer data on each platform Emacs
supports.

* doc/lispref/frames.texi (Drag and Drop): Document new
functions.
* lisp/dired.el (dired-last-dragged-remote-file)
(dired-remove-last-dragged-local-file): Delete functions.
(dired-mouse-drag): Use `dnd-begin-file-drag'.
* lisp/dnd.el (dnd-last-dragged-remote-file)
(dnd-remove-last-dragged-remote-file): New variables and
functions.
(dnd-begin-text-drag, dnd-begin-file-drag): New functions.
* src/xterm.c (x_dnd_begin_drag_and_drop): Add porting note.
2022-06-03 12:32:30 +08:00
Lars Ingebrigtsen
1e42c2c5fc Remove window-max-characters-per-line
* doc/lispref/windows.texi (Window Sizes):
* doc/lispref/display.texi (Size of Displayed Text): Remove
documentation.
* lisp/fringe.el (fringe-mode): Point to the right function.

* lisp/window.el (window-char-pixel-width)
(window-char-pixel-height, window-max-characters-per-line): Remove
functions -- this was already added as window-max-chars-per-line.

* src/window.c (Fwindow_body_width): Adjust doc string.
2022-06-03 05:20:16 +02:00
Po Lu
2340243a31 Fix GTK build
* src/xterm.c (x_dnd_begin_drag_and_drop) [USE_GTK]: Adjust call
to x_dnd_free_toplevels as well.
2022-06-03 09:43:42 +08:00
Po Lu
36af7004e2 Don't call XSelectInput on a dying display when cancelling drag-and-drop
* src/xterm.c (x_dnd_free_toplevels): New argument
`display_alive'.
(x_dnd_cleanup_drag_and_drop, x_dnd_begin_drag_and_drop)
(handle_one_xevent): Change calls to `x_dnd_free_toplevels'.
(x_connection_closed, x_delete_terminal): Set it to false.
2022-06-03 08:51:49 +08:00
Mattias Engdegård
52e527a02f Make ?\LF generate 10, not -1 (bug#55738)
The old -1 value was an artefact of the reader implementation.

* src/lread.c (read_escape): Remove the `stringp` argument; assume
character literal syntax.  Never return -1.
(read_string_literal): Handle string-specific escape semantics here
and simplify.
* test/src/lread-tests.el (lread-escaped-lf): New test.
2022-06-02 16:57:02 +02:00
Mattias Engdegård
4bacd2a645 * src/lread.c (skip_lazy_string): Fix uninitialised variable. 2022-06-02 16:57:02 +02:00
Po Lu
ed02be04ae More gracefully handle errors during Motif drag window creation
* src/xterm.c (xm_drag_window_error_handler): Store whether or
not an error happened.
(xm_get_drag_window): Handle errors during XCreateWindow and
XChangeProperty without leaking anything.
(x_error_handler): Fix coding style.
2022-06-02 19:54:40 +08:00
Eli Zaretskii
ef5651cc77 Fix segfaults when starting on 80x26 TTY frames
* src/dispnew.c (adjust_frame_glyphs_for_frame_redisplay): Make
sure we have valid frame glyph matrices for the interactive
session.  (Bug#55760)
(adjust_frame_glyphs): Add assertions for when we fail to allocate
valid frame glyph matrices for a TTY frame.
2022-06-02 13:41:59 +03:00
Lars Ingebrigtsen
c7b7c9d40f Reinstate the Qload file name handler
* src/lread.c (Fload): Reinstate the Qload file name handler
(bug#12598).  This makes loading non-ASCII elc.gz files work.
2022-06-02 11:51:09 +02:00
Frédéric Giquel
a947c10d90 Use `read-process-output-max' when creating pipes on GNU/Linux
* src/process.c (syms_of_process): Note max size.
(create_process): Set the pipe size from `read-process-output-max'
(bug#55737).

Copyright-paperwork-exempt: yes
2022-06-02 11:38:56 +02:00
Po Lu
760fd43082 Fix rare crash when async input happens while creating xm drag window
* src/xterm.c (xm_get_drag_window): Work around XCloseDisplay
freezing upon being interrupted by a signal.
2022-06-02 16:36:15 +08:00
Eli Zaretskii
da274d73f9 Merge branch 'master' of git.savannah.gnu.org:/srv/git/emacs 2022-06-02 10:52:19 +03:00
Eli Zaretskii
835ce688e2 ; * src/emacs.c (main): Move -version output after initialization. 2022-06-02 10:51:37 +03:00
Po Lu
76ffd4427d Fix macOS build
* src/nsterm.m (ns_mouse_position): Fix typos.
2022-06-02 15:49:50 +08:00
Po Lu
f71fad50fc Fix potential NULL pointer dereference on NS
* src/nsterm.m (ns_mouse_position): Don't test f's tooltip-ness
if it's NULL.
2022-06-02 15:48:12 +08:00
Po Lu
caf8a83730 Fix flickering tooltips with mouse DND without interprogram drag
* src/haikuterm.c (haiku_read_socket):
* src/nsterm.m (ns_mouse_position):
* src/xterm.c (XTmouse_position, handle_one_xevent): Apply
special tooltip treatment to `dropping' as well as
`drag-source'.
2022-06-02 15:46:42 +08:00
Po Lu
77854b1af6 Fix tooltip frames leaking into mouse position on NS
* src/nsterm.m (ns_mouse_position): Avoid tooltip frames and
look underneath them when `drag-source'.

([EmacsView mouseDown:]):
([EmacsView mouseMoved:]): Ignore events from tip frames.
2022-06-02 15:21:35 +08:00
Po Lu
ce51354432 Fix flicker during mouse DND on Haiku as well
* src/haikuterm.c (haiku_read_socket): Don't clear tooltips on
crossing if track-mouse is drag-source and the display is
grabbed.
2022-06-02 05:44:46 +00:00
Po Lu
1b9aca0ea8 Fix typos in last change
* src/xterm.c (handle_one_xevent): Fix typos.
2022-06-02 13:37:52 +08:00
Po Lu
2a40fa3d85 Fix tooltips flickering on X during `mouse-drag-and-drop-region'
* src/xterm.c (x_get_window_below): New function.
(XTmouse_position): If track-mouse is drag-source and a window
is a tooltip, look below it.
(handle_one_xevent): Don't generate a nil help-echo event on
LeaveNotify if the display is grabbed and track-mouse is
drag-source.
2022-06-02 13:33:38 +08:00
Po Lu
d9e106c72e Clean up Motif drag-and-drop code
* src/xterm.c (enum xm_drag_operation, enum xm_drag_action)
(enum xm_drag_reason, enum xm_drag_originator, enum xm_drag_style)
(enum xm_drop_site_status): Turn macros into enums.
(x_next_event_from_any_display): Fix initial value of rc.
2022-06-02 09:02:55 +08:00
Po Lu
47b8c3f0b9 Fix decoding of XdndStatus rectangles on 64-bit systems
* src/xterm.c (handle_one_xevent): Make data.l[2] and data.l[3]
unsigned.
2022-06-02 08:32:23 +08:00