]> Dogcows Code - chaz/openbox/blobdiff - openbox/event.c
Clients Menus and Slits are all 'ObWindow's now.
[chaz/openbox] / openbox / event.c
index c30d52e5863bd5eaecdca0caaae1e1d7d833a83d..766be8fd9a5c58370fbd13f2e618aa677e06a423 100644 (file)
@@ -1,4 +1,5 @@
 #include "openbox.h"
+#include "slit.h"
 #include "client.h"
 #include "xerror.h"
 #include "prop.h"
@@ -23,6 +24,8 @@
 
 static void event_process(XEvent *e);
 static void event_handle_root(XEvent *e);
+static void event_handle_slit(Slit *s, XEvent *e);
+static void event_handle_slitapp(SlitApp *app, XEvent *e);
 static void event_handle_client(Client *c, XEvent *e);
 static void event_handle_menu(Menu *menu, XEvent *e);
 
@@ -313,7 +316,8 @@ static gboolean event_ignore(XEvent *e, Client *client)
 #endif
                     /* is the focused window getting a FocusOut/In back to
                        itself? */
-                    if (fe.xfocus.window == e->xfocus.window) {
+                    if (fe.xfocus.window == e->xfocus.window &&
+                        !event_ignore(&fe, client)) {
 #ifdef DEBUG_FOCUS
                         g_message("focused window got an Out/In back to "
                                   "itself IGNORED both");
@@ -372,12 +376,16 @@ static gboolean event_ignore(XEvent *e, Client *client)
 static void event_process(XEvent *e)
 {
     Window window;
-    Client *client;
+    Client *client = NULL;
+    Slit *slit = NULL;
+    SlitApp *slitapp = NULL;
     Menu *menu = NULL;
 
     window = event_get_window(e);
     if (!(client = g_hash_table_lookup(client_map, &window)))
-        menu = g_hash_table_lookup(menu_map, &window);
+        if (!(slitapp = g_hash_table_lookup(slit_app_map, &window)))
+            if (!(slit = g_hash_table_lookup(slit_map, &window)))
+                menu = g_hash_table_lookup(menu_map, &window);
 
     event_set_lasttime(e);
     event_hack_mods(e);
@@ -390,6 +398,10 @@ static void event_process(XEvent *e)
         return;
     } else if (client)
        event_handle_client(client, e);
+    else if (slitapp)
+       event_handle_slitapp(slitapp, e);
+    else if (slit)
+       event_handle_slit(slit, e);
     else if (window == ob_root)
        event_handle_root(e);
     else if (e->type == MapRequest)
@@ -900,3 +912,42 @@ static void event_handle_menu(Menu *menu, XEvent *e)
        }
     }
 }
+
+static void event_handle_slit(Slit *s, XEvent *e)
+{
+    switch (e->type) {
+    case ButtonPress:
+        stacking_raise(SLIT_AS_WINDOW(s));
+    case EnterNotify:
+        slit_hide(s, FALSE);
+        break;
+    case LeaveNotify:
+        slit_hide(s, TRUE);
+        break;
+    }
+}
+
+static void event_handle_slitapp(SlitApp *app, XEvent *e)
+{
+    switch (e->type) {
+    case MotionNotify:
+        slit_app_drag(app, &e->xmotion);
+        break;
+    case UnmapNotify:
+       if (app->ignore_unmaps) {
+           app->ignore_unmaps--;
+           break;
+       }
+       slit_remove(app, TRUE);
+       break;
+    case DestroyNotify:
+       slit_remove(app, FALSE);
+       break;
+    case ReparentNotify:
+       slit_remove(app, FALSE);
+       break;
+    case ConfigureNotify:
+        slit_app_configure(app, e->xconfigure.width, e->xconfigure.height);
+        break;
+    }
+}
This page took 0.022339 seconds and 4 git commands to generate.