2 commits - meson.build po/POTFILES.in src/cardwidget.cc src/cardwidget.ui src/channelwidget.cc src/channelwidget.ui src/devicewidget.cc src/devicewidget.ui src/mainwindow.cc src/mainwindow.ui src/meson.build src/pavucontrol.glade src/pavucontrol.gladep src/pavucontrol.h src/renamedialog.ui src/resources.gresource.xml src/rolewidget.cc src/sinkinputwidget.cc src/sinkwidget.cc src/sourceoutputwidget.cc src/sourcewidget.cc src/streamwidget.ui

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri May 17 01:28:25 UTC 2024


 meson.build                 |    1 
 po/POTFILES.in              |    7 
 src/cardwidget.cc           |    2 
 src/cardwidget.ui           |  104 ++++
 src/channelwidget.cc        |    4 
 src/channelwidget.ui        |   42 +
 src/devicewidget.cc         |    2 
 src/devicewidget.ui         |  260 ++++++++++
 src/mainwindow.cc           |    7 
 src/mainwindow.ui           |  467 +++++++++++++++++++
 src/meson.build             |   10 
 src/pavucontrol.glade       | 1058 --------------------------------------------
 src/pavucontrol.gladep      |    8 
 src/pavucontrol.h           |    4 
 src/renamedialog.ui         |   56 ++
 src/resources.gresource.xml |   11 
 src/rolewidget.cc           |    2 
 src/sinkinputwidget.cc      |    2 
 src/sinkwidget.cc           |    2 
 src/sourceoutputwidget.cc   |    2 
 src/sourcewidget.cc         |    2 
 src/streamwidget.ui         |  114 ++++
 22 files changed, 1077 insertions(+), 1090 deletions(-)

New commits:
commit d600f47de1a1677f796440d531c8fada32efbb25
Author: JA <jagw40k at free.fr>
Date:   Fri Apr 26 17:38:54 2024 +0200

    Split pavucontrol.glade into separate .ui files
    
    and some cleanup

diff --git a/po/POTFILES.in b/po/POTFILES.in
index a939fc8..18fa730 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,6 +1,11 @@
 src/org.pulseaudio.pavucontrol.appdata.xml.in
 src/pavucontrol.desktop.in
-src/pavucontrol.glade
+src/mainwindow.ui
+src/cardwidget.ui
+src/channelwidget.ui
+src/renamedialog.ui
+src/streamwidget.ui
+src/devicewidget.ui
 src/pavucontrol.cc
 src/cardwidget.cc
 src/channelwidget.cc
diff --git a/src/cardwidget.cc b/src/cardwidget.cc
index f2aa618..05e0d0b 100644
--- a/src/cardwidget.cc
+++ b/src/cardwidget.cc
@@ -60,7 +60,7 @@ CardWidget::CardWidget(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>
 
 CardWidget* CardWidget::create() {
     CardWidget* w;
-    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "cardWidget");
+    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/cardwidget.ui", "cardWidget");
     w = Gtk::Builder::get_widget_derived<CardWidget>(x, "cardWidget");
     w->reference();
     return w;
diff --git a/src/cardwidget.ui b/src/cardwidget.ui
new file mode 100644
index 0000000..effd2e3
--- /dev/null
+++ b/src/cardwidget.ui
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <requires lib="gtk" version="4.0"/>
+  <object class="GtkBox" id="cardWidget">
+    <property name="orientation">vertical</property>
+    <child>
+      <object class="GtkBox">
+        <property name="valign">center</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">6</property>
+        <property name="margin-start">12</property>
+        <property name="margin-top">12</property>
+        <property name="margin-end">12</property>
+        <property name="margin-bottom">12</property>
+        <child>
+          <object class="GtkBox">
+            <property name="valign">center</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkImage" id="cardIconImage">
+                <property name="icon_name">gtk-missing-image</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkBox">
+                <property name="hexpand">1</property>
+                <child>
+                  <object class="GtkLabel" id="cardNameLabel">
+                    <property name="hexpand">1</property>
+                    <property name="label" translatable="1">Card Name</property>
+                    <property name="use_markup">1</property>
+                    <property name="ellipsize">middle</property>
+                    <property name="xalign">0</property>
+                  </object>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkBox">
+                <property name="spacing">3</property>
+                <child>
+                  <object class="GtkToggleButton" id="profileLockToggleButton">
+                    <property name="halign">center</property>
+                    <property name="focusable">1</property>
+                    <property name="tooltip_text" translatable="1">Lock card to this profile</property>
+                    <property name="has-frame">0</property>
+                    <property name="active">1</property>
+                    <child>
+                      <object class="GtkImage">
+                        <property name="icon_name">changes-prevent</property>
+                        <property name="icon_size">normal</property>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="GtkBox">
+            <property name="valign">center</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkLabel">
+                <property name="label" translatable="1"><b>Profile:</b></property>
+                <property name="use_markup">1</property>
+                <property name="xalign">0</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkComboBox" id="profileList">
+                <property name="hexpand">1</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkBox" id="codecBox">
+                <property name="halign">center</property>
+                <property name="spacing">6</property>
+                <child>
+                  <object class="GtkLabel">
+                    <property name="label" translatable="1"><b>Codec:</b></property>
+                    <property name="use_markup">1</property>
+                    <property name="xalign">0</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkComboBox" id="codecList">
+                    <property name="hexpand">1</property>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+    <child>
+      <object class="GtkSeparator">
+        <property name="valign">center</property>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/src/channelwidget.cc b/src/channelwidget.cc
index 499bd46..746e8df 100644
--- a/src/channelwidget.cc
+++ b/src/channelwidget.cc
@@ -49,9 +49,7 @@ ChannelWidget::ChannelWidget(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Bu
 
 ChannelWidget* ChannelWidget::createOne(MinimalStreamWidget *owner, int channelIndex, pa_channel_position channelPosition, bool can_decibel) {
     ChannelWidget* w;
-    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create();
-    x->add_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "adjustment1");
-    x->add_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "channelWidget");
+    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/channelwidget.ui", "channelWidget");
     w = Gtk::Builder::get_widget_derived<ChannelWidget>(x, "channelWidget");
     w->reference();
 
diff --git a/src/channelwidget.ui b/src/channelwidget.ui
new file mode 100644
index 0000000..66e6775
--- /dev/null
+++ b/src/channelwidget.ui
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <requires lib="gtk" version="4.0"/>
+  <object class="GtkBox" id="channelWidget">
+    <property name="spacing">6</property>
+    <child>
+      <object class="GtkLabel" id="channelLabel">
+        <property name="halign">center</property>
+        <property name="label" translatable="1"><b>left-front</b></property>
+        <property name="use_markup">1</property>
+        <property name="xalign">1</property>
+        <property name="yalign">0</property>
+      </object>
+    </child>
+    <child>
+      <object class="GtkScale" id="volumeScale">
+        <property name="hexpand">1</property>
+        <property name="focusable">1</property>
+        <property name="adjustment">
+            <object class="GtkAdjustment">
+              <property name="upper">100</property>
+              <property name="step_increment">5</property>
+            </object>
+        </property>
+        <property name="digits">0</property>
+      </object>
+    </child>
+    <child>
+      <object class="GtkLabel" id="volumeLabel">
+        <property name="halign">center</property>
+        <property name="margin_start">8</property>
+        <property name="margin_end">8</property>
+        <property name="label" translatable="1"><small>50%</small></property>
+        <property name="use_markup">1</property>
+        <property name="justify">right</property>
+        <property name="width_chars">12</property>
+        <property name="xalign">1</property>
+        <property name="yalign">0</property>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/src/devicewidget.cc b/src/devicewidget.cc
index d7212d8..ba2821d 100644
--- a/src/devicewidget.cc
+++ b/src/devicewidget.cc
@@ -261,7 +261,7 @@ void DeviceWidget::openRenamePopup(const Glib::VariantBase& parameter) {
         return;
     }
 
-    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "renameDialog");
+    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/renamedialog.ui", "renameDialog");
     gchar *key = g_markup_printf_escaped("%s:%s", mDeviceType.c_str(), name.c_str());
     RenameWindow* renameDialog = Gtk::Builder::get_widget_derived<RenameWindow>(x, "renameDialog", description.c_str(), key);
     renameDialog->set_transient_for(*mpMainWindow);
diff --git a/src/devicewidget.ui b/src/devicewidget.ui
new file mode 100644
index 0000000..7d23b4c
--- /dev/null
+++ b/src/devicewidget.ui
@@ -0,0 +1,260 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <object class="GtkBox" id="deviceWidget">
+    <property name="orientation">vertical</property>
+    <child>
+      <object class="GtkBox">
+        <property name="valign">center</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">6</property>
+        <property name="margin-start">12</property>
+        <property name="margin-top">12</property>
+        <property name="margin-end">12</property>
+        <property name="margin-bottom">12</property>
+        <child>
+          <object class="GtkBox">
+            <property name="valign">center</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkImage" id="deviceIconImage">
+                <property name="icon_name">gtk-missing-image</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkBox">
+                <property name="hexpand">1</property>
+                <child>
+                  <object class="GtkLabel" id="deviceBoldNameLabel">
+                    <property name="use_markup">1</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="deviceNameLabel">
+                    <property name="label" translatable="1">Device Title</property>
+                    <property name="use_markup">1</property>
+                    <property name="ellipsize">end</property>
+                    <property name="xalign">0</property>
+                  </object>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkBox">
+                <property name="spacing">3</property>
+                <child>
+                  <object class="GtkToggleButton" id="deviceMuteToggleButton">
+                    <property name="halign">center</property>
+                    <property name="focusable">1</property>
+                    <property name="tooltip_text" translatable="1">Mute audio</property>
+                    <property name="has-frame">0</property>
+                    <child>
+                      <object class="GtkImage">
+                        <property name="icon_name">audio-volume-muted</property>
+                        <property name="icon_size">normal</property>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkToggleButton" id="deviceLockToggleButton">
+                    <property name="halign">center</property>
+                    <property name="focusable">1</property>
+                    <property name="tooltip_text" translatable="1">Lock channels together</property>
+                    <property name="has-frame">0</property>
+                    <property name="active">1</property>
+                    <child>
+                      <object class="GtkImage">
+                        <property name="icon_name">changes-prevent</property>
+                        <property name="icon_size">normal</property>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkToggleButton" id="defaultToggleButton">
+                    <property name="halign">center</property>
+                    <property name="focusable">1</property>
+                    <property name="tooltip_text" translatable="1">Set as default</property>
+                    <child>
+                      <object class="GtkImage">
+                        <property name="icon_name">emblem-default</property>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="GtkBox" id="portSelect">
+            <property name="valign">center</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkLabel">
+                <property name="label" translatable="1"><b>Port:</b></property>
+                <property name="use_markup">1</property>
+                <property name="xalign">0</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkComboBox" id="portList">
+                <property name="hexpand">1</property>
+              </object>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="GtkBox" id="deviceChannelsVBox">
+            <property name="valign">center</property>
+            <property name="orientation">vertical</property>
+            <property name="spacing">6</property>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="GtkExpander" id="advancedOptions">
+            <property name="valign">center</property>
+            <property name="visible">0</property>
+            <property name="focusable">1</property>
+            <child>
+              <object class="GtkBox">
+                <property name="orientation">vertical</property>
+                <child>
+                  <object class="GtkGrid" id="encodingSelect">
+                    <property name="valign">center</property>
+                    <property name="visible">0</property>
+                    <property name="row_homogeneous">1</property>
+                    <property name="column_homogeneous">1</property>
+                    <child>
+                      <object class="GtkCheckButton" id="encodingFormatPCM">
+                        <property name="label" translatable="1">PCM</property>
+                        <property name="sensitive">0</property>
+                        <property name="focusable">1</property>
+                        <property name="active">1</property>
+                        <layout>
+                          <property name="column">0</property>
+                          <property name="row">0</property>
+                        </layout>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkCheckButton" id="encodingFormatAC3">
+                        <property name="label" translatable="1">AC-3</property>
+                        <property name="focusable">1</property>
+                        <layout>
+                          <property name="column">1</property>
+                          <property name="row">0</property>
+                        </layout>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkCheckButton" id="encodingFormatDTS">
+                        <property name="label" translatable="1">DTS</property>
+                        <property name="focusable">1</property>
+                        <layout>
+                          <property name="column">2</property>
+                          <property name="row">0</property>
+                        </layout>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkCheckButton" id="encodingFormatEAC3">
+                        <property name="label" translatable="1">E-AC-3</property>
+                        <property name="focusable">1</property>
+                        <layout>
+                          <property name="column">0</property>
+                          <property name="row">1</property>
+                        </layout>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkCheckButton" id="encodingFormatMPEG">
+                        <property name="label" translatable="1">MPEG</property>
+                        <property name="focusable">1</property>
+                        <layout>
+                          <property name="column">1</property>
+                          <property name="row">1</property>
+                        </layout>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkCheckButton" id="encodingFormatAAC">
+                        <property name="label" translatable="1">AAC</property>
+                        <property name="focusable">1</property>
+                        <layout>
+                          <property name="column">2</property>
+                          <property name="row">1</property>
+                        </layout>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkCheckButton" id="encodingFormatTRUEHD">
+                        <property name="label" translatable="1">TrueHD</property>
+                        <property name="focusable">1</property>
+                        <layout>
+                          <property name="column">0</property>
+                          <property name="row">2</property>
+                        </layout>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkCheckButton" id="encodingFormatDTSHD">
+                        <property name="label" translatable="1">DTS-HD</property>
+                        <property name="focusable">1</property>
+                        <layout>
+                          <property name="column">1</property>
+                          <property name="row">2</property>
+                        </layout>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkBox" id="offsetSelect">
+                    <property name="valign">center</property>
+                    <property name="spacing">6</property>
+                    <child>
+                      <object class="GtkLabel">
+                        <property name="label" translatable="1"><b>Latency offset:</b></property>
+                        <property name="use_markup">1</property>
+                        <property name="xalign">0</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkSpinButton" id="offsetButton">
+                        <property name="hexpand">1</property>
+                        <property name="focusable">1</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkLabel">
+                        <property name="label" translatable="1">ms</property>
+                        <property name="use_markup">1</property>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+            <child type="label">
+              <object class="GtkLabel" id="advancedLabel">
+                <property name="label" translatable="1">Advanced</property>
+              </object>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+    <child>
+      <object class="GtkSeparator">
+        <property name="valign">center</property>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/src/mainwindow.cc b/src/mainwindow.cc
index e9c2518..dab8c1b 100644
--- a/src/mainwindow.cc
+++ b/src/mainwindow.cc
@@ -181,12 +181,7 @@ MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>
 
 MainWindow* MainWindow::create(bool maximize) {
     MainWindow* w;
-    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create();
-    x->add_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "liststore1");
-    x->add_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "liststore2");
-    x->add_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "liststore3");
-    x->add_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "liststore4");
-    x->add_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "mainWindow");
+    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/mainwindow.ui", "mainWindow");
     w = Gtk::Builder::get_widget_derived<MainWindow>(x, "mainWindow");
     w->get_style_context()->add_class("pavucontrol-window");
     if (w && maximize)
