]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix image-mode-fit-frame some more
authorLars Ingebrigtsen <larsi@gnus.org>
Thu, 24 Mar 2022 08:54:38 +0000 (09:54 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Thu, 24 Mar 2022 08:54:56 +0000 (09:54 +0100)
* lisp/image-mode.el (image-mode-fit-frame): Use frame-text-width
and fit-frame-to-buffer instead of computing things ourselves
(bug#37630).  This makes things work better across platforms.

lisp/image-mode.el

index 863d014cdc42a2239ee949c2819e9dd159ab46a5..d7dfb4336b9c508f0720a40ef749422d94c0dc89 100644 (file)
@@ -419,12 +419,10 @@ window configuration prior to the last `image-mode-fit-frame'
 call."
   (interactive (list nil t))
   (let* ((buffer (current-buffer))
-         (display (image-get-display-property))
-         (size (image-display-size display t))
         (saved (frame-parameter frame 'image-mode-saved-params))
         (window-configuration (current-window-configuration frame))
-        (frame-width (frame-pixel-width frame))
-        (frame-height (frame-pixel-height frame)))
+        (frame-width (frame-text-width frame))
+        (frame-height (frame-text-height frame)))
     (with-selected-frame (or frame (selected-frame))
       (if (and toggle saved
               (= (caar saved) frame-width)
@@ -436,24 +434,16 @@ call."
            (set-frame-parameter frame 'image-mode-saved-params nil))
        (delete-other-windows)
        (switch-to-buffer buffer t t)
-       (let* ((edges (window-inside-pixel-edges))
-              (inner-width (- (nth 2 edges) (nth 0 edges)))
-              (inner-height (- (nth 3 edges) (nth 1 edges))))
-         (set-frame-width frame (+ (ceiling (car size))
-                                   (- frame-width inner-width))
-                           nil t)
-         (set-frame-height frame (+ (ceiling (cdr size))
-                                    (- frame-height inner-height))
-                            nil t)
-         ;; The frame size after the above `set-frame-*' calls may
-         ;; differ from what we specified, due to window manager
-         ;; interference.  We have to call `frame-width' and
-         ;; `frame-height' to get the actual results.
-         (set-frame-parameter frame 'image-mode-saved-params
-                              (list (cons (frame-pixel-width frame)
-                                          (frame-pixel-height frame))
-                                    (cons frame-width frame-height)
-                                    window-configuration)))))))
+        (fit-frame-to-buffer frame)
+       ;; The frame size after the above `set-frame-*' calls may
+       ;; differ from what we specified, due to window manager
+       ;; interference.  We have to call `frame-width' and
+       ;; `frame-height' to get the actual results.
+       (set-frame-parameter frame 'image-mode-saved-params
+                            (list (cons (frame-text-width frame)
+                                        (frame-text-height frame))
+                                  (cons frame-width frame-height)
+                                  window-configuration))))))
 
 ;;; Image Mode setup