Obtenha as dimensões completas da janela (incluindo decorações) no Unity

2

Eu usei a resposta para em meus scripts bash, e tive um bom sucesso com meu Silentcast aplicação no Xfce, mas agora que os outros estão usando, eles estão encontrando alguns problemas no Ubuntu 14.04, Unity. Aqui está um problema causado pela saída de:

xwininfo -id $(xdotool getactivewindow)

Mostrando:

Relative upper-left X:  0  
Relative upper-left Y:  0

Qual eu uso para calcular a largura das bordas e a altura da barra de título. Eles não devem ser 0.

Alguém sabe como obter a largura das bordas da janela e a altura da barra de título no Unity para Ubuntu 14.04.

Ou como obter diretamente as dimensões completas da janela?

Eu enviei um bug contra o xorg para o link do pacote xwininfo.

Eu também descobri informações sobre como criar seu próprio tema no Unity no Ubuntu 14.04: link

Parece que a resposta está nessa página de tema em algum lugar, mas ainda não entendi, especialmente porque não uso o Ubuntu nem o Unity.

    
por Colin Keenan 26.09.2014 / 03:41

1 resposta

2

Também fiz essa pergunta no stackoverflow e recebi uma boa resposta que marquei como a correta e votei positivo: link

This applies also to compiz. There are a couple of ways you can get these informations in some ways:

wnckprop --xid=$(xdotool getactivewindow)

Otherwise, you can just mix the Absolute value you get from xwininfo together with the size of the decorations that are accessible using:

xprop _NET_FRAME_EXTENTS -id $(xdotool getactivewindow)

For your information, if you want to get the full frame size, including the input area around the window, you can use xwininfo -frame

Após a experimentação, eu entendo melhor o que a "área de entrada" refere-se ao Ubuntu. Como o tamanho padrão da borda é 0, há uma área de 10 px ao redor da janela onde você pode pegar a janela para redimensionar. Pode ter outros propósitos, mas a área de entrada basicamente age como uma borda invisível de 10px. Então, Absolute from xwininfo fornece a janela interior enquanto xwininfo -frame fornece a janela inteira incluindo a barra de título e um adicional de 10px ao redor (se a área de entrada for 10px). O xprop ... dá apenas o tamanho das decorações, não incluindo a área de entrada. Portanto, todos os 3 comandos são necessários para obter uma imagem completa da geometria de uma janela.

Aqui está o código que acabei usando (ignora a área de entrada invisível):

eval $(xwininfo -id "$aw" |
      sed -n -e "s/^ \+Absolute upper-left X: \+\([0-9]\+\).*/x=/p" \
             -e "s/^ \+Absolute upper-left Y: \+\([0-9]\+\).*/y=/p" \
             -e "s/^ \+Width: \+\([0-9]\+\).*/w=/p" \
             -e "s/^ \+Height: \+\([0-9]\+\).*/h=/p" )
if [ "$entire" = true ]
then
    extents=$(xprop _NET_FRAME_EXTENTS -id "$aw" | grep "NET_FRAME_EXTENTS" | cut -d '=' -f 2 | tr -d ' ')
    bl=$(echo $extents | cut -d ',' -f 1) # width of left border
    br=$(echo $extents | cut -d ',' -f 2) # width of right border
    t=$(echo $extents | cut -d ',' -f 3)  # height of title bar
    bb=$(echo $extents | cut -d ',' -f 4) # height of bottom border

    let x=$x-$bl
    let y=$y-$t
    let w=$w+$bl+$br
    let h=$h+$t+$bb
fi
    
por 26.09.2014 / 16:34