Code

screen_queue: use mpdclient_settings_name() for the title
[ncmpc.git] / src / screen_queue.c
index d98445ded49bc0a1a6b3f8e2406e191dcd69dc27..7bb30aefd79973a292d74c63a5739fd97ae3f763 100644 (file)
 #define MAX_SONG_LENGTH 512
 
 #ifndef NCMPC_MINI
-typedef struct
-{
-       GList **list;
-       GList **dir_list;
-       struct mpdclient *c;
-} completion_callback_data_t;
-
 static struct hscroll hscroll;
 #endif
 
@@ -68,6 +61,11 @@ static int selected_song_id = -1;
 static struct list_window *lw;
 static guint timer_hide_cursor_id;
 
+static struct queue_screen_data {
+       unsigned last_connection_id;
+       char *connection_name;
+} queue_screen;
+
 static void
 screen_queue_paint(void);
 
@@ -206,9 +204,15 @@ static void add_dir(GCompletion *gcmp, gchar *dir, GList **dir_list,
        *dir_list = g_list_append(*dir_list, g_strdup(dir));
 }
 
+struct completion_callback_data {
+       GList **list;
+       GList **dir_list;
+       struct mpdclient *c;
+};
+
 static void add_pre_completion_cb(GCompletion *gcmp, gchar *line, void *data)
 {
-       completion_callback_data_t *tmp = (completion_callback_data_t *)data;
+       struct completion_callback_data *tmp = data;
        GList **dir_list = tmp->dir_list;
        GList **list = tmp->list;
        struct mpdclient *c = tmp->c;
@@ -227,7 +231,7 @@ static void add_pre_completion_cb(GCompletion *gcmp, gchar *line, void *data)
 static void add_post_completion_cb(GCompletion *gcmp, gchar *line,
                                   GList *items, void *data)
 {
-       completion_callback_data_t *tmp = (completion_callback_data_t *)data;
+       struct completion_callback_data *tmp = data;
        GList **dir_list = tmp->dir_list;
        GList **list = tmp->list;
        struct mpdclient *c = tmp->c;
@@ -253,7 +257,7 @@ handle_add_to_playlist(struct mpdclient *c)
 
        GList *list = NULL;
        GList *dir_list = NULL;
-       completion_callback_data_t data = {
+       struct completion_callback_data data = {
                .list = &list,
                .dir_list = &dir_list,
                .c = c,
@@ -368,15 +372,13 @@ static void
 screen_queue_exit(void)
 {
        list_window_free(lw);
+       g_free(queue_screen.connection_name);
 }
 
 static const char *
 screen_queue_title(char *str, size_t size)
 {
-       if (options.host == NULL)
-               return _("Queue");
-
-       g_snprintf(str, size, _("Queue on %s"), options.host);
+       g_snprintf(str, size, _("Queue on %s"), queue_screen.connection_name);
        return str;
 }
 
@@ -415,6 +417,12 @@ screen_queue_paint(void)
 static void
 screen_queue_update(struct mpdclient *c)
 {
+       if (c->connection_id != queue_screen.last_connection_id) {
+               queue_screen.last_connection_id = c->connection_id;
+               g_free(queue_screen.connection_name);
+               queue_screen.connection_name = mpdclient_settings_name(c);
+       }
+
        if (c->events & MPD_IDLE_QUEUE)
                screen_queue_restore_selection();
        else