Firefox

為什麼我不能在 Sawfish 下調整或最大化 Firefox 17 的大小?

  • December 29, 2012

我剛剛從 Firefox 16 升級到 Firefox 17.0.1,我的 Firefox 視窗失去了最大化按鈕。該maximize-window命令也不執行任何操作。在 Firefox 中切換到全屏模式會使其菜單和工具欄消失,但視窗裝飾仍然存在,視窗大小保持不變。此外,我無法將視窗大小調整為 18x108 以外的任何內容。所有這些都適用於 Firefox 16。

我正在使用來自http://mozilla.org的 Firefox 二進製文件執行 Debian 擠壓。我的視窗管理器是 Sawfish 1.3.5。如果我使用 Fvwm 執行 X 會話,我可以最大化 Firefox,所以 Firefox 17 正在做一些 Sawfish 不喜歡的事情,但是什麼?

window-maximizable-p如果視窗的最大尺寸提示小於顯示,則返回 false。最大大小提示是作為對消息的響應返回的結構中的max_widthmax_height值。XSizeHints``WM_SIZE_HINTS

Firefox 17 聲明了最大高度和寬度,值為 0x40000000。在 Sawfish 中,該window-size-hints函式將這些值報告為 0。碰巧的是,Sawfish 的 Lisp 實現在整數值上使用 2 個標記位,這在 32 位機器上留下 30 位,在 64 位機器上留下 62 位。所以 2 30的值被默默地截斷為 0。

我查看了 C 程式碼,以及它的編寫方式,即使在 64 位機器上也會發生這種截斷(因為 32 位XSizeHints成員首先移動,然後提升為long)。

正如John Siu 所發現的,這是Ubuntu 錯誤 #1083260在與 Firefox 17相關並在郵件列表中進行了討論後,該錯誤已得到修復。


現在有一個解決方法,您可以將.sawfishrc.

鑑於最大值 0 沒有意義,可以在 Lisp 中過濾此值並在它似乎為 0 時刪除提示。這僅解決了最大大小提示的問題,即 2 30的倍數,但僅此而已這裡足夠好。

警告:程式碼非常糟糕——sawfish 不喜歡修補僅子程序的模組(如果沒有rep命名空間,你將無法做很多事情——包括(require 'rep))。

(let ((struct (get-structure 'sawfish.wm.windows.subrs)))
 (unless (structure-bound-p struct 'window-size-hints-before-max-truncation-fix)
   (let ((old-window-size-hints (eval 'window-size-hints struct)))
     (structure-define struct 'window-size-hints-before-max-truncation-fix
                       old-window-size-hints)
     (structure-set struct 'window-size-hints
                    (lambda (#!rest args)
                      (let* ((hints (apply old-window-size-hints args))
                             (cell (cons nil hints)))
                        (mapc (lambda (key)
                                (let ((cell (assq key hints)))
                                  (if (zerop (cdr cell))
                                      (setq hints (delq cell hints)))))
                              '(max-height max-width))
                        hints))))))

您似乎遇到了鋸魚的錯誤:

https://bugs.launchpad.net/ubuntu/+source/sawfish/+bug/1083260

PS:用ubuntu repo測試sawfish是個壞主意,甚至無法登錄連結

引用自:https://unix.stackexchange.com/questions/59732