Eu acho que o problema é que ambos os scripts do Zenity estão usando a mesma classe de gerenciador de janelas. Você pode verificar isso executando xprop
e clicando em cada janela, respectivamente.
Se você fornecer ao Zenity um WMCLASS, você pode ter certeza de que o diálogo sempre será atribuído com o%% launcher% correto.
Estes são os passos que você deve seguir:
-
Defina uma classe de gerenciador de janelas para a caixa de diálogo adicionando
.desktop
à linha de comando., por exemplo:zenity --class=InfinalitySettings --width=500 --height=490 [...]
Você pode escolher um nome arbitrário desde que seja único e não seja usado por nenhum outro aplicativo / script. Eu não sei se os caracteres especiais funcionam, mas só por precaução eu ficaria apenas com caracteres alfanuméricos.
-
Anexe a linha a seguir ao
--class=<WMCLASS>
launcher:StartupWMClass=InfinalitySettings
Veja como você pode implementar isso em seu script (também modifiquei algumas outras coisas):
#!/bin/bash
# A simple script to provide a basic, zenity-based GUI to change Infinality Style.
# v.1.3
# tip: use http://www.shellcheck.net/ to avoid common problems
## variables
InfinalityConfig="/etc/profile.d/infinality-settings.sh"
InfinalityCurrent="$(cat "$InfinalityConfig" | grep "USE_STYLE=" | awk -F\" '{print }')"
# ↑ "$()" is safer than ''
## dialog
# assign descriptions and other dialog elements
# makes the script easier to read
WmClass="InfinalitySettings"
TxtMain="Current <i>Infinality Style</i> is\: <b>$InfinalityCurrent</b>
✔ To <i>change</i> it, select any other option below and press <b>OK</b>
✘ To <i>quit without changing</i>, press <b>Cancel</b>"
Title="Change Infinality Style"
## functions
select_style(){
Choice="$(zenity --class="$WmClass" --width=500 --height=490 --list --radiolist \
--title="$Title" --text="$TxtMain" \
--column="" --column="Options" --column="Descriptions" \
"FALSE" "DEFAULT" "Use default settings - a compromise that should please most people" \
"FALSE" "OSX" "Simulate OSX rendering" \
"FALSE" "IPAD" "Simulate iPad rendering" \
"FALSE" "UBUNTU" "Simulate Ubuntu rendering" \
"FALSE" "LINUX" "Generic Linux style - no snapping or certain other tweaks" \
"FALSE" "WINDOWS" "Simulate Windows rendering" \
"FALSE" "WIN7" "Simulate Windows 7 rendering with normal glyphs" \
"FALSE" "WINLIGHT" "Simulate Windows 7 rendering with lighter glyphs" \
"FALSE" "VANILLA" "Just subpixel hinting" \
"FALSE" "CLASSIC" "Infinality rendering circa 2010 - No snapping." \
"FALSE" "NUDGE" "Infinality - Classic with lightly stem snapping and tweaks" \
"FALSE" "PUSH" "Infinality - Classic with medium stem snapping and tweaks" \
"FALSE" "SHOVE" "Infinality - Full stem snapping and tweaks without sharpening" \
"FALSE" "SHARPENED" "Infinality - Full stem snapping, tweaks, and Windows-style sharpening" \
"FALSE" "INFINALITY" "Infinality - Standard" \
"FALSE" "DISABLED" "Act without extra infinality enhancements - just subpixel hinting" \
)"
RET_YAD="$?" # get exit code
if [[ "$RET_YAD" != "0" ]] # if exit code != 0 (e.g. user closed window, hit 'cancel')
then
echo "Aborted."
exit 1
elif [[ -z "$Choice" ]]
then
echo "No option selected. Exiting."
exit 0
fi
echo "User chose: $Choice"
}
set_style(){
pkexec --user root sed -i "s/USE_STYLE=\"$InfinalityCurrent\"/USE_STYLE=\"$Choice\"/g"\
"$InfinalityConfig"
RET_PKEXEC="$?"
if [[ "$RET_PKEXEC" != "0" ]]
then
exit 1
# Add a zenity message here if you want.
else
exit 0
fi
}
## main
select_style
set_style