From 06db71bc60052919851cbb4538c08645d72c1c56 Mon Sep 17 00:00:00 2001 From: Jan Pokorný Date: Wed, 8 Jan 2014 11:48:12 +0100 Subject: [f18->20] fix broken gtk3 theming (still worse than used be) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jan Pokorný --- .config/gtk-3.0/gtk.css | 1 - .config/gtk-3.0/settings.ini | 3 +++ scripts/gtk3/adwaita-settingini.sh | 16 ------------ scripts/gtk3/gtk3-fix.sh | 51 ++++++++++++++++++++++++-------------- scripts/gtk3/theme-adwaita | 45 +++++++++++++++++++++++++++++++++ 5 files changed, 80 insertions(+), 36 deletions(-) delete mode 120000 .config/gtk-3.0/gtk.css delete mode 100755 scripts/gtk3/adwaita-settingini.sh create mode 100644 scripts/gtk3/theme-adwaita diff --git a/.config/gtk-3.0/gtk.css b/.config/gtk-3.0/gtk.css deleted file mode 120000 index c102238..0000000 --- a/.config/gtk-3.0/gtk.css +++ /dev/null @@ -1 +0,0 @@ -/usr/share/themes/Adwaita/gtk-3.0/gtk-dark.css \ No newline at end of file diff --git a/.config/gtk-3.0/settings.ini b/.config/gtk-3.0/settings.ini index 2a9cdd2..a756b47 100644 --- a/.config/gtk-3.0/settings.ini +++ b/.config/gtk-3.0/settings.ini @@ -1,4 +1,7 @@ [Settings] +;deprecated since 3.8 gtk-color-scheme = "base_color:#ffffff\nbg_color:#ededed\ntooltip_bg_color:#343434\nselected_bg_color:#4a90d9\ntext_color:#2e3436\nfg_color:#cccccc\ntooltip_fg_color:#eeeeec\nselected_fg_color:#ffffff" +;deprecated since 3.10 gtk-auto-mnemonics = 1 +;;deprecated since 3.10 gtk-visible-focus = automatic diff --git a/scripts/gtk3/adwaita-settingini.sh b/scripts/gtk3/adwaita-settingini.sh deleted file mode 100755 index d79bd3e..0000000 --- a/scripts/gtk3/adwaita-settingini.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -# jpokorny@redhat.com - -# this is recipe to prepare ~/.config/gtk-3.0/settings.ini -# for Adwaita theme black as suitable for me and as also -# statically placed within this dotfiles repo - -ADWAITA_GTK3=/usr/share/themes/Adwaita/gtk-3.0 -FG_COLOR='#cccccc' -TOOLTIP_FG_COLOR='#eeeeec' - -sed "${ADWAITA_GTK3}/settings.ini" \ - -e "s|^\(\s*gtk-color-scheme\s\+=.*\\\\nfg_color:\)[^;\\]\+\([;\\].*\)$|\1${FG_COLOR}\2|" \ - -e "s|^\(\s*gtk-color-scheme\s\+=.*\\\\ntooltip_fg_color:\)[^;\\]\+\([;\\].*\)$|\1${TOOLTIP_FG_COLOR}\2|" \ - > ../../.config/gtk-3.0/settings.ini diff --git a/scripts/gtk3/gtk3-fix.sh b/scripts/gtk3/gtk3-fix.sh index 143ea70..90a0b0d 100755 --- a/scripts/gtk3/gtk3-fix.sh +++ b/scripts/gtk3/gtk3-fix.sh @@ -2,29 +2,42 @@ # credit: # http://tacticalvim.wordpress.com/2013/01/05/using-the-adwaita-gtk3-theme-with-xfce-and-lightdm/ # -# to be run as root, not user related +# to be run either as a root (system-wide fix only) or as a user +# (user-specific customization, but prompts for root password to +# do the main task) # # gtk-fallback.css notes: # - https://bugs.archlinux.org/task/34002 # - https://git.gnome.org/browse/gnome-themes-standard/commit/?id=1aed68dbda8b93b39d2586df132cc14ca337c4d9 -GR_FILE="/usr/share/themes/Adwaita/gtk-3.0/gtk.gresource" -GR_BASEDIR="$(dirname "${GR_FILE}")" -GR_BASEROOT="/org/gnome/adwaita/" -GR_FILES="${GR_BASEDIR}/files" - -mkdir "${GR_FILES}" -pushd "${GR_FILES}" >/dev/null || exit +THEME=theme-adwaita +test $# -gt 0 && THEME=$1 +source "${THEME}" -for RSRC in $(gresource list $GR_FILE); do - RSRC_FILE="$(echo "${RSRC#$GR_BASEROOT}")" - mkdir -p "$(dirname "$RSRC_FILE")" ||: - gresource extract "$GR_FILE" "$RSRC" > "$RSRC_FILE" -done - -find "${GR_BASEDIR}" -maxdepth 1 -name '*.css' -print0 | xargs -0 -I '{}' \ - sed -i.bck \ - -e "s|^\(@import\s\+url\s*(\s*\"\)resource://${GR_BASEROOT}\(.*\)|\1file:///${GR_FILES}/\2|" \ - '{}' +GR_BASEDIR="${THEME_DIR}/gtk-3.0" +GR_FILE="${THEME_FILE:-${GR_BASEDIR}/gtk.gresource}" +GR_BASEROOT="${THEME_BASEROOT}" +GR_FILES="${GR_BASEDIR}/files" -popd >/dev/null +if test $(id -u) -ne 0; then + echo "need to rerun this script as root" + su -c "$0 $@" || exit $? + # run customization if defined + type -t theme_customize | grep -q function \ + && theme_customize "${GR_FILES}" +else + mkdir "${GR_FILES}" || exit # sort of self-defense + pushd "${GR_FILES}" >/dev/null || exit + for RSRC in $(gresource list $GR_FILE); do + RSRC_FILE="$(echo "${RSRC#$GR_BASEROOT}")" + mkdir -p "$(dirname "$RSRC_FILE")" ||: + gresource extract "$GR_FILE" "$RSRC" > "$RSRC_FILE" + done + popd >/dev/null + # absolutize imports + find "${GR_BASEDIR}" -name '*.css' -print0 | xargs -0 -I '{}' \ + sed -i.bck \ + -e "s|^\(@import\s\+url\s*(\s*\"\)\(resource://${GR_BASEROOT}\)\?\(.*\)|\1file:///${GR_FILES}/\3|" \ + '{}' + exit $? +fi diff --git a/scripts/gtk3/theme-adwaita b/scripts/gtk3/theme-adwaita new file mode 100644 index 0000000..30f2fee --- /dev/null +++ b/scripts/gtk3/theme-adwaita @@ -0,0 +1,45 @@ +# vim: ft=sh +THEME_DIR="/usr/share/themes/Adwaita" +THEME_BASEROOT="/org/gnome/adwaita/" + +# tested with +# adwaita-gtk3-theme-3.10.0-1.fc20.x86_6 + gtk3-3.10.6-1.fc20.x86_64 +# +# TODO: +# menus eligibility still suboptimal +# pcmanfm: text under file/dir icons also not eligible as well + +theme_customize() { + local gr_files=$1 + + local src=${gr_files}/gtk-main-dark.css + local dst=~/.config/gtk-3.0/gtk.css + local fg_color='#cccccc' + # local tooltip_fg_color='#eeeeec' # does not seem to have any effect + local tooltip_bg_color='@menu_bg_color' # change this instead + + # first backup existing per-user gtk.css + mv -f --backup=t ${dst}{,.backup} 2>/dev/null || : + cat \ + <(sed "${src}" \ + -e "s|\(\s*@define-color\s\+theme_fg_color\s\+\).*;|\1${fg_color};|") \ + <(echo "@define-color theme_tooltip_fg_color ${tooltip_bg_color};") \ + > "${dst}" +} + +## when settings.ini was still fully-fledged tool (before 3.8)... +#theme_customize() { +# local gr_files=$1 +# +# local src=${THEME_DIR}/gtk-3.0/settings.ini +# local dst=~/.config/gtk-3.0/settings.ini +# local fg_color='#cccccc' +# local tooltip_fg_color='#eeeeec' +# +# # first backup existing per-user gtk.css +# mv -f --backup=t "${dst}{,.backup}" 2>/dev/null || : +# sed "${src}" \ +# -e "s|^\(\s*gtk-color-scheme\s\+=.*\\\\nfg_color:\)[^;\\]\+\([;\\].*\)$|\1${fg_color}\2|" \ +# -e "s|^\(\s*gtk-color-scheme\s\+=.*\\\\ntooltip_fg_color:\)[^;\\]\+\([;\\].*\)$|\1${tooltip_fg_color}\2|" \ +# > "${dst}" +#} -- cgit