Почему я не могу изменить размер или максимизировать Firefox 17 под Пилой-рыбой?

Это, кажется, начато с удара 4.2. Можно сообщить об этом как об ошибке разработчикам удара.

2
29.12.2012, 04:06
2 ответа

window-maximizable-p возвращает false, если окно имеет максимальную подсказку размера, которая меньше, чем дисплей. Максимальная подсказка размера max_width и max_height значения в XSizeHints структура, возвращенная как ответ на a WM_SIZE_HINTS сообщение.

Firefox 17 объявляет максимальные высоты и ширины со значением 0x40000000. В Пиле-рыбе, window-size-hints функционируйте сообщают эти значения как 0. Как это происходит, реализация Lisp Пилы-рыбы использует 2 бита тега на целочисленных значениях, который оставляет 30 битов на 32-разрядных машинах и 62 бита на 64-разрядной машине. Так, чтобы значение 230 было тихо усеченным к 0.

Я взглянул на код C и способ, которым он записан, это усечение происходит даже на 64-разрядной машине (потому что 32-разрядное XSizeHints участник смещен сначала, затем продвинут на long).

Поскольку John Siu нашел, это - ошибка Ubuntu № 1083260, который был зафиксирован, будучи замеченным относительно Firefox 17 с обсуждением в списке рассылки.


Теперь для обходного решения можно вставить Ваш .sawfishrc, по крайней мере, заставить Firefox 17 работать.

Учитывая, что максимальное значение 0 не имеет смысла, возможно отфильтровать это значение в Lisp и удалить подсказку, когда это, кажется, 0. Это только решает проблему для максимальных подсказок размера, которые являются кратными числами 230, но это достаточно хорошо здесь.

Предупреждение: код довольно ужасен — пиле-рыбе не нравится исправлять модули только для подпрограммы (Вы не можете сделать многого без 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))))))
1
27.01.2020, 22:07

Вы, кажется, поражает ошибку пилы-рыбы:

https://bugs.launchpad.net/ubuntu / + источник/пила-рыба / + ошибка/1083260

PS: И это - плохая идея протестировать пилу-рыбу с человечностью repo, не может даже войти в ссылку.

2
27.01.2020, 22:07
  • 1
    Спасибо, я нашел ошибку в коде самостоятельно, но не потоке списка рассылки или ошибке Ubuntu. Нахождение способа работать вокруг этого в Lisp было более хитрым. –  Gilles 'SO- stop being evil' 29.12.2012, 04:04
  • 2
    Основа на ссылке в моей PS, пила-рыба в Ubuntu repo довольно устарела. –  John Siu 29.12.2012, 04:09

Теги

Похожие вопросы