Commit graph

45944 commits

Author SHA1 Message Date
Lars Ingebrigtsen
a987e66e6b Improve DISPOSE_PREVIOUS in gif_load slightly
* src/image.c (gif_load): Tweak how DISPOSE_PREVIOUS is handled.
It's still not right, but it's less glaringly wrong.
2022-04-12 16:22:38 +02:00
Eli Zaretskii
66189689ca Fix 'window-text-pixel-size' when starting from a display property
* src/xdisp.c (Fwindow_text_pixel_size): Handle the case where
there's a display property at START and 'move_it_to' overshoots.
(Bug#54862)
2022-04-12 17:19:06 +03:00
Lars Ingebrigtsen
9b892eeb91 Fix webp_load data lifetime issues
* src/image.c (webp_load): Take care of lifetime issues of the
image data we're iterating over for animated images.
2022-04-12 16:08:58 +02:00
Po Lu
c3c08b90b6 Fix keyboard event device attribution on GTK+ 2
* src/xfns.c (setup_xi_event_mask): Select for raw keypress
events on GTK 2.
* src/xterm.c (handle_one_xevent): Set pending keystroke time
when a raw event is received.
* src/xterm.h (struct x_display_info): New flag
`pending_keystroke_time_special_p'.
2022-04-12 21:30:25 +08:00
Po Lu
1b20c4eaa2 Fix detection of Meta key in some cases
* src/xterm.c (x_find_modifier_meanings): Set found_meta_p
correctly.
2022-04-12 21:30:25 +08:00
Lars Ingebrigtsen
4a108df0eb Fix check for whether frames fit into gif images
* src/image.c (gif_load): Really check all frames that they fit.
2022-04-12 15:11:32 +02:00
Po Lu
00071c976f Fix some confusing names in xterm.c
* src/xterm.c (enum xm_targets_table_byte_order): Rename to
`xm_byte_order'.  All uses changed.
2022-04-12 21:09:25 +08:00
Lars Ingebrigtsen
7b67b9a5a2 Store less data in the gif animation cache
* src/image.c (gif_load): Only start a cache if we're have an
:index entry (which means that we're trying to animate something).
2022-04-12 14:45:29 +02:00
Lars Ingebrigtsen
25a28ed4f7 Release resources in gif_load on errors
* src/image.c (webp_load): Clean up code slightly.
(gif_load): Really release resources on GIF parsing errors.
2022-04-12 13:17:14 +02:00
Lars Ingebrigtsen
3de2462da7 Animate GIF images that don't have an explicit delay setting
* src/image.c (gif_load): Use the default delay for GIF images
that don't explicitly state a delay.
2022-04-12 12:43:56 +02:00
Lars Ingebrigtsen
8e1c0054b3 Fix thinko in the anim cache
* src/image.c (gif_load): Fix resetting the cache when we're out
of sync.
(anim_create_cache): Start from zero, not 1.
2022-04-12 12:12:24 +02:00
Po Lu
78784ccfad Disallow drag and drop inside a menu-entry
* src/xterm.c (x_dnd_cleanup_drag_and_drop): Always free DND
targets even if waiting for finish.
(x_dnd_begin_drag_and_drop): Free targets correctly when
signalling error and prevent activating drag-and-drop inside a
menu or popup.  (It doesn't work.)
2022-04-12 16:38:02 +08:00
Po Lu
e2b64f8999 Fix some DISPLAY variable related bugs on PGTK
* src/callproc.c (getenv_internal, make_environment_block):
Don't set DISPLAY on non-X GDK backends.  (bug#54844)
2022-04-12 13:27:56 +08:00
Po Lu
b15d9fcebb * src/xterm.c (frame_set_mouse_pixel_position): Avoid server grab. 2022-04-12 12:01:34 +08:00
Po Lu
bf44581a5e Don't use native image APIs for some types on Haiku
* src/haikuimage.c (haiku_can_use_native_image_api): Ignore
types with animations when their respective libraries are
present.
2022-04-12 02:37:39 +00:00
Po Lu
1ef57361ab Fix last tool bar bug on Haiku as well
* src/haikuterm.c (haiku_read_socket): Adapt last change to
Haiku.
2022-04-12 00:47:38 +00:00
Po Lu
60f66cc2a2 Fix selecting text and releasing the mouse buttons above the toolbar
* src/xterm.c (handle_one_xevent): Don't send ButtonRelease
events to tool bars if there is no selected tool bar item.
2022-04-12 08:41:19 +08:00
Lars Ingebrigtsen
1c28b9ed1a Make normal image caching actually work when doing animated images
* src/image.c (filter_image_spec): New function.
(uncache_image): Use it.
(lookup_image): Ditto.
(syms_of_image): Define some keywords.
2022-04-11 18:50:39 +02:00
Mattias Engdegård
949bc336a0 ; * src/image.c: move #endif to correct place 2022-04-11 17:11:00 +02:00
Lars Ingebrigtsen
0e7185cefa Make gif_load work across architectures again
* src/image.c (gif_load): Invert the way animated pixmaps are
created: Work on the cached computed-so-far pixmap, and then copy
the entire thing to the ximg with PUT_PIXEL at the end.  This
should work across platforms, which the previous version didn't.
2022-04-11 16:52:34 +02:00
Lars Ingebrigtsen
be48dfe0b3 Revert "; * src/image.c (gif_load): Fix compilation error on MS-Windows."
This reverts commit a715f2fbe7.

This is fixed in a different way in a subsequent commit.
2022-04-11 16:45:14 +02:00
Eli Zaretskii
a715f2fbe7 ; * src/image.c (gif_load): Fix compilation error on MS-Windows. 2022-04-11 17:04:31 +03:00
Lars Ingebrigtsen
68ec0ffa21 Fix anim_cache garbage collection
* src/image.c (struct anim_cache): Move earlier.
(mark_image_cache): Mark the Lisp_Object in the anim cache.
2022-04-11 15:18:41 +02:00
Lars Ingebrigtsen
0347969bdf Fix compilation errors when HAVE_GIF and not HAVE_WEBP
* src/image.c: Enable the cache functions when HAVE_GIF, too
2022-04-11 14:54:31 +02:00
Lars Ingebrigtsen
8b7aaf3e56 Speed up GIF animations
* src/image.c (anim_prune_animation_cache): Tweak the destructor
API.
(gif_destroy): New function.
(gif_load): Use a cache to avoid quadratic CPU usage for animated
images (bug#45224).
(webp_destroy): New function.
(webp_load): Use it.
2022-04-11 14:38:27 +02:00
Lars Ingebrigtsen
5141234acf Refactor the webp cache code to allow usage by gif_load, too
* src/image.c (struct anim_cache, anim_create_cache)
(anim_prune_animation_cache, anim_get_animation_cache): Rename
from webp_cache (etc) to prepare for usage in the gif animation
implementation, too.
(webp_load): Adjust cache usage.
2022-04-11 13:35:56 +02:00
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