Compare commits
3 Commits
1a671dfad5
...
5aa07fd8af
Author | SHA1 | Date | |
---|---|---|---|
5aa07fd8af | |||
2060da4a8e | |||
f5b5cec340 |
36
nncmpp.c
36
nncmpp.c
@ -154,6 +154,8 @@ xbasename (const char *path)
|
|||||||
return last_slash ? last_slash + 1 : path;
|
return last_slash ? last_slash + 1 : path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *xstrdup0 (const char *s) { return s ? xstrdup (s) : NULL; }
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
latin1_to_utf8 (const char *latin1)
|
latin1_to_utf8 (const char *latin1)
|
||||||
{
|
{
|
||||||
@ -4364,7 +4366,7 @@ mpd_find_pos_of_id (const char *desired_id)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static const char *
|
||||||
mpd_id_of_pos (int pos)
|
mpd_id_of_pos (int pos)
|
||||||
{
|
{
|
||||||
compact_map_t map = item_list_get (&g.playlist, pos);
|
compact_map_t map = item_list_get (&g.playlist, pos);
|
||||||
@ -4374,29 +4376,39 @@ mpd_id_of_pos (int pos)
|
|||||||
static void
|
static void
|
||||||
mpd_process_info (const struct strv *data)
|
mpd_process_info (const struct strv *data)
|
||||||
{
|
{
|
||||||
int *selected = &g_current_tab.item_selected;
|
struct tab *tab = &g_current_tab;
|
||||||
int *marked = &g_current_tab.item_mark;
|
char *prev_sel_id = xstrdup0 (mpd_id_of_pos (tab->item_selected));
|
||||||
char *prev_sel_id = mpd_id_of_pos (*selected);
|
char *prev_mark_id = xstrdup0 (mpd_id_of_pos (tab->item_mark));
|
||||||
char *prev_mark_id = mpd_id_of_pos (*marked);
|
char *fallback_id = NULL;
|
||||||
if (prev_sel_id) prev_sel_id = xstrdup (prev_sel_id);
|
|
||||||
if (prev_mark_id) prev_mark_id = xstrdup (prev_mark_id);
|
struct tab_range r = tab_selection_range (g.active_tab);
|
||||||
|
if (r.upto >= 0)
|
||||||
|
{
|
||||||
|
if (!(fallback_id = xstrdup0 (mpd_id_of_pos (r.upto + 1))))
|
||||||
|
fallback_id = xstrdup0 (mpd_id_of_pos (r.from - 1));
|
||||||
|
}
|
||||||
|
|
||||||
mpd_process_info_data (data);
|
mpd_process_info_data (data);
|
||||||
|
|
||||||
const char *sel_id = mpd_id_of_pos (*selected);
|
const char *sel_id = mpd_id_of_pos (tab->item_selected);
|
||||||
const char *mark_id = mpd_id_of_pos (*marked);
|
const char *mark_id = mpd_id_of_pos (tab->item_mark);
|
||||||
|
|
||||||
if (prev_mark_id && (!mark_id || strcmp (prev_mark_id, mark_id)))
|
if (prev_mark_id && (!mark_id || strcmp (prev_mark_id, mark_id)))
|
||||||
*marked = mpd_find_pos_of_id (prev_mark_id);
|
tab->item_mark = mpd_find_pos_of_id (prev_mark_id);
|
||||||
if (prev_sel_id && (!sel_id || strcmp (prev_sel_id, sel_id)))
|
if (prev_sel_id && (!sel_id || strcmp (prev_sel_id, sel_id)))
|
||||||
{
|
{
|
||||||
if ((*selected = mpd_find_pos_of_id (prev_sel_id)) < 0)
|
if ((tab->item_selected = mpd_find_pos_of_id (prev_sel_id)) < 0)
|
||||||
*marked = -1;
|
{
|
||||||
|
tab->item_mark = -1;
|
||||||
|
if (fallback_id)
|
||||||
|
tab->item_selected = mpd_find_pos_of_id (fallback_id);
|
||||||
|
}
|
||||||
app_move_selection (0);
|
app_move_selection (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
free (prev_sel_id);
|
free (prev_sel_id);
|
||||||
free (prev_mark_id);
|
free (prev_mark_id);
|
||||||
|
free (fallback_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user