Function: xwidget-webkit-callback
xwidget-webkit-callback is a byte-compiled function defined in
xwidget.el.gz.
Signature
(xwidget-webkit-callback XWIDGET XWIDGET-EVENT-TYPE)
Documentation
Callback for xwidgets.
XWIDGET instance, XWIDGET-EVENT-TYPE depends on the originating xwidget.
Source Code
;; Defined in /usr/src/emacs/lisp/xwidget.el.gz
(defun xwidget-webkit-callback (xwidget xwidget-event-type)
"Callback for xwidgets.
XWIDGET instance, XWIDGET-EVENT-TYPE depends on the originating xwidget."
(if (not (buffer-live-p (xwidget-buffer xwidget)))
(xwidget-log
"error: callback called for xwidget with dead buffer")
(cond ((eq xwidget-event-type 'load-changed)
(let ((title (xwidget-webkit-title xwidget))
(uri (xwidget-webkit-uri xwidget)))
(when-let ((buffer (get-buffer "*Xwidget WebKit History*")))
(with-current-buffer buffer
(revert-buffer)))
(with-current-buffer (xwidget-buffer xwidget)
(if (string-equal (nth 3 last-input-event)
"load-finished")
(progn
(setq xwidget-webkit--loading-p nil)
(cancel-timer xwidget-webkit--progress-update-timer))
(unless xwidget-webkit--loading-p
(setq xwidget-webkit--loading-p t
xwidget-webkit--progress-update-timer
(run-at-time 0.5 0.5 #'xwidget-webkit--update-progress-timer-function
xwidget)))))
;; This function will be called multi times, so only
;; change buffer name when the load actually completes
;; this can limit buffer-name flicker in mode-line.
(when (or (string-equal (nth 3 last-input-event)
"load-finished")
(> (length title) 0))
(with-current-buffer (xwidget-buffer xwidget)
(force-mode-line-update)
(xwidget-log "webkit finished loading: %s" title)
;; Do not adjust webkit size to window here, the
;; selected window can be the mini-buffer window
;; unwantedly.
(rename-buffer
(format-spec
xwidget-webkit-buffer-name-format
`((?T . ,title)
(?U . ,uri)))
t)))))
((eq xwidget-event-type 'decide-policy)
(let ((strarg (nth 3 last-input-event)))
(if (string-match ".*#\\(.*\\)" strarg)
(xwidget-webkit-show-id-or-named-element
xwidget
(match-string 1 strarg)))))
;; TODO: Response handling other than download.
((eq xwidget-event-type 'download-callback)
(let ((url (nth 3 last-input-event))
(mime-type (nth 4 last-input-event))
(file-name (nth 5 last-input-event)))
(xwidget-webkit-save-as-file url mime-type file-name)))
((eq xwidget-event-type 'javascript-callback)
(let ((proc (nth 3 last-input-event))
(arg (nth 4 last-input-event)))
(funcall proc arg)))
(t (xwidget-log "unhandled event:%s" xwidget-event-type)))))