window-maximizable-p
retornará false se a janela tiver uma dica de tamanho máximo menor que a exibição. A dica de tamanho máximo é os valores max_width
e max_height
na estrutura XSizeHints
retornada como resposta a uma mensagem WM_SIZE_HINTS
.
O Firefox 17 declara alturas e larguras máximas, com o valor 0x40000000. No Sawfish, a função window-size-hints
relata esses valores como 0. Como ocorre, a implementação Lisp do Sawfish usa 2 bits de tag em valores inteiros, o que deixa 30 bits em máquinas de 32 bits e 62 bits em máquinas de 64 bits. Então esse valor de 2 30 está sendo silenciosamente truncado para 0.
Eu dei uma olhada no código C, e a maneira como está escrito, esse truncamento acontece até mesmo em uma máquina de 64 bits (porque o membro XSizeHints
de 32 bits é deslocado primeiro e depois promovido para long
).
Como John Siu encontrou , isso é bug do Ubuntu # 1083260 que era fixado após ser notado em relação ao Firefox 17 com um discussão na lista de discussão .
Agora, para uma solução alternativa, você pode colocar seu .sawfishrc
, pelo menos para fazer o Firefox 17 funcionar.
Dado que um valor máximo de 0 não faz sentido, é possível filtrar este valor em Lisp e remover a dica quando parecer ser 0. Isso só resolve o problema para dicas de tamanho máximo que são múltiplos de 2 < sup> 30 , mas isso é bom o suficiente aqui.
Atenção: o código é bastante horrível - o sawfish não gosta de instalar módulos apenas de sub-rotina (você não pode fazer muito sem rep
no namespace - incluindo (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))))))