diff options
-rw-r--r-- | client.c | 5 | ||||
-rw-r--r-- | screen.c | 6 | ||||
-rw-r--r-- | xevents.c | 82 |
3 files changed, 49 insertions, 44 deletions
@@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: client.c,v 1.196 2015/06/28 19:54:37 okan Exp $ + * $OpenBSD: client.c,v 1.197 2015/06/30 14:01:43 okan Exp $ */ #include <sys/types.h> @@ -55,7 +55,8 @@ client_init(Window win, struct screen_ctx *sc) return(NULL); if (sc == NULL) { - sc = screen_find(wattr.root); + if ((sc = screen_find(wattr.root)) == NULL) + return(NULL); mapped = 1; } else { if (wattr.override_redirect || wattr.map_state != IsViewable) @@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: screen.c,v 1.75 2015/06/26 18:54:25 okan Exp $ + * $OpenBSD: screen.c,v 1.76 2015/06/30 14:01:43 okan Exp $ */ #include <sys/types.h> @@ -100,8 +100,8 @@ screen_find(Window win) if (sc->rootwin == win) return(sc); } - /* XXX FAIL HERE */ - return(TAILQ_FIRST(&Screenq)); + warnx("screen_find failure win 0x%lu\n", win); + return(NULL); } void @@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: xevents.c,v 1.116 2015/01/19 14:54:16 okan Exp $ + * $OpenBSD: xevents.c,v 1.117 2015/06/30 14:01:43 okan Exp $ */ /* @@ -240,7 +240,8 @@ xev_handle_buttonpress(XEvent *ee) if (e->window != e->root) return; cc = &fakecc; - cc->sc = screen_find(e->window); + if ((cc->sc = screen_find(e->window)) == NULL) + return; } (*mb->callback)(cc, &mb->argument); @@ -290,7 +291,8 @@ xev_handle_keypress(XEvent *ee) return; } else { cc = &fakecc; - cc->sc = screen_find(e->window); + if ((cc->sc = screen_find(e->window)) == NULL) + return; } (*kb->callback)(cc, &kb->argument); @@ -307,7 +309,8 @@ xev_handle_keyrelease(XEvent *ee) KeySym keysym; unsigned int i; - sc = screen_find(e->root); + if ((sc = screen_find(e->root)) == NULL) + return; keysym = XkbKeycodeToKeysym(X_Dpy, e->keycode, 0, 0); for (i = 0; i < nitems(modkeys); i++) { @@ -325,42 +328,43 @@ xev_handle_clientmessage(XEvent *ee) struct client_ctx *cc, *old_cc; struct screen_ctx *sc; - sc = screen_find(e->window); - - if ((cc = client_find(e->window)) == NULL && e->window != sc->rootwin) - return; - - if (e->message_type == cwmh[WM_CHANGE_STATE] && e->format == 32 && - e->data.l[0] == IconicState) - client_hide(cc); - - if (e->message_type == ewmh[_NET_CLOSE_WINDOW]) - client_send_delete(cc); - - if (e->message_type == ewmh[_NET_ACTIVE_WINDOW] && e->format == 32) { - if ((old_cc = client_current())) - client_ptrsave(old_cc); - client_ptrwarp(cc); - } - - if (e->message_type == ewmh[_NET_WM_DESKTOP] && e->format == 32) { - /* - * The EWMH spec states that if the cardinal returned is - * 0xFFFFFFFF (-1) then the window should appear on all - * desktops, which in our case is assigned to group 0. - */ - if (e->data.l[0] == (unsigned long)-1) - group_movetogroup(cc, 0); - else - group_movetogroup(cc, e->data.l[0]); + if (e->message_type == cwmh[WM_CHANGE_STATE]) { + if ((cc = client_find(e->window)) != NULL) { + if (e->data.l[0] == IconicState) + client_hide(cc); + } + } else if (e->message_type == ewmh[_NET_CLOSE_WINDOW]) { + if ((cc = client_find(e->window)) != NULL) { + client_send_delete(cc); + } + } else if (e->message_type == ewmh[_NET_ACTIVE_WINDOW]) { + if ((cc = client_find(e->window)) != NULL) { + if ((old_cc = client_current())) + client_ptrsave(old_cc); + client_ptrwarp(cc); + } + } else if (e->message_type == ewmh[_NET_WM_DESKTOP]) { + if ((cc = client_find(e->window)) != NULL) { + /* + * The EWMH spec states that if the cardinal returned + * is 0xFFFFFFFF (-1) then the window should appear + * on all desktops, in our case, group 0. + */ + if (e->data.l[0] == (unsigned long)-1) + group_movetogroup(cc, 0); + else + group_movetogroup(cc, e->data.l[0]); + } + } else if (e->message_type == ewmh[_NET_WM_STATE]) { + if ((cc = client_find(e->window)) != NULL) { + xu_ewmh_handle_net_wm_state_msg(cc, + e->data.l[0], e->data.l[1], e->data.l[2]); + } + } else if (e->message_type == ewmh[_NET_CURRENT_DESKTOP]) { + if ((sc = screen_find(e->window)) != NULL) { + group_only(sc, e->data.l[0]); + } } - - if (e->message_type == ewmh[_NET_WM_STATE] && e->format == 32) - xu_ewmh_handle_net_wm_state_msg(cc, - e->data.l[0], e->data.l[1], e->data.l[2]); - - if (e->message_type == ewmh[_NET_CURRENT_DESKTOP] && e->format == 32) - group_only(sc, e->data.l[0]); } static void |