Commit graph

44344 commits

Author SHA1 Message Date
Po Lu
606d8ffe45 Fix default target of motion events
* src/xwidget.c (xwidget_motion_or_crossing): Default to widget_osr
instead of its window (bug#51703).
2021-11-09 08:24:45 +01:00
Po Lu
e9ff213639 Make `kill_frame_xwidget_views' safe
* src/xwidget.c (kill_frame_xwidget_views): Check XWIDGET_VIEW_P
(bug#51701).
2021-11-09 07:47:17 +01:00
Lars Ingebrigtsen
a097303ebb ARGUMENTS in Fmake_xwidget is optional
* src/xwidget.c (Fmake_xwidget): The ARGUMENTS argument isn't
mandatory.
2021-11-09 05:51:37 +01:00
Po Lu
35f9e0f469 Fix flicker when setting hscroll of xwidget
* src/xterm.c (x_scroll_run): Use original height of xwidget instead
of window height and set cairo surface size (bug#51697).
2021-11-09 05:06:24 +01:00
Po Lu
b5efdccefb Raise an error if creating an unknown xwidget type
* src/xwidget.c (Fmake_xwidget): Error if TYPE is invalid (bug#51682).
2021-11-09 05:03:47 +01:00
Po Lu
394f6b9167 Really fix xwidget scroll optimization and clip
* src/xterm.c (x_scroll_run): Improve clip detection.
* src/xwidget.c (xv_do_draw): Use cairo_translate.
(xwidget_motion_or_crossing): Use correct fields (bug#51681).
2021-11-09 05:02:25 +01:00
Lars Ingebrigtsen
846ff29420 Remove code what would always maximize xwidgets on Macos
* src/xwidget.c (x_draw_xwidget_glyph_string): Remove code that
would always maximize the widget on Macos (bug#51674).  This code
was probably added to work around a resizing bug that has since
been fixed.
2021-11-08 08:01:07 +01:00
Po Lu
51aa6cee2c Fix resize of xwidgets on GTK
* src/xwidget.c (Fxwidget_resize): Queue widget for re-allocation
after setting its size request (bug#51679).
2021-11-08 07:38:41 +01:00
Po Lu
553e4b74f7 Fix hang when displaying xwidget script dialog
* src/xwidget.c (webkit_script_dialog_cb): New function.
(Fmake_xwidget): Attach script callback signal (bug#51674).
2021-11-08 06:25:02 +01:00
Po Lu
6fa5f0cbbc Set clipping when dumping stretch glyphs in some cases
* src/nsterm.m (ns_draw_glyph_string): Always focus even when dumping
stretch glyphs in s->next (bug#51653).
2021-11-08 01:16:29 +01:00
Michael Albinus
54fd811eec Merge from origin/emacs-28
7fdb2ae412 Add some unit tests for 'abbreviate-file-name'
21de5e7b2e Fix compilation MinGW warnings
54b726c815 ; * etc/PROBLEMS: More specific recipe for WebKit-related ...
d85cf33e49 Escape '%' in filenames to fix flymake warnings
6243a43ac2 Fix search string generation in nnimap-make-thread-query
f05b8a939b Update to Org 9.5-68-g77e2ec
2021-11-07 18:06:24 +01:00
Eli Zaretskii
21de5e7b2e Fix compilation MinGW warnings
* src/w32.h (prepare_standard_handles, reset_standard_handles):
Fix prototypes.  Reported by Andy Moreton
<andrewjmoreton@gmail.com> in
https://lists.gnu.org/archive/html/emacs-devel/2021-11/msg00597.html.
2021-11-07 17:02:46 +02:00
Po Lu
73d17fd4b7 Free find text in correct procedure
* src/xwidget.c (Fxwidget_webkit_previous_result): Don't free find
text.
(Fxwidget_webkit_finish_search): Free find text here instead.
2021-11-07 15:16:53 +01:00
Po Lu
48a9621db7 Fix xwidget-webkit-goto-history
* src/xwidget.c (xwidget-webkit-goto-history): Use
WebKitBackForwardList and XFIXNUM instead of XFIXNAT (bug#51651).
2021-11-07 14:41:43 +01:00
Po Lu
cbc14f9b4e Handle WEBKIT_POLICY_DECISION_TYPE_NEW_WINDOW_ACTION appropriately
* src/xwidget.c (webkit_decide_policy_cb): Send an xwidget display
event when a webpage asks to create a new window.
2021-11-07 14:14:43 +01:00
Eli Zaretskii
75f4af0b30 Improve detection of suspiciously reordered text segments
* src/bidi.c (bidi_find_first_overridden): Detect reordered weak
and neutral characters as well.

* lisp/international/mule-cmds.el
(highlight-confusing-reorderings): Count and announce how many
instances were found.

* test/src/xdisp-tests.el
(xdisp-tests--find-directional-overrides-case-3): New test.
(xdisp-tests--find-directional-overrides-case-2): Adjust expected
result.
2021-11-07 14:22:15 +02:00
Eli Zaretskii
d5bb053809 Fix documentation and coding style in recent xwidget commits
* src/xwidget.c (Fmake_xwidget, find_widget)
(xwidget_motion_or_crossing, xwidget_button_1, xwidget_button):
Fix style in comments.
(Fxwidget_perform_lispy_event): Doc fix.
* src/xwidget.c (set_widget_if_text_view, kill_frame_xwidget_views):
* src/keyboard.c (make_lispy_event): Fix style of braces.

* lisp/xwidget.el (xwidget-webkit-isearch-mode): Fix keys in doc
string.

* doc/lispref/commands.texi (Xwidget Events): Fix markup and
wording.
* doc/lispref/display.texi (Xwidgets): Fix wording and markup.
* doc/emacs/misc.texi (Embedded WebKit Widgets): Fix wording.

* etc/NEWS: Fix wording and punctuation.
2021-11-07 11:50:06 +02:00
Lars Ingebrigtsen
c5767603ae Ensure that the x_show_hourglass is seen
* src/xterm.c (x_show_hourglass): Ensure that the hourglass is
seen (bug#51649).
2021-11-07 05:12:00 +01:00
Lars Ingebrigtsen
858868e36d Actually start the alarms in atimer
* src/atimer.c (set_alarm): Actually start both timerfd and
alarms (attempted in 4107549a).
2021-11-07 04:55:02 +01:00
Lars Ingebrigtsen
b42a4884d8 Remove too-agressive window refresh in the hourglass code
* src/xterm.c (x_show_hourglass): Don't force a spurious refresh
(bug#51649).
2021-11-07 04:10:56 +01:00
Po Lu
5b7ab895e1 Fix build on nextstep
* src/xwidget.h: Make some prototypes conditional to X-Windows.
(struct xwidget): Move find_text field out of GTK conditional.

* src/xwidget.c (Fmake_xwidget): Move find_text out of GTK
conditional.
* src/print.c (print_vectorlike): Print correct pointer on macOS.
2021-11-07 02:59:42 +01:00
Po Lu
3e04f1f7d2 Fix web inspector
* src/xwidget.c (Fmake_xwidget): Move developer extra initialization.
2021-11-07 02:59:42 +01:00
Po Lu
eabd735e6c Default to creating new related sessions
* doc/lispref/display.texi:
* etc/NEWS: Document changes.

* lisp/xwidget.el (xwidget-insert): Accept an extra RELATED argument.
(xwidget-webkit-new-session): Pass current session as RELATED if
present.

* src/xwidget.c (Fmake_xwidget): Make RELATED argument public.
2021-11-07 02:59:42 +01:00
Po Lu
686ce501cb Rationalize creation decisions
* src/xwidget.c (webkit_create_cb): Only create a new widget if type
is OTHER.
2021-11-07 02:59:42 +01:00
Po Lu
0be966f97e Make "open in new window" from an xwidget's context menu work
* doc/lispref/commands.texi (Xwidget Events): Document new event type.
* doc/lisprefdisplay.texi (Xwidgets): Document new argument to
make-xwidget, and new function.
* etc/NEWS: Document changes.
* lisp/xwidget.el: Bind xwidget-display-event to
xwidget-webkit-display-event.

(xwidget-webkit-import-widget): New function.
(xwidget-webkit-display-event): New command.
* src/keyboard.c (kbd_buffer_get_event): New event type.
(make_lispy_event): Handle XWIDGET_DISPLAY_EVENTs.
(syms_f_keyboard): Define new symbol.
* src/termhooks.h (enum event_kind): New enum XWIDGET_DISPLAY_EVENT.

* src/xwidget.c (webkit_create_cb)
(store_xwidget_display_event)
(webkit_ready_to_show)
(webkit_create_cb_1, webkit_create_cb)
(Fset_xwidget_buffer): New functions.

(Fmake_xwidget): Add internal argument RELATED and connect create
signal.
(syms_of_xwidget): Define now subrs.
2021-11-07 02:59:42 +01:00
Po Lu
286467a6b1 Add functions for performing searches on xwidgets
* etc/NEWS:
* doc/lispref/display.texi: Document changes.

* src/xwidget.c (Fxwidget_webkit_search)
(Fxwidget_webkit_next_result)
(Fxwidget_webkit_previous_result)
(Fxwidget_wenkit_finish_search): New functions.

(syms_of_xwidget): Define new built-ins.
(kill_buffer_xwidgets): Free search query if present.
* src/xwidget.h (struct xwidget): Add field for search query.
2021-11-07 02:59:41 +01:00
Po Lu
cb45114363 Make it safe to have non-xwidget views in xwidget-view-list
* src/xwidget.c (define_cursors, offscreen_damage_event): Check
XWIDGET_VIEW_P before XXWIDGET_VIEW.
2021-11-07 02:59:41 +01:00
Po Lu
cd1f02e1e3 Make xwidgets print nicer
* src/print.c (print_vectorlike): Print xwidgets with ID and widget
pointer, and print xwidget views separately.
2021-11-07 02:59:41 +01:00
Po Lu
eb5a079fee Fix cursor for new widget views
* src/xwidget.c (Fmake_xwidget): Clear hit result.
(cursor_for_hit): Use integer hit result.
(define_cursors): Set hit result appropriately.
(widget_init_view): Set cursor to the existing hit result.

* src/xwidget.h (struct xwidget): Add hit result field.
2021-11-07 02:59:41 +01:00
Po Lu
1cc19d0437 Add support for cursors in xwidget views
* src/xwidget.c (mouse_target_changed): New function.
(Fmake_xwidget): Attach mouse target changed signal.
(cursor_for_hit, define_cursors, mouse_target_changed): New functions.
(xwidget_init_view): Set default cursor to nontext cursor.
(x_draw_xwidget_glyph_string): Define cursor.

* src/xwidget.h (struct xwidget_view): Add cursor field.
2021-11-07 02:59:41 +01:00
Po Lu
7269bdd599 Improve detail of load-changed xwidget events
* src/xwidget.c (webkit_view_load_changed_cb): Improve event detail.
* etc/NEWS: Document changes.
* doc/lispref/commands.texi: Document Xwidget events.
* doc/lispref/display.texi (Xwidgets): Add reference to Xwidget events.
2021-11-07 02:59:41 +01:00
Po Lu
f1fbf87775 Make the WebKit inspector available
* etc/NEWS: Document changes.
* src/xwidget.c (find_widget_at_pos)
(find_widget)
(find_widget_cb): New functions.
(struct widget_search_data): New structure.
(Fmake_xwidget): Enable web inspector for WebKit widgets.
(Fxwidget_perform_lispy_event): Use current focus instead of
hard-coded widget.
(xwidget_button_1, xwidget_button, xwidget_motion_or_crossing):
Use window at event position instead of the default widget.
2021-11-07 02:59:41 +01:00
Po Lu
32ec485e5c Redisplay xwidget view windows instead of just setting their size
* src/xwidget.c (Fxwidget_resize): Mark windows as needing redisplay
and redisplay instead.
2021-11-07 02:59:40 +01:00
Po Lu
49ed706683 Select window when clicking on an xwidget view
* src/xterm.c (handle_one_xevent): Select window when clicking on an
xwidget view.
2021-11-07 02:59:40 +01:00
Po Lu
650e5e8e92 Fix xwidget scrolling
* src/xterm.c (x_scroll_run): Use from_y and height.
2021-11-07 02:59:40 +01:00
Po Lu
b48a89fd2e Fix special events in xwidgets
* src/xwidget.c (set_widget_if_text_view): New function.
(Fxwidget_perform_lispy_event): Fix for webkit widgets.
2021-11-07 02:59:40 +01:00
Po Lu
32b9df6d21 Fix drag on xwidget motion events
* src/xwidget.c (xwidget_motion_or_crossing): Set state.
2021-11-07 02:59:40 +01:00
Po Lu
3e640399d8 Handle crossing events on xwidget windows correctly
* src/xterm.c (handle_one_xevent): Clear help and mouse face
when handling xwidget entry events.
* src/xwidget.c (xwidget_motion_or_crossing): Add device to crossing
events.
(x_draw_xwidget_glyph_string): Add EnterWindowMask and
LeaveWindowMask.
2021-11-07 02:59:40 +01:00
Po Lu
e111a5f3a0 Draw offscreen surface
* src/xwidget.c (xv_do_draw): Draw offscreen surface.
2021-11-07 02:59:40 +01:00
Po Lu
b39f1f158b Implement function for sending events to widgets
* doc/lispref/display.texi (Xwidgets): Document changes.
* src/keyboard.c (lispy_function_keys): Make non-static on X.
* src/keyboard.h (lispy_function_keys): Expose lispy_function_keys on
X.
* src/xterm.c (x_emacs_to_x_modifiers): Export function.
* src/xterm.h (x_emacs_to_x_modifiers): Likewise.
* src/xwidget.c (Fxwidget_perform_lispy_event)
(find_suitable_keyboard): New functions.
(syms_of_xwidget): Define new subr.
2021-11-07 02:59:40 +01:00
Po Lu
c9c1b436ae Use gtk_widget_queue_draw instead of xv_do_draw
* src/xwidget.c (x_draw_xwidget_glyph_string): Call
gtk_widget_queue_draw.
2021-11-07 02:59:40 +01:00
Po Lu
1e16fc2634 Prefer XMoveResizeWindow to XMoveWindow for resizing xwidgets
* src/xwidget.c (x_draw_xwidget_glyph_string): Prefer
XMoveResizeWindow to avoid extra expose events.
2021-11-07 02:59:40 +01:00
Po Lu
f52f772530 Allow xwidgets to accept motion and button events
* src/xterm.c (handle_one_xevent): Pass through some events to
xwidgets.

* src/xwidget.c (synthesize_focus_in_event)
(find_suitable_pointer, xwidget_button_1)
(xwidget_button, xwidget_motion_or_crossing): New functions.
(xwidget_view_from_window): Draw offscreen window instead of the
widget.
(x_draw_xwidget_glyph_string): Set appropriate event masks.

* src/xwidget.h (xwidget_button, xwidget_motion_or_crossing): New
functions.
2021-11-07 02:59:40 +01:00
Po Lu
9c9e15a018 Destroy xwidgets when destroying frames
* src/xterm.c (x_free_frame_resources): Make sure to kill xwidget views.
* src/xwidget.c (Fmake_xwidget): Attach damage event signal.
(offscreen_damage_event): Operate on xwidgets and not individual
views.
(xwidget_init_view): Don't attach damage event signal here.
(Fdelete_xwidget_view): Destroy window correctly and stop removing
damage event signal.
(kill_frame_xwidget_views): New function.
* src/xwidget.c (kill_frame_xwidget_views): New function.
2021-11-07 02:59:39 +01:00
Po Lu
5c387ad437 Enable scrolling optimization for xwidgets
* src/dispextern.h (struct glyph): Store xwidget ID instead of a
reference.
* src/dispnew.c (scrolling_window): Enable scrolling optimization on
xwidget builds.
* src/xdisp.c (fill_xwidget_glyph_string, produce_xwidget_glyph):
Obtain xwidget from ID.
* src/xterm.c (x_scroll_run): Scroll xwidget windows.
* src/xwidget.c (id_to_xwidget_map, xwidget_counter): New xwidget
variables.
(Fmake_xwidget): Assign each xwidget a unique ID, and keep track of
that ID.
(xwidget_from_id): New function.
(syms_of_xwidget): Initialize id_to_xwidget_map.
(xwidget_end_redisplay): Lookup xwidgets via ID.
* src/xwidget.h (struct xwidget): Add ID field.
(xwidget_from_id): New function.
2021-11-07 02:59:39 +01:00
Po Lu
61d049aaff Use an X window to display xwidgets on X11
Since Emacs draws using X11 primitives, Emacs drawing operations can
erase the GtkDrawingArea used to draw the offscreen widget, which
leads to unpleasant flickering effects, all of which can be prevented
by creating a native X window and drawing to that instead.

* src/xterm.c (x_window_to_frame): Return xwidget window if
appropriate.
(handle_one_xevent): Handle xwidget expose events.

* src/xwidget.c (x_window_to_xvw_map): New variable.
(xwidget_view_from_window): New function.

(xwidget_show_view, xwidget_hide_view)
(offscreen_damage_event): Move to drawing xwidgets with X windows.

(xv_do_draw)
(xwidget_expose): New function.

(xwidget_osr_draw_cb, xwidget_osr_event_forward)
(xwidget_osr_event_set_embedder): Removed.

(xwidget_init_view): Replace use of GtkDrawingArea with that of an X
window.

(x_draw_xwidget_glyph_string): Prevent xwidget views from constantly
generating expose events, and use an X window instead of a
GtkDrawingArea.

(syms_of_xwidget): Initialize x_window_to_xwv_map.

src/xwidget.h (struct xwidget_view): Replace GTK widgets with
X-related fields.

(xwidget_view_from_window, xwidget_expose): New functions.
2021-11-07 02:59:39 +01:00
Lars Ingebrigtsen
cf9d85c1ea Add an example to the display-supports-face-attributes-p doc string
* src/xfaces.c (Fdisplay_supports_face_attributes_p): Add an example.
2021-11-06 18:55:34 +01:00
Po Lu
75a264ed02 General improvements to NS port
* src/dispextern.h: Remove some !HAVE_NS conditionals around grab
related code.
* src/frame.c (gui_mouse_grabbed, gui_redo_mouse_highlight): Remove
!HAVE_NS conditionals around code.

* src/nsmenu.m (ns_update_menubar): Prevent recursive calls and enable
shallow updates on GNUstep.
(menuNeedsUpdate): Prevent recursive calls.
(ns_menu_show): Fix mysterious GC-related bug.
(update_frame_tool_bar_1): Work around mysterious toolbar sizing bug
on GNUstep.

* src/nsterm.h (struct ns_output): New field for tracking toolbar
visibility changes.

* src/nsterm.m (frame_set_mouse_pixel_position): Implement for
GNUstep.
(ns_redraw_scroll_bars): Enable for GNUstep.
(ns_clear_frame): Redraw scrollbars on GNUstep.
(ns_update_window_end): New function.
(ns_redisplay_interface): Add ns_update_window_end on GNUstep.
(- keyDown): Remove debug code that doesn't work on GNUstep.
(- mouseDown): Enable grab tracking on NS port.
(- resizeWithOldSuperviewSize): Fix build with NSTRACE.

* src/xdisp.c (note_tab_bar_highlight): Enable some code for NS port.
2021-11-06 12:59:18 +00:00
Po Lu
07715630ad Improve font display on NS port
* src/nsfns.m (Fx_create_frame): Use "fixed" for the default font on
GNUstep.

* src/nsfont.m (LCD_SMOOTHING_MARGIN, ns_escape_name)
(ns_unescape_name, ns_attribute_fvalue)
(STYLE_REF): Remove unused defines and functions.

(struct ns_glyph_layout, enum lgstring_direction).
(enum gs_font_slant, enum gs_font_weight, enum gs_font_width)
(enum gs_specified, struct gs_font_data): New enumerators and
structures.

(ns_font_descs_match_p)
(ns_done_font_data, ns_get_font_data): New functions.
(ns_glyph_metrics): Stop escaping names.

(ns_spec_to_descriptor): Fix font descriptor creation for symbolic
font spec entires.
(ns_descriptor_to_entity): Create entries with the correct symbolic
styles.

(ns_fallback_entity): Fix fallback entity selection.
(ns_findfonts): Use our own font matcher instead of the broken GNUstep
matcher.

(ns_list_family): Remove obsolete comment.
(nsfont_open): Remove obsolete code, comments, and synthItal logic
which doesn't work on GNUstep.

(nsfont_encode_char): Use a type that can fit NSGlyph
(nsfont_draw): Chose correct font, remove obsolete mouse face logic,
obsolete comments, and switch to using glyph-based drawing instead of
character-based drawing.

(ns_font_shape, nsfont_shape): New functions.

(ns_uni_to_glyphs_1): New function.
(ns_uni_to_glyphs): Return glyphs instead of unicode codepoints.

(ns_glyph_metrics): Use NSGlyphs instead of unicode codepoints and fix
left bearing, right bearing, ascent and descent computation.

(struct nsfont_driver): Add shaping capability.

* src/nsterm.h (struct nsfont_info): Use unsigned int for glyph cache.

* src/nsterm.c (ns_focus): Set DPS clipping on GNUstep.

(ns_compute_glyph_string_overhangs): Fix overhang computation by using
xterm code.
(ns_draw_window_cursor): Simplify cursor drawing.
(ns_maybe_dumpglyphs_background): Test for cursor HL and remove
obsolete mouse face logic.
(ns_dumpglyphs_image)
(ns_dumpglyphs_box_or_relief): Rectify for new cursor logic.
(ns_dumpglyphs_stretch): Rectify for new cursor logic and rely on
ns_draw_glyph_string to set focus.
(ns_draw_glyph_string_foreground): Remove mouse face logic.
(ns_draw_glyph_strings): Implement overhangs, remove obsolete
comment, and always focus before dumping glyphs.
(ns_draw_text_decoration): Add condition for DRAW_CURSOR and simplify
color selection.
(ns_define_frame_cursor): Remove nonsensical code (define_frame_cursor
has nothing to do with the text cursor, aka caret).

* src/xdisp.c (draw_glyphs): Enable code for NS port to fix mouse face
cursor display.

* src/macfont.m (get_cgcolor_from_nscolor): New function.
(macfont_draw): Remove obsolete mouse-face code and enable cursor
display.
2021-11-06 12:59:14 +00:00
Kazuhiro Ito
ba278e4a9b Fix display of BW images on MS-Windows
* src/image.c (convert_mono_to_color_image) [HAVE_NTGUI]: Swap the
fore- and the back-ground colors back to their normal conventions.
(Bug#6918)
2021-11-06 13:33:46 +02:00