<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -264,47 +264,44 @@ class net_wm_strut_partial(ewmh_prop):
 
 def confine_to_workarea(hub, wm, **kw):
     # this should go somewhere else
-    try:
-        x, y, width, height = props.get_prop(wm.dpy, wm.root, '_NET_WORKAREA')
-    except Exception, e:
-        print &quot;net workarea value invalid?&quot;
-        print e
-        print repr(e)
-        try: print vars(e)
-        except: pass
-        return
-
     clients = [ c for c in wm.clients if not c.out_of_viewport(wm) ]
 
     for c in clients:
         if c.props.get('_NET_WM_STRUT') or c.props.get('_NET_WM_STRUT_PARTIAL'):
             continue
 
-        def fix_axis(begin, size, wm_size, work_begin, work_size):
-            near_movable    = 0 &lt;= c.geom[begin]
-            near_needs_move = 0 &lt;= c.geom[begin] &lt; work_begin
-            far_movable     =                        c.geom[begin]+c.geom[size] &lt;= wm_size
-            far_needs_move  = work_begin+work_size &lt; c.geom[begin]+c.geom[size] &lt;= wm_size
-
-            if near_needs_move:
-                c.geom[begin] = work_begin
-                if far_movable:
-                    c.geom[size] = min(c.geom[size], work_size)
-            elif far_needs_move:
-                c.geom[begin] -= (c.geom[begin]+c.geom[size]) - (work_begin+work_size)
-                if near_movable:
-                    near_overlap = work_begin - c.geom[begin]
-                    if near_overlap &gt; 0:
-                        c.geom[begin] += near_overlap
-                        c.geom[size] -= near_overlap
-
-            return near_needs_move or far_needs_move
-
-        moved =  fix_axis(0, 2, wm.root_geometry.width, x, width)
-        moved |= fix_axis(1, 3, wm.root_geometry.height, y, height)
-
-        if moved:
-            c.moveresize()
+        confine_window_to_workarea(hub, wm, c, **kw)
+
+def confine_window_to_workarea(hub, wm, client, **kw):
+    x, y, width, height = props.get_prop(wm.dpy, wm.root, '_NET_WORKAREA')
+    c = client
+    def fix_axis(begin, size, wm_size, work_begin, work_size):
+        near_movable    = 0 &lt;= c.geom[begin]
+        near_needs_move = 0 &lt;= c.geom[begin] &lt; work_begin
+        far_movable     =                        c.geom[begin]+c.geom[size] &lt;= wm_size
+        far_needs_move  = work_begin+work_size &lt; c.geom[begin]+c.geom[size] &lt;= wm_size
+
+        if near_needs_move:
+            c.geom[begin] = work_begin
+            if far_movable:
+                c.geom[size] = min(c.geom[size], work_size)
+        elif far_needs_move:
+            c.geom[begin] -= (c.geom[begin]+c.geom[size]) - (work_begin+work_size)
+            if near_movable:
+                near_overlap = work_begin - c.geom[begin]
+                if near_overlap &gt; 0:
+                    c.geom[begin] += near_overlap
+                    c.geom[size] -= near_overlap
+
+        return near_needs_move or far_needs_move
+
+    moved =  fix_axis(0, 2, wm.root_geometry.width, x, width)
+    moved |= fix_axis(1, 3, wm.root_geometry.height, y, height)
+
+    if moved:
+        c.moveresize()
+
+
 
 def tile(left_percent, top_percent, width_percent, height_percent):
     def closure(wm, win, **kw):</diff>
      <filename>whimsy/actions/ewmh.py</filename>
    </modified>
    <modified>
      <diff>@@ -84,6 +84,7 @@ chains = [
     ('configure_request', configure_request_handler()), # rename this function
 
     ('client_init_after', client_method('configure', border_width=0)),
+    ('client_init_after', ewmh.confine_window_to_workarea),
     ('client_init_after', client_method('map_normal')),
 
     ('workarea_changed',    ewmh.confine_to_workarea),</diff>
      <filename>whimsy/base_config.py</filename>
    </modified>
    <modified>
      <diff>@@ -8,7 +8,7 @@ class layout(object):
         self.hub = hub
         self.wm = wm
         self.sizehints = {}
-        hub.attach('after_manage_window', self.add_client)
+        hub.attach('client_init_before', self.add_client)
         hub.attach('after_unmanage_window', self.remove_client)
         hub.attach('before_moveresize_client', self.constrain_moveresize)
 </diff>
      <filename>whimsy/models/layout.py</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>54b1c9d1a57a792386d0b933ab9fc31da554e471</id>
    </parent>
  </parents>
  <author>
    <name>Nick Welch</name>
    <email>mack@incise.org</email>
  </author>
  <url>http://github.com/mackstann/whimsy/commit/eaaf344bc8453d02492312b3597a90d0ea8ca469</url>
  <id>eaaf344bc8453d02492312b3597a90d0ea8ca469</id>
  <committed-date>2008-11-25T04:00:48-08:00</committed-date>
  <authored-date>2008-11-25T04:00:48-08:00</authored-date>
  <message>confine windows to workarea before mapping to eliminate flicker</message>
  <tree>adbbaa68c27b847f8a3de2c203483a28f1159356</tree>
  <committer>
    <name>Nick Welch</name>
    <email>mack@incise.org</email>
  </committer>
</commit>
