From: Richard Russon Date: Sat, 24 Aug 2019 16:06:27 +0000 (+0100) Subject: window: add copy_size() X-Git-Tag: 2019-10-25~80 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c5c3a949242811a0735265efee381d11dd21a886;p=neomutt window: add copy_size() Create a dedicated copy function for `MuttWindow`, rather than using `memcpy()`. This is in preparation for when `MuttWindow` becomes more complex. --- diff --git a/mutt_window.c b/mutt_window.c index 53e6f2f49..11dbcfc0f 100644 --- a/mutt_window.c +++ b/mutt_window.c @@ -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; diff --git a/mutt_window.h b/mutt_window.h index f1096acae..1056a4b7f 100644 --- a/mutt_window.h +++ b/mutt_window.h @@ -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 3f0542ef3..af79aac43 100644 --- 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;