Por que não consigo redimensionar ou maximizar o Firefox 17 sob o Sawfish?

2

Acabei de atualizar do Firefox 16 para o Firefox 17.0.1, e minhas janelas do Firefox perderam o seu botão de maximizar. O comando maximize-window também não faz nada. Mudar para o modo de tela cheia no Firefox faz com que seus menus e barras de ferramentas desapareçam, mas as decorações das janelas permanecem e a janela permanece do mesmo tamanho. Além disso, não consigo redimensionar a janela para algo além de 18x108. Tudo isso funcionou com o Firefox 16.

Eu estou executando o Debian squeeze, com binários do Firefox do link . Meu gerenciador de janelas é o Sawfish 1.3.5. Se eu rodar uma sessão X com o Fvwm, eu posso maximizar o Firefox, então o Firefox 17 está fazendo algo que o Sawfish não gosta, mas o que?

    
por Gilles 29.12.2012 / 00:47

2 respostas

1

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))))))
    
por 29.12.2012 / 03:03
2

Você parece acertar um bug de peixe-serra:

link

PS: E é uma má ideia testar o sawfish com o repositório do Ubuntu, nem sequer pode entrar link .

    
por 29.12.2012 / 01:20