diff options
| author | Ricardo Wurmus | 2016-10-25 23:00:35 -0700 |
|---|---|---|
| committer | Paul Eggert | 2016-10-25 23:07:13 -0700 |
| commit | 623deaf406a85d8262bc1735009b3ee0535cc688 (patch) | |
| tree | ae248862709bdfed77a25a6bcd542467500a1a3d /lisp | |
| parent | d781662873f228b110a128f7a2b6583a4d5e0a3a (diff) | |
| download | emacs-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.el | 33 |
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 |