NeoMutt  2025-12-11-694-ga89709
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
recalc()

Recalculate the Window data. More...

+ Collaboration diagram for recalc():

Functions

int alias_recalc (struct MuttWindow *win)
 Recalculate the display of the Alias Window - Implements MuttWindow::recalc() -.
 
static int attach_recalc (struct MuttWindow *win)
 Recalculate the Window data - Implements MuttWindow::recalc() -.
 
static int cbar_recalc (struct MuttWindow *win)
 Recalculate the Window data - Implements MuttWindow::recalc() -.
 
static int compose_recalc (struct MuttWindow *dlg)
 Recalculate the Window data - Implements MuttWindow::recalc() -.
 
static int preview_recalc (struct MuttWindow *win)
 Recalculate the Window data - Implements MuttWindow::recalc() -.
 
static int enter_recalc (struct MuttWindow *win)
 Recalculate the Window data - Implements MuttWindow::recalc() -.
 
static int env_recalc (struct MuttWindow *win)
 Recalculate the Window data - Implements MuttWindow::recalc() -.
 
static int msgwin_recalc (struct MuttWindow *win)
 Recalculate the display of the Message Window - Implements MuttWindow::recalc() -.
 
static int sbar_recalc (struct MuttWindow *win)
 Recalculate the Window data - Implements MuttWindow::recalc() -.
 
static int helpbar_recalc (struct MuttWindow *win)
 Recalculate the display of the Help Bar - Implements MuttWindow::recalc() -.
 
static int ibar_recalc (struct MuttWindow *win)
 Recalculate the Window data - Implements MuttWindow::recalc() -.
 
static int index_recalc (struct MuttWindow *win)
 Recalculate the Index display - Implements MuttWindow::recalc() -.
 
static int menu_recalc (struct MuttWindow *win)
 Recalculate the Window data - Implements MuttWindow::recalc() -.
 
static int pager_recalc (struct MuttWindow *win)
 Recalculate the Pager display - Implements MuttWindow::recalc() -.
 
static int pbar_recalc (struct MuttWindow *win)
 Recalculate the Window data - Implements MuttWindow::recalc() -.
 
static int progress_window_recalc (struct MuttWindow *win)
 Recalculate the Progress Bar - Implements MuttWindow::recalc() -.
 
int sb_recalc (struct MuttWindow *win)
 Recalculate the Sidebar display - Implements MuttWindow::recalc() -.
 

Detailed Description

Recalculate the Window data.

Parameters
winWindow
Return values
0Success
-1Error
Precondition
win is not NULL
win is visible

Function Documentation

◆ alias_recalc()

int alias_recalc ( struct MuttWindow * win)

Recalculate the display of the Alias Window - Implements MuttWindow::recalc() -.

Definition at line 96 of file gui.c.

97{
98 struct Menu *menu = win->wdata;
99 struct AliasMenuData *mdata = menu->mdata;
100
101 alias_array_sort(&mdata->ava, mdata->sub);
102
104 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
105 return 0;
106}
void alias_array_sort(struct AliasViewArray *ava, const struct ConfigSubset *sub)
Sort and reindex an AliasViewArray.
Definition sort.c:235
#define mutt_debug(LEVEL,...)
Definition logging2.h:91
@ LL_DEBUG5
Log at debug level 5.
Definition logging2.h:49
#define WA_REPAINT
Redraw the contents of the Window.
AliasView array wrapper with Pattern information -.
Definition gui.h:54
struct Menu * menu
Menu.
Definition gui.h:58
Definition lib.h:80
struct MuttWindow * win
Window holding the Menu.
Definition lib.h:88
void * mdata
Private data.
Definition lib.h:149
void * wdata
Private data.
WindowActionFlags actions
Actions to be performed, e.g. WA_RECALC.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ attach_recalc()

static int attach_recalc ( struct MuttWindow * win)
static

Recalculate the Window data - Implements MuttWindow::recalc() -.

Definition at line 245 of file attach.c.

