Rocco Rutte:
[apps/madmutt.git] / sidebar.c
index e136de6..098211d 100644 (file)
--- a/sidebar.c
+++ b/sidebar.c
 #include "buffy.h"
 #include <libgen.h>
 #include "keymap.h"
-#include <stdbool.h>
 #include <ctype.h>
 
 /*BUFFY *CurBuffy = 0;*/
 static BUFFY *TopBuffy = 0;
 static BUFFY *BottomBuffy = 0;
 static int known_lines = 0;
-static bool initialized = false;
+static short initialized = 0;
 static int prev_show_value;
 static short saveSidebarWidth;
 static char *entry = 0;
@@ -120,12 +119,16 @@ static char * shortened_hierarchy(char * box) {
 
 char *make_sidebar_entry(char *box, int size, int new, int flagged)
 {
-  char *c;
-  int i = 0, dlen = mutt_strlen (SidebarDelim), max = SidebarWidth-dlen-1,
-      shortened = 0;
+  int i = 0, dlen, max, shortened = 0;
+  int offset;
 
-  c = realloc(entry, SidebarWidth + 1);
-  if ( c ) entry = c;
+  if (SidebarWidth > COLS)
+    SidebarWidth = COLS;
+
+  dlen = mutt_strlen(SidebarDelim);
+  max = SidebarWidth - dlen - 1;
+
+  safe_realloc(&entry, SidebarWidth + 1);
   entry[SidebarWidth] = 0;
   for (; i < SidebarWidth; entry[i++] = ' ' );
 #if USE_IMAP
@@ -149,20 +152,30 @@ char *make_sidebar_entry(char *box, int size, int new, int flagged)
 
   if ( new ) {
     if (flagged>0) {
-      sprintf(entry + SidebarWidth - 5 - quick_log10(size) - dlen - quick_log10(new) - quick_log10(flagged),
+      offset = SidebarWidth - 5 - quick_log10(size) - dlen - quick_log10(new) - quick_log10(flagged);
+      if (offset<0) offset = 0;
+      snprintf(entry + offset, SidebarWidth - dlen - offset + 1,
               "% d(%d)[%d]", size, new, flagged);
     } else {
-      sprintf(entry + SidebarWidth - 3 - quick_log10(size) - dlen - quick_log10(new),
+      offset = SidebarWidth - 3 - quick_log10(size) - dlen - quick_log10(new);
+      if (offset<0) offset = 0;
+      snprintf(entry + offset, SidebarWidth - dlen - offset + 1,
               "% d(%d)", size, new);
     }
   } else {
     if (flagged>0) {
-      sprintf( entry + SidebarWidth - 3 - quick_log10(size) - dlen - quick_log10(flagged), "% d[%d]", size,flagged);
+      offset = SidebarWidth - 3 - quick_log10(size) - dlen - quick_log10(flagged);
+      if (offset<0) offset = 0;
+      snprintf( entry + offset, SidebarWidth - dlen - offset + 1,
+              "% d[%d]", size,flagged);
     } else {
-      sprintf( entry + SidebarWidth - 1 - quick_log10(size) - dlen, "% d", size);
+      offset = SidebarWidth - 1 - quick_log10(size) - dlen;
+      if (offset<0) offset = 0;
+      snprintf( entry + offset, SidebarWidth - dlen - offset + 1,
+              "% d", size);
     }
-
   }
+
   if (option(OPTSHORTENHIERARCHY) && shortened) {
     free(box);
   }
@@ -198,6 +211,7 @@ void set_buffystats (CONTEXT* Context)
   {
     if (strcmp (tmp->path, Context->path) == 0)
     {
+      tmp->new = Context->new;
       tmp->msg_unread = Context->unread;
       tmp->msgcount = Context->msgcount;
       tmp->msg_flagged = Context->flagged;
@@ -218,7 +232,7 @@ int draw_sidebar(int menu) {
     prev_show_value = option(OPTMBOXPANE);
     saveSidebarWidth = SidebarWidth;
     if(!option(OPTMBOXPANE)) SidebarWidth = 0;
-    initialized = true;
+    initialized = 1;
   }
 
   /* save or restore the value SidebarWidth */
@@ -229,7 +243,7 @@ int draw_sidebar(int menu) {
     } else if(!prev_show_value && option(OPTMBOXPANE)) {
       SidebarWidth = saveSidebarWidth;
       /* after toggle: force recounting of all mail */
-      mutt_buffy_check(1);
+      mutt_buffy_check(2);
     }
     prev_show_value = option(OPTMBOXPANE);
   }
@@ -237,8 +251,9 @@ int draw_sidebar(int menu) {
   if ( SidebarWidth == 0 ) return 0;
 
   /* draw the divider */
-  SETCOLOR(MT_COLOR_STATUS);
-  for (lines = option (OPTSTATUSONTOP) ? 0 : 1; 
+  /* SETCOLOR(MT_COLOR_STATUS); */
+    SETCOLOR(MT_COLOR_SIDEBAR);
+  for (lines = 1;
        lines < LINES-1-(menu != MENU_PAGER || option (OPTSTATUSONTOP)); lines++ ) {
     move(lines, SidebarWidth - delim_len);
     addstr (NONULL (SidebarDelim));
@@ -249,7 +264,9 @@ int draw_sidebar(int menu) {
   lines = option(OPTHELP) ? 1 : 0; /* go back to the top */
 
   if ( CurBuffy == 0 ) CurBuffy = Incoming;
+#if 0
   if ( known_lines != LINES || TopBuffy == 0 || BottomBuffy == 0 ) 
+#endif
     calc_boundaries(menu);
 
   tmp = TopBuffy;