diff options
author | Okan Demirmen <okan@cvs.openbsd.org> | 2013-12-11 14:16:11 +0000 |
---|---|---|
committer | Okan Demirmen <okan@cvs.openbsd.org> | 2013-12-11 14:16:11 +0000 |
commit | f70fabe83f1450fd09ad8c5dceb5eac0a203b356 (patch) | |
tree | cde84db0f5c86e7c882834dfd0cdf0d9ce6e2476 /app | |
parent | 4007bef1ba4723115ba2377a5018ad1113d137c3 (diff) |
Remove extra work and simplify client state handling.
Diffstat (limited to 'app')
-rw-r--r-- | app/cwm/calmwm.h | 7 | ||||
-rw-r--r-- | app/cwm/client.c | 49 | ||||
-rw-r--r-- | app/cwm/xevents.c | 5 | ||||
-rw-r--r-- | app/cwm/xutil.c | 29 |
4 files changed, 41 insertions, 49 deletions
diff --git a/app/cwm/calmwm.h b/app/cwm/calmwm.h index 5eca289c5..10d47ccd2 100644 --- a/app/cwm/calmwm.h +++ b/app/cwm/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.231 2013/12/11 14:09:21 okan Exp $ + * $OpenBSD: calmwm.h,v 1.232 2013/12/11 14:16:09 okan Exp $ */ #ifndef _CALMWM_H_ @@ -167,7 +167,6 @@ struct client_ctx { #define CLIENT_MAXFLAGS (CLIENT_VMAXIMIZED | CLIENT_HMAXIMIZED) #define CLIENT_MAXIMIZED (CLIENT_VMAXIMIZED | CLIENT_HMAXIMIZED) int flags; - int state; int active; int stackingorder; struct winname_q nameq; @@ -374,6 +373,7 @@ void client_delete(struct client_ctx *); void client_draw_border(struct client_ctx *); struct client_ctx *client_find(Window); void client_freeze(struct client_ctx *); +long client_get_wm_state(struct client_ctx *); void client_getsizehints(struct client_ctx *); void client_hide(struct client_ctx *); void client_hmaximize(struct client_ctx *); @@ -389,6 +389,7 @@ void client_ptrwarp(struct client_ctx *); void client_raise(struct client_ctx *); void client_resize(struct client_ctx *, int); void client_send_delete(struct client_ctx *); +void client_set_wm_state(struct client_ctx *, long); void client_setactive(struct client_ctx *); void client_setname(struct client_ctx *); int client_snapcalc(int, int, int, int, int); @@ -509,7 +510,6 @@ void xev_loop(void); void xu_btn_grab(Window, int, u_int); void xu_btn_ungrab(Window); int xu_getprop(Window, Atom, Atom, long, unsigned char **); -int xu_get_wm_state(Window, int *); int xu_getstrprop(Window, Atom, char **); void xu_key_grab(Window, u_int, KeySym); void xu_key_ungrab(Window); @@ -518,7 +518,6 @@ int xu_ptr_grab(Window, u_int, Cursor); int xu_ptr_regrab(u_int, Cursor); void xu_ptr_setpos(Window, int, int); void xu_ptr_ungrab(void); -void xu_set_wm_state(Window win, int); void xu_xft_draw(struct screen_ctx *, const char *, int, int, int); int xu_xft_width(XftFont *, const char *, int); diff --git a/app/cwm/client.c b/app/cwm/client.c index 00be83fb2..43ac689d0 100644 --- a/app/cwm/client.c +++ b/app/cwm/client.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: client.c,v 1.154 2013/12/11 14:09:21 okan Exp $ + * $OpenBSD: client.c,v 1.155 2013/12/11 14:16:09 okan Exp $ */ #include <sys/param.h> @@ -68,7 +68,6 @@ client_init(Window win, struct screen_ctx *sc, int mapped) XGrabServer(X_Dpy); - cc->state = mapped ? NormalState : IconicState; cc->sc = sc; cc->win = win; @@ -103,16 +102,11 @@ client_init(Window win, struct screen_ctx *sc, int mapped) if (wattr.map_state != IsViewable) { client_placecalc(cc); client_move(cc); - if ((cc->wmh) && (cc->wmh->flags & StateHint)) { - cc->state = cc->wmh->initial_state; - xu_set_wm_state(cc->win, cc->state); - } + if ((cc->wmh) && (cc->wmh->flags & StateHint)) + client_set_wm_state(cc, cc->wmh->initial_state); } client_draw_border(cc); - if (xu_get_wm_state(cc->win, &state) < 0) - state = NormalState; - XSelectInput(X_Dpy, cc->win, ColormapChangeMask | EnterWindowMask | PropertyChangeMask | KeyReleaseMask); @@ -123,6 +117,9 @@ client_init(Window win, struct screen_ctx *sc, int mapped) /* Notify client of its configuration. */ client_config(cc); + if ((state = client_get_wm_state(cc)) < 0) + state = NormalState; + (state == IconicState) ? client_hide(cc) : client_unhide(cc); TAILQ_INSERT_TAIL(&sc->mruq, cc, mru_entry); @@ -425,7 +422,10 @@ client_ptrwarp(struct client_ctx *cc) y = cc->geom.h / 2; } - (cc->state == IconicState) ? client_unhide(cc) : client_raise(cc); + if (cc->flags & CLIENT_HIDDEN) + client_unhide(cc); + else + client_raise(cc); xu_ptr_setpos(cc->win, x, y); } @@ -451,8 +451,7 @@ client_hide(struct client_ctx *cc) cc->active = 0; cc->flags |= CLIENT_HIDDEN; - cc->state = IconicState; - xu_set_wm_state(cc->win, cc->state); + client_set_wm_state(cc, IconicState); if (cc == client_current()) client_none(cc->sc); @@ -464,8 +463,7 @@ client_unhide(struct client_ctx *cc) XMapRaised(X_Dpy, cc->win); cc->flags &= ~CLIENT_HIDDEN; - cc->state = NormalState; - xu_set_wm_state(cc->win, cc->state); + client_set_wm_state(cc, NormalState); client_draw_border(cc); } @@ -982,3 +980,26 @@ client_vtile(struct client_ctx *cc) i++; } } + +long +client_get_wm_state(struct client_ctx *cc) +{ + long *p, state = -1; + + if (xu_getprop(cc->win, cwmh[WM_STATE], cwmh[WM_STATE], 2L, + (unsigned char **)&p) > 0) { + state = *p; + XFree(p); + } + return(state); +} + +void +client_set_wm_state(struct client_ctx *cc, long state) +{ + long data[] = { state, None }; + + XChangeProperty(X_Dpy, cc->win, cwmh[WM_STATE], cwmh[WM_STATE], 32, + PropModeReplace, (unsigned char *)data, 2); +} + diff --git a/app/cwm/xevents.c b/app/cwm/xevents.c index 98de3f66b..3fcde3671 100644 --- a/app/cwm/xevents.c +++ b/app/cwm/xevents.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: xevents.c,v 1.95 2013/12/02 14:30:12 okan Exp $ + * $OpenBSD: xevents.c,v 1.96 2013/12/11 14:16:09 okan Exp $ */ /* @@ -99,8 +99,7 @@ xev_handle_unmapnotify(XEvent *ee) if ((cc = client_find(e->window)) != NULL) { if (e->send_event) { - cc->state = WithdrawnState; - xu_set_wm_state(cc->win, cc->state); + client_set_wm_state(cc, WithdrawnState); } else { if (!(cc->flags & CLIENT_HIDDEN)) client_delete(cc); diff --git a/app/cwm/xutil.c b/app/cwm/xutil.c index be5ec8fde..439d7aec0 100644 --- a/app/cwm/xutil.c +++ b/app/cwm/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.78 2013/10/20 02:00:02 okan Exp $ + * $OpenBSD: xutil.c,v 1.79 2013/12/11 14:16:10 okan Exp $ */ #include <sys/param.h> @@ -157,33 +157,6 @@ xu_getstrprop(Window win, Atom atm, char **text) { return (nitems); } -int -xu_get_wm_state(Window win, int *state) -{ - long *p = NULL; - - if (xu_getprop(win, cwmh[WM_STATE], cwmh[WM_STATE], 2L, - (unsigned char **)&p) <= 0) - return (-1); - - *state = (int)*p; - XFree((char *)p); - - return (0); -} - -void -xu_set_wm_state(Window win, int state) -{ - long dat[2]; - - dat[0] = state; - dat[1] = None; - - XChangeProperty(X_Dpy, win, cwmh[WM_STATE], cwmh[WM_STATE], 32, - PropModeReplace, (unsigned char *)dat, 2); -} - /* Root Window Properties */ void xu_ewmh_net_supported(struct screen_ctx *sc) |