#!/bin/bash
+function wait_for_xprop_root {
+ local prop="$1"
+
+ echo "Waiting for: ${prop}"
+ for i in $(seq 150); do
+ xprop -root -notype | grep -q "^${prop}\>" && return
+ sleep 0.1
+ done
+
+ echo "Timeout waiting for: ${prop}"
+}
+
+function restart_applet {
+ local applet="$1"
+
+ if ! pgrep "$applet"; then
+ return
+ fi
+
+ while pgrep "$applet"; do
+ pkill "$applet" || true
+ sleep 0.1
+ done
+
+ "$applet" &
+}
+
xmonad &
xfdesktop --disable-wm-check &
-sleep 10
-
-nm-applet & # start late so that font settings are available
-xfdesktop --reload # settings are not loaded on startup for some reason
+# settings are not loaded on startup for some reason
+wait_for_xprop_root "XFCE_DESKTOP_WINDOW"
+xfdesktop --reload
-sleep 2
+# ensure the window manager is painted over xfdesktop
+wait_for_xprop_root "XFDESKTOP_IMAGE_FILE_0"
+xmonad --restart
-xmonad --restart # ensure it's painted over xfdesktop
+# restart some applets to fix font settings
+wait_for_xprop_root "RESOURCE_MANAGER"
+restart_applet blueman-applet
+restart_applet nm-applet
disown