aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorRicardo Wurmus2016-10-25 23:00:35 -0700
committerPaul Eggert2016-10-25 23:07:13 -0700
commit623deaf406a85d8262bc1735009b3ee0535cc688 (patch)
treeae248862709bdfed77a25a6bcd542467500a1a3d /lisp
parentd781662873f228b110a128f7a2b6583a4d5e0a3a (diff)
downloademacs-623deaf406a85d8262bc1735009b3ee0535cc688.tar.gz
emacs-623deaf406a85d8262bc1735009b3ee0535cc688.zip
xwidget: Pass JavaScript return value to optional callback procedure
* lisp/xwidget.el (xwidget-webkit-execute-script): Accept optional callback argument. (xwidget-webkit-callback): Handle "javascript-callback" event type. * src/xwidget.c (xwidget-webkit-execute-script): Accept optional argument FUN, a Lisp procedure to execute on the JavaScript return value. (store_xwidget_js_callback_event, webkit_javascript_finished_cb, webkit_js_to_lisp): New procedures.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/xwidget.el33
1 files changed, 19 insertions, 14 deletions
diff --git a/lisp/xwidget.el b/lisp/xwidget.el
index 1bae6bb8b47..69b1002ab2d 100644
--- a/lisp/xwidget.el
+++ b/lisp/xwidget.el
@@ -42,7 +42,8 @@
42(declare-function xwidget-webkit-get-title "xwidget.c" (xwidget)) 42(declare-function xwidget-webkit-get-title "xwidget.c" (xwidget))
43(declare-function xwidget-size-request "xwidget.c" (xwidget)) 43(declare-function xwidget-size-request "xwidget.c" (xwidget))
44(declare-function xwidget-resize "xwidget.c" (xwidget new-width new-height)) 44(declare-function xwidget-resize "xwidget.c" (xwidget new-width new-height))
45(declare-function xwidget-webkit-execute-script "xwidget.c" (xwidget script)) 45(declare-function xwidget-webkit-execute-script "xwidget.c"
46 (xwidget script &optional callback))
46(declare-function xwidget-webkit-goto-uri "xwidget.c" (xwidget uri)) 47(declare-function xwidget-webkit-goto-uri "xwidget.c" (xwidget uri))
47(declare-function xwidget-plist "xwidget.c" (xwidget)) 48(declare-function xwidget-plist "xwidget.c" (xwidget))
48(declare-function set-xwidget-plist "xwidget.c" (xwidget plist)) 49(declare-function set-xwidget-plist "xwidget.c" (xwidget plist))
@@ -186,22 +187,26 @@ XWIDGET instance, XWIDGET-EVENT-TYPE depends on the originating xwidget."
186 (xwidget-log 187 (xwidget-log
187 "error: callback called for xwidget with dead buffer") 188 "error: callback called for xwidget with dead buffer")
188 (with-current-buffer (xwidget-buffer xwidget) 189 (with-current-buffer (xwidget-buffer xwidget)
189 (let* ((strarg (nth 3 last-input-event))) 190 (cond ((eq xwidget-event-type 'load-changed)
190 (cond ((eq xwidget-event-type 'load-changed) 191 (xwidget-log "webkit finished loading: '%s'"
191 (xwidget-log "webkit finished loading: '%s'" 192 (xwidget-webkit-get-title xwidget))
192 (xwidget-webkit-get-title xwidget)) 193 ;;TODO - check the native/internal scroll
193 ;;TODO - check the native/internal scroll 194 ;;(xwidget-adjust-size-to-content xwidget)
194 ;;(xwidget-adjust-size-to-content xwidget) 195 (xwidget-webkit-adjust-size-dispatch) ;;TODO xwidget arg
195 (xwidget-webkit-adjust-size-dispatch) ;;TODO xwidget arg 196 (rename-buffer (format "*xwidget webkit: %s *"
196 (rename-buffer (format "*xwidget webkit: %s *" 197 (xwidget-webkit-get-title xwidget)))
197 (xwidget-webkit-get-title xwidget))) 198 (pop-to-buffer (current-buffer)))
198 (pop-to-buffer (current-buffer))) 199 ((eq xwidget-event-type 'decide-policy)
199 ((eq xwidget-event-type 'decide-policy) 200 (let ((strarg (nth 3 last-input-event)))
200 (if (string-match ".*#\\(.*\\)" strarg) 201 (if (string-match ".*#\\(.*\\)" strarg)
201 (xwidget-webkit-show-id-or-named-element 202 (xwidget-webkit-show-id-or-named-element
202 xwidget 203 xwidget
203 (match-string 1 strarg)))) 204 (match-string 1 strarg)))))
204 (t (xwidget-log "unhandled event:%s" xwidget-event-type))))))) 205 ((eq xwidget-event-type 'javascript-callback)
206 (let ((proc (nth 3 last-input-event))
207 (arg (nth 4 last-input-event)))
208 (funcall proc arg)))
209 (t (xwidget-log "unhandled event:%s" xwidget-event-type))))))
205 210
206(defvar bookmark-make-record-function) 211(defvar bookmark-make-record-function)
207(define-derived-mode xwidget-webkit-mode 212(define-derived-mode xwidget-webkit-mode