summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/media-keys/gsd-media-keys-manager.c29
1 files changed, 23 insertions, 6 deletions
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
index ed91831e..0071d593 100644
--- a/plugins/media-keys/gsd-media-keys-manager.c
+++ b/plugins/media-keys/gsd-media-keys-manager.c
@@ -169,11 +169,14 @@ struct GsdMediaKeysManagerPrivate
GHashTable *streams; /* key = X device ID, value = stream id */
GUdevClient *udev_client;
#endif /* HAVE_GUDEV */
- guint audio_selection_watch_id;
- guint audio_selection_signal_id;
- GDBusConnection *audio_selection_conn;
- gboolean audio_selection_requested;
- guint audio_selection_device_id;
+
+ guint audio_selection_watch_id;
+ guint audio_selection_signal_id;
+ GDBusConnection *audio_selection_conn;
+ gboolean audio_selection_requested;
+ gboolean audio_selection_pending;
+ guint audio_selection_device_id;
+ GvcHeadsetPortChoice audio_selection_choices;
GSettings *settings;
GHashTable *custom_settings;
@@ -2688,8 +2691,12 @@ audio_selection_needed (GvcMixerControl *control,
gchar *args[G_N_ELEMENTS (audio_selection_choices) + 1];
guint i, n;
- if (!priv->audio_selection_conn)
+ if (!priv->audio_selection_conn) {
+ priv->audio_selection_pending = show_dialog;
+ priv->audio_selection_device_id = id;
+ priv->audio_selection_choices = choices;
return;
+ }
if (priv->audio_selection_requested) {
g_dbus_connection_call (priv->audio_selection_conn,
@@ -2744,6 +2751,16 @@ audio_selection_appeared (GDBusConnection *connection,
audio_selection_done,
manager,
NULL);
+
+ if (manager->priv->audio_selection_pending) {
+ manager->priv->audio_selection_pending = FALSE;
+ /* Emulate audio_selection_needed call */
+ audio_selection_needed (manager->priv->volume,
+ manager->priv->audio_selection_device_id,
+ TRUE,
+ manager->priv->audio_selection_choices,
+ manager);
+ }
}
static void