aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRicardo Wurmus2016-10-25 23:00:35 -0700
committerPaul Eggert2016-10-25 23:07:13 -0700
commita9785bd5c2e27e949040342e441c1a65a5b650d0 (patch)
treecf7c3755a6c2c19f71f98e0c0ac82bcefaa78545
parentc483fa6ef212365c6e8fd77118d80e8f3df86ca0 (diff)
downloademacs-a9785bd5c2e27e949040342e441c1a65a5b650d0.tar.gz
emacs-a9785bd5c2e27e949040342e441c1a65a5b650d0.zip
Dynamically resize WebKit widget.
* lisp/xwidget.el (xwidget-webkit-auto-adjust-size, xwidget-webkit-adjust-size-in-frame): New procedures. (xwidget-webkit-new-session): Remove hint to resize widget with `a'. (xwidget-webkit-adjust-size-dispatch): Resize current webkit widget. (xwidget-webkit-adjust-size-to-window): Make non-interactive, add widget and window as arguments. (xwidget-webkit-callback): Use xwidget-webkit-adjust-size-to-window.
-rw-r--r--lisp/xwidget.el33
1 files changed, 25 insertions, 8 deletions
diff --git a/lisp/xwidget.el b/lisp/xwidget.el
index e5b51ce25cd..13e3fdf2a94 100644
--- a/lisp/xwidget.el
+++ b/lisp/xwidget.el
@@ -199,7 +199,7 @@ XWIDGET instance, XWIDGET-EVENT-TYPE depends on the originating xwidget."
199 (xwidget-log "webkit finished loading: '%s'" title) 199 (xwidget-log "webkit finished loading: '%s'" title)
200 ;;TODO - check the native/internal scroll 200 ;;TODO - check the native/internal scroll
201 ;;(xwidget-adjust-size-to-content xwidget) 201 ;;(xwidget-adjust-size-to-content xwidget)
202 (xwidget-webkit-adjust-size-dispatch) ;;TODO xwidget arg 202 (xwidget-webkit-adjust-size-to-window xwidget)
203 (rename-buffer (format "*xwidget webkit: %s *" title)))) 203 (rename-buffer (format "*xwidget webkit: %s *" title))))
204 (pop-to-buffer (current-buffer))) 204 (pop-to-buffer (current-buffer)))
205 ((eq xwidget-event-type 'decide-policy) 205 ((eq xwidget-event-type 'decide-policy)
@@ -411,18 +411,18 @@ For example, use this to display an anchor."
411(defun xwidget-webkit-adjust-size-dispatch () 411(defun xwidget-webkit-adjust-size-dispatch ()
412 "Adjust size according to mode." 412 "Adjust size according to mode."
413 (interactive) 413 (interactive)
414 (xwidget-webkit-adjust-size-to-window) 414 (xwidget-webkit-adjust-size-to-window (xwidget-webkit-current-session))
415 ;; The recenter is intended to correct a visual glitch. 415 ;; The recenter is intended to correct a visual glitch.
416 ;; It errors out if the buffer isn't visible, but then we don't get 416 ;; It errors out if the buffer isn't visible, but then we don't get
417 ;; the glitch, so silence errors. 417 ;; the glitch, so silence errors.
418 (ignore-errors 418 (ignore-errors
419 (recenter-top-bottom))) 419 (recenter-top-bottom)))
420 420
421(defun xwidget-webkit-adjust-size-to-window () 421(defun xwidget-webkit-adjust-size-to-window (xwidget &optional window)
422 "Adjust webkit to window." 422 "Adjust the size of the webkit XWIDGET to fit the WINDOW."
423 (interactive) 423 (xwidget-resize xwidget
424 (xwidget-resize (xwidget-webkit-current-session) (window-pixel-width) 424 (window-pixel-width window)
425 (window-pixel-height))) 425 (window-pixel-height window)))
426 426
427(defun xwidget-webkit-adjust-size (w h) 427(defun xwidget-webkit-adjust-size (w h)
428 "Manually set webkit size to width W, height H." 428 "Manually set webkit size to width W, height H."
@@ -437,6 +437,21 @@ For example, use this to display an anchor."
437 (car (window-inside-pixel-edges))) 437 (car (window-inside-pixel-edges)))
438 1000)) 438 1000))
439 439
440(defun xwidget-webkit-auto-adjust-size (window)
441 "Adjust the size of the webkit widget in the given WINDOW."
442 (with-current-buffer (window-buffer window)
443 (when (eq major-mode 'xwidget-webkit-mode)
444 (let ((xwidget (xwidget-webkit-current-session)))
445 (xwidget-webkit-adjust-size-to-window xwidget window)))))
446
447(defun xwidget-webkit-adjust-size-in-frame (frame)
448 "Dynamically adjust webkit widget for all windows of the FRAME."
449 (walk-windows 'xwidget-webkit-auto-adjust-size 'no-minibuf frame))
450
451(eval-after-load 'xwidget-webkit-mode
452 (add-to-list 'window-size-change-functions
453 'xwidget-webkit-adjust-size-in-frame))
454
440(defun xwidget-webkit-new-session (url) 455(defun xwidget-webkit-new-session (url)
441 "Create a new webkit session buffer with URL." 456 "Create a new webkit session buffer with URL."
442 (let* 457 (let*
@@ -444,7 +459,9 @@ For example, use this to display an anchor."
444 xw) 459 xw)
445 (setq xwidget-webkit-last-session-buffer (switch-to-buffer 460 (setq xwidget-webkit-last-session-buffer (switch-to-buffer
446 (get-buffer-create bufname))) 461 (get-buffer-create bufname)))
447 (insert " 'a' adjusts the xwidget size.") 462 ;; The xwidget id is stored in a text property, so we need to have
463 ;; at least character in this buffer.
464 (insert " ")
448 (setq xw (xwidget-insert 1 'webkit bufname 465 (setq xw (xwidget-insert 1 'webkit bufname
449 (window-pixel-width) 466 (window-pixel-width)
450 (window-pixel-height))) 467 (window-pixel-height)))