From 9e9284666c9fcf3278ad17f98a247658db8b2269 Mon Sep 17 00:00:00 2001 From: sewn Date: Sun, 10 Mar 2024 18:00:48 +0300 Subject: port dmenu password patch --- render.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'render.c') diff --git a/render.c b/render.c index 135d51f..a0a2a8c 100644 --- a/render.c +++ b/render.c @@ -1,4 +1,7 @@ +#define _POSIX_C_SOURCE 200809L #include +#include +#include #include "render.h" @@ -72,8 +75,22 @@ static void render_prompt(struct menu *menu, cairo_t *cairo) { // Renders the input text. static void render_input(struct menu *menu, cairo_t *cairo) { - render_text(menu, cairo, menu->input, menu->promptw, 0, 0, - 0, menu->normalfg, menu->padding, menu->padding); + char *censort = NULL; + + if (menu->passwd) { + censort = calloc(1, sizeof(menu->input)); + if (!censort) { + return; + } + memset(censort, '*', strlen(menu->input)); + } + + render_text(menu, cairo, menu->passwd ? censort : menu->input, + menu->promptw, 0, 0, 0, menu->normalfg, menu->padding, menu->padding); + + if (censort) { + free(censort); + } } // Renders a cursor for the input field. -- cgit v1.2.3