246{
247 struct Menu *menu = win->wdata;
248 struct ComposeAttachData *adata = menu->mdata;
249
250 const int cur_rows = win->state.rows;
251 const int new_rows = adata->actx->idxlen;
252
253 if (new_rows != cur_rows)
254 {
255 win->req_rows = new_rows;
258 }
259
260 win->actions |= WA_REPAINT;
261 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
262 return 0;
263}
void menu_adjust(struct Menu *menu)
Reapply the config to the Menu.
Definition move.c:325
void mutt_window_reflow(struct MuttWindow *win)
Resize a Window and its children.
short idxlen
Number of attachmentes.
Definition attach.h:68
Data to fill the Compose Attach Window.
Definition attach_data.h:33
struct Menu * menu
Menu displaying the attachments.
Definition attach_data.h:35
struct AttachCtx * actx
Set of attachments.
Definition attach_data.h:34
struct WindowState state
Current state of the Window.
short req_rows
Number of rows required.
struct MuttWindow * parent
Parent Window.
short rows
Number of rows, can be MUTT_WIN_SIZE_UNLIMITED.
Definition mutt_window.h:61
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ cbar_recalc()

static int cbar_recalc ( struct MuttWindow * win)
static

Recalculate the Window data - Implements MuttWindow::recalc() -.

See also
$compose_format

Definition at line 81 of file cbar.c.

