Commit graph

45918 commits

Author SHA1 Message Date
Po Lu
07ee24d83d Fix event source attribution for GTK input methods
* src/gtkutil.c (xg_im_context_commit): Use pending keystroke
source if it exists.
2022-04-11 19:27:48 +08:00
Lars Ingebrigtsen
11080420dd Improve gif_load error messages
* src/image.c (gif_load): Improve error reporting (bug#54848).
2022-04-11 12:32:55 +02:00
Po Lu
7140b1e82d Always cascade from toplevel frames on Haiku
* src/haikufns.c (haiku_create_frame): Cascade from toplevel
frames, since otherwise the positions are wrong anyway, and it
doesn't make sense to cascade from a frame that disappears when
it becomes deactivated.
2022-04-11 07:45:37 +00:00
Po Lu
a6bfc3cb87 Fix IM event source attribution on GTK
* src/xterm.c (handle_one_xevent): Set pending times on GTK as
well.
* src/gtkutil.c (xg_widget_key_press_event_cb): Respect pending
keystroke time on XI2.
2022-04-11 12:25:51 +08:00
Po Lu
bdd7cd0d2e * src/xterm.c (handle_one_event): Make event attribution more accurate. 2022-04-11 09:16:22 +08:00
Eli Zaretskii
8addfafc2a Fix WebP image support on MS-Windows
* src/image.c (init_webp_functions) [WINDOWSNT]: Load Demux
functions from the WebPDemux DLL.  Load internal functions where
the public APIs are inline functions defined in the WebP headers.
(WebPAnimDecoderOptionsInit) [WINDOWSNT]: Define to call
'WebPAnimDecoderOptionsInitInternal'.
(WebPDemux): Define to call 'WebPDemuxInternal'.
(WebPAnimDecoderNew): Define to call
'WebPAnimDecoderNewInternal'.
(syms_of_image) <webpdemux>: New symbol.

* lisp/term/w32-win.el (dynamic-library-alist): Add a member for
'webpdemux'.
2022-04-10 16:45:43 +03:00
Po Lu
59186acf70 Attribute filtered events to the right source device
* src/xterm.c (handle_one_xevent): Attribute core events sent by
input methods like I-Bus to the extension device that caused
them to be sent.
* src/xterm.h (struct x_display_info): New fields
`pending_keystroke_time' and `pending_keystroke_source'.
2022-04-10 19:34:31 +08:00
Lars Ingebrigtsen
d82e1a873d Add support for animated webp images
* configure.ac (HAVE_RSVG): Also include the webpdemux library.
It was new in version 0.4.4, and we require 0.6.0, so it should be
safe.
* src/image.c: Include demux.h.
(enum webp_keyword_index, webp_format): Include :index for
animations.
(init_webp_functions): Add Windows LOAD_DLLs.
(struct webp_cache, webp_create_cache)
(webp_prune_animation_cache, webp_get_animation_cache): New
functions.
(webp_load): Support animated webp images (bug#54242).
2022-04-10 13:12:41 +02:00
Po Lu
f29fd102d7 Add missing details to filter event on XI2
* src/xterm.c (handle_one_xevent): Pass coordinates when
translating XI2 key events to core key events.
2022-04-10 13:55:18 +08:00
Po Lu
75bdf15c29 Update XI2 device use on slave attachment and detachment
* src/xterm.c (handle_one_xevent): Update whether device is a
master device when it's detached or attached.
2022-04-10 11:06:41 +08:00
Po Lu
fea97e2989 Try harder to own DND selections
* src/xterm.c (x_dnd_do_unsupported_drop): Fix computation of
local value.
(x_dnd_begin_drag_and_drop): Try to own the selection if we do
have a local value.
2022-04-10 09:31:42 +08:00
Po Lu
40c2bfdae1 Avoid sync when allowing touch events in handle_one_xevent
* src/xterm.c (handle_one_xevent): Don't catch errors around
XIAllowTouchEvents.
(x_error_handler): Ignore Device errors here instead.
2022-04-09 18:26:19 +08:00
Po Lu
f3f20a37fb Handle hierarchy events for updating scroll valuators correctly
* src/keyboard.c (gen_help_event, kbd_buffer_store_help_event):
Make sure to initialize the event buffer correctly.

* src/xterm.c (xi_populate_device_from_info): New function.
(x_init_master_valuators): Factor out most of the valuator
tracking code to that function.
(handle_one_xevent): Handle device enable and disable events in
a more detailed fashion.
2022-04-09 13:30:32 +08:00
Po Lu
378b4ccd4b Fix DND leave events not being sent to toplevel after returning frame
* src/xterm.c (x_dnd_update_state, handle_one_xevent): Make sure
to send leave events to the previous toplevel when cancelling to
return a frame.
2022-04-09 11:43:23 +08:00
Po Lu
72782ca182 Use right frame when computing mouse movement device
* src/keyboard.c (kbd_buffer_get_event): Use the frame on which
the mouse actually moved to compute the last mouse device.
2022-04-09 11:37:56 +08:00
Po Lu
cb45fff0cb Minor cleanups in X Windows drag-and-drop code
* src/keyboard.c (kbd_buffer_get_event): Don't dereference f if
nil when generating mouse motion event.
* src/xterm.c (x_dnd_send_enter, x_dnd_send_position)
(x_dnd_send_leave, x_dnd_send_drop, x_send_scroll_bar_event):
Use NoEventMask instead of 0.
2022-04-09 11:35:08 +08:00
Po Lu
f1bf1a0698 Fix source reporting for focus in and focus out events
* src/xterm.c (handle_one_xevent): Report source name for
FocusIn and FocusOut events.
2022-04-09 09:12:24 +08:00
Po Lu
33d68da534 Clean up XI2 scroll valuator tracking code
* src/xterm.c (x_get_scroll_valuator_delta): Accept a pointer to
a device instead of the device id.
(handle_one_xevent): Pass the previously found device.
2022-04-09 09:02:24 +08:00
Po Lu
6449179822 * src/pgtkterm.c (pgtk_set_cr_source_with_color): Fix default operator. 2022-04-09 08:48:45 +08:00
Po Lu
bb7623b9be Fix subpixel AA with alpha-background on Cairo on X
* xterm.c (x_set_cr_source_with_gc_foreground)
(x_set_cr_source_with_gc_background): Set operator back to OVER
if alpha-background isn't to be respected.
2022-04-09 08:41:00 +08:00
Paul Eggert
68bc144685 Pacify clang -Wunused-variable
* src/coding.c (detect_coding_utf_8):
* src/process.c (Finternal_default_process_filter):
Remove unused local vars.
2022-04-08 17:33:16 -07:00
Alan Third
9d20b47ad3 Fix scrollbars on macOS 10.13 and below (bug#54623)
Make any build on macOS 10.13 and below follow the same drawing path
as the GNUstep port.  macOS 10.14 and above will use EmacsLayer.

* src/nsterm.h (EmacsLayer):
* src/nsterm.m ([EmacsView makeBackingLayer]):
([EmacsView unlockFocus]):
([EmacsView windowDidChangeBackingProperties:]):
([EmacsView copyRect:to:]): Remove any code required for macOS 10.13
and below, and fix the #if's to enforce strict separation of the
drawing paths.
(ns_update_end):
(ns_unfocus): Fix #ifs so that flushWindow is called on old macOS
versions as well as GNUstep.
2022-04-08 22:43:05 +01:00
Paul Eggert
022a1f48a4 Fix pacifying gcc -Wanalyzer-null-dereference
* src/xterm.c (handle_one_xevent): Use eassume not eassert.
eassert (X)’s suppress_checking does not let GCC assume X.
2022-04-08 10:19:21 -07:00
Mattias Engdegård
c2d78d09c1 Rename mark_stack to mark_c_stack
This is the function that marks the C stack.  Avoid confusion with the
new mark stack, a stack used in the GC mark phase.

* src/alloc.c (SETJMP_WILL_LIKELY_WORK, SETJMP_WILL_NOT_WORK)
(mark_stack, mark_c_stack):
* src/lisp.h:
* src/thread.c (mark_one_thread): Rename mark_stack to mark_c_stack.
2022-04-08 15:34:57 +02:00
Mattias Engdegård
deb40b2267 ; * src/nsterm.m: Remove stray semicolon 2022-04-08 13:13:24 +02:00
Po Lu
c4921d1157 Fix GC marking of input events with devices
* src/keyboard.c (mark_kboards):
* src/pgtkterm.c (mark_pgtkterm): Mark `device' as well.
2022-04-08 17:00:37 +08:00
Po Lu
ac2708bf6f Implement support for reporting device names on PGTK
* lisp/frame.el (device-class): Add new function.
* lisp/term/pgtk-win.el (pgtk-device-class): New function.
* src/pgtkterm.c (pgtk_device_added_or_removal_cb)
(pgtk_seat_added_cb, pgtk_seat_removed_cb)
(pgtk_enumerate_devices)
(pgtk_free_devices, pgtk_regenerate_devices)
(pgtk_get_device_for_event): New functions.
(mark_pgtkterm): Mark device data.
(pgtk_delete_terminal): Delete device data.
(pgtk_handle_event, key_press_event, note_mouse_movement)
(construct_mouse_click, button_event, scroll_event)
(drag_data_received): Set device correctly.
(pgtk_term_init): Initialize device data and seat tracking.
(pgtk_delete_display): Delete device data.
* src/pgtkterm.h (struct pgtk_device_t): New struct.
(struct pgtk_display_info): New field `devices'.  Delete lots of
unused macros and reformat comments.
2022-04-08 13:37:16 +08:00
Sean Whitton
d8b7771418 ; * src/emacs.c (main): Reword & reflow description of PGTK problem. 2022-04-07 21:09:14 -07:00
Po Lu
c42ef4e7c1 Ignore input extension errors caused by grabbing
* src/xterm.c (x_error_handler): Ignore GrabDevice and
UngrabDevice errors.
2022-04-08 11:22:06 +08:00
Po Lu
6ac7fa7e78 Fix reporting of last-event-device for synthetic events
* src/keyboard.c (read_char): Clear `last-event-device' earlier.
2022-04-08 08:22:40 +08:00
Po Lu
5414331d07 Make device reporting work for tool bar clicks
* src/dispextern.h: Update prototyupes.
* src/xdisp.c (handle_tool_bar_click): Pass Qt to that function
instead.
(handle_tool_bar_click_with_device): New function.
* src/xterm.c (handle_one_xevent): Pass device to tool bar click
logic.
2022-04-08 08:13:49 +08:00
Po Lu
0622df3611 * src/xterm.c (handle_one_xevent): Fix build warning on non-GTK builds. 2022-04-08 07:47:10 +08:00
Stefan Monnier
39e8fd357d OClosure: New function function-documentation
As mentioned in the original OClosure commit, OClosures (ab)use the
bytecode's docstring slot to hold the OClosure's type.  This currently
prevents OClosures from having their own docstring.

Introduce a new generic function `function-documentation` to fetch the
docstring of a function, which can then be implemented in various
different ways depending on the OClosure's type.

* lisp/simple.el (function-documentation): New generic function.
(bad-package-check): Strength-reduce `eval` to `symbol-value`.
* src/doc.c (Fdocumentation): Use it.

* lisp/emacs-lisp/oclosure.el (oclosure--accessor-docstring): New function.
* test/lisp/emacs-lisp/oclosure-tests.el (oclosure-test):
Add test for accessor's docstrings.
2022-04-07 15:59:09 -04:00
Po Lu
3b41141708 Expose the name of an event's input device to Lisp
This name can be used to identify the device for special
treatment, i.e. only interpolating scrolls coming from mice and
not touchpads inside pixel-scroll-precision-mode.

* doc/lispref/commands.texi (Command Loop Info): Document new
variable `last-event-device'.
* etc/NEWS: Announce new variable `last-event-device'.
* src/frame.h (struct frame): New field `last_mouse_device'.
* src/keyboard.c (read_char): Clear last-event-device.
(kbd_buffer_get_event): Set last-event-device to the event's
recorded device.
(init_keyboard): Clear last-event-device.
(syms_of_keyboard): New defvar `last-event-device'.
* src/termhooks.h (struct input_event): New field `device'.
(EVENT_INIT): Set it to the special value `Qt' by default.
* src/xterm.c (x_init_master_valuators): Record the device's
name.
(x_dnd_begin_drag_and_drop): Only preserve last event device if
the mouse ended up in the source frame.
(x_note_mouse_movement): New argument `source'.
(handle_one_xevent): Set input event sources whenever
appropriate.
(mark_xterm): Mark device names.

* src/xterm.h (struct xi_device_t): New field `name'.
2022-04-07 21:16:11 +08:00
Po Lu
c1a6aa0c3e Fix xwidget smooth scrolling when the default pointer is not a touchpad
* xwidget.c (find_suitable_pointer): New argument
`need_smooth'.  Try to find a touchpad if that is set.
(xwidget_button_1, xwidget_button, xwidget_motion_notify)
(xwidget_scroll, xwidget_pinch, xw_notify_virtual_upwards_until)
(xw_notify_virtual_downwards_until):
(xw_maybe_synthesize_crossing):
(xwidget_motion_or_crossing, synthesize_focus_in_event): Set
parameter accordingly.
2022-04-07 19:43:41 +08:00
Lars Ingebrigtsen
4c8e23d5d7 Clarify read-answer-short/use-short-answers action
* lisp/emacs-lisp/map-ynp.el (read-answer-short): Clarify what
this variable affects (bug#54754).

* src/fns.c (Fyes_or_no_p): Mention `use-short-answers'.
2022-04-07 13:37:16 +02:00
Po Lu
510eb1d401 Fix error when calling DND movement tracking function
* src/xterm.c (x_dnd_begin_drag_and_drop): Verify
x_dnd_movement_x and x_dnd_movement_y are wholenums before
caling posn-at-x-y.
2022-04-07 14:32:10 +08:00
Po Lu
57ad2f333c * src/xterm.c (xm_write_targets_table): Remove extra XGrabServer pair. 2022-04-07 14:25:52 +08:00
Po Lu
48bbc4a9a1 Fix DND bugs on GTK
* src/xterm.c (handle_one_xevent): Don't let some client
messages reach the toolkit.
2022-04-07 14:02:34 +08:00
Po Lu
c6ea0772ec Remove more code mindlessly copied from NS
* src/pgtkfns.c (Fx_open_connection):
* src/pgtkselect.c (nxatoms_of_pgtkselect):
* src/pgtkselect.h:
* src/pgtkterm.h: Delete `nxatoms_of_pgtkselect'.
2022-04-07 11:44:59 +08:00
Po Lu
7108c4165f Fix sending unsupported drops when there is no target but a toplevel
* src/xterm.c (handle_one_xevent): Send unsupported drops to
last seen toplevel if no target was found.
2022-04-07 10:15:12 +08:00
Po Lu
1e901298e3 Return an appropriate action when performing unsupported drop
* src/xterm.c (x_dnd_send_unsupported_drop): Set action to
XdndActionPrivate.
2022-04-07 08:55:00 +08:00
Po Lu
340e81f476 * src/xselect.c (x_atom_to_symbol): Add XdndSelection. 2022-04-07 08:37:53 +08:00
Po Lu
fc62efc563 Get rid of extra sync looking up window through XTranslateCoordinates
* src/xterm.c (x_dnd_get_wm_state_and_proto): Return proxy as
well.
(x_dnd_get_target_window): Use that proxy.
2022-04-06 20:48:06 +08:00
Po Lu
c0bb11432e Move some X11 drag and drop processing to Lisp
* lisp/term/x-win.el: Set unsupported drop function.
* lisp/x-dnd.el (x-dnd-handle-unsupported-drop): New function.
* src/keyboard.c (kbd_buffer_get_event): Handle
UNSUPPORTED_DROP_EVENT.
* src/termhooks.h (enum event_kind): New event
`UNSUPPORTED_DROP_EVENT'.
* src/xterm.c (x_dnd_send_unsupported_drop): Send those events
instead.
(x_dnd_do_unsupported_drop): Move actual unsupported drop
handling here.
(syms_of_xterm): New variable `x-dnd-unsupported-drop-function'.
* src/xterm.h: Update prototypes.
2022-04-06 20:30:24 +08:00
Po Lu
f9da45df47 Prevent races when trying to set Motif drag window
* src/xterm.c (xm_get_drag_window): Grab temp connection when
setting the drag window.
2022-04-06 17:18:26 +08:00
Po Lu
78ecd67888 Improve safety of haiku-drag-message
* lisp/term/haiku-win.el (haiku-drag-and-drop): Ignore
placeholder message.
* src/frame.c (delete_frame): Prevent deleting drop source frame
on Haiku.
* src/haiku_support.cc (RELEASE_NOW, CANCEL_DROP): New message
types.
(class EmacsView, MessageReceived): Handle new message types.
(be_drag_message): Drag CANCEL_DROP message on quit; also send
RELEASE_NOW to view if quitting.

* src/haikuselect.c (syms_of_haikuselect)
(haiku_unwind_drag_message): Clear new frame variable.
(Fhaiku_drag_message): Set new frame variable.
* src/haikuterm.h: Update prototypes.
2022-04-06 05:54:31 +00:00
Po Lu
a6f7d0f4e3 ; * src/xterm.c: Improve commentary. 2022-04-06 12:42:45 +08:00
Po Lu
62eb57f438 Clean up more PGTK code
* lisp/term/pgtk-win.el (featurep):
(pgtk):
(pgtk-use-im-context):
(pgtk-handle-nxopen):
(pgtk-handle-nxopentemp):
(pgtk-ignore-1-arg):
([C-drag-n-drop]):
([M-drag-n-drop]):
([C-M-drag-n-drop]):
(pgtk-alternate-modifier):
(pgtk-right-alternate-modifier):
(pgtk-right-command-modifier):
(pgtk-right-control-modifier):
(pgtk-do-hide-emacs):
(pgtk-hide-others):
(pgtk-do-hide-others):
(pgtk-emacs-info-panel):
(pgtk-do-emacs-info-panel):
(pgtk-next-frame):
(pgtk-prev-frame):
(after-make-frame-functions):
(tool-bar-mode):
(pgtk-toggle-toolbar):
(pgtk-print-buffer):
(scalable-fonts-allowed):
(pgtk-standard-fontset-spec):
(pgtk-store-cut-buffer-internal):
(pgtk-copy-including-secondary):
(pgtk-paste-secondary):
(pgtk-suspend-error):
(window-system-initialization):
(after-init-hook): Remove code mindlessly copied from ns-win.el,
delete unused custom group, write doc strings and rename
variables duplicated from X to their names on X.  Also reformat
comments and code.
(pgtk-use-im-context-handler): New function.

* src/pgtkfns.c (syms_of_pgtkfns): Delete useless
AppleScript (!) code copied from NS.
* src/pgtkselect.c: Write FIXME about selection API usage.

* src/pgtkterm.c (get_keysym_name): Implement correctly instead
of sprintf'ing the numeric value of the keysym into a static
buffer.
(pgtk_set_window_size):
(xg_scroll_callback): Delete code that was #if 0'd out and
doesn't make sense on PGTK.
(pgtk_delete_terminal): Remove misleading comment.
2022-04-06 12:27:57 +08:00
Po Lu
f0ff20be51 * src/emacs.c (main): Improve accuracy of daemon warning message on PGTK. 2022-04-06 10:29:53 +08:00