From c5c6a70000804de221b3f8cd8114f1470c481cbd Mon Sep 17 00:00:00 2001 From: okan Date: Wed, 16 May 2012 01:17:14 +0000 Subject: instead of using the menu window for _NET_SUPPORTING_WM_CHECK, create a dummy one to use instead; allows us to not have to wait for menu_init(), so re-shuffle _NET_SUPPORTED slightly. ok sthen@ --- calmwm.c | 7 ++++--- calmwm.h | 6 ++++-- xutil.c | 38 +++++++++++++++++++++----------------- 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/calmwm.c b/calmwm.c index d12ebe5..30cf99f 100644 --- a/calmwm.c +++ b/calmwm.c @@ -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: calmwm.c,v 1.60 2012/05/13 15:15:54 okan Exp $ + * $OpenBSD: calmwm.c,v 1.61 2012/05/16 01:17:14 okan Exp $ */ #include @@ -163,6 +163,9 @@ x_setupscreen(struct screen_ctx *sc, u_int which) sc->which = which; sc->rootwin = RootWindow(X_Dpy, sc->which); + xu_ewmh_net_supported(sc); + xu_ewmh_net_supported_wm_check(sc); + conf_gap(&Conf, sc); screen_update_geometry(sc, DisplayWidth(X_Dpy, sc->which), DisplayHeight(X_Dpy, sc->which)); @@ -177,8 +180,6 @@ x_setupscreen(struct screen_ctx *sc, u_int which) /* Initialize menu window. */ menu_init(sc); - xu_setwmname(sc); - rootattr.cursor = Cursor_normal; rootattr.event_mask = CHILDMASK|PropertyChangeMask|EnterWindowMask| LeaveWindowMask|ColormapChangeMask|BUTTONMASK; diff --git a/calmwm.h b/calmwm.h index 93146d5..e8f340f 100644 --- a/calmwm.h +++ b/calmwm.h @@ -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: calmwm.h,v 1.145 2012/05/16 01:09:17 okan Exp $ + * $OpenBSD: calmwm.h,v 1.146 2012/05/16 01:17:14 okan Exp $ */ #ifndef _CALMWM_H_ @@ -463,7 +463,9 @@ void xu_ptr_setpos(Window, int, int); void xu_ptr_ungrab(void); void xu_sendmsg(Window, Atom, long); void xu_setstate(struct client_ctx *, int); -void xu_setwmname(struct screen_ctx *); + +void xu_ewmh_net_supported(struct screen_ctx *); +void xu_ewmh_net_supported_wm_check(struct screen_ctx *); void u_exec(char *); void u_spawn(char *); diff --git a/xutil.c b/xutil.c index bcd85fb..e6d97bb 100644 --- a/xutil.c +++ b/xutil.c @@ -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: xutil.c,v 1.39 2012/05/16 01:04:36 okan Exp $ + * $OpenBSD: xutil.c,v 1.40 2012/05/16 01:17:14 okan Exp $ */ #include @@ -260,27 +260,31 @@ xu_getatoms(void) } void -xu_setwmname(struct screen_ctx *sc) +xu_ewmh_net_supported(struct screen_ctx *sc) { - /* - * set up the _NET_SUPPORTED hint with all netwm atoms that we - * know about. - */ XChangeProperty(X_Dpy, sc->rootwin, _NET_SUPPORTED, XA_ATOM, 32, PropModeReplace, (unsigned char *)&_NET_SUPPORTED, CWM_NO_ATOMS - CWM_NETWM_START); - /* - * netwm spec says that to prove that the hint is not stale you must - * provide _NET_SUPPORTING_WM_CHECK containing a window (we use the - * menu window). The property must be set on the root window and the - * window itself, the window also must have _NET_WM_NAME set with the - * window manager name. - */ +} + +/* + * The netwm spec says that to prove that the hint is not stale, one + * must provide _NET_SUPPORTING_WM_CHECK containing a window created by + * the root window. The property must be set on the root window and the + * window itself. This child window also must have _NET_WM_NAME set with + * the window manager name. + */ +void +xu_ewmh_net_supported_wm_check(struct screen_ctx *sc) +{ + Window w; + + w = XCreateSimpleWindow(X_Dpy, sc->rootwin, -1, -1, 1, 1, 0, 0, 0); XChangeProperty(X_Dpy, sc->rootwin, _NET_SUPPORTING_WM_CHECK, - XA_WINDOW, 32, PropModeReplace, (unsigned char *)&sc->menuwin, 1); - XChangeProperty(X_Dpy, sc->menuwin, _NET_SUPPORTING_WM_CHECK, - XA_WINDOW, 32, PropModeReplace, (unsigned char *)&sc->menuwin, 1); - XChangeProperty(X_Dpy, sc->menuwin, _NET_WM_NAME, UTF8_STRING, + XA_WINDOW, 32, PropModeReplace, (unsigned char *)&w, 1); + XChangeProperty(X_Dpy, w, _NET_SUPPORTING_WM_CHECK, + XA_WINDOW, 32, PropModeReplace, (unsigned char *)&w, 1); + XChangeProperty(X_Dpy, w, _NET_WM_NAME, UTF8_STRING, 8, PropModeReplace, WMNAME, strlen(WMNAME)); } -- cgit v1.2.3-2-gb3c3