82{
83 struct Buffer *buf = buf_pool_get();
84 struct ComposeSharedData *shared = win->parent->wdata;
85
86 const struct Expando *c_compose_format = cs_subset_expando(shared->sub, "compose_format");
87 expando_filter(c_compose_format, ComposeRenderCallbacks, shared,
89
90 struct ComposeBarData *cbar_data = win->wdata;
91 if (!mutt_str_equal(buf_string(buf), cbar_data->compose_format))
92 {
94 win->actions |= WA_REPAINT;
95 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
96 }
97 buf_pool_release(&buf);
98
99 return 0;
100}
static const char * buf_string(const struct Buffer *buf)
Convert a buffer to a const char * "string".
Definition buffer.h:96
const struct ExpandoRenderCallback ComposeRenderCallbacks[]
Callbacks for Compose Expandos.
Definition expando.c:103
const struct Expando * cs_subset_expando(const struct ConfigSubset *sub, const char *name)
Get an Expando config item by name.
int expando_filter(const struct Expando *exp, const struct ExpandoRenderCallback *erc, void *data, MuttFormatFlags flags, int max_cols, char **env_list, struct Buffer *buf)
Render an Expando and run the result through a filter.
Definition filter.c:139
bool mutt_str_equal(const char *a, const char *b)
Compare two strings.
Definition string.c:665
char * mutt_str_replace(char **p, const char *s)
Replace one string with another.
Definition string.c:284
struct Buffer * buf_pool_get(void)
Get a Buffer from the pool.
Definition pool.c:91
void buf_pool_release(struct Buffer **ptr)
Return a Buffer to the pool.
Definition pool.c:111
#define MUTT_FORMAT_NO_FLAGS
No flags are set.
Definition render.h:33
String manipulation buffer.
Definition buffer.h:36
Data to fill the Compose Bar Window.
Definition cbar_data.h:33
char * compose_format
Cached status string.
Definition cbar_data.h:34
Shared Compose Data.
Definition shared_data.h:35
struct ConfigSubset * sub
Config set to use.
Definition shared_data.h:36
Parsed Expando trees.
Definition expando.h:41
Container for Accounts, Notifications.
Definition neomutt.h:41
char ** env
Private copy of the environment variables.
Definition neomutt.h:58
short cols
Number of columns, can be MUTT_WIN_SIZE_UNLIMITED.
Definition mutt_window.h:60
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ compose_recalc()

static int compose_recalc ( struct MuttWindow * dlg)
static

Recalculate the Window data - Implements MuttWindow::recalc() -.

Definition at line 127 of file dlg_compose.c.

128{
129 if (!dlg)
130 return -1;
131
132 struct ComposeSharedData *shared = dlg->wdata;
133 struct MuttWindow *win_env = window_find_child(dlg, WT_CUSTOM);
134 struct MuttWindow *win_preview = shared->win_preview;
135 struct MuttWindow *win_preview_bar = shared->win_preview_bar;
136
137 const bool c_show_preview = cs_subset_bool(shared->sub, "compose_show_preview");
138 const short c_preview_min_rows = cs_subset_number(shared->sub, "compose_preview_min_rows");
139
140 // How many rows are available for the preview window?
141 // Total rows - (envelope window + attachments + number of status bars)
142 int rows_available = dlg->state.rows -
143 (win_env->state.rows + shared->adata->actx->idxlen + 3);
144
145 if (c_show_preview && rows_available >= c_preview_min_rows)
146 {
147 window_set_visible(win_preview, true);
148 window_set_visible(win_preview_bar, true);
150 }
151 else
152 {
153 window_set_visible(win_preview, false);
154 window_set_visible(win_preview_bar, false);
156 }
157
158 return 0;
159}
void attachment_size_fixed(struct MuttWindow *win)
Make the Attachment Window fixed-size.
Definition attach.c:300
void attachment_size_max(struct MuttWindow *win)
Make the Attachment Window maximised.
Definition attach.c:313
short cs_subset_number(const struct ConfigSubset *sub, const char *name)
Get a number config item by name.
Definition helpers.c:143
bool cs_subset_bool(const struct ConfigSubset *sub, const char *name)
Get a boolean config item by name.
Definition helpers.c:47
void window_set_visible(struct MuttWindow *win, bool visible)
Set a Window visible or hidden.
struct MuttWindow * window_find_child(struct MuttWindow *win, enum WindowType type)
Recursively find a child Window of a given type.
@ WT_CUSTOM
Window with a custom drawing function.
Definition mutt_window.h:94
struct MuttWindow * win_preview
Message preview window.
Definition shared_data.h:41
struct MuttWindow * win_preview_bar
Status bar divider above preview.
Definition shared_data.h:42
struct ComposeAttachData * adata
Attachments.
Definition shared_data.h:39
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ preview_recalc()

static int preview_recalc ( struct MuttWindow * win)
static

Recalculate the Window data - Implements MuttWindow::recalc() -.

Definition at line 331 of file preview.c.

332{
333 if (!win)
334 return -1;
335
336 win->actions |= WA_REPAINT;
337 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
338 return 0;
339}
+ Here is the caller graph for this function:

◆ enter_recalc()

static int enter_recalc ( struct MuttWindow * win)
static

Recalculate the Window data - Implements MuttWindow::recalc() -.

See also
$compose_format

Definition at line 169 of file window.c.

170{
171 win->actions |= WA_REPAINT;
172 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
173
174 return 0;
175}
+ Here is the caller graph for this function:

◆ env_recalc()

static int env_recalc ( struct MuttWindow * win)
static

Recalculate the Window data - Implements MuttWindow::recalc() -.

Definition at line 725 of file window.c.

726{
727 struct EnvelopeWindowData *wdata = win->wdata;
728
729 const int cur_rows = win->state.rows;
730 const int new_rows = calc_envelope(win, wdata);
731
732 if (new_rows != cur_rows)
733 {
734 win->req_rows = new_rows;
736 }
737
738 win->actions |= WA_REPAINT;
739 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
740 return 0;
741}
static int calc_envelope(struct MuttWindow *win, struct EnvelopeWindowData *wdata)
Calculate how many rows the envelope will need.
Definition window.c:304
Data to fill the Envelope Window.
Definition wdata.h:38
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ msgwin_recalc()

static int msgwin_recalc ( struct MuttWindow * win)
static

Recalculate the display of the Message Window - Implements MuttWindow::recalc() -.

Definition at line 160 of file msgwin.c.

161{
162 win->actions |= WA_REPAINT;
163 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
164 return 0;
165}
+ Here is the caller graph for this function:

◆ sbar_recalc()

static int sbar_recalc ( struct MuttWindow * win)
static

Recalculate the Window data - Implements MuttWindow::recalc() -.

Definition at line 82 of file sbar.c.

83{
84 if (!win)
85 return -1;
86
87 win->actions |= WA_REPAINT;
88 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
89 return 0;
90}
+ Here is the caller graph for this function:

◆ helpbar_recalc()

static int helpbar_recalc ( struct MuttWindow * win)
static

Recalculate the display of the Help Bar - Implements MuttWindow::recalc() -.

Generate the help string from data on the focused Window. The Help Bar isn't drawn, yet.

Definition at line 125 of file helpbar.c.

126{
128 if (!wdata)
129 return 0;
130
131 FREE(&wdata->help_str);
132
133 struct MuttWindow *win_focus = window_get_focus();
134 if (!win_focus)
135 return 0;
136
137 // Ascend the Window tree until we find help_data
138 while (win_focus && !win_focus->help_data)
139 win_focus = win_focus->parent;
140
141 if (!win_focus)
142 return 0;
143
144 struct Buffer *helpstr = buf_pool_get();
145 compile_help(win_focus->help_md, win_focus->help_data, helpstr);
146
147 wdata->help_md = win_focus->help_md;
148 wdata->help_data = win_focus->help_data;
149 wdata->help_str = buf_strdup(helpstr);
150 buf_pool_release(&helpstr);
151
152 win->actions |= WA_REPAINT;
153 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
154 return 0;
155}
char * buf_strdup(const struct Buffer *buf)
Copy a Buffer's string.
Definition buffer.c:571
struct HelpbarWindowData * helpbar_wdata_get(struct MuttWindow *win)
Get the Helpbar data for this window.
Definition wdata.c:64
static void compile_help(const struct MenuDefinition *md, const struct Mapping *items, struct Buffer *buf)
Create the text for the help menu.
Definition helpbar.c:107
#define FREE(x)
Free memory and set the pointer to NULL.
Definition memory.h:68
struct MuttWindow * window_get_focus(void)
Get the currently focused Window.
Help Bar Window data -.
Definition private.h:34
char * help_str
Formatted Help Bar string.
Definition private.h:37
const struct MenuDefinition * help_md
Menu Definition for key bindings.
Definition private.h:35
const struct Mapping * help_data
Data for the Help Bar.
Definition private.h:36
const struct Mapping * help_data
Data for the Help Bar.
const struct MenuDefinition * help_md
Menu Definition for key bindings.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ibar_recalc()

static int ibar_recalc ( struct MuttWindow * win)
static

Recalculate the Window data - Implements MuttWindow::recalc() -.

Definition at line 91 of file ibar.c.

92{
93 struct Buffer *buf = buf_pool_get();
94
95 struct IBarPrivateData *ibar_data = win->wdata;
96 struct IndexSharedData *shared = ibar_data->shared;
97 struct IndexPrivateData *priv = ibar_data->priv;
98
99 const struct Expando *c_status_format = cs_subset_expando(shared->sub, "status_format");
100 menu_status_line(buf, shared, priv->menu, win->state.cols, c_status_format);
101
102 if (!mutt_str_equal(buf_string(buf), ibar_data->status_format))
103 {
104 mutt_str_replace(&ibar_data->status_format, buf_string(buf));
105 win->actions |= WA_REPAINT;
106 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
107 }
108
109 const bool c_ts_enabled = cs_subset_bool(shared->sub, "ts_enabled");
110 if (c_ts_enabled && TsSupported)
111 {
112 buf_reset(buf);
113 const struct Expando *c_ts_status_format = cs_subset_expando(shared->sub, "ts_status_format");
114 menu_status_line(buf, shared, priv->menu, -1, c_ts_status_format);
115 if (!mutt_str_equal(buf_string(buf), ibar_data->ts_status_format))
116 {
118 win->actions |= WA_REPAINT;
119 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
120 }
121
122 buf_reset(buf);
123 const struct Expando *c_ts_icon_format = cs_subset_expando(shared->sub, "ts_icon_format");
124 menu_status_line(buf, shared, priv->menu, -1, c_ts_icon_format);
125 if (!mutt_str_equal(buf_string(buf), ibar_data->ts_icon_format))
126 {
127 mutt_str_replace(&ibar_data->ts_icon_format, buf_string(buf));
128 win->actions |= WA_REPAINT;
129 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
130 }
131 }
132
133 buf_pool_release(&buf);
134 return 0;
135}
void buf_reset(struct Buffer *buf)
Reset an existing Buffer.
Definition buffer.c:76
void menu_status_line(struct Buffer *buf, struct IndexSharedData *shared, struct Menu *menu, int max_cols, const struct Expando *exp)
Create the status line.
Definition status.c:51
Data to draw the Index Bar.
Definition ibar.c:80
char * ts_icon_format
Cached terminal icon string.
Definition ibar.c:85
struct IndexSharedData * shared
Shared Index data.
Definition ibar.c:81
char * ts_status_format
Cached terminal status string.
Definition ibar.c:84
char * status_format
Cached screen status string.
Definition ibar.c:83
struct IndexPrivateData * priv
Private Index data.
Definition ibar.c:82
Private state data for the Index.
struct Menu * menu
Menu controlling the index.
Data shared between Index, Pager and Sidebar.
Definition shared_data.h:37
struct ConfigSubset * sub
Config set to use.
Definition shared_data.h:38
bool TsSupported
Terminal Setting is supported.
Definition terminal.c:53
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ index_recalc()

static int index_recalc ( struct MuttWindow * win)
static

Recalculate the Index display - Implements MuttWindow::recalc() -.

Definition at line 593 of file index.c.

594{
595 win->actions |= WA_REPAINT;
596 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
597 return 0;
598}
+ Here is the caller graph for this function:

◆ menu_recalc()

static int menu_recalc ( struct MuttWindow * win)
static

Recalculate the Window data - Implements MuttWindow::recalc() -.

Definition at line 81 of file window.c.

82{
83 if (win->type != WT_MENU)
84 return 0;
85
86 win->actions |= WA_REPAINT;
87 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
88 return 0;
89}
@ WT_MENU
An Window containing a Menu.
Definition mutt_window.h:97
enum WindowType type
Window type, e.g. WT_SIDEBAR.
+ Here is the caller graph for this function:

◆ pager_recalc()

static int pager_recalc ( struct MuttWindow * win)
static

Recalculate the Pager display - Implements MuttWindow::recalc() -.

Definition at line 123 of file pager.c.

124{
125 win->actions |= WA_REPAINT;
126 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
127 return 0;
128}
+ Here is the caller graph for this function:

◆ pbar_recalc()

static int pbar_recalc ( struct MuttWindow * win)
static

Recalculate the Window data - Implements MuttWindow::recalc() -.

Definition at line 90 of file pbar.c.

91{
92 struct PBarPrivateData *pbar_data = win->wdata;
93 struct IndexSharedData *shared = pbar_data->shared;
94 struct PagerPrivateData *priv = pbar_data->priv;
95 if (!priv || !priv->pview)
96 return 0;
97
98 struct Buffer *buf = buf_pool_get();
99 char pager_progress_str[65] = { 0 }; /* Lots of space for translations */
100
101 long offset;
102 if (priv->lines && (priv->cur_line <= priv->lines_used))
103 offset = priv->lines[priv->cur_line].offset;
104 else
105 offset = priv->bytes_read;
106
107 if (offset < (priv->st.st_size - 1))
108 {
109 const long percent = (100 * offset) / priv->st.st_size;
110 /* L10N: Pager position percentage.
111 `%ld` is the number, `%%` is the percent symbol.
112 They may be reordered, or space inserted, if you wish. */
113 snprintf(pager_progress_str, sizeof(pager_progress_str), _("%ld%%"), percent);
114 }
115 else
116 {
117 const char *msg = (priv->top_line == 0) ?
118 /* L10N: Status bar message: the entire email is visible in the pager */
119 _("all") :
120 /* L10N: Status bar message: the end of the email is visible in the pager */
121 _("end");
122 mutt_str_copy(pager_progress_str, msg, sizeof(pager_progress_str));
123 }
124
125 if ((priv->pview->mode == PAGER_MODE_EMAIL) || (priv->pview->mode == PAGER_MODE_ATTACH_E))
126 {
127 int msg_in_pager = shared->mailbox_view ? shared->mailbox_view->msg_in_pager : -1;
128
129 const struct Expando *c_pager_format = cs_subset_expando(shared->sub, "pager_format");
130 mutt_make_string(buf, win->state.cols, c_pager_format, shared->mailbox, msg_in_pager,
131 shared->email, MUTT_FORMAT_NO_FLAGS, pager_progress_str);
132 }
133 else
134 {
135 buf_printf(buf, "%s (%s)", priv->pview->banner, pager_progress_str);
136 }
137
138 if (!mutt_str_equal(buf_string(buf), pbar_data->pager_format))
139 {
140 mutt_str_replace(&pbar_data->pager_format, buf_string(buf));
141 win->actions |= WA_REPAINT;
142 }
143
144 buf_pool_release(&buf);
145 return 0;
146}
int buf_printf(struct Buffer *buf, const char *fmt,...)
Format a string overwriting a Buffer.
Definition buffer.c:161
int mutt_make_string(struct Buffer *buf, size_t max_cols, const struct Expando *exp, struct Mailbox *m, int inpgr, struct Email *e, MuttFormatFlags flags, const char *progress)
Create formatted strings using mailbox expandos.
Definition dlg_index.c:821
#define _(a)
Definition message.h:28
size_t mutt_str_copy(char *dest, const char *src, size_t dsize)
Copy a string into a buffer (guaranteeing NUL-termination)
Definition string.c:586
@ PAGER_MODE_EMAIL
Pager is invoked via 1st path. The mime part is selected automatically.
Definition lib.h:138
@ PAGER_MODE_ATTACH_E
A special case of PAGER_MODE_ATTACH - attachment is a full-blown email message.
Definition lib.h:140
struct Email * email
Currently selected Email.
Definition shared_data.h:42
struct Mailbox * mailbox
Current Mailbox.
Definition shared_data.h:41
struct MailboxView * mailbox_view
Current Mailbox view.
Definition shared_data.h:40
LOFF_T offset
Offset into Email file (PagerPrivateData->fp)
Definition display.h:51
int msg_in_pager
Message currently shown in the pager.
Definition mview.h:45
Data to draw the Pager Bar.
Definition pbar.c:81
struct PagerPrivateData * priv
Private Pager data.
Definition pbar.c:83
char * pager_format
Cached status string.
Definition pbar.c:84
struct IndexSharedData * shared
Shared Index data.
Definition pbar.c:82
Private state data for the Pager.
int cur_line
Current line (last line visible on screen)
int lines_used
Size of lines array (used entries)
struct Line * lines
Array of text lines in pager.
LOFF_T bytes_read
Number of bytes read from file.
int top_line
First visible line on screen.
struct stat st
Stats about Email file.
struct PagerView * pview
Object to view in the pager.
enum PagerMode mode
Pager mode.
Definition lib.h:174
const char * banner
Title to display in status bar.
Definition lib.h:176
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ progress_window_recalc()

static int progress_window_recalc ( struct MuttWindow * win)
static

Recalculate the Progress Bar - Implements MuttWindow::recalc() -.

Definition at line 135 of file window.c.

136{
137 if (!win || !win->wdata)
138 return -1;
139
140 struct ProgressWindowData *wdata = win->wdata;
141 wdata->display_pos = wdata->update_pos;
142 wdata->display_time = wdata->update_time;
143
144 if (wdata->is_bytes)
145 {
146 struct Buffer *pretty = buf_pool_get();
147 mutt_str_pretty_size(pretty, wdata->display_pos);
148 mutt_str_copy(wdata->pretty_pos, buf_string(pretty), sizeof(wdata->pretty_pos));
149 buf_pool_release(&pretty);
150 }
151
152 if ((wdata->update_percent < 0) && (wdata->size != 0))
153 wdata->display_percent = MIN(100 * wdata->display_pos / wdata->size, 100);
154 else
155 wdata->display_percent = wdata->update_percent;
156
157 win->actions |= WA_REPAINT;
158 return 0;
159}
#define MIN(a, b)
Return the minimum of two values.
Definition memory.h:40
int mutt_str_pretty_size(struct Buffer *buf, size_t num)
Display an abbreviated size, like 3.4K.
Definition muttlib.c:935
Progress Bar Window Data.
Definition wdata.h:36
int update_percent
Updated percentage complete.
Definition wdata.h:55
size_t size
Total expected size.
Definition wdata.h:42
char pretty_pos[24]
Pretty string for the position.
Definition wdata.h:51
uint64_t update_time
Time of last update.
Definition wdata.h:56
int display_percent
Displayed percentage complete.
Definition wdata.h:49
size_t display_pos
Displayed position.
Definition wdata.h:48
bool is_bytes
true if measuring bytes
Definition wdata.h:45
size_t update_pos
Updated position.
Definition wdata.h:54
struct MuttWindow * win
Window to draw on.
Definition wdata.h:37
uint64_t display_time
Time of last display.
Definition wdata.h:50
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ sb_recalc()

int sb_recalc ( struct MuttWindow * win)

Recalculate the Sidebar display - Implements MuttWindow::recalc() -.

Definition at line 555 of file window.c.

556{
558 struct IndexSharedData *shared = wdata->shared;
559
560 if (ARRAY_EMPTY(&wdata->entries))
561 {
562 struct MailboxArray ma = neomutt_mailboxes_get(NeoMutt, MUTT_MAILBOX_ANY);
563 struct Mailbox **mp = NULL;
564 ARRAY_FOREACH(mp, &ma)
565 {
566 struct Mailbox *m = *mp;
567
568 if (m->visible)
569 sb_add_mailbox(wdata, m);
570 }
571 ARRAY_FREE(&ma); // Clean up the ARRAY, but not the Mailboxes
572 }
573
574 if (!prepare_sidebar(wdata, win->state.rows))
575 {
576 win->actions |= WA_REPAINT;
577 return 0;
578 }
579
580 int num_rows = win->state.rows;
581 int num_cols = win->state.cols;
582
583 if (ARRAY_EMPTY(&wdata->entries) || (num_rows <= 0))
584 return 0;
585
586 if (wdata->top_index < 0)
587 return 0;
588
589 int width = num_cols - wdata->divider_width;
590 int row = 0;
591 struct Mailbox *m_cur = shared->mailbox;
592 struct SbEntry **sbep = NULL;
593 ARRAY_FOREACH_FROM(sbep, &wdata->entries, wdata->top_index)
594 {
595 if (row >= num_rows)
596 break;
597
598 if ((*sbep)->is_hidden)
599 continue;
600
601 struct SbEntry *entry = (*sbep);
602 struct Mailbox *m = entry->mailbox;
603
604 const int entryidx = ARRAY_FOREACH_IDX_sbep;
605 entry->color = calc_color(m, (entryidx == wdata->opn_index),
606 (entryidx == wdata->hil_index));
607
608 if (m_cur && (m_cur->realpath[0] != '\0') &&
609 mutt_str_equal(m->realpath, m_cur->realpath))
610 {
611 m->msg_unread = m_cur->msg_unread;
612 m->msg_count = m_cur->msg_count;
613 m->msg_flagged = m_cur->msg_flagged;
614 }
615
617 make_sidebar_entry(entry->display, sizeof(entry->display), width, entry, shared);
618 row++;
619 }
620
621 win->actions |= WA_REPAINT;
622 mutt_debug(LL_DEBUG5, "recalc done, request WA_REPAINT\n");
623 return 0;
624}
#define ARRAY_FOREACH(elem, head)
Iterate over all elements of the array.
Definition array.h:223
#define ARRAY_EMPTY(head)
Check if an array is empty.
Definition array.h:74
#define ARRAY_FREE(head)
Release all memory.
Definition array.h:209
#define ARRAY_FOREACH_FROM(elem, head, from)
Iterate from an index to the end.
Definition array.h:235
@ MUTT_MAILBOX_ANY
Match any Mailbox type.
Definition mailbox.h:41
struct MailboxArray neomutt_mailboxes_get(struct NeoMutt *n, enum MailboxType type)
Get an Array of matching Mailboxes.
Definition neomutt.c:526
void sb_add_mailbox(struct SidebarWindowData *wdata, struct Mailbox *m)
Add a Mailbox to the Sidebar.
Definition sidebar.c:100
struct SidebarWindowData * sb_wdata_get(struct MuttWindow *win)
Get the Sidebar data for this window.
Definition wdata.c:77
static const struct AttrColor * calc_color(const struct Mailbox *m, bool current, bool highlight)
Calculate the colour of a Sidebar row.
Definition window.c:221
void sb_entry_set_display_name(struct SbEntry *entry)
Set the display name for an SbEntry.
Definition window.c:305
static bool prepare_sidebar(struct SidebarWindowData *wdata, int page_size)
Prepare the list of SbEntry's for the sidebar display.
Definition window.c:470
static void make_sidebar_entry(char *buf, size_t buflen, int width, struct SbEntry *sbe, struct IndexSharedData *shared)
Turn mailbox data into a sidebar string.
Definition window.c:358
A mailbox.
Definition mailbox.h:78
char * realpath
Used for duplicate detection, context comparison, and the sidebar.
Definition mailbox.h:80
int msg_count
Total number of messages.
Definition mailbox.h:87
bool visible
True if a result of "mailboxes".
Definition mailbox.h:129
int msg_flagged
Number of flagged messages.
Definition mailbox.h:89
int msg_unread
Number of unread messages.
Definition mailbox.h:88
Info about folders in the sidebar.
Definition private.h:42
const struct AttrColor * color
Colour to use.
Definition private.h:48
char display[256]
Formatted string to display.
Definition private.h:44
struct Mailbox * mailbox
Mailbox this represents.
Definition private.h:46
Sidebar private Window data -.
Definition private.h:91
int top_index
First mailbox visible in sidebar.
Definition private.h:96
short divider_width
Width of the divider in screen columns.
Definition private.h:105
int hil_index
Highlighted mailbox.
Definition private.h:98
struct IndexSharedData * shared
Shared Index Data.
Definition private.h:93
int opn_index
Current (open) mailbox.
Definition private.h:97
struct MuttWindow * win
Sidebar Window.
Definition private.h:92
struct SbEntryArray entries
Items to display in the sidebar.
Definition private.h:94
+ Here is the call graph for this function:
+ Here is the caller graph for this function: