]> Dogcows Code - chaz/openbox/blobdiff - openbox/event.c
move the focus_order lists into the kernel
[chaz/openbox] / openbox / event.c
index 00b2857cc43ff83fa26057f3f0b49a2081a7f96b..43142e3a47ffefe81a0341d437c9a8d972b6e4d7 100644 (file)
@@ -7,11 +7,10 @@
 #include "engine.h"
 #include "focus.h"
 #include "stacking.h"
-#include "keyboard.h"
-#include "pointer.h"
-#include "hooks.h"
 #include "extensions.h"
 #include "timer.h"
+#include "engine.h"
+#include "dispatch.h"
 
 #include <X11/Xlib.h>
 #include <X11/keysym.h>
@@ -249,13 +248,12 @@ void event_process(XEvent *e)
     case EnterNotify:
     case LeaveNotify:
        event_lasttime = e->xcrossing.time;
-       if (e->xcrossing.mode != NotifyNormal)
-           return; /* skip me! */
        break;
     }
 
     client = g_hash_table_lookup(client_map, (gpointer)window);
 
+    /* deal with it in the kernel */
     if (client) {
        event_handle_client(client, e);
     } else if (window == ob_root)
@@ -283,33 +281,8 @@ void event_process(XEvent *e)
        xerror_set_ignore(FALSE);
     }
 
-    /* dispatch Crossing, Pointer and Key events to the hooks */
-    switch(e->type) {
-    case EnterNotify:
-       HOOKFIRECLIENT(pointerenter, client);
-       break;
-    case LeaveNotify:
-       HOOKFIRECLIENT(pointerleave, client);
-       break;
-    case ButtonPress:
-    case ButtonRelease:
-    case MotionNotify:
-       pointer_event(e, client);
-       break;
-    case KeyPress:     
-    case KeyRelease:
-       keyboard_event(&e->xkey);
-       break;
-    default:
-       /* XKB events */
-       if (e->type == extensions_xkb_event_basep) {
-           switch (((XkbAnyEvent*)&e)->xkb_type) {
-           case XkbBellNotify:
-               HOOKFIRECLIENT(bell, client);
-               break;
-           }
-       }
-    }
+    /* dispatch the event to registered handlers */
+    dispatch_x(e, client);
 }
 
 static void event_handle_root(XEvent *e)
@@ -359,7 +332,8 @@ static void event_handle_client(Client *client, XEvent *e)
        /* focus state can affect the stacking layer */
        client_calc_layer(client);
 
-       focus_set_client(client);
+        if (focus_client != client)
+            focus_set_client(client);
        break;
     case FocusOut:
        client->focused = FALSE;
@@ -483,7 +457,7 @@ static void event_handle_client(Client *client, XEvent *e)
        /* we shouldn't be able to get this unless we're iconic */
        g_assert(client->iconic);
 
-       HOOKFIRECLIENT(requestactivate, client);
+       /*HOOKFIRECLIENT(requestactivate, client);XXX*/
        break;
     case ClientMessage:
        /* validate cuz we query stuff off the client here */
@@ -543,7 +517,7 @@ static void event_handle_client(Client *client, XEvent *e)
                /* if its not visible for other reasons, then don't mess
                   with it */
                return;
-           HOOKFIRECLIENT(requestactivate, client);
+           /*HOOKFIRECLIENT(requestactivate, client);XXX*/
        }
        break;
     case PropertyNotify:
This page took 0.021714 seconds and 4 git commands to generate.