--- old-xmonad/Operations.hs	2007-06-27 22:50:18.000000000 +0600
+++ new-xmonad/Operations.hs	2007-06-27 22:50:18.000000000 +0600
@@ -38,6 +38,8 @@
 
 import qualified Data.Traversable as T
 
+import Text.Regex.Posix
+
 -- ---------------------------------------------------------------------
 -- |
 -- Window manager operations
@@ -56,9 +58,12 @@
     -- lose the default sizing.
 
     sh <- io $ getWMNormalHints d w
+    -- float windows with specific class name
+    cs <- io $ getClassHint d w
+    let isFloatByClass = resClass cs =~ "panel|Gajim"  :: Bool
     let isFixedSize = sh_min_size sh /= Nothing && sh_min_size sh == sh_max_size sh
     isTransient <- isJust `liftM` io (getTransientForHint d w)
-    if isFixedSize || isTransient
+    if isFixedSize || isTransient || isFloatByClass
         then do modify $ \s -> s { windowset = W.insertUp w (windowset s) }
                 float w -- \^^ now go the refresh.
         else windows $ W.insertUp w

--- old-xmonad/xmonad.cabal	2007-06-27 22:50:18.000000000 +0600
+++ new-xmonad/xmonad.cabal	2007-06-27 22:50:18.000000000 +0600
@@ -18,7 +18,7 @@
 license-file:       LICENSE
 author:             Spencer Janssen
 maintainer:         sjanssen@cse.unl.edu
-build-depends:      base>=2.0, X11>=1.2.1, X11-extras>=0.2, mtl>=1.0, unix>=1.0
+build-depends:      base>=2.0, X11>=1.2.1, X11-extras>=0.2, mtl>=1.0, unix>=1.0, regex-posix>=0.71
 extra-source-files: README TODO tests/loc.hs tests/Properties.hs man/xmonad.1.in
                     Config.hs-boot util/GenerateManpage.hs man/xmonad.1 man/xmonad.html
 

