From cd307c4a4c2ce3b87b4f5cbe571186f815b0fc5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonardo=20Hern=C3=A1ndez=20Hern=C3=A1ndez?= Date: Sat, 24 Dec 2022 13:31:17 -0600 Subject: [PATCH] module/dwl: correctly handle the title --- CHANGELOG.md | 2 ++ modules/dwl.c | 23 +++++++++++++++++------ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a99a9c1..4420f7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,9 +32,11 @@ * Documentation for the `cpu` module; `interval` has been renamed to `poll-interval` ([#241][241]). * battery: module was not thread safe. +* dwl module reporting only the last part of the title ([#251][251]) [239]: https://codeberg.org/dnkl/yambar/issues/239 [241]: https://codeberg.org/dnkl/yambar/issues/241 +[251]: https://codeberg.org/dnkl/yambar/pulls/251 ### Security diff --git a/modules/dwl.c b/modules/dwl.c index 00b4cb8..a03a345 100644 --- a/modules/dwl.c +++ b/modules/dwl.c @@ -168,9 +168,12 @@ process_line(char *line, struct module *module) } /* action */ else if (index == 2) { - if (strcmp(string, "title") == 0) + if (strcmp(string, "title") == 0) { line_mode = LINE_MODE_TITLE; - else if (strcmp(string, "fullscreen") == 0) + /* cleanup title for every new batch */ + free(private->title); + private->title = NULL; + } else if (strcmp(string, "fullscreen") == 0) line_mode = LINE_MODE_FULLSCREEN; else if (strcmp(string, "floating") == 0) line_mode = LINE_MODE_FLOATING; @@ -219,12 +222,20 @@ process_line(char *line, struct module *module) dwl_tag->urgent = mask & urgent; } } + } else if (line_mode == LINE_MODE_TITLE) { + if (!private->title) { + private->title = strdup(string); + } else { + char *buf = NULL; + if (asprintf(&buf, "%s %s", private->title, string) < 0) { + LOG_ERRNO("asprintf"); + break; + } + free(private->title); + private->title = buf; + } } else switch (line_mode) { - case LINE_MODE_TITLE: - free(private->title); - private->title = strdup(string); - break; case LINE_MODE_FULLSCREEN: private->fullscreen = (strcmp(string, "0") != 0); break;