X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Fevent.c;h=69b63ff1334887c766dac083e0eab748d7824bd4;hb=9be1d64d366ba57c1fc986d3d2aee90654a268a8;hp=88db5e9e5e4fa417f11313efdf985823e3b57356;hpb=3b14b587ef8131cbeb2afb2c11240f50c5f5d02b;p=chaz%2Fopenbox diff --git a/openbox/event.c b/openbox/event.c index 88db5e9e..69b63ff1 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -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 */ @@ -223,7 +224,6 @@ void event_process(XEvent *e) !(e->xfocus.detail == NotifyNonlinearVirtual || e->xfocus.detail == NotifyNonlinear)) return; - g_message("FOCUS IN %lx", window); break; case FocusOut: if (e->xfocus.mode == NotifyGrab || @@ -236,13 +236,10 @@ void event_process(XEvent *e) { XEvent fi; if (XCheckTypedEvent(ob_display, FocusIn, &fi)) { - g_message("FOCUS OUT %lx IN %lx", e->xfocus.window, fi.xfocus.window); event_process(&fi); if (fi.xfocus.window == e->xfocus.window) return; - } else { - g_message("FOCUS OUT %lx IN 0x0", e->xfocus.window); } } break; @@ -256,7 +253,7 @@ void event_process(XEvent *e) 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) @@ -278,8 +275,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); @@ -326,6 +321,7 @@ static void event_handle_client(Client *client, XEvent *e) { XEvent ce; Atom msgtype; + int i=0; switch (e->type) { case FocusIn: @@ -333,10 +329,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 |= @@ -355,6 +351,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; @@ -441,6 +438,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); @@ -486,7 +485,9 @@ static void event_handle_client(Client *client, XEvent *e) } e->xclient = ce.xclient; } - client_set_desktop(client, e->xclient.data.l[0]); + if (e->xclient.data.l[0] >= 0 && + e->xclient.data.l[0] < screen_num_desktops) + client_set_desktop(client, 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", @@ -564,5 +565,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 } }