I have this small bash script which helps use Infinality font rendering options via a more user-friendly Zenity window: http://gnomefiles.org/content/show.php/Infinality+Style+Changer?content=161984
But whenever I launch it I have this "Color Picker" title on Unity Panel together with the icon assigned for "Color Picker" utility.
I wonder why and how this is happening and how I can change it?
#!/bin/bash
# A simple script to provide a basic, zenity-based GUI to change Infinality Style.
# v.1.2
#
infinality_current=`cat /etc/profile.d/infinality-settings.sh | grep "USE_STYLE=" | awk -F'"' '{print $2}'`
sudo_password="$( gksudo --print-pass --message 'Provide permission to make system changes: Enter your password to start or press Cancel to quit.' -- : 2>/dev/null )"
# Check for null entry or cancellation.
if [[ ${?} != 0 || -z ${sudo_password} ]]
then
# Add a zenity message here if you want.
exit 4
fi
# Check that the password is valid.
if ! sudo -kSp '' [ 1 ] <<<"${sudo_password}" 2>/dev/null
then
# Add a zenity message here if you want.
exit 4
fi
#
menu(){
im="zenity --width=500 --height=490 --list --radiolist --title=\"Change Infinality Style\" --text=\"Current <i>Infinality Style</i> is\: <b>$infinality_current</b>\n✔ To <i>change</i> it, select any other option below and press <b>OK</b>\n✘ To <i>quit without changing</i>, press <b>Cancel</b>\" "
im=$im" --column=\" \" --column \"Options\" --column \"Description\" "
im=$im"FALSE \"DEFAULT\" \"Use default settings - a compromise that should please most people\" "
im=$im"FALSE \"OSX\" \"Simulate OSX rendering\" "
im=$im"FALSE \"IPAD\" \"Simulate iPad rendering\" "
im=$im"FALSE \"UBUNTU\" \"Simulate Ubuntu rendering\" "
im=$im"FALSE \"LINUX\" \"Generic Linux style - no snapping or certain other tweaks\" "
im=$im"FALSE \"WINDOWS\" \"Simulate Windows rendering\" "
im=$im"FALSE \"WIN7\" \"Simulate Windows 7 rendering with normal glyphs\" "
im=$im"FALSE \"WINLIGHT\" \"Simulate Windows 7 rendering with lighter glyphs\" "
im=$im"FALSE \"VANILLA\" \"Just subpixel hinting\" "
im=$im"FALSE \"CLASSIC\" \"Infinality rendering circa 2010 - No snapping.\" "
im=$im"FALSE \"NUDGE\" \"Infinality - Classic with lightly stem snapping and tweaks\" "
im=$im"FALSE \"PUSH\" \"Infinality - Classic with medium stem snapping and tweaks\" "
im=$im"FALSE \"SHOVE\" \"Infinality - Full stem snapping and tweaks without sharpening\" "
im=$im"FALSE \"SHARPENED\" \"Infinality - Full stem snapping, tweaks, and Windows-style sharpening\" "
im=$im"FALSE \"INFINALITY\" \"Infinality - Standard\" "
im=$im"FALSE \"DISABLED\" \"Act without extra infinality enhancements - just subpixel hinting\" "
}
#
option(){
choice=`echo $im | sh -`
#
if echo $choice | grep "DEFAULT" > /dev/null;
then
sudo -Sp '' sed -i "s/USE_STYLE=\"${infinality_current}\"/USE_STYLE=\"DEFAULT\"/g" '/etc/profile.d/infinality-settings.sh' <<<"${sudo_password}"
fi
#
if echo $choice | grep "OSX" > /dev/null;
then
sudo -Sp '' sed -i "s/USE_STYLE=\"${infinality_current}\"/USE_STYLE=\"OSX\"/g" '/etc/profile.d/infinality-settings.sh' <<<"${sudo_password}"
fi
#
if echo $choice | grep "IPAD" > /dev/null;
then
sudo -Sp '' sed -i "s/USE_STYLE=\"${infinality_current}\"/USE_STYLE=\"IPAD\"/g" '/etc/profile.d/infinality-settings.sh' <<<"${sudo_password}"
fi
#
if echo $choice | grep "UBUNTU" > /dev/null;
then
sudo -Sp '' sed -i "s/USE_STYLE=\"${infinality_current}\"/USE_STYLE=\"UBUNTU\"/g" '/etc/profile.d/infinality-settings.sh' <<<"${sudo_password}"
fi
#
if echo $choice | grep "LINUX" > /dev/null;
then
sudo -Sp '' sed -i "s/USE_STYLE=\"${infinality_current}\"/USE_STYLE=\"LINUX\"/g" '/etc/profile.d/infinality-settings.sh' <<<"${sudo_password}"
fi
#
if echo $choice | grep "WINDOWS" > /dev/null;
then
sudo -Sp '' sed -i "s/USE_STYLE=\"${infinality_current}\"/USE_STYLE=\"WINDOWS\"/g" '/etc/profile.d/infinality-settings.sh' <<<"${sudo_password}"
fi
#
if echo $choice | grep "WIN7" > /dev/null;
then
sudo -Sp '' sed -i "s/USE_STYLE=\"${infinality_current}\"/USE_STYLE=\"WINDOWS7\"/g" '/etc/profile.d/infinality-settings.sh' <<<"${sudo_password}"
fi
#
if echo $choice | grep "WINLIGHT" > /dev/null;
then
sudo -Sp '' sed -i "s/USE_STYLE=\"${infinality_current}\"/USE_STYLE=\"WINDOWS7LIGHT\"/g" '/etc/profile.d/infinality-settings.sh' <<<"${sudo_password}"
fi
#
if echo $choice | grep "VANILLA" > /dev/null;
then
sudo -Sp '' sed -i "s/USE_STYLE=\"${infinality_current}\"/USE_STYLE=\"VANILLA\"/g" '/etc/profile.d/infinality-settings.sh' <<<"${sudo_password}"
fi
#
if echo $choice | grep "CLASSIC" > /dev/null;
then
sudo -Sp '' sed -i "s/USE_STYLE=\"${infinality_current}\"/USE_STYLE=\"CLASSIC\"/g" '/etc/profile.d/infinality-settings.sh' <<<"${sudo_password}"
fi
#
if echo $choice | grep "NUDGE" > /dev/null;
then
sudo -Sp '' sed -i "s/USE_STYLE=\"${infinality_current}\"/USE_STYLE=\"NUDGE\"/g" '/etc/profile.d/infinality-settings.sh' <<<"${sudo_password}"
fi
#
if echo $choice | grep "PUSH" > /dev/null;
then
sudo -Sp '' sed -i "s/USE_STYLE=\"${infinality_current}\"/USE_STYLE=\"PUSH\"/g" '/etc/profile.d/infinality-settings.sh' <<<"${sudo_password}"
fi
#
if echo $choice | grep "SHOVE" > /dev/null;
then
sudo -Sp '' sed -i "s/USE_STYLE=\"${infinality_current}\"/USE_STYLE=\"SHOVE\"/g" '/etc/profile.d/infinality-settings.sh' <<<"${sudo_password}"
fi
#
if echo $choice | grep "SHARPENED" > /dev/null;
then
sudo -Sp '' sed -i "s/USE_STYLE=\"${infinality_current}\"/USE_STYLE=\"SHARPENED\"/g" '/etc/profile.d/infinality-settings.sh' <<<"${sudo_password}"
fi
#
if echo $choice | grep "INFINALITY" > /dev/null;
then
sudo -Sp '' sed -i "s/USE_STYLE=\"${infinality_current}\"/USE_STYLE=\"INFINALITY\"/g" '/etc/profile.d/infinality-settings.sh' <<<"${sudo_password}"
fi
#
if echo $choice | grep "DISABLED" > /dev/null;
then
sudo -Sp '' sed -i "s/USE_STYLE=\"${infinality_current}\"/USE_STYLE=\"DISABLED\"/g" '/etc/profile.d/infinality-settings.sh' <<<"${sudo_password}"
fi
#
}
#
menu
option
#
if test ${#choice} -gt 0; then
echo "Operation completed"
fi
#
exit 0
The .desktop file "/usr/local/share/applications/InfinalitySettings.desktop" contains the following text:
[Desktop Entry]
Name=Infinality Style Changer
GenericName=Infinality Settings
Exec=/usr/local/bin/InfinalitySettings
Icon=gnome-settings-font
Terminal=false
Type=Application
Categories=GTK;GNOME;System;Settings;Fonts;
And here is the contents of "/usr/share/applications/zenity-color-selection.desktop" which has this title and icon:
[Desktop Entry]
Encoding=UTF-8
Type=Application
Categories=Graphics;2DGraphics;RasterGraphics;GTK;
Name=Color Picker
GenericName=Color Picker
Comment=Pick a color from palette or any color on your screen
NotShowIn=KDE;
Icon=preferences-color
#Icon=applications-graphics
Exec=zenity --color-selection --show-palette
Terminal=false
I think the problem is that both Zenity scripts are using the same window manager class. You can check this by executing
xprop
and clicking on each window, respectively.If you supply Zenity with a WMCLASS you can make sure that the dialog will always be assigned the correct
.desktop
launcher.These are the steps you will have to take:
Define a window manager class for the dialog by adding
--class=<WMCLASS>
to the commandline., e.g.:You can choose an arbitrary name as long as its unique and not used by any other application/script. I don't know if special characters work, but just out of caution I would stick to alphanumeric characters only.
Append the following line to the
.desktop
launcher:Here's how you could implement this in your script (I also modified a few other things):
That is strange indeed. Without knowing more about where you got the script, I would have to guess. It is possible that the author has simply used the desktop file for gcolorpicker as a template for his own, simply forgetting to change the GenericName and Icon. But it is pure speculation.
If you've installed the script globally, you can look for the desktop file in /usr/share/applications. It should be called something like "infidelity-settings.desktop". If my assumption is correct, this file should contain a line like this: "GenericName=Color Picker" and another line resembling "Icon=gcolorpicker".
If you've installed the file for your user only, then you should find that desktop file in /home/yourusername/.local/share/applications/