diff options
author | okan | 2012-07-03 13:49:03 +0000 |
---|---|---|
committer | okan | 2012-07-03 13:49:03 +0000 |
commit | ddc2baea991a9aee4b138ed29436fe423d1c4d3e (patch) | |
tree | 490e677d510550663ec475c0c1ce96a49c78538a /group.c | |
parent | d9b285478d95868143d2231edca6375c0137aba5 (diff) | |
download | cwm-ddc2baea991a9aee4b138ed29436fe423d1c4d3e.tar.gz |
re-implement atom handing; makes for a normalized and more consistent
separation between cwm and ewmh. seen by a few.
Diffstat (limited to 'group.c')
-rw-r--r-- | group.c | 57 |
1 files changed, 18 insertions, 39 deletions
@@ -16,7 +16,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: group.c,v 1.57 2012/05/16 21:57:21 okan Exp $ + * $OpenBSD: group.c,v 1.58 2012/07/03 13:49:03 okan Exp $ */ #include <sys/param.h> @@ -48,38 +48,31 @@ const char *shortcut_to_name[] = { static void group_add(struct group_ctx *gc, struct client_ctx *cc) { - long no; if (cc == NULL || gc == NULL) errx(1, "group_add: a ctx is NULL"); - no = gc->shortcut - 1; - if (cc->group == gc) return; if (cc->group != NULL) TAILQ_REMOVE(&cc->group->clients, cc, group_entry); - XChangeProperty(X_Dpy, cc->win, _NET_WM_DESKTOP, XA_CARDINAL, - 32, PropModeReplace, (unsigned char *)&no, 1); - TAILQ_INSERT_TAIL(&gc->clients, cc, group_entry); cc->group = gc; + + xu_ewmh_net_wm_desktop(cc); } static void group_remove(struct client_ctx *cc) { - long no = 0xffffffff; - if (cc == NULL || cc->group == NULL) errx(1, "group_remove: a ctx is NULL"); - XChangeProperty(X_Dpy, cc->win, _NET_WM_DESKTOP, XA_CARDINAL, - 32, PropModeReplace, (unsigned char *)&no, 1); - TAILQ_REMOVE(&cc->group->clients, cc, group_entry); cc->group = NULL; + + xu_ewmh_net_wm_desktop(cc); } static void @@ -146,8 +139,6 @@ void group_init(struct screen_ctx *sc) { int i; - long viewports[2] = {0, 0}; - long ndesks = CALMWM_NGROUPS, zero = 0; TAILQ_INIT(&sc->groupq); sc->group_hideall = 0; @@ -164,23 +155,11 @@ group_init(struct screen_ctx *sc) TAILQ_INSERT_TAIL(&sc->groupq, &sc->groups[i], entry); } - /* we don't support large desktops, so this is always (0, 0) */ - XChangeProperty(X_Dpy, sc->rootwin, _NET_DESKTOP_VIEWPORT, - XA_CARDINAL, 32, PropModeReplace, (unsigned char *)viewports, 2); - XChangeProperty(X_Dpy, sc->rootwin, _NET_NUMBER_OF_DESKTOPS, - XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&ndesks, 1); - /* - * we don't use virtual roots, so make sure it's not there from a - * previous wm. - */ - XDeleteProperty(X_Dpy, sc->rootwin, _NET_VIRTUAL_ROOTS); - /* - * We don't really have a ``showing desktop'' mode, so this is zero - * always. XXX Note that when we hide all groups, or when all groups - * are hidden we could technically set this later on. - */ - XChangeProperty(X_Dpy, sc->rootwin, _NET_SHOWING_DESKTOP, - XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&zero, 1); + xu_ewmh_net_wm_desktop_viewport(sc); + xu_ewmh_net_wm_number_of_desktops(sc); + xu_ewmh_net_showing_desktop(sc); + xu_ewmh_net_virtual_roots(sc); + group_setactive(sc, 0); } @@ -209,8 +188,8 @@ static void group_setactive(struct screen_ctx *sc, long idx) { sc->group_active = &sc->groups[idx]; - XChangeProperty(X_Dpy, sc->rootwin, _NET_CURRENT_DESKTOP, - XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&idx, 1); + + xu_ewmh_net_current_desktop(sc, idx); } void @@ -439,8 +418,8 @@ group_autogroup(struct client_ctx *cc) if (cc->app_class == NULL || cc->app_name == NULL) return; - if (xu_getprop(cc->win, _NET_WM_DESKTOP, XA_CARDINAL, - 1, (unsigned char **)&grpno) > 0) { + if (xu_getprop(cc->win, ewmh[_NET_WM_DESKTOP].atom, + XA_CARDINAL, 1, (unsigned char **)&grpno) > 0) { if (*grpno == 0xffffffff) no = 0; else if (*grpno > CALMWM_NGROUPS || *grpno < 0) @@ -483,8 +462,9 @@ group_update_names(struct screen_ctx *sc) int format_ret, i = 0, nstrings = 0, n, setnames = 0; unsigned long bytes_after, num_ret; - if (XGetWindowProperty(X_Dpy, sc->rootwin, _NET_DESKTOP_NAMES, 0, - 0xffffff, False, UTF8_STRING, &type_ret, &format_ret, + if (XGetWindowProperty(X_Dpy, sc->rootwin, + ewmh[_NET_DESKTOP_NAMES].atom, 0, 0xffffff, False, + cwmh[UTF8_STRING].atom, &type_ret, &format_ret, &num_ret, &bytes_after, &prop_ret) == Success && prop_ret != NULL && format_ret == 8) { /* failure, just set defaults */ @@ -545,6 +525,5 @@ group_set_names(struct screen_ctx *sc) q += slen; } - XChangeProperty(X_Dpy, sc->rootwin, _NET_DESKTOP_NAMES, - UTF8_STRING, 8, PropModeReplace, p, len); + xu_ewmh_net_desktop_names(sc, p, len); } |