Skip to content

Commit 1dbe86a

Browse files
authored
csd-media-keys: Show device description on volume OSD (#399)
This allows us to pass a label to the Cinnamon OSD when a device like headphones are plugged in. Since these outputs each have there own volume level, this makes it easier for a user to identify what they are changing.
1 parent 57b8a0a commit 1dbe86a

1 file changed

Lines changed: 24 additions & 8 deletions

File tree

plugins/media-keys/csd-media-keys-manager.c

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,7 @@ cinnamon_proxy_complete (GObject *source,
399399
static void
400400
show_osd (CsdMediaKeysManager *manager,
401401
const char *icon,
402+
const char *label,
402403
int level,
403404
int outx,
404405
int outy)
@@ -416,6 +417,9 @@ show_osd (CsdMediaKeysManager *manager,
416417
if (icon)
417418
g_variant_builder_add (&builder, "{sv}",
418419
"icon", g_variant_new_string (icon));
420+
if (label)
421+
g_variant_builder_add (&builder, "{sv}",
422+
"label", g_variant_new_string (label));
419423
if (level >= 0)
420424
g_variant_builder_add (&builder, "{sv}",
421425
"level", g_variant_new_int32 (level));
@@ -642,7 +646,7 @@ do_eject_action (CsdMediaKeysManager *manager)
642646
}
643647

644648
/* Show the dialogue */
645-
show_osd (manager, "media-eject-symbolic", -1, OSD_ALL_OUTPUTS_X, OSD_ALL_OUTPUTS_Y);
649+
show_osd (manager, "media-eject-symbolic", NULL, -1, OSD_ALL_OUTPUTS_X, OSD_ALL_OUTPUTS_Y);
646650

647651
/* Clean up the drive selection and exit if no suitable
648652
* drives are found */
@@ -696,7 +700,7 @@ do_touchpad_osd_action (CsdMediaKeysManager *manager, gboolean state)
696700
{
697701
show_osd (manager,
698702
state ? "input-touchpad-symbolic" : "touchpad-disabled-symbolic",
699-
-1, OSD_ALL_OUTPUTS_X, OSD_ALL_OUTPUTS_Y);
703+
NULL, -1, OSD_ALL_OUTPUTS_X, OSD_ALL_OUTPUTS_Y);
700704
}
701705

702706
static void
@@ -732,11 +736,23 @@ show_sound_osd (CsdMediaKeysManager *manager,
732736
gboolean sound_changed,
733737
gboolean quiet)
734738
{
739+
GvcMixerUIDevice *device;
740+
const GvcMixerStreamPort *port;
735741
const char *icon;
736742

737743
icon = get_icon_name_for_volume (muted, vol, is_mic);
738-
739-
show_osd (manager, icon, vol, OSD_ALL_OUTPUTS_X, OSD_ALL_OUTPUTS_Y);
744+
port = gvc_mixer_stream_get_port (stream);
745+
if (g_strcmp0 (gvc_mixer_stream_get_form_factor (stream), "internal") != 0 ||
746+
(port != NULL &&
747+
g_strcmp0 (port->port, "analog-output-speaker") != 0 &&
748+
g_strcmp0 (port->port, "analog-output") != 0)) {
749+
device = gvc_mixer_control_lookup_device_from_stream (manager->priv->volume, stream);
750+
show_osd (manager, icon,
751+
gvc_mixer_ui_device_get_description (device),
752+
vol, OSD_ALL_OUTPUTS_X, OSD_ALL_OUTPUTS_Y);
753+
} else {
754+
show_osd (manager, icon, NULL, vol, OSD_ALL_OUTPUTS_X, OSD_ALL_OUTPUTS_Y);
755+
}
740756

741757
if (quiet == FALSE && sound_changed != FALSE && muted == FALSE) {
742758
gboolean enabled = g_settings_get_boolean (manager->priv->sound_settings, "volume-sound-enabled");
@@ -1233,7 +1249,7 @@ csd_media_player_key_pressed (CsdMediaKeysManager *manager,
12331249
if (!have_listeners) {
12341250
if (!mpris_controller_key (manager->priv->mpris_controller, key)) {
12351251
/* Popup a dialog with an (/) icon */
1236-
show_osd (manager, "action-unavailable-symbolic", -1, OSD_ALL_OUTPUTS_X, OSD_ALL_OUTPUTS_Y);
1252+
show_osd (manager, "action-unavailable-symbolic", NULL, -1, OSD_ALL_OUTPUTS_X, OSD_ALL_OUTPUTS_Y);
12371253
}
12381254
return TRUE;
12391255
}
@@ -1327,7 +1343,7 @@ do_video_rotate_lock_action (CsdMediaKeysManager *manager,
13271343
g_object_unref (settings);
13281344

13291345
show_osd (manager, locked ? "rotation-locked-symbolic"
1330-
: "rotation-allowed-symbolic", -1, OSD_ALL_OUTPUTS_X, OSD_ALL_OUTPUTS_Y);
1346+
: "rotation-allowed-symbolic", NULL, -1, OSD_ALL_OUTPUTS_X, OSD_ALL_OUTPUTS_Y);
13311347
}
13321348

13331349
static void
@@ -1488,7 +1504,7 @@ update_screen_cb (GObject *source_object,
14881504

14891505
/* update the dialog with the new value */
14901506
g_variant_get (variant, "(uii)", &percentage, &outx, &outy);
1491-
show_osd (manager, "display-brightness-symbolic", percentage, outx, outy);
1507+
show_osd (manager, "display-brightness-symbolic", NULL, percentage, outx, outy);
14921508
g_variant_unref (variant);
14931509
}
14941510

@@ -1570,7 +1586,7 @@ update_keyboard_cb (GObject *source_object,
15701586

15711587
/* update the dialog with the new value */
15721588
g_variant_get (new_percentage, "(u)", &percentage);
1573-
show_osd (manager, "keyboard-brightness-symbolic", percentage, OSD_ALL_OUTPUTS_X, OSD_ALL_OUTPUTS_Y);
1589+
show_osd (manager, "keyboard-brightness-symbolic", NULL, percentage, OSD_ALL_OUTPUTS_X, OSD_ALL_OUTPUTS_Y);
15741590
g_variant_unref (new_percentage);
15751591
}
15761592

0 commit comments

Comments
 (0)