summaryrefslogtreecommitdiff
path: root/lisp/xwidget.el
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2021-11-22 10:42:46 +0800
committerPo Lu <luangruo@yahoo.com>2021-11-22 10:47:29 +0800
commit9324efac480df3cd78af112da2b12a0d2bd18e02 (patch)
treedf9a164eca57746fd357c296613062cec7b1f49b /lisp/xwidget.el
parent536e7bf03b2ef8451fdd6b8d62db08f2bc7ebec9 (diff)
downloademacs-9324efac480df3cd78af112da2b12a0d2bd18e02.tar.gz
Make `xwidget-display-event' a special event as well
* doc/lispref/commands.texi (Xwidget Events): Document that `xwidget-display-event' is a special event, and that it should be handled through callbacks. * etc/NEWS: Update NEWS entry. * lisp/xwidget.el (xwidget-webkit-new-session) (xwidget-webkit-import-widget): Attach display callback. (xwidget-webkit-display-event): Call display callback instead. (xwidget-webkit-display-callback): New function. * src/keyboard.c (make_lispy_event): Store source information for XWIDGET_DISPLAY_EVENT correctly. * src/xwidget.c (store_xwidget_display_event): Store source of the display request. (webkit_ready_to_show): Store source if available. (webkit_create_cb_1): Store source if available. (kill_xwidget): Remove dead widget from internal_xwidget_list.
Diffstat (limited to 'lisp/xwidget.el')
-rw-r--r--lisp/xwidget.el17
1 files changed, 14 insertions, 3 deletions
diff --git a/lisp/xwidget.el b/lisp/xwidget.el
index 160da67cb21..cf4396fec2d 100644
--- a/lisp/xwidget.el
+++ b/lisp/xwidget.el
@@ -818,6 +818,7 @@ For example, use this to display an anchor."
(xwidget-webkit-set-cookie-storage-file
xw (expand-file-name xwidget-webkit-cookie-file)))
(xwidget-put xw 'callback callback)
+ (xwidget-put xw 'display-callback #'xwidget-webkit-display-callback)
(xwidget-webkit-mode)
(xwidget-webkit-goto-uri (xwidget-webkit-last-session) url)))
@@ -840,16 +841,26 @@ Return the buffer."
(put-text-property (point-min) (point-max)
'display (list 'xwidget :xwidget xwidget)))
(xwidget-put xwidget 'callback callback)
+ (xwidget-put xwidget 'display-callback
+ #'xwidget-webkit-display-callback)
(set-xwidget-buffer xwidget buffer)
(xwidget-webkit-mode))
buffer))
(defun xwidget-webkit-display-event (event)
- "Import the xwidget inside EVENT and display it."
+ "Trigger display callback for EVENT."
(interactive "e")
- (display-buffer (xwidget-webkit-import-widget (nth 1 event))))
+ (let ((xwidget (cadr event))
+ (source (caddr event)))
+ (when (xwidget-get source 'display-callback)
+ (funcall (xwidget-get source 'display-callback)
+ xwidget source))))
-(global-set-key [xwidget-display-event] 'xwidget-webkit-display-event)
+(defun xwidget-webkit-display-callback (xwidget _source)
+ "Import XWIDGET and display it."
+ (display-buffer (xwidget-webkit-import-widget xwidget)))
+
+(define-key special-event-map [xwidget-display-event] 'xwidget-webkit-display-event)
(defun xwidget-webkit-goto-url (url)
"Goto URL with xwidget webkit."