]> Dogcows Code - chaz/openbox/blobdiff - openbox/event.c
add strict ansi compliance
[chaz/openbox] / openbox / event.c
index cb2ed093bce4f7584770d85ce06b9207647200b1..97e1412f00e902ef634b4949f360f44d08db14ca 100644 (file)
@@ -15,6 +15,9 @@
 #include <X11/Xlib.h>
 #include <X11/keysym.h>
 #include <X11/Xatom.h>
+#ifdef HAVE_SYS_SELECT_H
+#  include <sys/select.h>
+#endif
 
 static void event_process(XEvent *e);
 static void event_handle_root(XEvent *e);
@@ -22,12 +25,10 @@ static void event_handle_client(Client *c, XEvent *e);
 
 Time event_lasttime = 0;
 
-/*! A list of all possible combinations of keyboard lock masks */
-static unsigned int mask_list[8];
 /*! The value of the mask for the NumLock modifier */
-static unsigned int NumLockMask;
+unsigned int NumLockMask;
 /*! The value of the mask for the ScrollLock modifier */
-static unsigned int ScrollLockMask;
+unsigned int ScrollLockMask;
 /*! The key codes for the modifier keys */
 static XModifierKeymap *modmap;
 /*! Table of the constant modifier masks */
@@ -63,15 +64,6 @@ void event_startup()
                ScrollLockMask = mask_table[cnt / modmap->max_keypermod];
        }
     }
-
-    mask_list[0] = 0;
-    mask_list[1] = LockMask;
-    mask_list[2] = NumLockMask;
-    mask_list[3] = LockMask | NumLockMask;
-    mask_list[4] = ScrollLockMask;
-    mask_list[5] = ScrollLockMask | LockMask;
-    mask_list[6] = ScrollLockMask | NumLockMask;
-    mask_list[7] = ScrollLockMask | LockMask | NumLockMask;
 }
 
 void event_shutdown()
@@ -248,6 +240,10 @@ void event_process(XEvent *e)
     case EnterNotify:
     case LeaveNotify:
        event_lasttime = e->xcrossing.time;
+        /* XXX this caused problems before... but i don't remember why. hah.
+           so back it is. if problems arise again, then try filtering on the
+           detail instead of the mode. */
+        if (e->xcrossing.mode != NotifyNormal) return;
        break;
     }
 
@@ -326,23 +322,10 @@ static void event_handle_client(Client *client, XEvent *e)
      
     switch (e->type) {
     case FocusIn:
-       client->focused = TRUE;
-       engine_frame_adjust_focus(client->frame);
-
-       /* focus state can affect the stacking layer */
-       client_calc_layer(client);
-
-       focus_set_client(client);
+        client_set_focused(client, TRUE);
        break;
     case FocusOut:
-       client->focused = FALSE;
-       engine_frame_adjust_focus(client->frame);
-
-       /* focus state can affect the stacking layer */
-       client_calc_layer(client);
-
-       if (focus_client == client)
-           focus_set_client(NULL);
+        client_set_focused(client, FALSE);
        break;
     case ConfigureRequest:
        g_message("ConfigureRequest for window %lx", client->window);
@@ -456,7 +439,16 @@ 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);XXX*/
+        if (screen_showing_desktop)
+            screen_show_desktop(FALSE);
+        client_iconify(client, FALSE, TRUE);
+        if (!client->frame->visible)
+            /* if its not visible still, then don't mess with it */
+            break;
+        if (client->shaded)
+            client_shade(client, FALSE);
+        client_focus(client);
+        stacking_raise(client);
        break;
     case ClientMessage:
        /* validate cuz we query stuff off the client here */
@@ -515,8 +507,11 @@ static void event_handle_client(Client *client, XEvent *e)
            else if (!client->frame->visible)
                /* if its not visible for other reasons, then don't mess
                   with it */
-               return;
-           /*HOOKFIRECLIENT(requestactivate, client);XXX*/
+               break;
+            if (client->shaded)
+                client_shade(client, FALSE);
+            client_focus(client);
+            stacking_raise(client);
        }
        break;
     case PropertyNotify:
This page took 0.02339 seconds and 4 git commands to generate.