diff options
author | Přemysl Eric Janouch <p@janouch.name> | 2021-11-16 03:41:30 +0100 |
---|---|---|
committer | Přemysl Eric Janouch <p@janouch.name> | 2021-11-16 04:48:52 +0100 |
commit | 227b8e0fa26018f2599df99ee7ec4d0439c4ae73 (patch) | |
tree | 8f81853ae195824348fb9e2e04bf864089ae2c14 | |
parent | e66e9f249a2e42aaea2b92b36118a2f1c9c47618 (diff) | |
download | nncmpp-227b8e0fa26018f2599df99ee7ec4d0439c4ae73.tar.gz nncmpp-227b8e0fa26018f2599df99ee7ec4d0439c4ae73.tar.xz nncmpp-227b8e0fa26018f2599df99ee7ec4d0439c4ae73.zip |
Do not show both volumes if unnecessary
Also, make it apparent which value comes from where.
-rw-r--r-- | nncmpp.c | 50 |
1 files changed, 32 insertions, 18 deletions
@@ -1243,6 +1243,7 @@ static struct app_context #ifdef WITH_PULSE struct pulse pulse; ///< PulseAudio control #endif // WITH_PULSE + bool pulse_control_requested; ///< PulseAudio control desired by user struct line_editor editor; ///< Line editor struct poller_idle refresh_event; ///< Refresh the screen @@ -1304,6 +1305,13 @@ on_poll_elapsed_time_changed (struct config_item *item) g.elapsed_poll = item->value.boolean; } +static void +on_pulseaudio_changed (struct config_item *item) +{ + // This is only set once, on application startup + g.pulse_control_requested = item->value.boolean; +} + static struct config_schema g_config_settings[] = { { .name = "address", @@ -1340,6 +1348,7 @@ static struct config_schema g_config_settings[] = { .name = "pulseaudio", .comment = "Look up MPD in PulseAudio for improved volume controls", .type = CONFIG_ITEM_BOOLEAN, + .on_change = on_pulseaudio_changed, .default_ = "off" }, #endif // WITH_PULSE @@ -1376,14 +1385,6 @@ get_config_string (struct config_item *root, const char *key) return item->value.string.str; } -static bool -get_config_boolean (struct config_item *root, const char *key) -{ - struct config_item *item = config_item_get (root, key, NULL); - hard_assert (item && item->type == CONFIG_ITEM_BOOLEAN); - return item->value.boolean; -} - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - static void @@ -1782,18 +1783,31 @@ app_draw_status (void) // It gets a bit complicated due to the only right-aligned item on the row struct str volume = str_make (); - int remaining = COLS - buf.total_width; - if (g.volume >= 0) - { - str_append (&volume, " "); #ifdef WITH_PULSE - if (pulse_volume_status (&g.pulse, &volume)) - str_append (&volume, " @ "); -#endif // WITH_PULSE - str_append_printf (&volume, "%3d%%", g.volume); - remaining -= volume.len; + if (g.pulse_control_requested) + { + struct str buf = str_make (); + if (pulse_volume_status (&g.pulse, &buf)) + { + if (g.volume >= 0 && g.volume != 100) + str_append_printf (&buf, " (%d%%)", g.volume); + } + else + { + if (g.volume >= 0) + str_append_printf (&buf, "(%d%%)", g.volume); + } + if (buf.len) + str_append_printf (&volume, " %s", buf.str); + + str_free (&buf); } + else +#endif // WITH_PULSE + if (g.volume >= 0) + str_append_printf (&volume, " %3d%%", g.volume); + int remaining = COLS - buf.total_width - volume.len; if (!stopped && g.song_elapsed >= 0 && g.song_duration >= 1 && remaining > 0) { @@ -4173,7 +4187,7 @@ static void pulse_update (void) { struct mpd_client *c = &g.client; - if (!get_config_boolean (g.config.root, "settings.pulseaudio")) + if (!g.pulse_control_requested) return; // The read permission is sufficient for this command |