]> code.delx.au - dotfiles/blobdiff - xmonad-xfce4-session.sh
tern-config
[dotfiles] / xmonad-xfce4-session.sh
index c450dff1814308dbd8101240d8437b6810ef3826..b0d273485eb12892a495f628ba49616747b7bea7 100755 (executable)
@@ -1,15 +1,46 @@
 #!/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