we don't use strdup in mutt sources anymore, remove that compat file
[apps/madmutt.git] / sidebar.c
index 4742101..378c163 100644 (file)
--- a/sidebar.c
+++ b/sidebar.c
@@ -12,6 +12,8 @@
  * please see the file GPL in the top level source directory.
  */
 
+#include <lib-lib/mem.h>
+
 #include "mutt.h"
 #include "mutt_menu.h"
 #include "mutt_curses.h"
@@ -19,7 +21,6 @@
 #include "buffy.h"
 #include "keymap.h"
 
-#include "lib/mem.h"
 #include "lib/str.h"
 #include "lib/intl.h"
 
@@ -74,7 +75,7 @@ static char *shortened_hierarchy (char *box, int maxlen)
 
   if (last_dot) {
     ++last_dot;
-    new_box = mem_malloc (maxlen + 1);
+    new_box = p_new(char, maxlen + 1);
     new_box[0] = box[0];
     for (i = 1, j = 1; j < maxlen && i < len; ++i) {
       if (strchr (SidebarBoundary, box[i])) {
@@ -236,7 +237,7 @@ int make_sidebar_entry (char* box, int idx, size_t len)
   addnstr (entry, len);
 
   if (shortened)
-    mem_free(&box);
+    p_delete(&box);
 
   return (1);
 }
@@ -274,32 +275,67 @@ void sidebar_set_buffystats (CONTEXT* Context) {
   tmp->msg_flagged = Context->flagged;
 }
 
+void sidebar_draw_frames (void) {
+  size_t i,delim_len;
+
+  if (!option(OPTMBOXPANE) || SidebarWidth==0) 
+    return;
+
+  delim_len=str_len(NONULL(SidebarDelim));
+
+  /* draw vertical delimiter */
+  SETCOLOR (MT_COLOR_SIDEBAR);
+  for (i = 0; i < LINES-1; i++) {
+    move (i, SidebarWidth - delim_len);
+    if (option (OPTASCIICHARS))
+      addstr (NONULL (SidebarDelim));
+    else if (!option (OPTASCIICHARS) && !str_cmp (SidebarDelim, "|"))
+      addch (ACS_VLINE);
+    else if ((Charset_is_utf8) && !str_cmp (SidebarDelim, "|"))
+      addstr ("\342\224\202");
+    else
+      addstr (NONULL (SidebarDelim));
+  }
+
+  /* fill "gaps" at top+bottom */
+  SETCOLOR(MT_COLOR_STATUS);
+  for (i=0; i<SidebarWidth; i++) {
+    /*
+     * if we don't have $status_on_top and have $help, fill top
+     * gap with spaces to get bg color
+     */
+    if (option(OPTSTATUSONTOP) || option(OPTHELP)) {
+      move(0,i);
+      addch(' ');
+    }
+    /*
+      * if we don't have $status_on_top or we have $help, fill bottom
+      * gap with spaces to get bg color
+      */
+    if (!option(OPTSTATUSONTOP) || option(OPTHELP)) {
+      move(LINES-2,i);
+      addch(' ');
+    }
+  }
+  SETCOLOR (MT_COLOR_NORMAL);
+}
+
 /* actually draws something
  * FIXME this needs some clue when to do it
  */
-int sidebar_draw (int menu)
-{
-  int first_line = option (OPTSTATUSONTOP) ? 1 : option (OPTHELP) ? 1 : 0;
-  int last_line = LINES-1;
-  int draw_devider = 1, i = 0;
-  int line;
+int sidebar_draw (int menu) {
+  int first_line = option (OPTSTATUSONTOP) ? 1 : option (OPTHELP) ? 1 : 0,
+      last_line = LINES - 2 + (option (OPTSTATUSONTOP) && !option (OPTHELP) ? 1 : 0),
+      i = 0,line;
   BUFFY *tmp;
-  short delim_len = str_len (SidebarDelim);
+  size_t delim_len = str_len (SidebarDelim);
   char blank[SHORT_STRING];
 
-  if (option (OPTSTATUSONTOP)) {
-    last_line -= option (OPTHELP) ? 1 : 0;
-  } else {
-    last_line -= 1-(menu==MENU_PAGER);
-  }
-
   known_lines=last_line-first_line;
 
   /* initialize first time */
   if (!initialized) {
     prev_show_value = option (OPTMBOXPANE);
-    if (!option (OPTMBOXPANE))
-      draw_devider = 1;
     initialized = 1;
   }
 
@@ -325,23 +361,8 @@ int sidebar_draw (int menu)
 
   if (SidebarWidth == 0 || !option (OPTMBOXPANE))
     return 0;
-  /* draw devider only if necessary (if the sidebar becomes visible e.g.)*/
-  if (draw_devider == 1){
-    /* draw the divider */
-    SETCOLOR (MT_COLOR_SIDEBAR);
-    for (line = first_line; line < last_line; line++) {
-      move (line, SidebarWidth - delim_len);
-      if (option (OPTASCIICHARS))
-        addstr (NONULL (SidebarDelim));
-      else if (!option (OPTASCIICHARS) && !str_cmp (SidebarDelim, "|"))
-        addch (ACS_VLINE);
-      else if ((Charset_is_utf8) && !str_cmp (SidebarDelim, "|"))
-        addstr ("\342\224\202");
-      else
-        addstr (NONULL (SidebarDelim));
-    }
-  }
-  SETCOLOR (MT_COLOR_NORMAL);
+
+  sidebar_draw_frames();
 
   if (list_empty(Incoming))
     return 0;
@@ -363,9 +384,10 @@ int sidebar_draw (int menu)
     line += make_sidebar_entry (tmp->path, i, SidebarWidth-delim_len);
   }
 
+  SETCOLOR (MT_COLOR_NORMAL);
+
   /* fill with blanks to bottom */
   memset (&blank, ' ', sizeof (blank));
-  SETCOLOR (MT_COLOR_NORMAL);
   for (; line < last_line; line++) {
     move (line, 0);
     addnstr (blank, SidebarWidth-delim_len);