<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -21,10 +21,13 @@ class x_event_controller(object):
 
     def emit_next_event(self):
         ev = self.dpy.next_event()
+        kw = dict(ev=ev)
+        if hasattr(ev, 'window'):
+            kw['win'] = ev.window
         # the specific event name, like button_press (converted from ButtonPress)
         lowered = capital_letter_re.sub('_\\1', ev.__class__.__name__).lower()
-        self.hub.signal('event_begin', ev=ev, win=ev.window)
-        self.hub.signal(lowered,       ev=ev, win=ev.window)
-        self.hub.signal('event',       ev=ev, win=ev.window)
-        self.hub.signal('event_done',  ev=ev, win=ev.window)
+        self.hub.signal('event_begin', **kw)
+        self.hub.signal(lowered,       **kw)
+        self.hub.signal('event',       **kw)
+        self.hub.signal('event_done',  **kw)
     </diff>
      <filename>whimsy/controllers/x_event_controller.py</filename>
    </modified>
    <modified>
      <diff>@@ -12,19 +12,13 @@ class if_event_type(object):
     def __call__(self, ev, **kw):
         return ev.type in self.evtypes
 
-def if_client(wm, win, ev, **kw):
+def if_client(wm, ev, **kw):
     'true if the window is an application window managed by the window manager'
-    return (
-        hasattr(ev, 'window') and
-        util.window_type(wm, win) == 'client'
-    )
+    return 'win' in kw and util.window_type(wm, kw['win']) == 'client'
 
-def if_root(wm, win, ev, **kw):
+def if_root(wm, ev, **kw):
     'true if the window is the root window (desktop/background)'
-    return (
-        hasattr(ev, 'window') and
-        util.window_type(wm, win) == 'root'
-    )
+    return 'win' in kw and util.window_type(wm, kw['win']) == 'root'
 
 class if_state(object):
     'true if modifier (shift/control/etc) keys currently match mods'
@@ -38,12 +32,12 @@ class if_(object):
     def __init__(self, evtype, wintype=None):
         self.evtype = evtype
         self.wintype = wintype
-    def __call__(self, wm, win, ev, **kw):
-        if ev.type != self.evtype:
+    def __call__(self, wm, ev, **kw):
+        if ev.type != self.evtype or 'win' not in kw:
             return False
         if self.wintype is None:
             return True
-        return util.window_type(wm, win) == self.wintype
+        return util.window_type(wm, kw['win']) == self.wintype
 
 class click_counter(object):
     &quot;&quot;&quot;built like an action but yields a filter which is its main purpose -- to</diff>
      <filename>whimsy/filters/__init__.py</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>5e0ac8fdc0e78638e57cd947c078ad37aa327a3b</id>
    </parent>
  </parents>
  <author>
    <name>Nick Welch</name>
    <email>mack@incise.org</email>
  </author>
  <url>http://github.com/mackstann/whimsy/commit/8f6e3350a49c710fcba72ec0362d7ca7c2a60307</url>
  <id>8f6e3350a49c710fcba72ec0362d7ca7c2a60307</id>
  <committed-date>2008-07-14T10:02:42-07:00</committed-date>
  <authored-date>2008-07-14T10:02:42-07:00</authored-date>
  <message>don't assume events have a .window -- fixes mappingnotify problem reported by jek</message>
  <tree>5458b55586ea0601b850309468a452d4c77e35e6</tree>
  <committer>
    <name>Nick Welch</name>
    <email>mack@incise.org</email>
  </committer>
</commit>
