[pulseaudio-commits] src/devicewidget.cc src/devicewidget.h src/pavucontrol.glade src/sinkwidget.cc

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Sep 20 01:37:22 UTC 2019


 src/devicewidget.cc   |   32 +++++++++++++++++++++++++-------
 src/devicewidget.h    |    9 +++++++++
 src/pavucontrol.glade |    2 --
 src/sinkwidget.cc     |   11 ++++++-----
 4 files changed, 40 insertions(+), 14 deletions(-)

New commits:
commit 2a1072cc2ba5523272c49a87a465853e6ecdbca3
Author: Tanu Kaskinen <tanuk at iki.fi>
Date:   Thu Sep 19 15:21:26 2019 +0300

    devicewidget: fix the enabling logic of the advanced options expander
    
    The old logic disabled the expander always when a sink didn't have any
    ports. That's bad if the sink has no ports but supports configuring
    formats. That hasn't caused problems so far, but I have a patch for
    module-null-sink that will enable format configuration support, and the
    null sink has no ports, so it's affected by this issue.
    
    This patch also changes things so that the expander is completely hidden
    when it's disabled instead just setting it non-sensitive. I think that's
    better (at least it saves some space).

diff --git a/src/devicewidget.cc b/src/devicewidget.cc
index b7405bb..e1b1869 100644
--- a/src/devicewidget.cc
+++ b/src/devicewidget.cc
@@ -33,7 +33,8 @@
 /*** DeviceWidget ***/
 DeviceWidget::DeviceWidget(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& x) :
     MinimalStreamWidget(cobject),
-    offsetButtonEnabled(false) {
+    offsetButtonEnabled(false),
+    mDigital(false) {
 
     /* MinimalStreamWidget member variables. */
     x->get_widget("deviceChannelsVBox", channelsVBox);
@@ -211,19 +212,17 @@ void DeviceWidget::prepareMenu() {
     if (ports.size() > 0) {
         portSelect->show();
 
-        if (pa_context_get_server_protocol_version(get_context()) >= 27) {
+        if (pa_context_get_server_protocol_version(get_context()) >= 27)
             offsetSelect->show();
-            advancedOptions->set_sensitive(true);
-        } else {
-            /* advancedOptions has sensitive=false by default */
+        else
             offsetSelect->hide();
-        }
 
     } else {
         portSelect->hide();
-        advancedOptions->set_sensitive(false);
         offsetSelect->hide();
     }
+
+    updateAdvancedOptionsVisibility();
 }
 
 bool DeviceWidget::onContextTriggerEvent(GdkEventButton* event) {
@@ -276,3 +275,22 @@ void DeviceWidget::renamePopup() {
     }
     delete dialog;
 }
+
+void DeviceWidget::updateAdvancedOptionsVisibility() {
+    bool visible = false;
+
+    if (mDigital) {
+        /* We need to show the format configuration options. */
+        visible = true;
+    }
+
+    if (ports.size() > 0) {
+        /* We need to show the latency offset spin button. */
+        visible = true;
+    }
+
+    if (visible)
+        advancedOptions->show();
+    else
+        advancedOptions->hide();
+}
diff --git a/src/devicewidget.h b/src/devicewidget.h
index 30a6672..862834d 100644
--- a/src/devicewidget.h
+++ b/src/devicewidget.h
@@ -78,6 +78,11 @@ public:
 protected:
     MainWindow *mpMainWindow;
 
+    /* Shows or hides the advanced options expander depending on whether it's
+     * useful or not. This is called always after ports or mDigital have been
+     * updated. */
+    void updateAdvancedOptionsVisibility();
+
     virtual void onPortChange() = 0;
 
     Gtk::Menu contextMenu;
@@ -103,6 +108,10 @@ protected:
     Glib::RefPtr<Gtk::ListStore> treeModel;
     Glib::RefPtr<Gtk::Adjustment> offsetAdjustment;
 
+    /* Set to true for "digital" sinks (in practice this means those sinks that
+     * support format configuration). */
+    bool mDigital;
+
 private:
     Glib::ustring mDeviceType;
 
diff --git a/src/pavucontrol.glade b/src/pavucontrol.glade
index 96c35be..a66e193 100644
--- a/src/pavucontrol.glade
+++ b/src/pavucontrol.glade
@@ -419,8 +419,6 @@
                 </child>
                 <child>
                   <object class="GtkExpander" id="advancedOptions">
-                    <property name="visible">True</property>
-                    <property name="sensitive">False</property>
                     <property name="can_focus">True</property>
                     <child>
                       <object class="GtkVBox" id="vbox1">
diff --git a/src/sinkwidget.cc b/src/sinkwidget.cc
index f682cf2..b9002dd 100644
--- a/src/sinkwidget.cc
+++ b/src/sinkwidget.cc
@@ -168,14 +168,15 @@ void SinkWidget::onPortChange() {
 }
 
 void SinkWidget::setDigital(bool digital) {
+    mDigital = digital;
+
 #if HAVE_EXT_DEVICE_RESTORE_API
-    if (digital) {
+    if (digital)
         encodingSelect->show();
-        advancedOptions->set_sensitive(true);
-    } else {
-        /* advancedOptions has sensitive=false by default */
+    else
         encodingSelect->hide();
-    }
+
+    updateAdvancedOptionsVisibility();
 #endif
 }
 



More information about the pulseaudio-commits mailing list