Monday, April 29, 2024
 Popular · Latest · Hot · Upcoming
4
rated 0 times [  4] [ 0]  / answers: 1 / hits: 1656  / 2 Years ago, fri, may 20, 2022, 12:25:33

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?



enter image description here



#!/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>
✔ 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>" "
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

More From » unity

 Answers
7

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:




  1. Define a window manager class for the dialog by adding --class=<WMCLASS> to the commandline., e.g.:



    zenity --class=InfinalitySettings --width=500 --height=490 [...]


    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.


  2. Append the following line to the .desktop launcher:



    StartupWMClass=InfinalitySettings






Here's how you could implement this in your script (I also modified a few other things):



#!/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 $2}')"
# ↑ "$()" 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

[#24732] Sunday, May 22, 2022, 2 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
fertion

Total Points: 436
Total Questions: 121
Total Answers: 156

Location: England
Member since Sun, May 21, 2023
1 Year ago
;