From 73471917efa03c95dfdeb24c7c3b1c7d9a18b8cc Mon Sep 17 00:00:00 2001
From: rokosun <rokosun@noreply.git.trom.tf>
Date: Sun, 18 Sep 2022 22:05:57 +0200
Subject: [PATCH] Use the -m option in xfconf-query to monitor for changes

I also improved the overall code syntax, there's no need for the old functions anymore.
---
 bin/periodic/fix-theming | 68 +++++++++++++++++-----------------------
 1 file changed, 29 insertions(+), 39 deletions(-)

diff --git a/bin/periodic/fix-theming b/bin/periodic/fix-theming
index 7ea4d30..e1c5abe 100755
--- a/bin/periodic/fix-theming
+++ b/bin/periodic/fix-theming
@@ -1,44 +1,34 @@
-#!/bin/sh
-sync_theme() {
-	# Get the current system theme
-	theme=$(xfconf-query -c xsettings -p /Net/ThemeName)
-	# Find the best match for the xfwm4 theme that corresponds with the current system theme
-	xfwm4_theme=$(find /usr/share/themes/ /usr/local/share/themes/ "$HOME"/.themes/ "$HOME"/.local/share/themes/ -mindepth 2 -maxdepth 2 -type d -name xfwm4 -printf '%h\n' 2>/dev/null | grep -o "/${theme}[^/]*$" | sort | head -n1)
-	# If a match is not found then use the Default theme
-	[ -z "$xfwm4_theme" ] && xfwm4_theme='Default'
-	# Apply the xfwm4 theme
-	xfconf-query -c xfwm4 -p /general/theme -n -t string -s "${xfwm4_theme#/}"
-	# Apply the current theme with gsettings
-	gsettings set org.gnome.desktop.interface gtk-theme "$theme"
-}
+#!/bin/bash
+while read -r line; do
 
-sync_icon_theme() {
-	# Get the current icon theme
-	icon_theme=$(xfconf-query -c xsettings -p /Net/IconThemeName)
-	# Apply the same theme in qt5ct and qt6ct configuration
-	sed -i "s/^icon_theme=.*$/icon_theme=$icon_theme/" "$HOME"/.config/qt5ct/qt5ct.conf
-	sed -i "s/^icon_theme=.*$/icon_theme=$icon_theme/" "$HOME"/.config/qt6ct/qt6ct.conf
-}
+	# Check if the system theme has been changed
+	if [ "$line" = 'set: /Net/ThemeName' ]; then
+		# Get the current system theme
+		theme=$(xfconf-query -c xsettings -p /Net/ThemeName)
+		# Find the best match for the xfwm4 theme that corresponds with the current system theme
+		xfwm4_theme=$(find /usr/share/themes/ /usr/local/share/themes/ "$HOME"/.themes/ "$HOME"/.local/share/themes/ -mindepth 2 -maxdepth 2 -type d -name xfwm4 -printf '%h\n' 2>/dev/null | grep -o "/${theme}[^/]*$" | sort | head -n1)
+		# If a match is not found then use the Default theme
+		[ -z "$xfwm4_theme" ] && xfwm4_theme='Default'
+		# Apply the xfwm4 theme
+		xfconf-query -c xfwm4 -p /general/theme -n -t string -s "${xfwm4_theme#/}"
+		# Apply the current theme with gsettings
+		gsettings set org.gnome.desktop.interface gtk-theme "$theme"
 
-while :; do
-	# Get the current system theme
-	theme_new=$(xfconf-query -c xsettings -p /Net/ThemeName)
-	# Get the current icon theme
-	icon_theme_new=$(xfconf-query -c xsettings -p /Net/IconThemeName)
-	# Get the current font name
-	font_new=$(xfconf-query -c xsettings -p /Gtk/FontName)
+	# Check if the icon theme has been changed
+	elif [ "$line" = 'set: /Net/IconThemeName' ]; then
+		# Get the current icon theme
+		icon_theme=$(xfconf-query -c xsettings -p /Net/IconThemeName)
+		# Apply the same theme in qt5ct and qt6ct configuration
+		sed -i "s/^icon_theme=.*$/icon_theme=$icon_theme/" "$HOME"/.config/qt5ct/qt5ct.conf
+		sed -i "s/^icon_theme=.*$/icon_theme=$icon_theme/" "$HOME"/.config/qt6ct/qt6ct.conf
 
-	# Run sync_theme if the new system theme doesn't match the previous one
-	[ "$theme_new" != "$theme_prev" ] && sync_theme
-	# Run sync_icon_theme if the new icon theme doesn't match the previous one
-	[ "$icon_theme_new" != "$icon_theme_prev" ] && sync_icon_theme
-	# If the new font doesn't match the previous one, apply the new font for the title of xfce windows
-	[ "$font_new" != "$font_prev" ] && xfconf-query -c xfwm4 -p /general/title_font -n -t string -s "$font_new"
+	# Check if the system font has been changed
+	elif [ "$line" = 'set: /Gtk/FontName' ]; then
+		# Get the current system font
+		font=$(xfconf-query -c xsettings -p /Gtk/FontName)
+		# Apply the same font for the title of xfce windows
+		xfconf-query -c xfwm4 -p /general/title_font -n -t string -s "$font"
 
-	# The new values become the previous values
-	theme_prev=$theme_new
-	icon_theme_prev=$icon_theme_new
-	font_prev=$font_new
+	fi
 
-	sleep 3
-done
+done < <(xfconf-query -c xsettings -m)
\ No newline at end of file