New lines are now printed properly
authorSamuel Dudik <redacted>
Thu, 13 Aug 2020 18:45:08 +0000 (20:45 +0200)
committerSamuel Dudik <redacted>
Thu, 13 Aug 2020 18:45:08 +0000 (20:45 +0200)
TODO.md
herbe.c

diff --git a/TODO.md b/TODO.md
index dae735f04878229e10f73078e1a3e2027912c827..78e9c08c39117cba87d9bc233bf79c70b67168cb 100644 (file)
--- a/TODO.md
+++ b/TODO.md
@@ -1,4 +1,5 @@
 * Handle multiple notifications at the same time
-* Properly handle duration = 0
+* ~~Properly handle duration = 0~~
 * Keyboard shortcut to dismiss and accept notifications (also mouse)
-* Properly print new lines
+* ~~Properly print new lines~~
+* Refactor code
\ No newline at end of file
diff --git a/herbe.c b/herbe.c
index 93a2b91c6b908eba889427298695099a5a11c6b2..c8dc2798223be303d961169d0dafc604003c7d2b 100644 (file)
--- a/herbe.c
+++ b/herbe.c
@@ -24,23 +24,31 @@ static void die(const char *format, ...)
 
 int get_max_len(char *body, XftFont *font, int max_text_width)
 {
-       int body_len = strlen(body);
+       int eol = strlen(body);
        XGlyphInfo info;
-       XftTextExtentsUtf8(display, font, (FcChar8 *)body, body_len, &info);
+       XftTextExtentsUtf8(display, font, (FcChar8 *)body, eol, &info);
 
-       if (info.width < max_text_width)
-               return body_len;
+       if (info.width > max_text_width)
+       {
 
-       int eol = max_text_width / font->max_advance_width;
-       info.width = 0;
+               eol = max_text_width / font->max_advance_width;
+               info.width = 0;
 
-       while (info.width < max_text_width)
-       {
-               eol++;
-               XftTextExtentsUtf8(display, font, (FcChar8 *)body, eol, &info);
+               while (info.width < max_text_width)
+               {
+                       eol++;
+                       XftTextExtentsUtf8(display, font, (FcChar8 *)body, eol, &info);
+               }
+
+               eol--;
        }
 
-       eol--;
+       for (int i = 0; i < eol; i++)
+               if (body[i] == '\n')
+                       return ++i;
+
+       if (info.width < max_text_width)
+               return eol;
 
        int temp = eol;
 
@@ -167,4 +175,4 @@ int main(int argc, char *argv[])
        XCloseDisplay(display);
 
        exit(EXIT_SUCCESS);
-}
+}
\ No newline at end of file