[pulseaudio-commits] [Git][pulseaudio/pavucontrol][master] devicewidget: fix the enabling logic of the advanced options expander

Arun Raghavan gitlab at gitlab.freedesktop.org
Fri Sep 20 01:37:22 UTC 2019



Arun Raghavan pushed to branch master at PulseAudio / pavucontrol


Commits:
2a1072cc by Tanu Kaskinen at 2019-09-19T12:26:04Z
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).

- - - - -


4 changed files:

- src/devicewidget.cc
- src/devicewidget.h
- src/pavucontrol.glade
- src/sinkwidget.cc


Changes:

=====================================
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();
+}


=====================================
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;
 


=====================================
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">


=====================================
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
 }
 



View it on GitLab: https://gitlab.freedesktop.org/pulseaudio/pavucontrol/commit/2a1072cc2ba5523272c49a87a465853e6ecdbca3

-- 
View it on GitLab: https://gitlab.freedesktop.org/pulseaudio/pavucontrol/commit/2a1072cc2ba5523272c49a87a465853e6ecdbca3
You're receiving this email because of your account on gitlab.freedesktop.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/pulseaudio-commits/attachments/20190920/c71d1850/attachment-0001.html>


More information about the pulseaudio-commits mailing list