diff --git a/src/mainwindow.ui b/src/mainwindow.ui
new file mode 100644
index 0000000..d6e92b7
--- /dev/null
+++ b/src/mainwindow.ui
@@ -0,0 +1,467 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <requires lib="gtk" version="4.0"/>
+  <object class="GtkWindow" id="mainWindow">
+    <property name="title" translatable="1">Volume Control</property>
+    <property name="default_width">500</property>
+    <property name="default_height">400</property>
+    <property name="icon_name">multimedia-volume-control</property>
+    <child>
+      <placeholder/>
+    </child>
+    <property name="child">
+      <object class="GtkBox">
+        <property name="orientation">vertical</property>
+        <property name="spacing">12</property>
+        <child>
+          <object class="GtkNotebook" id="notebook">
+            <property name="vexpand">1</property>
+            <property name="focusable">1</property>
+            <property name="show_border">0</property>
+            <property name="scrollable">1</property>
+            <child>
+              <object class="GtkNotebookPage">
+                <property name="child">
+                  <object class="GtkBox">
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <object class="GtkScrolledWindow">
+                        <property name="vexpand">1</property>
+                        <property name="focusable">1</property>
+                        <property name="child">
+                          <object class="GtkViewport">
+                            <property name="child">
+                              <object class="GtkBox" id="streamsVBox">
+                                <property name="orientation">vertical</property>
+                                <child>
+                                  <object class="GtkLabel" id="noStreamsLabel">
+                                    <property name="vexpand">1</property>
+                                    <property name="sensitive">0</property>
+                                    <property name="label" translatable="1"><i>No application is currently playing audio.</i></property>
+                                    <property name="use_markup">1</property>
+                                  </object>
+                                </child>
+                              </object>
+                            </property>
+                          </object>
+                        </property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkSeparator">
+                        <property name="valign">center</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkBox">
+                        <property name="spacing">6</property>
+                        <property name="margin-top">12</property>
+                        <property name="margin-bottom">12</property>
+                        <property name="margin-start">12</property>
+                        <property name="margin-end">12</property>
+                        <property name="valign">center</property>
+                        <child>
+                          <object class="GtkLabel">
+                            <property name="hexpand">1</property>
+                            <property name="label" translatable="1"><b>_Show:</b></property>
+                            <property name="use_markup">1</property>
+                            <property name="use_underline">1</property>
+                            <property name="xalign">1</property>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkComboBox" id="sinkInputTypeComboBox">
+                            <property name="hexpand">1</property>
+                            <property name="model">
+                              <object class="GtkListStore">
+                                <columns>
+                                  <column type="gchararray"/>
+                                </columns>
+                                <data>
+                                  <row>
+                                    <col id="0" translatable="yes">All Streams</col>
+                                  </row>
+                                  <row>
+                                    <col id="0" translatable="yes">Applications</col>
+                                  </row>
+                                  <row>
+                                    <col id="0" translatable="yes">Virtual Streams</col>
+                                  </row>
+                                </data>
+                              </object>
+                            </property>
+                            <child>
+                              <object class="GtkCellRendererText"/>
+                              <attributes>
+                                <attribute name="text">0</attribute>
+                              </attributes>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </property>
+                <property name="tab">
+                  <object class="GtkLabel">
+                    <property name="label" translatable="1">_Playback</property>
+                    <property name="use_underline">1</property>
+                  </object>
+                </property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkNotebookPage">
+                <property name="child">
+                  <object class="GtkBox">
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <object class="GtkScrolledWindow">
+                        <property name="vexpand">1</property>
+                        <property name="focusable">1</property>
+                        <property name="child">
+                          <object class="GtkViewport">
+                            <property name="child">
+                              <object class="GtkBox" id="recsVBox">
+                                <property name="orientation">vertical</property>
+                                <child>
+                                  <object class="GtkLabel" id="noRecsLabel">
+                                    <property name="vexpand">1</property>
+                                    <property name="sensitive">0</property>
+                                    <property name="label" translatable="1"><i>No application is currently recording audio.</i></property>
+                                    <property name="use_markup">1</property>
+                                  </object>
+                                </child>
+                              </object>
+                            </property>
+                          </object>
+                        </property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkSeparator">
+                        <property name="valign">center</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkBox">
+                        <property name="spacing">6</property>
+                        <property name="margin-top">12</property>
+                        <property name="margin-bottom">12</property>
+                        <property name="margin-start">12</property>
+                        <property name="margin-end">12</property>
+                        <property name="valign">center</property>
+                        <child>
+                          <object class="GtkLabel">
+                            <property name="hexpand">1</property>
+                            <property name="label" translatable="1"><b>_Show:</b></property>
+                            <property name="use_markup">1</property>
+                            <property name="use_underline">1</property>
+                            <property name="xalign">1</property>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkComboBox" id="sourceOutputTypeComboBox">
+                            <property name="hexpand">1</property>
+                            <property name="model">
+                              <object class="GtkListStore">
+                                <columns>
+                                  <column type="gchararray"/>
+                                </columns>
+                                <data>
+                                  <row>
+                                    <col id="0" translatable="yes">All Streams</col>
+                                  </row>
+                                  <row>
+                                    <col id="0" translatable="yes">Applications</col>
+                                  </row>
+                                  <row>
+                                    <col id="0" translatable="yes">Virtual Streams</col>
+                                  </row>
+                                </data>
+                              </object>
+                            </property>
+                            <child>
+                              <object class="GtkCellRendererText"/>
+                              <attributes>
+                                <attribute name="text">0</attribute>
+                              </attributes>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </property>
+                <property name="tab">
+                  <object class="GtkLabel">
+                    <property name="label" translatable="1">_Recording</property>
+                    <property name="use_underline">1</property>
+                  </object>
+                </property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkNotebookPage">
+                <property name="child">
+                  <object class="GtkBox">
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <object class="GtkScrolledWindow">
+                        <property name="vexpand">1</property>
+                        <property name="focusable">1</property>
+                        <property name="child">
+                          <object class="GtkViewport">
+                            <property name="child">
+                              <object class="GtkBox" id="sinksVBox">
+                                <property name="orientation">vertical</property>
+                                <child>
+                                  <object class="GtkLabel" id="noSinksLabel">
+                                    <property name="vexpand">1</property>
+                                    <property name="sensitive">0</property>
+                                    <property name="label" translatable="1"><i>No output devices available</i></property>
+                                    <property name="use_markup">1</property>
+                                  </object>
+                                </child>
+                              </object>
+                            </property>
+                          </object>
+                        </property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkSeparator">
+                        <property name="valign">center</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkBox">
+                        <property name="spacing">6</property>
+                        <property name="margin-top">12</property>
+                        <property name="margin-bottom">12</property>
+                        <property name="margin-start">12</property>
+                        <property name="margin-end">12</property>
+                        <property name="valign">center</property>
+                        <child>
+                          <object class="GtkLabel">
+                            <property name="hexpand">1</property>
+                            <property name="label" translatable="1"><b>S_how:</b></property>
+                            <property name="use_markup">1</property>
+                            <property name="use_underline">1</property>
+                            <property name="mnemonic_widget">sinkTypeComboBox</property>
+                            <property name="xalign">1</property>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkComboBox" id="sinkTypeComboBox">
+                            <property name="hexpand">1</property>
+                            <property name="model">
+                              <object class="GtkListStore">
+                                <columns>
+                                  <column type="gchararray"/>
+                                </columns>
+                                <data>
+                                  <row>
+                                    <col id="0" translatable="yes">All Output Devices</col>
+                                  </row>
+                                  <row>
+                                    <col id="0" translatable="yes">Hardware Output Devices</col>
+                                  </row>
+                                  <row>
+                                    <col id="0" translatable="yes">Virtual Output Devices</col>
+                                  </row>
+                                </data>
+                              </object>
+                            </property>
+                            <child>
+                              <object class="GtkCellRendererText"/>
+                              <attributes>
+                                <attribute name="text">0</attribute>
+                              </attributes>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </property>
+                <property name="tab">
+                  <object class="GtkLabel">
+                    <property name="label" translatable="1">_Output Devices</property>
+                    <property name="use_underline">1</property>
+                  </object>
+                </property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkNotebookPage">
+                <property name="child">
+                  <object class="GtkBox">
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <object class="GtkScrolledWindow">
+                        <property name="vexpand">1</property>
+                        <property name="focusable">1</property>
+                        <property name="child">
+                          <object class="GtkViewport">
+                            <property name="child">
+                              <object class="GtkBox" id="sourcesVBox">
+                                <property name="orientation">vertical</property>
+                                <child>
+                                  <object class="GtkLabel" id="noSourcesLabel">
+                                    <property name="vexpand">1</property>
+                                    <property name="sensitive">0</property>
+                                    <property name="label" translatable="1"><i>No input devices available</i></property>
+                                    <property name="use_markup">1</property>
+                                  </object>
+                                </child>
+                              </object>
+                            </property>
+                          </object>
+                        </property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkSeparator">
+                        <property name="valign">center</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkBox">
+                        <property name="spacing">6</property>
+                        <property name="margin-top">12</property>
+                        <property name="margin-bottom">12</property>
+                        <property name="margin-start">12</property>
+                        <property name="margin-end">12</property>
+                        <property name="valign">center</property>
+                        <child>
+                          <object class="GtkLabel">
+                            <property name="hexpand">1</property>
+                            <property name="label" translatable="1"><b>Sho_w:</b></property>
+                            <property name="use_markup">1</property>
+                            <property name="use_underline">1</property>
+                            <property name="mnemonic_widget">sourceTypeComboBox</property>
+                            <property name="xalign">1</property>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkComboBox" id="sourceTypeComboBox">
+                            <property name="hexpand">1</property>
+                            <property name="model">
+                              <object class="GtkListStore">
+                                <columns>
+                                  <column type="gchararray"/>
+                                </columns>
+                                <data>
+                                  <row>
+                                    <col id="0" translatable="yes">All Input Devices</col>
+                                  </row>
+                                  <row>
+                                    <col id="0" translatable="yes">All Except Monitors</col>
+                                  </row>
+                                  <row>
+                                    <col id="0" translatable="yes">Hardware Input Devices</col>
+                                  </row>
+                                  <row>
+                                    <col id="0" translatable="yes">Virtual Input Devices</col>
+                                  </row>
+                                  <row>
+                                    <col id="0" translatable="yes">Monitors</col>
+                                  </row>
+                                </data>
+                              </object>
+                            </property>
+                            <child>
+                              <object class="GtkCellRendererText"/>
+                              <attributes>
+                                <attribute name="text">0</attribute>
+                              </attributes>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </property>
+                <property name="tab">
+                  <object class="GtkLabel">
+                    <property name="label" translatable="1">_Input Devices</property>
+                    <property name="use_underline">1</property>
+                  </object>
+                </property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkNotebookPage">
+                <property name="child">
+                  <object class="GtkBox">
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <object class="GtkScrolledWindow">
+                        <property name="vexpand">1</property>
+                        <property name="focusable">1</property>
+                        <property name="child">
+                          <object class="GtkViewport">
+                            <property name="child">
+                              <object class="GtkBox">
+                                <property name="orientation">vertical</property>
+                                <child>
+                                  <object class="GtkBox" id="cardsVBox">
+                                    <property name="vexpand">1</property>
+                                    <property name="orientation">vertical</property>
+                                    <child>
+                                      <object class="GtkLabel" id="noCardsLabel">
+                                        <property name="vexpand">1</property>
+                                        <property name="sensitive">0</property>
+                                        <property name="label" translatable="1"><i>No cards available for configuration</i></property>
+                                        <property name="use_markup">1</property>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkBox">
+                                    <property name="orientation">vertical</property>
+                                    <property name="vexpand-set">1</property>
+                                    <child>
+                                      <object class="GtkSeparator"/>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="showVolumeMetersCheckButton">
+                                        <property name="label" translatable="1">Show volume meters</property>
+                                        <property name="focusable">1</property>
+                                        <property name="active">1</property>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </property>
+                          </object>
+                        </property>
+                      </object>
+                    </child>
+                  </object>
+                </property>
+                <property name="tab">
+                  <object class="GtkLabel">
+                    <property name="label" translatable="1">_Configuration</property>
+                    <property name="use_underline">1</property>
+                  </object>
+                </property>
+              </object>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="GtkLabel" id="connectingLabel">
+            <property name="vexpand">1</property>
+            <property name="visible">0</property>
+            <property name="label">...</property>
+            <property name="use_markup">1</property>
+          </object>
+        </child>
+      </object>
+    </property>
+  </object>
+</interface>
diff --git a/src/pavucontrol.glade b/src/pavucontrol.glade
deleted file mode 100644
index 5f83859..0000000
--- a/src/pavucontrol.glade
+++ /dev/null
@@ -1,1058 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
-  <requires lib="gtk" version="4.0"/>
-  <object class="GtkAdjustment" id="adjustment1">
-    <property name="upper">100</property>
-    <property name="value">44.2408370972</property>
-    <property name="step_increment">5</property>
-  </object>
-  <object class="GtkWindow" id="channelWindow">
-    <property name="visible">1</property>
-    <property name="title" translatable="1">window2</property>
-    <child>
-      <placeholder/>
-    </child>
-    <property name="child">
-      <object class="GtkBox" id="channelWidget">
-        <property name="spacing">6</property>
-        <child>
-          <object class="GtkLabel" id="channelLabel">
-            <property name="halign">center</property>
-            <property name="label" translatable="1"><b>left-front</b></property>
-            <property name="use_markup">1</property>
-            <property name="xalign">1</property>
-            <property name="yalign">0</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkScale" id="volumeScale">
-            <property name="hexpand">1</property>
-            <property name="focusable">1</property>
-            <property name="adjustment">adjustment1</property>
-            <property name="digits">0</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkLabel" id="volumeLabel">
-            <property name="halign">center</property>
-            <property name="margin_start">8</property>
-            <property name="margin_end">8</property>
-            <property name="label" translatable="1"><small>50%</small></property>
-            <property name="use_markup">1</property>
-            <property name="justify">right</property>
-            <property name="width_chars">12</property>
-            <property name="xalign">1</property>
-            <property name="yalign">0</property>
-          </object>
-        </child>
-      </object>
-    </property>
-  </object>
-  <object class="GtkWindow" id="cardWindow">
-    <property name="visible">1</property>
-    <property name="title" translatable="1">window1</property>
-    <child>
-      <placeholder/>
-    </child>
-    <property name="child">
-      <object class="GtkBox" id="cardWidget">
-        <property name="orientation">vertical</property>
-        <child>
-          <object class="GtkBox">
-            <property name="valign">center</property>
-            <property name="orientation">vertical</property>
-            <property name="spacing">6</property>
-            <property name="margin-start">12</property>
-            <property name="margin-top">12</property>
-            <property name="margin-end">12</property>
-            <property name="margin-bottom">12</property>
-            <child>
-              <object class="GtkBox">
-                <property name="valign">center</property>
-                <property name="spacing">6</property>
-                <child>
-                  <object class="GtkImage" id="cardIconImage">
-                    <property name="icon_name">gtk-missing-image</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkBox">
-                    <property name="hexpand">1</property>
-                    <child>
-                      <object class="GtkLabel" id="cardNameLabel">
-                        <property name="hexpand">1</property>
-                        <property name="label" translatable="1">Card Name</property>
-                        <property name="use_markup">1</property>
-                        <property name="ellipsize">middle</property>
-                        <property name="xalign">0</property>
-                      </object>
-                    </child>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkBox">
-                    <property name="spacing">3</property>
-                    <child>
-                      <object class="GtkToggleButton" id="profileLockToggleButton">
-                        <property name="halign">center</property>
-                        <property name="focusable">1</property>
-                        <property name="tooltip_text" translatable="1">Lock card to this profile</property>
-                        <property name="has-frame">0</property>
-                        <property name="active">1</property>
-                        <child>
-                          <object class="GtkImage">
-                            <property name="icon_name">changes-prevent</property>
-                            <property name="icon_size">normal</property>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
-              </object>
-            </child>
-            <child>
-              <object class="GtkBox">
-                <property name="valign">center</property>
-                <property name="spacing">6</property>
-                <child>
-                  <object class="GtkLabel">
-                    <property name="label" translatable="1"><b>Profile:</b></property>
-                    <property name="use_markup">1</property>
-                    <property name="xalign">0</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkComboBox" id="profileList">
-                    <property name="hexpand">1</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkBox" id="codecBox">
-                    <property name="halign">center</property>
-                    <property name="spacing">6</property>
-                    <child>
-                      <object class="GtkLabel">
-                        <property name="label" translatable="1"><b>Codec:</b></property>
-                        <property name="use_markup">1</property>
-                        <property name="xalign">0</property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkComboBox" id="codecList">
-                        <property name="hexpand">1</property>
-                      </object>
-                    </child>
-                  </object>
-                </child>
-              </object>
-            </child>
-          </object>
-        </child>
-        <child>
-          <object class="GtkSeparator">
-            <property name="valign">center</property>
-          </object>
-        </child>
-      </object>
-    </property>
-  </object>
-  <object class="GtkWindow" id="deviceWindow">
-    <property name="visible">1</property>
-    <property name="title" translatable="1">window1</property>
-    <child>
-      <placeholder/>
-    </child>
-    <property name="child">
-      <object class="GtkBox" id="deviceWidget">
-        <property name="orientation">vertical</property>
-        <child>
-          <object class="GtkBox">
-            <property name="valign">center</property>
-            <property name="orientation">vertical</property>
-            <property name="spacing">6</property>
-            <property name="margin-start">12</property>
-            <property name="margin-top">12</property>
-            <property name="margin-end">12</property>
-            <property name="margin-bottom">12</property>
-            <child>
-              <object class="GtkBox">
-                <property name="valign">center</property>
-                <property name="spacing">6</property>
-                <child>
-                  <object class="GtkImage" id="deviceIconImage">
-                    <property name="icon_name">gtk-missing-image</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkBox">
-                    <property name="hexpand">1</property>
-                    <child>
-                      <object class="GtkLabel" id="deviceBoldNameLabel">
-                        <property name="use_markup">1</property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="deviceNameLabel">
-                        <property name="label" translatable="1">Device Title</property>
-                        <property name="use_markup">1</property>
-                        <property name="ellipsize">end</property>
-                        <property name="xalign">0</property>
-                      </object>
-                    </child>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkBox">
-                    <property name="spacing">3</property>
-                    <child>
-                      <object class="GtkToggleButton" id="deviceMuteToggleButton">
-                        <property name="halign">center</property>
-                        <property name="focusable">1</property>
-                        <property name="tooltip_text" translatable="1">Mute audio</property>
-                        <property name="has-frame">0</property>
-                        <child>
-                          <object class="GtkImage">
-                            <property name="icon_name">audio-volume-muted</property>
-                            <property name="icon_size">normal</property>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkToggleButton" id="deviceLockToggleButton">
-                        <property name="halign">center</property>
-                        <property name="focusable">1</property>
-                        <property name="tooltip_text" translatable="1">Lock channels together</property>
-                        <property name="has-frame">0</property>
-                        <property name="active">1</property>
-                        <child>
-                          <object class="GtkImage">
-                            <property name="icon_name">changes-prevent</property>
-                            <property name="icon_size">normal</property>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkToggleButton" id="defaultToggleButton">
-                        <property name="halign">center</property>
-                        <property name="focusable">1</property>
-                        <property name="tooltip_text" translatable="1">Set as default</property>
-                        <child>
-                          <object class="GtkImage">
-                            <property name="icon_name">emblem-default</property>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
-              </object>
-            </child>
-            <child>
-              <object class="GtkBox" id="portSelect">
-                <property name="valign">center</property>
-                <property name="spacing">6</property>
-                <child>
-                  <object class="GtkLabel">
-                    <property name="label" translatable="1"><b>Port:</b></property>
-                    <property name="use_markup">1</property>
-                    <property name="xalign">0</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkComboBox" id="portList">
-                    <property name="hexpand">1</property>
-                  </object>
-                </child>
-              </object>
-            </child>
-            <child>
-              <object class="GtkBox" id="deviceChannelsVBox">
-                <property name="valign">center</property>
-                <property name="orientation">vertical</property>
-                <property name="spacing">6</property>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
-              </object>
-            </child>
-            <child>
-              <object class="GtkExpander" id="advancedOptions">
-                <property name="valign">center</property>
-                <property name="visible">0</property>
-                <property name="focusable">1</property>
-                <child>
-                  <object class="GtkBox">
-                    <property name="orientation">vertical</property>
-                    <child>
-                      <object class="GtkGrid" id="encodingSelect">
-                        <property name="valign">center</property>
-                        <property name="visible">0</property>
-                        <property name="row_homogeneous">1</property>
-                        <property name="column_homogeneous">1</property>
-                        <child>
-                          <object class="GtkCheckButton" id="encodingFormatPCM">
-                            <property name="label" translatable="1">PCM</property>
-                            <property name="sensitive">0</property>
-                            <property name="focusable">1</property>
-                            <property name="active">1</property>
-                            <layout>
-                              <property name="column">0</property>
-                              <property name="row">0</property>
-                            </layout>
-                          </object>
-                        </child>
-                        <child>
-                          <object class="GtkCheckButton" id="encodingFormatAC3">
-                            <property name="label" translatable="1">AC-3</property>
-                            <property name="focusable">1</property>
-                            <layout>
-                              <property name="column">1</property>
-                              <property name="row">0</property>
-                            </layout>
-                          </object>
-                        </child>
-                        <child>
-                          <object class="GtkCheckButton" id="encodingFormatDTS">
-                            <property name="label" translatable="1">DTS</property>
-                            <property name="focusable">1</property>
-                            <layout>
-                              <property name="column">2</property>
-                              <property name="row">0</property>
-                            </layout>
-                          </object>
-                        </child>
-                        <child>
-                          <object class="GtkCheckButton" id="encodingFormatEAC3">
-                            <property name="label" translatable="1">E-AC-3</property>
-                            <property name="focusable">1</property>
-                            <layout>
-                              <property name="column">0</property>
-                              <property name="row">1</property>
-                            </layout>
-                          </object>
-                        </child>
-                        <child>
-                          <object class="GtkCheckButton" id="encodingFormatMPEG">
-                            <property name="label" translatable="1">MPEG</property>
-                            <property name="focusable">1</property>
-                            <layout>
-                              <property name="column">1</property>
-                              <property name="row">1</property>
-                            </layout>
-                          </object>
-                        </child>
-                        <child>
-                          <object class="GtkCheckButton" id="encodingFormatAAC">
-                            <property name="label" translatable="1">AAC</property>
-                            <property name="focusable">1</property>
-                            <layout>
-                              <property name="column">2</property>
-                              <property name="row">1</property>
-                            </layout>
-                          </object>
-                        </child>
-                        <child>
-                          <object class="GtkCheckButton" id="encodingFormatTRUEHD">
-                            <property name="label" translatable="1">TrueHD</property>
-                            <property name="focusable">1</property>
-                            <layout>
-                              <property name="column">0</property>
-                              <property name="row">2</property>
-                            </layout>
-                          </object>
-                        </child>
-                        <child>
-                          <object class="GtkCheckButton" id="encodingFormatDTSHD">
-                            <property name="label" translatable="1">DTS-HD</property>
-                            <property name="focusable">1</property>
-                            <layout>
-                              <property name="column">1</property>
-                              <property name="row">2</property>
-                            </layout>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkBox" id="offsetSelect">
-                        <property name="valign">center</property>
-                        <property name="spacing">6</property>
-                        <child>
-                          <object class="GtkLabel">
-                            <property name="label" translatable="1"><b>Latency offset:</b></property>
-                            <property name="use_markup">1</property>
-                            <property name="xalign">0</property>
-                          </object>
-                        </child>
-                        <child>
-                          <object class="GtkSpinButton" id="offsetButton">
-                            <property name="hexpand">1</property>
-                            <property name="focusable">1</property>
-                          </object>
-                        </child>
-                        <child>
-                          <object class="GtkLabel">
-                            <property name="label" translatable="1">ms</property>
-                            <property name="use_markup">1</property>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
-                <child type="label">
-                  <object class="GtkLabel" id="advancedLabel">
-                    <property name="label" translatable="1">Advanced</property>
-                  </object>
-                </child>
-              </object>
-            </child>
-          </object>
-        </child>
-        <child>
-          <object class="GtkSeparator">
-            <property name="valign">center</property>
-          </object>
-        </child>
-      </object>
-    </property>
-  </object>
-  <object class="GtkListStore" id="liststore1">
-    <columns>
-      <column type="gchararray"/>
-    </columns>
-    <data>
-      <row>
-        <col id="0" translatable="yes">All Streams</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes">Applications</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes">Virtual Streams</col>
-      </row>
-    </data>
-  </object>
-  <object class="GtkListStore" id="liststore2">
-    <columns>
-      <column type="gchararray"/>
-    </columns>
-    <data>
-      <row>
-        <col id="0" translatable="yes">All Streams</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes">Applications</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes">Virtual Streams</col>
-      </row>
-    </data>
-  </object>
-  <object class="GtkListStore" id="liststore3">
-    <columns>
-      <column type="gchararray"/>
-    </columns>
-    <data>
-      <row>
-        <col id="0" translatable="yes">All Output Devices</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes">Hardware Output Devices</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes">Virtual Output Devices</col>
-      </row>
-    </data>
-  </object>
-  <object class="GtkListStore" id="liststore4">
-    <columns>
-      <column type="gchararray"/>
-    </columns>
-    <data>
-      <row>
-        <col id="0" translatable="yes">All Input Devices</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes">All Except Monitors</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes">Hardware Input Devices</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes">Virtual Input Devices</col>
-      </row>
-      <row>
-        <col id="0" translatable="yes">Monitors</col>
-      </row>
-    </data>
-  </object>
-  <object class="GtkWindow" id="mainWindow">
-    <property name="title" translatable="1">Volume Control</property>
-    <property name="default_width">500</property>
-    <property name="default_height">400</property>
-    <property name="icon_name">multimedia-volume-control</property>
-    <child>
-      <placeholder/>
-    </child>
-    <property name="child">
-      <object class="GtkBox">
-        <property name="orientation">vertical</property>
-        <property name="spacing">12</property>
-        <child>
-          <object class="GtkNotebook" id="notebook">
-            <property name="vexpand">1</property>
-            <property name="focusable">1</property>
-            <property name="show_border">0</property>
-            <property name="scrollable">1</property>
-            <child>
-              <object class="GtkNotebookPage">
-                <property name="child">
-                  <object class="GtkBox">
-                    <property name="orientation">vertical</property>
-                    <child>
-                      <object class="GtkScrolledWindow">
-                        <property name="vexpand">1</property>
-                        <property name="focusable">1</property>
-                        <property name="child">
-                          <object class="GtkViewport">
-                            <property name="child">
-                              <object class="GtkBox" id="streamsVBox">
-                                <property name="orientation">vertical</property>
-                                <child>
-                                  <object class="GtkLabel" id="noStreamsLabel">
-                                    <property name="vexpand">1</property>
-                                    <property name="sensitive">0</property>
-                                    <property name="label" translatable="1"><i>No application is currently playing audio.</i></property>
-                                    <property name="use_markup">1</property>
-                                  </object>
-                                </child>
-                              </object>
-                            </property>
-                          </object>
-                        </property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkSeparator">
-                        <property name="valign">center</property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkBox">
-                        <property name="spacing">6</property>
-                        <property name="margin-top">12</property>
-                        <property name="margin-bottom">12</property>
-                        <property name="margin-start">12</property>
-                        <property name="margin-end">12</property>
-                        <property name="valign">center</property>
-                        <child>
-                          <object class="GtkLabel">
-                            <property name="hexpand">1</property>
-                            <property name="label" translatable="1"><b>_Show:</b></property>
-                            <property name="use_markup">1</property>
-                            <property name="use_underline">1</property>
-                            <property name="xalign">1</property>
-                          </object>
-                        </child>
-                        <child>
-                          <object class="GtkComboBox" id="sinkInputTypeComboBox">
-                            <property name="hexpand">1</property>
-                            <property name="model">liststore1</property>
-                            <child>
-                              <object class="GtkCellRendererText"/>
-                              <attributes>
-                                <attribute name="text">0</attribute>
-                              </attributes>
-                            </child>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </property>
-                <property name="tab">
-                  <object class="GtkLabel">
-                    <property name="label" translatable="1">_Playback</property>
-                    <property name="use_underline">1</property>
-                  </object>
-                </property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkNotebookPage">
-                <property name="child">
-                  <object class="GtkBox">
-                    <property name="orientation">vertical</property>
-                    <child>
-                      <object class="GtkScrolledWindow">
-                        <property name="vexpand">1</property>
-                        <property name="focusable">1</property>
-                        <property name="child">
-                          <object class="GtkViewport">
-                            <property name="child">
-                              <object class="GtkBox" id="recsVBox">
-                                <property name="orientation">vertical</property>
-                                <child>
-                                  <object class="GtkLabel" id="noRecsLabel">
-                                    <property name="vexpand">1</property>
-                                    <property name="sensitive">0</property>
-                                    <property name="label" translatable="1"><i>No application is currently recording audio.</i></property>
-                                    <property name="use_markup">1</property>
-                                  </object>
-                                </child>
-                              </object>
-                            </property>
-                          </object>
-                        </property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkSeparator">
-                        <property name="valign">center</property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkBox">
-                        <property name="spacing">6</property>
-                        <property name="margin-top">12</property>
-                        <property name="margin-bottom">12</property>
-                        <property name="margin-start">12</property>
-                        <property name="margin-end">12</property>
-                        <property name="valign">center</property>
-                        <child>
-                          <object class="GtkLabel">
-                            <property name="hexpand">1</property>
-                            <property name="label" translatable="1"><b>_Show:</b></property>
-                            <property name="use_markup">1</property>
-                            <property name="use_underline">1</property>
-                            <property name="xalign">1</property>
-                          </object>
-                        </child>
-                        <child>
-                          <object class="GtkComboBox" id="sourceOutputTypeComboBox">
-                            <property name="hexpand">1</property>
-                            <property name="model">liststore2</property>
-                            <child>
-                              <object class="GtkCellRendererText"/>
-                              <attributes>
-                                <attribute name="text">0</attribute>
-                              </attributes>
-                            </child>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </property>
-                <property name="tab">
-                  <object class="GtkLabel">
-                    <property name="label" translatable="1">_Recording</property>
-                    <property name="use_underline">1</property>
-                  </object>
-                </property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkNotebookPage">
-                <property name="child">
-                  <object class="GtkBox">
-                    <property name="orientation">vertical</property>
-                    <child>
-                      <object class="GtkScrolledWindow">
-                        <property name="vexpand">1</property>
-                        <property name="focusable">1</property>
-                        <property name="child">
-                          <object class="GtkViewport">
-                            <property name="child">
-                              <object class="GtkBox" id="sinksVBox">
-                                <property name="orientation">vertical</property>
-                                <child>
-                                  <object class="GtkLabel" id="noSinksLabel">
-                                    <property name="vexpand">1</property>
-                                    <property name="sensitive">0</property>
-                                    <property name="label" translatable="1"><i>No output devices available</i></property>
-                                    <property name="use_markup">1</property>
-                                  </object>
-                                </child>
-                              </object>
-                            </property>
-                          </object>
-                        </property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkSeparator">
-                        <property name="valign">center</property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkBox">
-                        <property name="spacing">6</property>
-                        <property name="margin-top">12</property>
-                        <property name="margin-bottom">12</property>
-                        <property name="margin-start">12</property>
-                        <property name="margin-end">12</property>
-                        <property name="valign">center</property>
-                        <child>
-                          <object class="GtkLabel">
-                            <property name="hexpand">1</property>
-                            <property name="label" translatable="1"><b>S_how:</b></property>
-                            <property name="use_markup">1</property>
-                            <property name="use_underline">1</property>
-                            <property name="mnemonic_widget">sinkTypeComboBox</property>
-                            <property name="xalign">1</property>
-                          </object>
-                        </child>
-                        <child>
-                          <object class="GtkComboBox" id="sinkTypeComboBox">
-                            <property name="hexpand">1</property>
-                            <property name="model">liststore3</property>
-                            <child>
-                              <object class="GtkCellRendererText"/>
-                              <attributes>
-                                <attribute name="text">0</attribute>
-                              </attributes>
-                            </child>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </property>
-                <property name="tab">
-                  <object class="GtkLabel">
-                    <property name="label" translatable="1">_Output Devices</property>
-                    <property name="use_underline">1</property>
-                  </object>
-                </property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkNotebookPage">
-                <property name="child">
-                  <object class="GtkBox">
-                    <property name="orientation">vertical</property>
-                    <child>
-                      <object class="GtkScrolledWindow">
-                        <property name="vexpand">1</property>
-                        <property name="focusable">1</property>
-                        <property name="child">
-                          <object class="GtkViewport">
-                            <property name="child">
-                              <object class="GtkBox" id="sourcesVBox">
-                                <property name="orientation">vertical</property>
-                                <child>
-                                  <object class="GtkLabel" id="noSourcesLabel">
-                                    <property name="vexpand">1</property>
-                                    <property name="sensitive">0</property>
-                                    <property name="label" translatable="1"><i>No input devices available</i></property>
-                                    <property name="use_markup">1</property>
-                                  </object>
-                                </child>
-                              </object>
-                            </property>
-                          </object>
-                        </property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkSeparator">
-                        <property name="valign">center</property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkBox">
-                        <property name="spacing">6</property>
-                        <property name="margin-top">12</property>
-                        <property name="margin-bottom">12</property>
-                        <property name="margin-start">12</property>
-                        <property name="margin-end">12</property>
-                        <property name="valign">center</property>
-                        <child>
-                          <object class="GtkLabel">
-                            <property name="hexpand">1</property>
-                            <property name="label" translatable="1"><b>Sho_w:</b></property>
-                            <property name="use_markup">1</property>
-                            <property name="use_underline">1</property>
-                            <property name="mnemonic_widget">sourceTypeComboBox</property>
-                            <property name="xalign">1</property>
-                          </object>
-                        </child>
-                        <child>
-                          <object class="GtkComboBox" id="sourceTypeComboBox">
-                            <property name="hexpand">1</property>
-                            <property name="model">liststore4</property>
-                            <child>
-                              <object class="GtkCellRendererText"/>
-                              <attributes>
-                                <attribute name="text">0</attribute>
-                              </attributes>
-                            </child>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </property>
-                <property name="tab">
-                  <object class="GtkLabel">
-                    <property name="label" translatable="1">_Input Devices</property>
-                    <property name="use_underline">1</property>
-                  </object>
-                </property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkNotebookPage">
-                <property name="child">
-                  <object class="GtkBox">
-                    <property name="orientation">vertical</property>
-                    <child>
-                      <object class="GtkScrolledWindow">
-                        <property name="vexpand">1</property>
-                        <property name="focusable">1</property>
-                        <property name="child">
-                          <object class="GtkViewport">
-                            <property name="child">
-                              <object class="GtkBox">
-                                <property name="orientation">vertical</property>
-                                <child>
-                                  <object class="GtkBox" id="cardsVBox">
-                                    <property name="vexpand">1</property>
-                                    <property name="orientation">vertical</property>
-                                    <child>
-                                      <object class="GtkLabel" id="noCardsLabel">
-                                        <property name="vexpand">1</property>
-                                        <property name="sensitive">0</property>
-                                        <property name="label" translatable="1"><i>No cards available for configuration</i></property>
-                                        <property name="use_markup">1</property>
-                                      </object>
-                                    </child>
-                                  </object>
-                                </child>
-                                <child>
-                                  <object class="GtkBox">
-                                    <property name="orientation">vertical</property>
-                                    <property name="vexpand-set">1</property>
-                                    <child>
-                                      <object class="GtkSeparator"/>
-                                    </child>
-                                    <child>
-                                      <object class="GtkCheckButton" id="showVolumeMetersCheckButton">
-                                        <property name="label" translatable="1">Show volume meters</property>
-                                        <property name="focusable">1</property>
-                                        <property name="active">1</property>
-                                      </object>
-                                    </child>
-                                  </object>
-                                </child>
-                              </object>
-                            </property>
-                          </object>
-                        </property>
-                      </object>
-                    </child>
-                  </object>
-                </property>
-                <property name="tab">
-                  <object class="GtkLabel">
-                    <property name="label" translatable="1">_Configuration</property>
-                    <property name="use_underline">1</property>
-                  </object>
-                </property>
-              </object>
-            </child>
-          </object>
-        </child>
-        <child>
-          <object class="GtkLabel" id="connectingLabel">
-            <property name="vexpand">1</property>
-            <property name="visible">0</property>
-            <property name="label">...</property>
-            <property name="use_markup">1</property>
-          </object>
-        </child>
-      </object>
-    </property>
-  </object>
-  <object class="GtkApplicationWindow" id="renameDialog">
-    <property name="modal">1</property>
-    <child>
-      <object class="GtkBox">
-        <property name="orientation">vertical</property>
-        <property name="spacing">2</property>
-        <property name="margin-start">5</property>
-        <property name="margin-top">5</property>
-        <property name="margin-end">5</property>
-        <property name="margin-bottom">5</property>
-        <child>
-          <object class="GtkLabel">
-            <property name="vexpand">1</property>
-            <property name="label" translatable="1"><b>Rename device to:</b></property>
-            <property name="use_markup">1</property>
-            <property name="xalign">0</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkEntry" id="renameText">
-            <property name="vexpand">1</property>
-            <property name="focusable">1</property>
-            <property name="invisible_char">●</property>
-            <property name="activates_default">1</property>
-            <property name="width_chars">60</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkBox">
-            <property name="baseline_position">bottom</property>
-            <property name="halign">GTK_ALIGN_END</property>
-            <property name="homogeneous">1</property>
-            <child>
-              <object class="GtkButton">
-                <property name="label" translatable="1">_Cancel</property>
-                <property name="use_underline">1</property>
-                <property name="focusable">1</property>
-                <property name="action_name">window.close</property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkButton" id="renameButton">
-                <property name="label" translatable="1">_Ok</property>
-                <property name="use_underline">1</property>
-                <property name="focusable">1</property>
-                <property name="action_name">win.rename</property>
-              </object>
-            </child>
-          </object>
-        </child>
-      </object>
-    </child>
-  </object>
-  <object class="GtkWindow" id="streamWindow">
-    <property name="visible">1</property>
-    <property name="title" translatable="1">window1</property>
-    <child>
-      <placeholder/>
-    </child>
-    <property name="child">
-      <object class="GtkBox" id="streamWidget">
-        <property name="orientation">vertical</property>
-        <child>
-          <object class="GtkBox">
-            <property name="valign">center</property>
-            <property name="orientation">vertical</property>
-            <property name="spacing">6</property>
-            <property name="margin-start">12</property>
-            <property name="margin-top">12</property>
-            <property name="margin-end">12</property>
-            <property name="margin-bottom">12</property>
-            <child>
-              <object class="GtkBox">
-                <property name="valign">center</property>
-                <property name="spacing">6</property>
-                <child>
-                  <object class="GtkImage" id="streamIconImage">
-                    <property name="icon_name">gtk-missing-image</property>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkBox">
-                    <property name="hexpand">1</property>
-                    <property name="spacing">2</property>
-                    <child>
-                      <object class="GtkLabel" id="streamBoldNameLabel">
-                        <property name="use_markup">1</property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="streamNameLabel">
-                        <property name="label" translatable="1">Stream Title</property>
-                        <property name="use_markup">1</property>
-                        <property name="ellipsize">end</property>
-                        <property name="xalign">0</property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="directionLabel">
-                        <property name="margin_start">4</property>
-                        <property name="margin_end">4</property>
-                        <property name="label" translatable="1">direction</property>
-                        <property name="use_markup">1</property>
-                        <property name="xalign">0</property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkComboBoxText" id="deviceComboBox">
-                        <property name="halign">GTK_ALIGN_END</property>
-                        <property name="hexpand">1</property>
-                      </object>
-                    </child>
-                  </object>
-                </child>
-                <child>
-                  <object class="GtkBox">
-                    <property name="spacing">3</property>
-                    <child>
-                      <object class="GtkToggleButton" id="streamMuteToggleButton">
-                        <property name="halign">center</property>
-                        <property name="focusable">1</property>
-                        <property name="tooltip_text" translatable="1">Mute audio</property>
-                        <property name="has-frame">0</property>
-                        <child>
-                          <object class="GtkImage">
-                            <property name="icon_name">audio-volume-muted</property>
-                            <property name="icon_size">normal</property>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkToggleButton" id="streamLockToggleButton">
-                        <property name="halign">center</property>
-                        <property name="focusable">1</property>
-                        <property name="tooltip_text" translatable="1">Lock channels together</property>
-                        <property name="has-frame">0</property>
-                        <property name="active">1</property>
-                        <child>
-                          <object class="GtkImage">
-                            <property name="icon_name">changes-prevent</property>
-                            <property name="icon_size">normal</property>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
-              </object>
-            </child>
-            <child>
-              <object class="GtkBox" id="streamChannelsVBox">
-                <property name="valign">center</property>
-                <property name="orientation">vertical</property>
-                <property name="spacing">6</property>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
-              </object>
-            </child>
-          </object>
-        </child>
-        <child>
-          <object class="GtkSeparator">
-            <property name="valign">center</property>
-          </object>
-        </child>
-      </object>
-    </property>
-  </object>
-</interface>
diff --git a/src/renamedialog.ui b/src/renamedialog.ui
new file mode 100644
index 0000000..9ee488a
--- /dev/null
+++ b/src/renamedialog.ui
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <object class="GtkApplicationWindow" id="renameDialog">
+    <property name="modal">1</property>
+    <child>
+      <object class="GtkBox">
+        <property name="orientation">vertical</property>
+        <property name="spacing">2</property>
+        <property name="margin-start">5</property>
+        <property name="margin-top">5</property>
+        <property name="margin-end">5</property>
+        <property name="margin-bottom">5</property>
+        <child>
+          <object class="GtkLabel">
+            <property name="vexpand">1</property>
+            <property name="label" translatable="1"><b>Rename device to:</b></property>
+            <property name="use_markup">1</property>
+            <property name="xalign">0</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkEntry" id="renameText">
+            <property name="vexpand">1</property>
+            <property name="focusable">1</property>
+            <property name="invisible_char">●</property>
+            <property name="activates_default">1</property>
+            <property name="width_chars">60</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkBox">
+            <property name="baseline_position">bottom</property>
+            <property name="halign">GTK_ALIGN_END</property>
+            <property name="homogeneous">1</property>
+            <child>
+              <object class="GtkButton">
+                <property name="label" translatable="1">_Cancel</property>
+                <property name="use_underline">1</property>
+                <property name="focusable">1</property>
+                <property name="action_name">window.close</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkButton" id="renameButton">
+                <property name="label" translatable="1">_Ok</property>
+                <property name="use_underline">1</property>
+                <property name="focusable">1</property>
+                <property name="action_name">win.rename</property>
+              </object>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/src/resources.gresource.xml b/src/resources.gresource.xml
index 27bef9a..0ed3726 100644
--- a/src/resources.gresource.xml
+++ b/src/resources.gresource.xml
@@ -1,6 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <gresources>
   <gresource prefix="/org/pulseaudio/pavucontrol/ui">
