SawfishでFirefox 17のサイズを変更または最大化できないのはなぜですか?

SawfishでFirefox 17のサイズを変更または最大化できないのはなぜですか?

私はFirefox 16からFirefox 17.0.1にアップグレードしましたが、Firefoxウィンドウに最大化ボタンはありません。このmaximize-windowコマンドも何もしません。 Firefoxからフルスクリーンモードに切り替えると、メニューとツールバーが消えますが、ウィンドウの装飾はそのままになり、ウィンドウのサイズは変わりません。また、ウィンドウサイズを18x108以外のサイズに変更することはできません。これらの機能はすべてFirefox 16で動作します。

私はDebian squeezeとFirefoxバイナリを実行しています。http://mozilla.org。私のウィンドウマネージャはSawfish 1.3.5です。 Fvwmを使用してXセッションを実行するとFirefoxを最大化できるため、Firefox 17はSawfishが気に入らないタスクを実行します。ところで何をしますか?

答え1

トップサメのバグに出会ったようです:

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

PS:Ubuntuストアでトップサメをテストするのは悪い考えです。ログインすらできません。協会

答え2

window-maximizable-pウィンドウの最大サイズのヒントがディスプレイより小さい場合は false を返します。最大サイズのヒントは、メッセージ応答で返された構造のmax_width合計値です。max_heightXSizeHintsWM_SIZE_HINTS

Firefox 17では、最大の高さと幅を0x40000000の値として宣言します。 Sawfishでは、このwindow-size-hints関数はこれらの値を0として報告します。結局のところ、SawfishのLisp実装は、整数値に2つのフラグビットを使用し、32ビットシステムでは30ビット、64ビットシステムでは62ビットを残します。したがって、2 30の値は自動的にゼロに切り捨てられます。

Cコードを見た結果、作成された方法によると、64ビットシステムでもこのような切り捨てが発生します(32ビットXSizeHintsメンバーが最初に移動されてから昇格されるためですlong)。

〜のようにジョン・シャオ(John Xiao)が発見しました。、これはUbuntuのバグ#1083260これはFirefox 17に関連した後に修正されました。メーリングリストに関する議論


.sawfishrcこれで、少なくともFirefox 17が正常に動作するようにブラウザで回避策を見つけることができます。

最大値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))))))

関連情報