diff --git a/config.def.h b/config.def.h index d2762b4..a908872 100644 --- a/config.def.h +++ b/config.def.h @@ -20,6 +20,7 @@ const char *format = "%s %b"; /* default format */ int timeouts[] = { 10, 10, 0 }; /* low, normal, critical */ const char *geom = "0x3-30+20"; /* geometry */ int sort = True; /* sort messages by urgency */ +int indicate_hidden = True; /* show count of hidden messages */ /* const char *geom = "x1"; */ diff --git a/dunst.c b/dunst.c index 4863281..5846b56 100644 --- a/dunst.c +++ b/dunst.c @@ -240,9 +240,11 @@ delete_msg(msg_queue_t *elem) { void drawmsg(void) { - int width, x, y, height, i; + int width, x, y, height, drawn_msg_count, i; unsigned int len = list_len(msgqueue); msg_queue_t *cur_msg = msgqueue; + char hidden[128]; + int hidden_count = 0; dc->x = 0; dc->y = 0; dc->h = 0; @@ -252,12 +254,20 @@ drawmsg(void) { } height = MIN(geometry.h, len); + drawn_msg_count = height; + hidden_count = len - height; + hidden_count = indicate_hidden && hidden_count > 0 ? hidden_count : 0; + sprintf(hidden, "(%d more)", hidden_count); + if(hidden_count) + height++; if(geometry.mask & WidthValue) { if(geometry.w == 0) { width = 0; for(i = 0; i < height; i++){ width = MAX(width, textw(dc, cur_msg->msg)); + if(hidden_count) + width = MAX(width, textw(dc,hidden)); cur_msg = cur_msg->next; } } else { @@ -285,7 +295,7 @@ drawmsg(void) { XResizeWindow(dc->dpy, win, width, height*font_h); drawrect(dc, 0, 0, width, height*font_h, True, BG(dc, colors[NORM])); - for(i = 0; i < height; i++) { + for(i = 0; i < drawn_msg_count; i++) { if(cur_msg->start == 0) cur_msg->start = now; @@ -296,6 +306,13 @@ drawmsg(void) { cur_msg = cur_msg->next; } + if(hidden_count) { + drawrect(dc, 0, dc->y, width, font_h, True, BG(dc, colors[NORM])); + drawtext(dc, hidden, colors[NORM]); + dc->y += font_h; + } + + XMoveWindow(dc->dpy, win, x, y); mapdc(dc, win, width, height*font_h);