summaryrefslogtreecommitdiff
path: root/lisp/xwidget.el
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2021-11-06 20:59:08 +0800
committerLars Ingebrigtsen <larsi@gnus.org>2021-11-07 02:59:42 +0100
commit0be966f97e3bda057318d971d022515cfa6eb37b (patch)
tree177c0b407ac568bd9e62536207fa75be8457c5d7 /lisp/xwidget.el
parent1a84537f7938afcd155ee5e9efc104fc8f027e0f (diff)
downloademacs-0be966f97e3bda057318d971d022515cfa6eb37b.tar.gz
emacs-0be966f97e3bda057318d971d022515cfa6eb37b.tar.bz2
emacs-0be966f97e3bda057318d971d022515cfa6eb37b.zip
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.
Diffstat (limited to 'lisp/xwidget.el')
-rw-r--r--lisp/xwidget.el24
1 files changed, 24 insertions, 0 deletions
diff --git a/lisp/xwidget.el b/lisp/xwidget.el
index bd3c0876f59..d427e702331 100644
--- a/lisp/xwidget.el
+++ b/lisp/xwidget.el
@@ -37,6 +37,7 @@
(declare-function make-xwidget "xwidget.c"
(type title width height arguments &optional buffer))
(declare-function xwidget-buffer "xwidget.c" (xwidget))
+(declare-function set-xwidget-buffer "xwidget.c" (xwidget buffer))
(declare-function xwidget-size-request "xwidget.c" (xwidget))
(declare-function xwidget-resize "xwidget.c" (xwidget new-width new-height))
(declare-function xwidget-webkit-execute-script "xwidget.c"
@@ -701,6 +702,29 @@ For example, use this to display an anchor."
(xwidget-webkit-mode)
(xwidget-webkit-goto-uri (xwidget-webkit-last-session) url)))
+(defun xwidget-webkit-import-widget (xwidget)
+ "Create a new webkit session buffer from XWIDGET, an existing xwidget.
+Return the buffer."
+ (let* ((bufname (generate-new-buffer-name "*xwidget-webkit*"))
+ (callback #'xwidget-webkit-callback)
+ (buffer (get-buffer-create bufname)))
+ (with-current-buffer buffer
+ (save-excursion
+ (erase-buffer)
+ (insert ".")
+ (put-text-property (point-min) (point-max)
+ 'display (list 'xwidget :xwidget xwidget)))
+ (xwidget-put xwidget 'callback callback)
+ (set-xwidget-buffer xwidget buffer)
+ (xwidget-webkit-mode))
+ buffer))
+
+(defun xwidget-webkit-display-event (event)
+ "Import the xwidget inside EVENT and display it."
+ (interactive "e")
+ (display-buffer (xwidget-webkit-import-widget (nth 1 event))))
+
+(global-set-key [xwidget-display-event] 'xwidget-webkit-display-event)
(defun xwidget-webkit-goto-url (url)
"Goto URL with xwidget webkit."