Clarify panel->currrent if file panel is empty.

* (panel_do_cd_int): set panel->current to -1 file list is empty.
  * (panel_set_current_by_name): likewise.
  * (panel_sized_with_dir_new): likewise.
  * (panel_reload): likewise.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
Andrew Borodin 2024-10-19 10:34:31 +03:00
parent 1ac839d20c
commit f147c8b3e2

View File

@ -2158,6 +2158,21 @@ panel_select_ext_cmd (WPanel *panel)
/* --------------------------------------------------------------------------------------------- */
static void
panel_set_current (WPanel *panel, int i)
{
if (i != panel->current)
{
panel->dirty = TRUE;
panel->current = i;
panel->top = panel->current - (WIDGET (panel)->rect.lines - 2) / 2;
if (panel->top < 0)
panel->top = 0;
}
}
/* --------------------------------------------------------------------------------------------- */
static int
panel_current_at_half (const WPanel *panel)
{
@ -3471,6 +3486,9 @@ panel_do_cd_int (WPanel *panel, const vfs_path_t *new_dir_vpath, enum cd_enum cd
&panel->sort_info, &panel->filter))
message (D_ERROR, MSG_ERROR, _("Cannot read directory contents"));
if (panel->dir.len == 0)
panel_set_current (panel, -1);
panel_set_current_by_name (panel, get_parent_dir_name (panel->cwd_vpath, olddir_vpath));
load_hint (FALSE);
@ -4272,21 +4290,6 @@ update_one_panel (int which, panel_update_flags_t flags, const char *current_fil
/* --------------------------------------------------------------------------------------------- */
static void
panel_set_current (WPanel *panel, int i)
{
if (i != panel->current)
{
panel->dirty = TRUE;
panel->current = i;
panel->top = panel->current - (WIDGET (panel)->rect.lines - 2) / 2;
if (panel->top < 0)
panel->top = 0;
}
}
/* --------------------------------------------------------------------------------------------- */
/* event callback */
static gboolean
event_update_panels (const gchar *event_group_name, const gchar *event_name,
@ -4444,6 +4447,12 @@ panel_set_current_by_name (WPanel *panel, const char *name)
int i;
char *subdir;
if (panel->dir.len == 0)
{
panel_set_current (panel, -1);
return;
}
if (name == NULL)
{
panel_set_current (panel, 0);
@ -4675,6 +4684,9 @@ panel_sized_with_dir_new (const char *panel_name, const WRect *r, const vfs_path
&panel->sort_info, &panel->filter))
message (D_ERROR, MSG_ERROR, _("Cannot read directory contents"));
if (panel->dir.len == 0)
panel_set_current (panel, -1);
/* Restore old right path */
if (curdir != NULL)
{
@ -4724,7 +4736,10 @@ panel_reload (WPanel *panel)
message (D_ERROR, MSG_ERROR, _("Cannot read directory contents"));
panel->dirty = TRUE;
if (panel->current >= panel->dir.len)
if (panel->dir.len == 0)
panel_set_current (panel, -1);
else if (panel->current >= panel->dir.len)
panel_set_current (panel, panel->dir.len - 1);
recalculate_panel_summary (panel);