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

추신: 우분투 저장소로 톱상어를 테스트하는 것은 나쁜 생각입니다. 로그인조차 할 수 없습니다.협회.

답변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 의 값은 자동으로 0으로 잘립니다.

C 코드를 살펴본 결과, 작성된 방식에 따르면 64비트 시스템에서도 이러한 잘림이 발생합니다(32비트 XSizeHints멤버가 먼저 이동된 다음 승격되기 때문입니다 long).

~처럼존 샤오(John Xiao)가 발견했습니다., 이것은우분투 버그 #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))))))

관련 정보