Don't default to negative selection

This commit is contained in:
Přemysl Eric Janouch 2017-06-04 00:05:20 +02:00
parent 86b87bee74
commit 653ff1373f
Signed by: p
GPG Key ID: B715679E3A361BE6
1 changed files with 8 additions and 7 deletions

View File

@ -645,7 +645,7 @@ tab_init (struct tab *self, const char *name)
// Assuming tab names are pure ASCII, otherwise this would be inaccurate // Assuming tab names are pure ASCII, otherwise this would be inaccurate
// and we'd need to filter it first to replace invalid chars with '?' // and we'd need to filter it first to replace invalid chars with '?'
self->name_width = u8_strwidth ((uint8_t *) self->name, locale_charset ()); self->name_width = u8_strwidth ((uint8_t *) self->name, locale_charset ());
self->item_selected = -1; self->item_selected = 0;
} }
static void static void
@ -1316,7 +1316,7 @@ static void
app_ensure_selection_visible (void) app_ensure_selection_visible (void)
{ {
struct tab *tab = g.active_tab; struct tab *tab = g.active_tab;
if (tab->item_selected < 0) if (tab->item_selected < 0 || !tab->item_count)
return; return;
int too_high = tab->item_top - tab->item_selected; int too_high = tab->item_top - tab->item_selected;
@ -1334,8 +1334,8 @@ app_move_selection (int diff)
{ {
struct tab *tab = g.active_tab; struct tab *tab = g.active_tab;
int fixed = tab->item_selected += diff; int fixed = tab->item_selected += diff;
fixed = MAX (fixed, 0);
fixed = MIN (fixed, (int) tab->item_count - 1); fixed = MIN (fixed, (int) tab->item_count - 1);
fixed = MAX (fixed, 0);
bool result = tab->item_selected != fixed; bool result = tab->item_selected != fixed;
tab->item_selected = fixed; tab->item_selected = fixed;
@ -1556,7 +1556,8 @@ app_process_action (enum action action)
case ACTION_GOTO_BOTTOM: case ACTION_GOTO_BOTTOM:
if (tab->item_count) if (tab->item_count)
{ {
g.active_tab->item_selected = (int) g.active_tab->item_count - 1; g.active_tab->item_selected =
MAX (0, (int) g.active_tab->item_count - 1);
app_ensure_selection_visible (); app_ensure_selection_visible ();
app_invalidate (); app_invalidate ();
} }
@ -1814,7 +1815,7 @@ static bool
current_tab_on_action (enum action action) current_tab_on_action (enum action action)
{ {
struct tab *self = g.active_tab; struct tab *self = g.active_tab;
if (self->item_selected < 0) if (self->item_selected < 0 || !self->item_count)
return false; return false;
switch (action) switch (action)
@ -2034,7 +2035,7 @@ static bool
library_tab_on_action (enum action action) library_tab_on_action (enum action action)
{ {
struct tab *self = g.active_tab; struct tab *self = g.active_tab;
if (self->item_selected < 0) if (self->item_selected < 0 || !self->item_count)
return false; return false;
struct mpd_client *c = &g.client; struct mpd_client *c = &g.client;
@ -2309,7 +2310,7 @@ static bool
streams_tab_on_action (enum action action) streams_tab_on_action (enum action action)
{ {
struct tab *self = g.active_tab; struct tab *self = g.active_tab;
if (self->item_selected < 0) if (self->item_selected < 0 || !self->item_count)
return false; return false;
// For simplicity the URL is the string following the stream name // For simplicity the URL is the string following the stream name