aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dwm/config.mk2
-rw-r--r--dwm/drw.c29
-rw-r--r--dwm/drw.h2
-rw-r--r--dwm/dwm.c25
4 files changed, 41 insertions, 17 deletions
diff --git a/dwm/config.mk b/dwm/config.mk
index 6560a6d..ea57921 100644
--- a/dwm/config.mk
+++ b/dwm/config.mk
@@ -1,5 +1,5 @@
# dwm version
-VERSION = 6.6
+VERSION = 6.8
# Customize below to fit your system
diff --git a/dwm/drw.c b/dwm/drw.c
index 2814114..a1f7661 100644
--- a/dwm/drw.c
+++ b/dwm/drw.c
@@ -181,8 +181,7 @@ drw_clr_create(Drw *drw, Clr *dest,const char *clrname, unsigned int alpha)
dest->pixel = (dest->pixel & 0x00FFFFFFU) | (alpha << 24);
}
-/* Wrapper to create color schemes. The caller has to call free(3) on the
- * returned color scheme when done using it. */
+/* Create color schemes. */
Clr *
drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], size_t clrcount)
{
@@ -190,7 +189,7 @@ drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], si
Clr *ret;
/* need at least two colors for a scheme */
- if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, sizeof(XftColor))))
+ if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, sizeof(Clr))))
return NULL;
for (i = 0; i < clrcount; i++)
@@ -199,6 +198,30 @@ drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], si
}
void
+drw_clr_free(Drw *drw, Clr *c)
+{
+ if (!drw || !c)
+ return;
+
+ /* c is typedef XftColor Clr */
+ XftColorFree(drw->dpy, DefaultVisual(drw->dpy, drw->screen),
+ DefaultColormap(drw->dpy, drw->screen), c);
+}
+
+void
+drw_scm_free(Drw *drw, Clr *scm, size_t clrcount)
+{
+ size_t i;
+
+ if (!drw || !scm)
+ return;
+
+ for (i = 0; i < clrcount; i++)
+ drw_clr_free(drw, &scm[i]);
+ free(scm);
+}
+
+void
drw_setfontset(Drw *drw, Fnt *set)
{
if (drw)
diff --git a/dwm/drw.h b/dwm/drw.h
index d28678f..c85a751 100644
--- a/dwm/drw.h
+++ b/dwm/drw.h
@@ -43,7 +43,9 @@ void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned in
/* Colorscheme abstraction */
void drw_clr_create(Drw *drw, Clr *dest, const char *clrname, unsigned int alpha);
+void drw_clr_free(Drw *drw, Clr *c);
Clr *drw_scm_create(Drw *drw, const char *clrnames[], const unsigned int alphas[], size_t clrcount);
+void drw_scm_free(Drw *drw, Clr *scm, size_t clrcount);
/* Cursor abstraction */
Cur *drw_cur_create(Drw *drw, int shape);
diff --git a/dwm/dwm.c b/dwm/dwm.c
index a10de14..60274dc 100644
--- a/dwm/dwm.c
+++ b/dwm/dwm.c
@@ -556,7 +556,7 @@ cleanup(void)
for (i = 0; i < CurLast; i++)
drw_cur_free(drw, cursor[i]);
for (i = 0; i < LENGTH(colors); i++)
- free(scheme[i]);
+ drw_scm_free(drw, scheme[i], 3);
free(scheme);
XDestroyWindow(dpy, wmcheckwin);
drw_free(drw);
@@ -949,14 +949,15 @@ focusstack(const Arg *arg)
Atom
getatomprop(Client *c, Atom prop)
{
- int di;
- unsigned long dl;
+ int format;
+ unsigned long nitems, dl;
unsigned char *p = NULL;
Atom da, atom = None;
if (XGetWindowProperty(dpy, c->win, prop, 0L, sizeof atom, False, XA_ATOM,
- &da, &di, &dl, &dl, &p) == Success && p) {
- atom = *(Atom *)p;
+ &da, &format, &nitems, &dl, &p) == Success && p) {
+ if (nitems > 0 && format == 32)
+ atom = *(long *)p;
XFree(p);
}
return atom;
@@ -982,10 +983,10 @@ getstate(Window w)
Atom real;
if (XGetWindowProperty(dpy, w, wmatom[WMState], 0L, 2L, False, wmatom[WMState],
- &real, &format, &n, &extra, (unsigned char **)&p) != Success)
+ &real, &format, &n, &extra, &p) != Success)
return -1;
- if (n != 0)
- result = *p;
+ if (n != 0 && format == 32)
+ result = *(long *)p;
XFree(p);
return result;
}
@@ -1581,12 +1582,10 @@ sendevent(Client *c, Atom proto)
void
setfocus(Client *c)
{
- if (!c->neverfocus) {
+ if (!c->neverfocus)
XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
- XChangeProperty(dpy, root, netatom[NetActiveWindow],
- XA_WINDOW, 32, PropModeReplace,
- (unsigned char *) &(c->win), 1);
- }
+ XChangeProperty(dpy, root, netatom[NetActiveWindow], XA_WINDOW, 32,
+ PropModeReplace, (unsigned char *) &(c->win), 1);
sendevent(c, wmatom[WMTakeFocus]);
}