-    <file preprocess="xml-stripblanks" compressed="true">pavucontrol.glade</file>
+    <file preprocess="xml-stripblanks" compressed="true">mainwindow.ui</file>
+    <file preprocess="xml-stripblanks" compressed="true">cardwidget.ui</file>
+    <file preprocess="xml-stripblanks" compressed="true">channelwidget.ui</file>
+    <file preprocess="xml-stripblanks" compressed="true">renamedialog.ui</file>
+    <file preprocess="xml-stripblanks" compressed="true">streamwidget.ui</file>
+    <file preprocess="xml-stripblanks" compressed="true">devicewidget.ui</file>
   </gresource>
 </gresources>
diff --git a/src/rolewidget.cc b/src/rolewidget.cc
index 59279e5..c2d8a21 100644
--- a/src/rolewidget.cc
+++ b/src/rolewidget.cc
@@ -38,7 +38,7 @@ RoleWidget::RoleWidget(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>
 
 RoleWidget* RoleWidget::create() {
     RoleWidget* w;
-    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "streamWidget");
+    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/streamwidget.ui", "streamWidget");
     w = Gtk::Builder::get_widget_derived<RoleWidget>(x, "streamWidget");
     w->reference();
     return w;
diff --git a/src/sinkinputwidget.cc b/src/sinkinputwidget.cc
index 46fc52b..6145c2d 100644
--- a/src/sinkinputwidget.cc
+++ b/src/sinkinputwidget.cc
@@ -40,7 +40,7 @@ SinkInputWidget::SinkInputWidget(BaseObjectType* cobject, const Glib::RefPtr<Gtk
 
 SinkInputWidget* SinkInputWidget::create(MainWindow* mainWindow) {
     SinkInputWidget* w;
-    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "streamWidget");
+    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/streamwidget.ui", "streamWidget");
     w = Gtk::Builder::get_widget_derived<SinkInputWidget>(x, "streamWidget");
     w->init(mainWindow);
     w->reference();
diff --git a/src/sinkwidget.cc b/src/sinkwidget.cc
index 6835d29..86bd328 100644
--- a/src/sinkwidget.cc
+++ b/src/sinkwidget.cc
@@ -104,7 +104,7 @@ SinkWidget::SinkWidget(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>
 
 SinkWidget* SinkWidget::create(MainWindow* mainWindow) {
     SinkWidget* w;
-    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "deviceWidget");
+    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/devicewidget.ui", "deviceWidget");
     w = Gtk::Builder::get_widget_derived<SinkWidget>(x, "deviceWidget");
     w->init(mainWindow, "sink");
     w->reference();
diff --git a/src/sourceoutputwidget.cc b/src/sourceoutputwidget.cc
index 1cb4a22..ca6b3f8 100644
--- a/src/sourceoutputwidget.cc
+++ b/src/sourceoutputwidget.cc
@@ -46,7 +46,7 @@ SourceOutputWidget::SourceOutputWidget(BaseObjectType* cobject, const Glib::RefP
 
 SourceOutputWidget* SourceOutputWidget::create(MainWindow* mainWindow) {
     SourceOutputWidget* w;
-    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "streamWidget");
+    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/streamwidget.ui", "streamWidget");
     w = Gtk::Builder::get_widget_derived<SourceOutputWidget>(x, "streamWidget");
     w->init(mainWindow);
     w->reference();
diff --git a/src/sourcewidget.cc b/src/sourcewidget.cc
index 3ae2395..2423682 100644
--- a/src/sourcewidget.cc
+++ b/src/sourcewidget.cc
@@ -32,7 +32,7 @@ SourceWidget::SourceWidget(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Buil
 
 SourceWidget* SourceWidget::create(MainWindow* mainWindow) {
     SourceWidget* w;
-    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "deviceWidget");
+    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/devicewidget.ui", "deviceWidget");
     w = Gtk::Builder::get_widget_derived<SourceWidget>(x, "deviceWidget");
     w->init(mainWindow, "source");
     w->reference();
diff --git a/src/streamwidget.ui b/src/streamwidget.ui
new file mode 100644
index 0000000..023d760
--- /dev/null
+++ b/src/streamwidget.ui
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <object class="GtkBox" id="streamWidget">
+    <property name="orientation">vertical</property>
+    <child>
+      <object class="GtkBox">
+        <property name="valign">center</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">6</property>
+        <property name="margin-start">12</property>
+        <property name="margin-top">12</property>
+        <property name="margin-end">12</property>
+        <property name="margin-bottom">12</property>
+        <child>
+          <object class="GtkBox">
+            <property name="valign">center</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkImage" id="streamIconImage">
+                <property name="icon_name">gtk-missing-image</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkBox">
+                <property name="hexpand">1</property>
+                <property name="spacing">2</property>
+                <child>
+                  <object class="GtkLabel" id="streamBoldNameLabel">
+                    <property name="use_markup">1</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="streamNameLabel">
+                    <property name="label" translatable="1">Stream Title</property>
+                    <property name="use_markup">1</property>
+                    <property name="ellipsize">end</property>
+                    <property name="xalign">0</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="directionLabel">
+                    <property name="margin_start">4</property>
+                    <property name="margin_end">4</property>
+                    <property name="label" translatable="1">direction</property>
+                    <property name="use_markup">1</property>
+                    <property name="xalign">0</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkComboBoxText" id="deviceComboBox">
+                    <property name="halign">GTK_ALIGN_END</property>
+                    <property name="hexpand">1</property>
+                  </object>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkBox">
+                <property name="spacing">3</property>
+                <child>
+                  <object class="GtkToggleButton" id="streamMuteToggleButton">
+                    <property name="halign">center</property>
+                    <property name="focusable">1</property>
+                    <property name="tooltip_text" translatable="1">Mute audio</property>
+                    <property name="has-frame">0</property>
+                    <child>
+                      <object class="GtkImage">
+                        <property name="icon_name">audio-volume-muted</property>
+                        <property name="icon_size">normal</property>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkToggleButton" id="streamLockToggleButton">
+                    <property name="halign">center</property>
+                    <property name="focusable">1</property>
+                    <property name="tooltip_text" translatable="1">Lock channels together</property>
+                    <property name="has-frame">0</property>
+                    <property name="active">1</property>
+                    <child>
+                      <object class="GtkImage">
+                        <property name="icon_name">changes-prevent</property>
+                        <property name="icon_size">normal</property>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="GtkBox" id="streamChannelsVBox">
+            <property name="valign">center</property>
+            <property name="orientation">vertical</property>
+            <property name="spacing">6</property>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+    <child>
+      <object class="GtkSeparator">
+        <property name="valign">center</property>
+      </object>
+    </child>
+  </object>
+</interface>

commit 64881e3db00827207326df4afafc91ea2caba1c7
Author: JA <jagw40k at free.fr>
Date:   Fri Apr 26 17:13:28 2024 +0200

    Embed ui file as resource and clean it up
    
    Remove a lot of unrequired ids, and fix meson dependency name

diff --git a/meson.build b/meson.build
index 10384da..af6467b 100644
--- a/meson.build
+++ b/meson.build
@@ -39,7 +39,6 @@ cdata.set_quoted('PACKAGE_STRING', 'pavucontrol')
 cdata.set_quoted('PACKAGE_VERSION', meson.project_version())
 cdata.set_quoted('GETTEXT_PACKAGE', 'pavucontrol')
 cdata.set_quoted('LOCALEDIR', localedir)
-cdata.set_quoted('GLADE_FILE', join_paths(datadir, 'pavucontrol', 'pavucontrol.glade'))
 
 cdata.set('HAVE_LIBCANBERRA', canberragtk_dep.found())
 
diff --git a/src/cardwidget.cc b/src/cardwidget.cc
index bdacdaa..f2aa618 100644
--- a/src/cardwidget.cc
+++ b/src/cardwidget.cc
@@ -60,7 +60,7 @@ CardWidget::CardWidget(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>
 
 CardWidget* CardWidget::create() {
     CardWidget* w;
-    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_file(GLADE_FILE, "cardWidget");
+    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "cardWidget");
     w = Gtk::Builder::get_widget_derived<CardWidget>(x, "cardWidget");
     w->reference();
     return w;
diff --git a/src/channelwidget.cc b/src/channelwidget.cc
index 87c494b..499bd46 100644
--- a/src/channelwidget.cc
+++ b/src/channelwidget.cc
@@ -50,8 +50,8 @@ ChannelWidget::ChannelWidget(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Bu
 ChannelWidget* ChannelWidget::createOne(MinimalStreamWidget *owner, int channelIndex, pa_channel_position channelPosition, bool can_decibel) {
     ChannelWidget* w;
     Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create();
-    x->add_from_file(GLADE_FILE, "adjustment1");
-    x->add_from_file(GLADE_FILE, "channelWidget");
+    x->add_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "adjustment1");
+    x->add_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "channelWidget");
     w = Gtk::Builder::get_widget_derived<ChannelWidget>(x, "channelWidget");
     w->reference();
 
diff --git a/src/devicewidget.cc b/src/devicewidget.cc
index e149ceb..d7212d8 100644
--- a/src/devicewidget.cc
+++ b/src/devicewidget.cc
@@ -261,7 +261,7 @@ void DeviceWidget::openRenamePopup(const Glib::VariantBase& parameter) {
         return;
     }
 
-    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_file(GLADE_FILE, "renameDialog");
+    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "renameDialog");
     gchar *key = g_markup_printf_escaped("%s:%s", mDeviceType.c_str(), name.c_str());
     RenameWindow* renameDialog = Gtk::Builder::get_widget_derived<RenameWindow>(x, "renameDialog", description.c_str(), key);
     renameDialog->set_transient_for(*mpMainWindow);
diff --git a/src/mainwindow.cc b/src/mainwindow.cc
index 9bee3b1..e9c2518 100644
--- a/src/mainwindow.cc
+++ b/src/mainwindow.cc
@@ -182,11 +182,11 @@ MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>
 MainWindow* MainWindow::create(bool maximize) {
     MainWindow* w;
     Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create();
-    x->add_from_file(GLADE_FILE, "liststore1");
-    x->add_from_file(GLADE_FILE, "liststore2");
-    x->add_from_file(GLADE_FILE, "liststore3");
-    x->add_from_file(GLADE_FILE, "liststore4");
-    x->add_from_file(GLADE_FILE, "mainWindow");
+    x->add_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "liststore1");
+    x->add_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "liststore2");
+    x->add_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "liststore3");
+    x->add_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "liststore4");
+    x->add_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "mainWindow");
     w = Gtk::Builder::get_widget_derived<MainWindow>(x, "mainWindow");
     w->get_style_context()->add_class("pavucontrol-window");
     if (w && maximize)
diff --git a/src/meson.build b/src/meson.build
index 97eeb00..ba8fa76 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -1,3 +1,10 @@
+gnome = import('gnome')
+resources = gnome.compile_resources('resources',
+  'resources.gresource.xml',
+  source_dir: '.',
+  c_name: 'resources'
+)
+
 pavucontrol_sources = [
   'cardwidget.cc',
   'channelwidget.cc',
@@ -12,6 +19,7 @@ pavucontrol_sources = [
   'sourceoutputwidget.cc',
   'sourcewidget.cc',
   'streamwidget.cc',
+  resources
 ]
 
 pavucontrol_deps = [gtkmm_dep, sigcpp_dep, canberragtk_dep, libpulse_dep, libpulsemlglib_dep]
@@ -30,8 +38,6 @@ executable('pavucontrol',
   dependencies : pavucontrol_deps,
 )
 
-install_data('pavucontrol.glade')
-
 desktop_file = i18n.merge_file(
   input : 'org.pulseaudio.pavucontrol.desktop.in',
   output : 'org.pulseaudio.pavucontrol.desktop',
diff --git a/src/pavucontrol.glade b/src/pavucontrol.glade
index 25591fd..5f83859 100644
--- a/src/pavucontrol.glade
+++ b/src/pavucontrol.glade
@@ -58,7 +58,7 @@
       <object class="GtkBox" id="cardWidget">
         <property name="orientation">vertical</property>
         <child>
-          <object class="GtkBox" id="vbox7">
+          <object class="GtkBox">
             <property name="valign">center</property>
             <property name="orientation">vertical</property>
             <property name="spacing">6</property>
@@ -67,7 +67,7 @@
             <property name="margin-end">12</property>
             <property name="margin-bottom">12</property>
             <child>
-              <object class="GtkBox" id="hbox9">
+              <object class="GtkBox">
                 <property name="valign">center</property>
                 <property name="spacing">6</property>
                 <child>
@@ -76,7 +76,7 @@
                   </object>
                 </child>
                 <child>
-                  <object class="GtkBox" id="hbox11">
+                  <object class="GtkBox">
                     <property name="hexpand">1</property>
                     <child>
                       <object class="GtkLabel" id="cardNameLabel">
@@ -90,7 +90,7 @@
                   </object>
                 </child>
                 <child>
-                  <object class="GtkBox" id="hbox14">
+                  <object class="GtkBox">
                     <property name="spacing">3</property>
                     <child>
                       <object class="GtkToggleButton" id="profileLockToggleButton">
@@ -100,7 +100,7 @@
                         <property name="has-frame">0</property>
                         <property name="active">1</property>
                         <child>
-                          <object class="GtkImage" id="image4">
+                          <object class="GtkImage">
                             <property name="icon_name">changes-prevent</property>
                             <property name="icon_size">normal</property>
                           </object>
@@ -112,11 +112,11 @@
               </object>
             </child>
             <child>
-              <object class="GtkBox" id="hbox1">
+              <object class="GtkBox">
                 <property name="valign">center</property>
                 <property name="spacing">6</property>
                 <child>
-                  <object class="GtkLabel" id="label1">
+                  <object class="GtkLabel">
                     <property name="label" translatable="1"><b>Profile:</b></property>
                     <property name="use_markup">1</property>
                     <property name="xalign">0</property>
@@ -132,7 +132,7 @@
                     <property name="halign">center</property>
                     <property name="spacing">6</property>
                     <child>
-                      <object class="GtkLabel" id="label51">
+                      <object class="GtkLabel">
                         <property name="label" translatable="1"><b>Codec:</b></property>
                         <property name="use_markup">1</property>
                         <property name="xalign">0</property>
@@ -150,7 +150,7 @@
           </object>
         </child>
         <child>
-          <object class="GtkSeparator" id="hseparator5">
+          <object class="GtkSeparator">
             <property name="valign">center</property>
           </object>
         </child>
@@ -167,7 +167,7 @@
       <object class="GtkBox" id="deviceWidget">
         <property name="orientation">vertical</property>
         <child>
-          <object class="GtkBox" id="vbox26">
+          <object class="GtkBox">
             <property name="valign">center</property>
             <property name="orientation">vertical</property>
             <property name="spacing">6</property>
@@ -176,7 +176,7 @@
             <property name="margin-end">12</property>
             <property name="margin-bottom">12</property>
             <child>
-              <object class="GtkBox" id="hbox2">
+              <object class="GtkBox">
                 <property name="valign">center</property>
                 <property name="spacing">6</property>
                 <child>
@@ -185,7 +185,7 @@
                   </object>
                 </child>
                 <child>
-                  <object class="GtkBox" id="hbox12">
+                  <object class="GtkBox">
                     <property name="hexpand">1</property>
                     <child>
                       <object class="GtkLabel" id="deviceBoldNameLabel">
@@ -203,7 +203,7 @@
                   </object>
                 </child>
                 <child>
-                  <object class="GtkBox" id="hbox10">
+                  <object class="GtkBox">
                     <property name="spacing">3</property>
                     <child>
                       <object class="GtkToggleButton" id="deviceMuteToggleButton">
@@ -212,7 +212,7 @@
                         <property name="tooltip_text" translatable="1">Mute audio</property>
                         <property name="has-frame">0</property>
                         <child>
-                          <object class="GtkImage" id="image20">
+                          <object class="GtkImage">
                             <property name="icon_name">audio-volume-muted</property>
                             <property name="icon_size">normal</property>
                           </object>
@@ -227,7 +227,7 @@
                         <property name="has-frame">0</property>
                         <property name="active">1</property>
                         <child>
-                          <object class="GtkImage" id="image18">
+                          <object class="GtkImage">
                             <property name="icon_name">changes-prevent</property>
                             <property name="icon_size">normal</property>
                           </object>
@@ -240,7 +240,7 @@
                         <property name="focusable">1</property>
                         <property name="tooltip_text" translatable="1">Set as default</property>
                         <child>
-                          <object class="GtkImage" id="image2">
+                          <object class="GtkImage">
                             <property name="icon_name">emblem-default</property>
                           </object>
                         </child>
@@ -255,7 +255,7 @@
                 <property name="valign">center</property>
                 <property name="spacing">6</property>
                 <child>
-                  <object class="GtkLabel" id="label2">
+                  <object class="GtkLabel">
                     <property name="label" translatable="1"><b>Port:</b></property>
                     <property name="use_markup">1</property>
                     <property name="xalign">0</property>
@@ -287,7 +287,7 @@
                 <property name="visible">0</property>
                 <property name="focusable">1</property>
                 <child>
-                  <object class="GtkBox" id="vbox1">
+                  <object class="GtkBox">
                     <property name="orientation">vertical</property>
                     <child>
                       <object class="GtkGrid" id="encodingSelect">
@@ -384,7 +384,7 @@
                         <property name="valign">center</property>
                         <property name="spacing">6</property>
                         <child>
-                          <object class="GtkLabel" id="label3">
+                          <object class="GtkLabel">
                             <property name="label" translatable="1"><b>Latency offset:</b></property>
                             <property name="use_markup">1</property>
                             <property name="xalign">0</property>
@@ -397,7 +397,7 @@
                           </object>
                         </child>
                         <child>
-                          <object class="GtkLabel" id="label4">
+                          <object class="GtkLabel">
                             <property name="label" translatable="1">ms</property>
                             <property name="use_markup">1</property>
                           </object>
@@ -416,7 +416,7 @@
           </object>
         </child>
         <child>
-          <object class="GtkSeparator" id="hseparator2">
+          <object class="GtkSeparator">
             <property name="valign">center</property>
           </object>
         </child>
@@ -502,7 +502,7 @@
       <placeholder/>
     </child>
     <property name="child">
-      <object class="GtkBox" id="vbox20">
+      <object class="GtkBox">
         <property name="orientation">vertical</property>
         <property name="spacing">12</property>
         <child>
@@ -514,14 +514,14 @@
             <child>
               <object class="GtkNotebookPage">
                 <property name="child">
-                  <object class="GtkBox" id="vbox32">
+                  <object class="GtkBox">
                     <property name="orientation">vertical</property>
                     <child>
-                      <object class="GtkScrolledWindow" id="scrolledwindow5">
+                      <object class="GtkScrolledWindow">
                         <property name="vexpand">1</property>
                         <property name="focusable">1</property>
                         <property name="child">
-                          <object class="GtkViewport" id="viewport1">
+                          <object class="GtkViewport">
                             <property name="child">
                               <object class="GtkBox" id="streamsVBox">
                                 <property name="orientation">vertical</property>
@@ -540,12 +540,12 @@
                       </object>
                     </child>
                     <child>
-                      <object class="GtkSeparator" id="hseparator1">
+                      <object class="GtkSeparator">
                         <property name="valign">center</property>
                       </object>
                     </child>
                     <child>
-                      <object class="GtkBox" id="hbox5">
+                      <object class="GtkBox">
                         <property name="spacing">6</property>
                         <property name="margin-top">12</property>
                         <property name="margin-bottom">12</property>
@@ -553,7 +553,7 @@
                         <property name="margin-end">12</property>
                         <property name="valign">center</property>
                         <child>
-                          <object class="GtkLabel" id="label5">
+                          <object class="GtkLabel">
                             <property name="hexpand">1</property>
                             <property name="label" translatable="1"><b>_Show:</b></property>
                             <property name="use_markup">1</property>
@@ -566,7 +566,7 @@
                             <property name="hexpand">1</property>
                             <property name="model">liststore1</property>
                             <child>
-                              <object class="GtkCellRendererText" id="cellrenderertext1"/>
+                              <object class="GtkCellRendererText"/>
                               <attributes>
                                 <attribute name="text">0</attribute>
                               </attributes>
@@ -578,7 +578,7 @@
                   </object>
                 </property>
                 <property name="tab">
-                  <object class="GtkLabel" id="label34">
+                  <object class="GtkLabel">
                     <property name="label" translatable="1">_Playback</property>
                     <property name="use_underline">1</property>
                   </object>
@@ -588,14 +588,14 @@
             <child>
               <object class="GtkNotebookPage">
                 <property name="child">
-                  <object class="GtkBox" id="vbox2">
+                  <object class="GtkBox">
                     <property name="orientation">vertical</property>
                     <child>
-                      <object class="GtkScrolledWindow" id="scrolledwindow2">
+                      <object class="GtkScrolledWindow">
                         <property name="vexpand">1</property>
                         <property name="focusable">1</property>
                         <property name="child">
-                          <object class="GtkViewport" id="viewport5">
+                          <object class="GtkViewport">
                             <property name="child">
                               <object class="GtkBox" id="recsVBox">
                                 <property name="orientation">vertical</property>
@@ -614,12 +614,12 @@
                       </object>
                     </child>
                     <child>
-                      <object class="GtkSeparator" id="hseparator3">
+                      <object class="GtkSeparator">
                         <property name="valign">center</property>
                       </object>
                     </child>
                     <child>
-                      <object class="GtkBox" id="hbox7">
+                      <object class="GtkBox">
                         <property name="spacing">6</property>
                         <property name="margin-top">12</property>
                         <property name="margin-bottom">12</property>
@@ -627,7 +627,7 @@
                         <property name="margin-end">12</property>
                         <property name="valign">center</property>
                         <child>
-                          <object class="GtkLabel" id="label8">
+                          <object class="GtkLabel">
                             <property name="hexpand">1</property>
                             <property name="label" translatable="1"><b>_Show:</b></property>
                             <property name="use_markup">1</property>
@@ -640,7 +640,7 @@
                             <property name="hexpand">1</property>
                             <property name="model">liststore2</property>
                             <child>
-                              <object class="GtkCellRendererText" id="cellrenderertext2"/>
+                              <object class="GtkCellRendererText"/>
                               <attributes>
                                 <attribute name="text">0</attribute>
                               </attributes>
@@ -652,7 +652,7 @@
                   </object>
                 </property>
                 <property name="tab">
-                  <object class="GtkLabel" id="label6">
+                  <object class="GtkLabel">
                     <property name="label" translatable="1">_Recording</property>
                     <property name="use_underline">1</property>
                   </object>
@@ -662,14 +662,14 @@
             <child>
               <object class="GtkNotebookPage">
                 <property name="child">
-                  <object class="GtkBox" id="vbox30">
+                  <object class="GtkBox">
                     <property name="orientation">vertical</property>
                     <child>
-                      <object class="GtkScrolledWindow" id="scrolledwindow8">
+                      <object class="GtkScrolledWindow">
                         <property name="vexpand">1</property>
                         <property name="focusable">1</property>
                         <property name="child">
-                          <object class="GtkViewport" id="viewport4">
+                          <object class="GtkViewport">
                             <property name="child">
                               <object class="GtkBox" id="sinksVBox">
                                 <property name="orientation">vertical</property>
@@ -688,12 +688,12 @@
                       </object>
                     </child>
                     <child>
-                      <object class="GtkSeparator" id="hseparator4">
+                      <object class="GtkSeparator">
                         <property name="valign">center</property>
                       </object>
                     </child>
                     <child>
-                      <object class="GtkBox" id="hbox3">
+                      <object class="GtkBox">
                         <property name="spacing">6</property>
                         <property name="margin-top">12</property>
                         <property name="margin-bottom">12</property>
@@ -701,7 +701,7 @@
                         <property name="margin-end">12</property>
                         <property name="valign">center</property>
                         <child>
-                          <object class="GtkLabel" id="label4826">
+                          <object class="GtkLabel">
                             <property name="hexpand">1</property>
                             <property name="label" translatable="1"><b>S_how:</b></property>
                             <property name="use_markup">1</property>
@@ -715,7 +715,7 @@
                             <property name="hexpand">1</property>
                             <property name="model">liststore3</property>
                             <child>
-                              <object class="GtkCellRendererText" id="cellrenderertext3"/>
+                              <object class="GtkCellRendererText"/>
                               <attributes>
                                 <attribute name="text">0</attribute>
                               </attributes>
@@ -727,7 +727,7 @@
                   </object>
                 </property>
                 <property name="tab">
-                  <object class="GtkLabel" id="label4711">
+                  <object class="GtkLabel">
                     <property name="label" translatable="1">_Output Devices</property>
                     <property name="use_underline">1</property>
                   </object>
@@ -737,14 +737,14 @@
             <child>
               <object class="GtkNotebookPage">
                 <property name="child">
-                  <object class="GtkBox" id="vbox31">
+                  <object class="GtkBox">
                     <property name="orientation">vertical</property>
                     <child>
-                      <object class="GtkScrolledWindow" id="scrolledwindow7">
+                      <object class="GtkScrolledWindow">
                         <property name="vexpand">1</property>
                         <property name="focusable">1</property>
                         <property name="child">
-                          <object class="GtkViewport" id="viewport3">
+                          <object class="GtkViewport">
                             <property name="child">
                               <object class="GtkBox" id="sourcesVBox">
                                 <property name="orientation">vertical</property>
@@ -763,12 +763,12 @@
                       </object>
                     </child>
                     <child>
-                      <object class="GtkSeparator" id="hseparator6">
+                      <object class="GtkSeparator">
                         <property name="valign">center</property>
                       </object>
                     </child>
                     <child>
-                      <object class="GtkBox" id="hbox4">
+                      <object class="GtkBox">
                         <property name="spacing">6</property>
                         <property name="margin-top">12</property>
                         <property name="margin-bottom">12</property>
@@ -776,7 +776,7 @@
                         <property name="margin-end">12</property>
                         <property name="valign">center</property>
                         <child>
-                          <object class="GtkLabel" id="label4827">
+                          <object class="GtkLabel">
                             <property name="hexpand">1</property>
                             <property name="label" translatable="1"><b>Sho_w:</b></property>
                             <property name="use_markup">1</property>
@@ -790,7 +790,7 @@
                             <property name="hexpand">1</property>
                             <property name="model">liststore4</property>
                             <child>
-                              <object class="GtkCellRendererText" id="cellrenderertext4"/>
+                              <object class="GtkCellRendererText"/>
                               <attributes>
                                 <attribute name="text">0</attribute>
                               </attributes>
@@ -802,7 +802,7 @@
                   </object>
                 </property>
                 <property name="tab">
-                  <object class="GtkLabel" id="label4717">
+                  <object class="GtkLabel">
                     <property name="label" translatable="1">_Input Devices</property>
                     <property name="use_underline">1</property>
                   </object>
@@ -812,16 +812,16 @@
             <child>
               <object class="GtkNotebookPage">
                 <property name="child">
-                  <object class="GtkBox" id="vbox3">
+                  <object class="GtkBox">
                     <property name="orientation">vertical</property>
                     <child>
-                      <object class="GtkScrolledWindow" id="scrolledwindow1">
+                      <object class="GtkScrolledWindow">
                         <property name="vexpand">1</property>
                         <property name="focusable">1</property>
                         <property name="child">
-                          <object class="GtkViewport" id="viewport2">
+                          <object class="GtkViewport">
                             <property name="child">
-                              <object class="GtkBox" id="vbox4">
+                              <object class="GtkBox">
                                 <property name="orientation">vertical</property>
                                 <child>
                                   <object class="GtkBox" id="cardsVBox">
@@ -838,11 +838,11 @@
                                   </object>
                                 </child>
                                 <child>
-                                  <object class="GtkBox" id="vbox5">
+                                  <object class="GtkBox">
                                     <property name="orientation">vertical</property>
                                     <property name="vexpand-set">1</property>
                                     <child>
-                                      <object class="GtkSeparator" id="hseparator7"/>
+                                      <object class="GtkSeparator"/>
                                     </child>
                                     <child>
                                       <object class="GtkCheckButton" id="showVolumeMetersCheckButton">
@@ -862,7 +862,7 @@
                   </object>
                 </property>
                 <property name="tab">
-                  <object class="GtkLabel" id="label7">
+                  <object class="GtkLabel">
                     <property name="label" translatable="1">_Configuration</property>
                     <property name="use_underline">1</property>
                   </object>
@@ -885,7 +885,7 @@
   <object class="GtkApplicationWindow" id="renameDialog">
     <property name="modal">1</property>
     <child>
-      <object class="GtkBox" id="dialog-vbox1">
+      <object class="GtkBox">
         <property name="orientation">vertical</property>
         <property name="spacing">2</property>
         <property name="margin-start">5</property>
@@ -893,7 +893,7 @@
         <property name="margin-end">5</property>
         <property name="margin-bottom">5</property>
         <child>
-          <object class="GtkLabel" id="label9">
+          <object class="GtkLabel">
             <property name="vexpand">1</property>
             <property name="label" translatable="1"><b>Rename device to:</b></property>
             <property name="use_markup">1</property>
@@ -910,7 +910,7 @@
           </object>
         </child>
         <child>
-          <object class="GtkBox" id="dialog-action_area1">
+          <object class="GtkBox">
             <property name="baseline_position">bottom</property>
             <property name="halign">GTK_ALIGN_END</property>
             <property name="homogeneous">1</property>
@@ -945,7 +945,7 @@
       <object class="GtkBox" id="streamWidget">
         <property name="orientation">vertical</property>
         <child>
-          <object class="GtkBox" id="vbox6">
+          <object class="GtkBox">
             <property name="valign">center</property>
             <property name="orientation">vertical</property>
             <property name="spacing">6</property>
@@ -954,7 +954,7 @@
             <property name="margin-end">12</property>
             <property name="margin-bottom">12</property>
             <child>
-              <object class="GtkBox" id="hbox6">
+              <object class="GtkBox">
                 <property name="valign">center</property>
                 <property name="spacing">6</property>
                 <child>
@@ -963,7 +963,7 @@
                   </object>
                 </child>
                 <child>
-                  <object class="GtkBox" id="hbox8">
+                  <object class="GtkBox">
                     <property name="hexpand">1</property>
                     <property name="spacing">2</property>
                     <child>
@@ -997,7 +997,7 @@
                   </object>
                 </child>
                 <child>
-                  <object class="GtkBox" id="hbox13">
+                  <object class="GtkBox">
                     <property name="spacing">3</property>
                     <child>
                       <object class="GtkToggleButton" id="streamMuteToggleButton">
@@ -1006,7 +1006,7 @@
                         <property name="tooltip_text" translatable="1">Mute audio</property>
                         <property name="has-frame">0</property>
                         <child>
-                          <object class="GtkImage" id="image1">
+                          <object class="GtkImage">
                             <property name="icon_name">audio-volume-muted</property>
                             <property name="icon_size">normal</property>
                           </object>
@@ -1021,7 +1021,7 @@
                         <property name="has-frame">0</property>
                         <property name="active">1</property>
                         <child>
-                          <object class="GtkImage" id="image3">
+                          <object class="GtkImage">
                             <property name="icon_name">changes-prevent</property>
                             <property name="icon_size">normal</property>
                           </object>
@@ -1048,7 +1048,7 @@
           </object>
         </child>
         <child>
-          <object class="GtkSeparator" id="hseparator8">
+          <object class="GtkSeparator">
             <property name="valign">center</property>
           </object>
         </child>
diff --git a/src/pavucontrol.gladep b/src/pavucontrol.gladep
deleted file mode 100644
index 183077b..0000000
--- a/src/pavucontrol.gladep
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-project SYSTEM "http://glade.gnome.org/glade-project-2.0.dtd">
-
-<glade-project>
-  <name></name>
-  <program_name></program_name>
-  <gnome_support>FALSE</gnome_support>
-</glade-project>
diff --git a/src/pavucontrol.h b/src/pavucontrol.h
index d7e81a8..f7bf6cc 100644
--- a/src/pavucontrol.h
+++ b/src/pavucontrol.h
@@ -31,10 +31,6 @@
 #include <pulse/pulseaudio.h>
 #include <pulse/glib-mainloop.h>
 
-#ifndef GLADE_FILE
-#define GLADE_FILE "pavucontrol.glade"
-#endif
-
 /* Can be removed when PulseAudio 0.9.23 or newer is required */
 #ifndef PA_VOLUME_UI_MAX
 # define PA_VOLUME_UI_MAX (pa_sw_volume_from_dB(+11.0))
diff --git a/src/resources.gresource.xml b/src/resources.gresource.xml
new file mode 100644
index 0000000..27bef9a
--- /dev/null
+++ b/src/resources.gresource.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+  <gresource prefix="/org/pulseaudio/pavucontrol/ui">
+    <file preprocess="xml-stripblanks" compressed="true">pavucontrol.glade</file>
+  </gresource>
+</gresources>
diff --git a/src/rolewidget.cc b/src/rolewidget.cc
index cff0880..59279e5 100644
--- a/src/rolewidget.cc
+++ b/src/rolewidget.cc
@@ -38,7 +38,7 @@ RoleWidget::RoleWidget(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>
 
 RoleWidget* RoleWidget::create() {
     RoleWidget* w;
-    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_file(GLADE_FILE, "streamWidget");
+    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "streamWidget");
     w = Gtk::Builder::get_widget_derived<RoleWidget>(x, "streamWidget");
     w->reference();
     return w;
diff --git a/src/sinkinputwidget.cc b/src/sinkinputwidget.cc
index 732205f..46fc52b 100644
--- a/src/sinkinputwidget.cc
+++ b/src/sinkinputwidget.cc
@@ -40,7 +40,7 @@ SinkInputWidget::SinkInputWidget(BaseObjectType* cobject, const Glib::RefPtr<Gtk
 
 SinkInputWidget* SinkInputWidget::create(MainWindow* mainWindow) {
     SinkInputWidget* w;
-    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_file(GLADE_FILE, "streamWidget");
+    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "streamWidget");
     w = Gtk::Builder::get_widget_derived<SinkInputWidget>(x, "streamWidget");
     w->init(mainWindow);
     w->reference();
diff --git a/src/sinkwidget.cc b/src/sinkwidget.cc
index 0af4957..6835d29 100644
--- a/src/sinkwidget.cc
+++ b/src/sinkwidget.cc
@@ -104,7 +104,7 @@ SinkWidget::SinkWidget(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>
 
 SinkWidget* SinkWidget::create(MainWindow* mainWindow) {
     SinkWidget* w;
-    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_file(GLADE_FILE, "deviceWidget");
+    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "deviceWidget");
     w = Gtk::Builder::get_widget_derived<SinkWidget>(x, "deviceWidget");
     w->init(mainWindow, "sink");
     w->reference();
diff --git a/src/sourceoutputwidget.cc b/src/sourceoutputwidget.cc
index d164552..1cb4a22 100644
--- a/src/sourceoutputwidget.cc
+++ b/src/sourceoutputwidget.cc
@@ -46,7 +46,7 @@ SourceOutputWidget::SourceOutputWidget(BaseObjectType* cobject, const Glib::RefP
 
 SourceOutputWidget* SourceOutputWidget::create(MainWindow* mainWindow) {
     SourceOutputWidget* w;
-    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_file(GLADE_FILE, "streamWidget");
+    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "streamWidget");
     w = Gtk::Builder::get_widget_derived<SourceOutputWidget>(x, "streamWidget");
     w->init(mainWindow);
     w->reference();
diff --git a/src/sourcewidget.cc b/src/sourcewidget.cc
index ebcf7fb..3ae2395 100644
--- a/src/sourcewidget.cc
+++ b/src/sourcewidget.cc
@@ -32,7 +32,7 @@ SourceWidget::SourceWidget(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Buil
 
 SourceWidget* SourceWidget::create(MainWindow* mainWindow) {
     SourceWidget* w;
-    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_file(GLADE_FILE, "deviceWidget");
+    Glib::RefPtr<Gtk::Builder> x = Gtk::Builder::create_from_resource("/org/pulseaudio/pavucontrol/ui/pavucontrol.glade", "deviceWidget");
     w = Gtk::Builder::get_widget_derived<SourceWidget>(x, "deviceWidget");
     w->init(mainWindow, "source");
     w->reference();



More information about the pulseaudio-commits mailing list