summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--calmwm.h2
-rw-r--r--menu.c32
-rw-r--r--mousefunc.c32
3 files changed, 40 insertions, 26 deletions
diff --git a/calmwm.h b/calmwm.h
index 97fa0ed..bbfebea 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -511,6 +511,8 @@ void			 mousefunc_client_move(struct client_ctx *,
 void			 mousefunc_client_resize(struct client_ctx *,
     			    union arg *);
 
+void			 menu_windraw(struct screen_ctx *, Window,
+			     const char *, ...);
 struct menu  		*menu_filter(struct screen_ctx *, struct menu_q *,
 			     const char *, const char *, int,
 			     void (*)(struct menu_q *, struct menu_q *, char *),
diff --git a/menu.c b/menu.c
index a84f578..80197b9 100644
--- a/menu.c
+++ b/menu.c
@@ -638,3 +638,35 @@ menuq_clear(struct menu_q *mq)
 		free(mi);
 	}
 }
+
+void
+menu_windraw(struct screen_ctx *sc, Window win, const char *fmt, ...)
+{
+	va_list			 ap;
+	int			 i;
+	char			*text;
+	XGlyphInfo		 extents;
+
+	va_start(ap, fmt);
+	i = vasprintf(&text, fmt, ap);
+	va_end(ap);
+
+	if (i < 0 || text == NULL)
+		err(1, "vasprintf");
+
+	XftTextExtentsUtf8(X_Dpy, sc->xftfont, (const FcChar8*)text,
+	    strlen(text), &extents);
+
+	XReparentWindow(X_Dpy, sc->menu.win, win, 0, 0);
+	XMoveResizeWindow(X_Dpy, sc->menu.win, 0, 0,
+	    extents.xOff, sc->xftfont->height);
+	XMapWindow(X_Dpy, sc->menu.win);
+	XClearWindow(X_Dpy, sc->menu.win);
+
+	XftDrawStringUtf8(sc->menu.xftdraw, &sc->xftcolor[CWM_COLOR_MENU_FONT],
+	    sc->xftfont, 0, sc->xftfont->ascent + 1,
+	    (const FcChar8*)text, strlen(text));
+
+	free(text);
+}
+
diff --git a/mousefunc.c b/mousefunc.c
index 9d47531..f7d5768 100644
--- a/mousefunc.c
+++ b/mousefunc.c
@@ -32,31 +32,6 @@
 
 #include "calmwm.h"
 
-static void	mousefunc_sweep_draw(struct client_ctx *);
-
-static void
-mousefunc_sweep_draw(struct client_ctx *cc)
-{
-	struct screen_ctx	*sc = cc->sc;
-	char			 s[14]; /* fits " nnnn x nnnn \0" */
-	XGlyphInfo		 extents;
-
-	(void)snprintf(s, sizeof(s), " %4d x %-4d ", cc->dim.w, cc->dim.h);
-
-	XftTextExtentsUtf8(X_Dpy, sc->xftfont, (const FcChar8*)s,
-	    strlen(s), &extents);
-
-	XReparentWindow(X_Dpy, sc->menu.win, cc->win, 0, 0);
-	XMoveResizeWindow(X_Dpy, sc->menu.win, 0, 0,
-	    extents.xOff, sc->xftfont->height);
-	XMapWindow(X_Dpy, sc->menu.win);
-	XClearWindow(X_Dpy, sc->menu.win);
-
-	XftDrawStringUtf8(sc->menu.xftdraw, &sc->xftcolor[CWM_COLOR_MENU_FONT],
-	    sc->xftfont, 0, sc->xftfont->ascent + 1,
-	    (const FcChar8*)s, strlen(s));
-}
-
 void
 mousefunc_client_resize(struct client_ctx *cc, union arg *arg)
 {
@@ -89,7 +64,8 @@ mousefunc_client_resize(struct client_ctx *cc, union arg *arg)
 			cc->geom.h = ev.xmotion.y;
 			client_applysizehints(cc);
 			client_resize(cc, 1);
-			mousefunc_sweep_draw(cc);
+			menu_windraw(sc, cc->win,
+			    "%4d x %-4d", cc->dim.w, cc->dim.h);
 			break;
 		case ButtonRelease:
 			client_resize(cc, 1);
@@ -151,9 +127,13 @@ mousefunc_client_move(struct client_ctx *cc, union arg *arg)
 			    cc->geom.y + cc->geom.h + (cc->bwidth * 2),
 			    area.y, area.y + area.h, sc->snapdist);
 			client_move(cc);
+			menu_windraw(sc, cc->win,
+			    "%4d, %-4d", cc->geom.x, cc->geom.y);
 			break;
 		case ButtonRelease:
 			client_move(cc);
+			XUnmapWindow(X_Dpy, sc->menu.win);
+			XReparentWindow(X_Dpy, sc->menu.win, sc->rootwin, 0, 0);
 			xu_ptr_ungrab();
 			return;
 		}