aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPolesznyák Márk <contact@pml68.dev>2026-02-22 15:01:55 +0100
committerPolesznyák Márk <contact@pml68.dev>2026-02-22 15:01:55 +0100
commitcce69140e3d5bc3626d5cb8a85f98b88fcfd5fb3 (patch)
treee9ac18cb5859806d7188cbf2aa8e8129ad7a2de9
parentchore(dwm): sync with upstream (diff)
downloadsuckless-setup-cce69140e3d5bc3626d5cb8a85f98b88fcfd5fb3.tar.gz
chore(dmenu): sync with upstream
Commits: - cleanup schemes and colors (77f96d7) - drw.c: drw_scm_free: call free inside (8b48986) - add -of and -ob arguments for outline colors options for multi-selection (7175c48)
-rw-r--r--dmenu/dmenu.110
-rw-r--r--dmenu/dmenu.c6
-rw-r--r--dmenu/drw.c29
-rw-r--r--dmenu/drw.h2
4 files changed, 43 insertions, 4 deletions
diff --git a/dmenu/dmenu.1 b/dmenu/dmenu.1
index 2bf9c77..0e22e14 100644
--- a/dmenu/dmenu.1
+++ b/dmenu/dmenu.1
@@ -22,6 +22,10 @@ dmenu \- dynamic menu
.IR color ]
.RB [ \-sf
.IR color ]
+.RB [ \-ob
+.IR color ]
+.RB [ \-of
+.IR color ]
.RB [ \-w
.IR windowid ]
.P
@@ -86,6 +90,12 @@ defines the selected background color.
.BI \-sf " color"
defines the selected foreground color.
.TP
+.BI \-ob " color"
+defines the outline background color (for multiple selection).
+.TP
+.BI \-of " color"
+defines the outline foreground color (for multiple selection).
+.TP
.B \-v
prints version information to stdout, then exits.
.TP
diff --git a/dmenu/dmenu.c b/dmenu/dmenu.c
index d8540f2..429195e 100644
--- a/dmenu/dmenu.c
+++ b/dmenu/dmenu.c
@@ -125,7 +125,7 @@ static void cleanup(void) {
XUngrabKeyboard(dpy, CurrentTime);
for (i = 0; i < SchemeLast; i++)
- free(scheme[i]);
+ drw_scm_free(drw, scheme[i], 2);
for (i = 0; items && items[i].text; ++i)
free(items[i].text);
free(items);
@@ -900,6 +900,10 @@ int main(int argc, char *argv[]) {
colors[SchemeSel][ColBg] = argv[++i];
else if (!strcmp(argv[i], "-sf")) /* selected foreground color */
colors[SchemeSel][ColFg] = argv[++i];
+ else if (!strcmp(argv[i], "-ob")) /* outline background color */
+ colors[SchemeOut][ColBg] = argv[++i];
+ else if (!strcmp(argv[i], "-of")) /* outline foreground color */
+ colors[SchemeOut][ColFg] = argv[++i];
else if (!strcmp(argv[i], "-w")) /* embedding window id */
embed = argv[++i];
else
diff --git a/dmenu/drw.c b/dmenu/drw.c
index f258a41..c88f43d 100644
--- a/dmenu/drw.c
+++ b/dmenu/drw.c
@@ -182,8 +182,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)
{
@@ -191,7 +190,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++)
@@ -200,6 +199,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/dmenu/drw.h b/dmenu/drw.h
index 94b8bbd..d00c2f2 100644
--- a/dmenu/drw.h
+++ b/dmenu/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);