]> Dogcows Code - chaz/openbox/blobdiff - openbox/event.c
use CurrentTime again?
[chaz/openbox] / openbox / event.c
index 391493f4d183dc2b75ce5ed815914a2f9b9a7c18..fa5f29ffdd3e18cfba2770b52307d850f4525d98 100644 (file)
@@ -135,16 +135,17 @@ void event_process(XEvent *e)
        window = e->xconfigurerequest.window;
        break;
     default:
-       /* XKB events */
-       if (e->type == extensions_xkb_event_basep) {
+#ifdef XKB
+       if (extensions_xkb && e->type == extensions_xkb_event_basep) {
            switch (((XkbAnyEvent*)&e)->xkb_type) {
            case XkbBellNotify:
                window = ((XkbBellNotifyEvent*)&e)->window;
            default:
                window = None;
            }
-       } else
-           window = e->xany.window;
+        } else
+#endif
+            window = e->xany.window;
     }
      
     /* grab the lasttime and hack up the state */
@@ -245,14 +246,13 @@ 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;
+        /* NotifyUngrab occurs when a mouse button is released and the event is
+           caused, like when lowering a window */
+        if (e->xcrossing.mode == NotifyGrab) return;
        break;
     }
 
-    client = g_hash_table_lookup(client_map, (gpointer)window);
+    client = g_hash_table_lookup(client_map, &window);
 
     /* deal with it in the kernel */
     if (client)
@@ -274,8 +274,6 @@ void event_process(XEvent *e)
        xwc.sibling = e->xconfigurerequest.above;
        xwc.stack_mode = e->xconfigurerequest.detail;
        
-       g_message("Proxying configure event for 0x%lx", window);
-       
        /* we are not to be held responsible if someone sends us an
           invalid request! */
        xerror_set_ignore(TRUE);
@@ -299,7 +297,7 @@ static void event_handle_root(XEvent *e)
        msgtype = e->xclient.message_type;
        if (msgtype == prop_atoms.net_current_desktop) {
            unsigned int d = e->xclient.data.l[0];
-           if (d <= screen_num_desktops)
+           if (d < screen_num_desktops)
                screen_set_desktop(d);
        } else if (msgtype == prop_atoms.net_number_of_desktops) {
            unsigned int d = e->xclient.data.l[0];
@@ -322,6 +320,7 @@ static void event_handle_client(Client *client, XEvent *e)
 {
     XEvent ce;
     Atom msgtype;
+        int i=0;
      
     switch (e->type) {
     case FocusIn:
@@ -329,10 +328,10 @@ static void event_handle_client(Client *client, XEvent *e)
         client_set_focused(client, e->type == FocusIn);
        break;
     case ConfigureRequest:
-       g_message("ConfigureRequest for window %lx", client->window);
        /* compress these */
        while (XCheckTypedWindowEvent(ob_display, client->window,
                                      ConfigureRequest, &ce)) {
+            ++i;
            /* XXX if this causes bad things.. we can compress config req's
               with the same mask. */
            e->xconfigurerequest.value_mask |=
@@ -351,6 +350,7 @@ static void event_handle_client(Client *client, XEvent *e)
            if (ce.xconfigurerequest.value_mask & CWStackMode)
                e->xconfigurerequest.detail = ce.xconfigurerequest.detail;
        }
+        if (i) g_message("Compressed %d Configures", i);
 
        /* if we are iconic (or shaded (fvwm does this)) ignore the event */
        if (client->iconic || client->shaded) return;
@@ -412,11 +412,9 @@ static void event_handle_client(Client *client, XEvent *e)
            client->ignore_unmaps--;
            break;
        }
-       g_message("UnmapNotify for %lx", client->window);
        client_unmanage(client);
        break;
     case DestroyNotify:
-       g_message("DestroyNotify for %lx", client->window);
        client_unmanage(client);
        break;
     case ReparentNotify:
@@ -437,6 +435,8 @@ static void event_handle_client(Client *client, XEvent *e)
        client_unmanage(client);
        break;
     case MapRequest:
+        if (!client->iconic) break; /* this normally doesn't happen, but if it
+                                       does, we don't want it! */
         if (screen_showing_desktop)
             screen_show_desktop(FALSE);
         client_iconify(client, FALSE, TRUE);
@@ -482,7 +482,9 @@ static void event_handle_client(Client *client, XEvent *e)
                }
                e->xclient = ce.xclient;
            }
-           client_set_desktop(client, e->xclient.data.l[0]);
+            if ((unsigned)e->xclient.data.l[0] < screen_num_desktops ||
+                (unsigned)e->xclient.data.l[0] == DESKTOP_ALL)
+                client_set_desktop(client, (unsigned)e->xclient.data.l[0]);
        } else if (msgtype == prop_atoms.net_wm_state) {
            /* can't compress these */
            g_message("net_wm_state %s %ld %ld for 0x%lx",
@@ -560,5 +562,13 @@ static void event_handle_client(Client *client, XEvent *e)
            client_update_icons(client);
        else if (msgtype == prop_atoms.kwm_win_icon)
            client_update_kwm_icon(client);
+    default:
+        ;
+#ifdef SHAPE
+        if (extensions_shape && e->type == extensions_shape_event_basep) {
+            client->shaped = ((XShapeEvent*)e)->shaped;
+            engine_frame_adjust_shape(client->frame);
+        }
+#endif
     }
 }
This page took 0.0239 seconds and 4 git commands to generate.