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