]> granicus.if.org Git - neomutt/commitdiff
window: add copy_size()
authorRichard Russon <rich@flatcap.org>
Sat, 24 Aug 2019 16:06:27 +0000 (17:06 +0100)
committerRichard Russon <rich@flatcap.org>
Mon, 26 Aug 2019 12:38:44 +0000 (13:38 +0100)
Create a dedicated copy function for `MuttWindow`, rather than using
`memcpy()`.

This is in preparation for when `MuttWindow` becomes more complex.

mutt_window.c
mutt_window.h
pager.c

index 53e6f2f494caccac93dc0d08664e576af7c9bf01..11dbcfc0f46ebf0d78595868cd94614eaf429b2d 100644 (file)
@@ -228,6 +228,22 @@ int mutt_window_mvprintw(struct MuttWindow *win, int row, int col, const char *f
   return rc;
 }
 
+/**
+ * mutt_window_copy_size - Copy the size of one Window to another
+ * @param win_src Window to copy
+ * @param win_dst Window to resize
+ */
+void mutt_window_copy_size(const struct MuttWindow *win_src, struct MuttWindow *win_dst)
+{
+  if (!win_src || !win_dst)
+    return;
+
+  win_dst->rows = win_src->rows;
+  win_dst->cols = win_src->cols;
+  win_dst->row_offset = win_src->row_offset;
+  win_dst->col_offset = win_src->col_offset;
+}
+
 /**
  * mutt_window_reflow - Resize the Windows to fit the screen
  */
@@ -243,16 +259,16 @@ void mutt_window_reflow(void)
   MuttStatusWindow->row_offset = C_StatusOnTop ? 0 : LINES - 2;
   MuttStatusWindow->col_offset = 0;
 
-  memcpy(MuttHelpWindow, MuttStatusWindow, sizeof(struct MuttWindow));
+  mutt_window_copy_size(MuttStatusWindow, MuttHelpWindow);
   if (C_Help)
     MuttHelpWindow->row_offset = C_StatusOnTop ? LINES - 2 : 0;
   else
     MuttHelpWindow->rows = 0;
 
-  memcpy(MuttMessageWindow, MuttStatusWindow, sizeof(struct MuttWindow));
+  mutt_window_copy_size(MuttStatusWindow, MuttMessageWindow);
   MuttMessageWindow->row_offset = LINES - 1;
 
-  memcpy(MuttIndexWindow, MuttStatusWindow, sizeof(struct MuttWindow));
+  mutt_window_copy_size(MuttStatusWindow, MuttIndexWindow);
   MuttIndexWindow->rows = MAX(
       LINES - MuttStatusWindow->rows - MuttHelpWindow->rows - MuttMessageWindow->rows, 0);
   MuttIndexWindow->row_offset =
@@ -261,7 +277,7 @@ void mutt_window_reflow(void)
 #ifdef USE_SIDEBAR
   if (C_SidebarVisible)
   {
-    memcpy(MuttSidebarWindow, MuttIndexWindow, sizeof(struct MuttWindow));
+    mutt_window_copy_size(MuttIndexWindow, MuttSidebarWindow);
     MuttSidebarWindow->cols = C_SidebarWidth;
     MuttIndexWindow->cols -= C_SidebarWidth;
 
index f1096acaec85b2300a4f5b9e216479c7260ec61e..1056a4b7f6e4e93b89c520a70dc50fb842bf90b1 100644 (file)
@@ -50,6 +50,7 @@ extern struct MuttWindow *MuttStatusWindow;
 
 void               mutt_window_clearline          (struct MuttWindow *win, int row);
 void               mutt_window_clrtoeol           (struct MuttWindow *win);
+void               mutt_window_copy_size          (const struct MuttWindow *win_src, struct MuttWindow *win_dst);
 void               mutt_window_free               (struct MuttWindow **ptr);
 void               mutt_window_free_all           (void);
 void               mutt_window_getxy              (struct MuttWindow *win, int *x, int *y);
diff --git a/pager.c b/pager.c
index 3f0542ef35975ad7e63c2a7547295ec62f54277c..af79aac434f3c2e4f7fa9ac5c8e3a15e9ceceeae 100644 (file)
--- a/pager.c
+++ b/pager.c
@@ -1954,21 +1954,21 @@ static void pager_custom_redraw(struct Menu *pager_menu)
 
     rd->indicator = rd->indexlen / 3;
 
-    memcpy(rd->pager_window, MuttIndexWindow, sizeof(struct MuttWindow));
-    memcpy(rd->pager_status_window, MuttStatusWindow, sizeof(struct MuttWindow));
+    mutt_window_copy_size(MuttIndexWindow, rd->pager_window);
+    mutt_window_copy_size(MuttStatusWindow, rd->pager_status_window);
     rd->index_status_window->rows = 0;
     rd->index_window->rows = 0;
 
     if (IsEmail(rd->extra) && (C_PagerIndexLines != 0))
     {
-      memcpy(rd->index_window, MuttIndexWindow, sizeof(struct MuttWindow));
+      mutt_window_copy_size(MuttIndexWindow, rd->index_window);
       rd->index_window->rows = (rd->indexlen > 0) ? rd->indexlen - 1 : 0;
 
       if (C_StatusOnTop)
       {
-        memcpy(rd->index_status_window, MuttStatusWindow, sizeof(struct MuttWindow));
+        mutt_window_copy_size(MuttStatusWindow, rd->index_status_window);
 
-        memcpy(rd->pager_status_window, MuttIndexWindow, sizeof(struct MuttWindow));
+        mutt_window_copy_size(MuttIndexWindow, rd->pager_status_window);
         rd->pager_status_window->rows = 1;
         rd->pager_status_window->row_offset += rd->index_window->rows;
 
@@ -1979,7 +1979,7 @@ static void pager_custom_redraw(struct Menu *pager_menu)
       }
       else
       {
-        memcpy(rd->index_status_window, MuttIndexWindow, sizeof(struct MuttWindow));
+        mutt_window_copy_size(MuttIndexWindow, rd->index_status_window);
         rd->index_status_window->rows = 1;
         rd->index_status_window->row_offset += rd->index_window->rows;