Blob Blame History Raw
From 9c4870b066999248b679b518f43b19a2065cdf40 Mon Sep 17 00:00:00 2001
From: Felipe Sateler <fsateler@gmail.com>
Date: Sat, 28 Dec 2019 12:39:38 -0300
Subject: [PATCH] Migrate away from deprecated Gtk interfaces

This was accomplished by building with -DGTKMM_DISABLE_DEPRECATED.
---
 configure.ac           |  2 +-
 src/channelwidget.h    |  2 +-
 src/devicewidget.cc    |  6 +++---
 src/mainwindow.cc      | 12 ++++++------
 src/pavuapplication.cc | 22 +++++++++++++++-------
 src/pavuapplication.h  |  2 ++
 src/pavucontrol.cc     |  7 ++++---
 src/pavucontrol.glade  | 25 +++++++++++++------------
 src/sinkwidget.h       |  2 +-
 src/streamwidget.cc    |  2 +-
 10 files changed, 47 insertions(+), 35 deletions(-)

diff --git a/configure.ac b/configure.ac
index 33514b2..d63bb39 100644
--- a/configure.ac
+++ b/configure.ac
@@ -41,7 +41,7 @@ AC_TYPE_SIGNAL
 AC_HEADER_STDC
 AX_CXX_COMPILE_STDCXX_11
 
-PKG_CHECK_MODULES(GUILIBS, [ gtkmm-3.0 >= 3.0 sigc++-2.0 libcanberra-gtk3 >= 0.16 ])
+PKG_CHECK_MODULES(GUILIBS, [ gtkmm-3.0 >= 3.22 sigc++-2.0 libcanberra-gtk3 >= 0.16 ])
 AC_SUBST(GUILIBS_CFLAGS)
 AC_SUBST(GUILIBS_LIBS)
 
diff --git a/src/channelwidget.h b/src/channelwidget.h
index c9c5c9d..6216b74 100644
--- a/src/channelwidget.h
+++ b/src/channelwidget.h
@@ -38,7 +38,7 @@ public:
 
     Gtk::Label *channelLabel;
     Gtk::Label *volumeLabel;
-    Gtk::HScale *volumeScale;
+    Gtk::Scale *volumeScale;
 
     int channel;
     MinimalStreamWidget *minimalStreamWidget;
diff --git a/src/devicewidget.cc b/src/devicewidget.cc
index e1b1869..dd41487 100644
--- a/src/devicewidget.cc
+++ b/src/devicewidget.cc
@@ -227,7 +227,7 @@ void DeviceWidget::prepareMenu() {
 
 bool DeviceWidget::onContextTriggerEvent(GdkEventButton* event) {
     if (GDK_BUTTON_PRESS == event->type && 3 == event->button) {
-        contextMenu.popup(event->button, event->time);
+        contextMenu.popup_at_pointer((GdkEvent*)event);
         return true;
     }
 
@@ -259,8 +259,8 @@ void DeviceWidget::renamePopup() {
     x->get_widget("renameText", renameText);
 
     renameText->set_text(description);
-    dialog->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
-    dialog->add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK);
+    dialog->add_button("_Cancel", Gtk::RESPONSE_CANCEL);
+    dialog->add_button("_OK", Gtk::RESPONSE_OK);
     dialog->set_default_response(Gtk::RESPONSE_OK);
     if (Gtk::RESPONSE_OK == dialog->run()) {
         pa_operation* o;
diff --git a/src/mainwindow.cc b/src/mainwindow.cc
index 09dc783..bda5d2e 100644
--- a/src/mainwindow.cc
+++ b/src/mainwindow.cc
@@ -95,11 +95,11 @@ MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>
     x->get_widget("notebook", notebook);
     x->get_widget("showVolumeMetersCheckButton", showVolumeMetersCheckButton);
 
-    cardsVBox->set_reallocate_redraws(true);
-    sourcesVBox->set_reallocate_redraws(true);
-    streamsVBox->set_reallocate_redraws(true);
-    recsVBox->set_reallocate_redraws(true);
-    sinksVBox->set_reallocate_redraws(true);
+    sourcesVBox->signal_size_allocate().connect([this](Gdk::Rectangle _unused){ sourcesVBox->queue_draw(); });
+    cardsVBox->signal_size_allocate().connect([this](Gdk::Rectangle _unused){ cardsVBox->queue_draw(); });
+    streamsVBox->signal_size_allocate().connect([this](Gdk::Rectangle _unused){ streamsVBox->queue_draw(); });
+    recsVBox->signal_size_allocate().connect([this](Gdk::Rectangle _unused){ recsVBox->queue_draw(); });
+    sinksVBox->signal_size_allocate().connect([this](Gdk::Rectangle _unused){ sinksVBox->queue_draw(); });
 
     sinkInputTypeComboBox->set_active((int) showSinkInputType);
     sourceOutputTypeComboBox->set_active((int) showSourceOutputType);
@@ -221,7 +221,7 @@ bool MainWindow::on_key_press_event(GdkEventKey* event) {
             case GDK_KEY_Q:
             case GDK_KEY_w:
             case GDK_KEY_q:
-                Gtk::Main::quit();
+                this->get_application()->quit();
                 return true;
         }
     }
diff --git a/src/pavuapplication.cc b/src/pavuapplication.cc
index e8520ec..6773b53 100644
--- a/src/pavuapplication.cc
+++ b/src/pavuapplication.cc
@@ -30,6 +30,14 @@
 #include "pavucontrol.h"
 #include "mainwindow.h"
 
+static PavuApplication globalInstance;
+
+PavuApplication&
+PavuApplication::get_instance()
+{
+    return globalInstance;
+}
+
 PavuApplication::PavuApplication() :
     Gtk::Application("org.pulseaudio.pavucontrol", Gio::ApplicationFlags::APPLICATION_HANDLES_COMMAND_LINE),
     mainWindow(NULL),
@@ -143,26 +151,26 @@ int main(int argc, char *argv[]) {
     signal(SIGPIPE, SIG_IGN);
 
     /* Create the application */
-    auto app = PavuApplication();
+    globalInstance = PavuApplication();
 
     /* Add command-line options */
-    app.add_main_option_entry(
+    globalInstance.add_main_option_entry(
         Gio::Application::OptionType::OPTION_TYPE_INT,
         "tab", 't',
         _("Select a specific tab on load."),
         _("number"));
 
-    app.add_main_option_entry(
+    globalInstance.add_main_option_entry(
         Gio::Application::OptionType::OPTION_TYPE_BOOL,
         "retry", 'r',
         _("Retry forever if pa quits (every 5 seconds)."));
 
-    app.add_main_option_entry(
+    globalInstance.add_main_option_entry(
         Gio::Application::OptionType::OPTION_TYPE_BOOL,
         "maximize", 'm',
         _("Maximize the window."));
 
-    app.add_main_option_entry(
+    globalInstance.add_main_option_entry(
         Gio::Application::OptionType::OPTION_TYPE_BOOL,
         "version", 'v',
         _("Show version."));
@@ -170,7 +178,7 @@ int main(int argc, char *argv[]) {
     /* Connect to the "on_command_line" signal which is fired
      * when the application receives command-line arguments
      */
-    app.signal_command_line().connect(sigc::bind(sigc::ptr_fun(&on_command_line), &app), false);
+    globalInstance.signal_command_line().connect(sigc::bind(sigc::ptr_fun(&on_command_line), &globalInstance), false);
 
     /* Run the application.
      * In the first launched instance, this will return when its window is
@@ -179,5 +187,5 @@ int main(int argc, char *argv[]) {
      * Handling a new request consists of presenting the existing window (and
      * optionally, select a tab).
      */
-    return app.run(argc, argv);
+    return globalInstance.run(argc, argv);
 }
diff --git a/src/pavuapplication.h b/src/pavuapplication.h
index 3589c5d..d2a1f5a 100644
--- a/src/pavuapplication.h
+++ b/src/pavuapplication.h
@@ -37,6 +37,8 @@ public:
     gint32 tab;
     bool version;
 
+    static PavuApplication& get_instance();
+
 protected:
     // Override default signal handlers:
     void on_activate() override;
diff --git a/src/pavucontrol.cc b/src/pavucontrol.cc
index 6981707..2ce95b0 100644
--- a/src/pavucontrol.cc
+++ b/src/pavucontrol.cc
@@ -40,6 +40,7 @@
 #include "sourceoutputwidget.h"
 #include "rolewidget.h"
 #include "mainwindow.h"
+#include "pavuapplication.h"
 
 static pa_context* context = NULL;
 static pa_mainloop_api* api = NULL;
@@ -56,7 +57,7 @@ void show_error(const char *txt) {
     Gtk::MessageDialog dialog(buf, false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_CLOSE, true);
     dialog.run();
 
-    Gtk::Main::quit();
+    PavuApplication::get_instance().quit();
 }
 
 static void dec_outstanding(MainWindow *w) {
@@ -571,7 +572,7 @@ void context_state_callback(pa_context *c, void *userdata) {
 
         case PA_CONTEXT_TERMINATED:
         default:
-            Gtk::Main::quit();
+            w->get_application()->quit();
             return;
     }
 }
@@ -613,7 +614,7 @@ gboolean connect_to_pulse(gpointer userdata) {
         else {
             if(!retry) {
                 reconnect_timeout = -1;
-                Gtk::Main::quit();
+            w->get_application()->quit();
             } else {
                 g_debug(_("Connection failed, attempting reconnect"));
                 reconnect_timeout = 5;
diff --git a/src/pavucontrol.glade b/src/pavucontrol.glade
index fe6c635..ef71204 100644
--- a/src/pavucontrol.glade
+++ b/src/pavucontrol.glade
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.22.1 -->
 <interface>
   <requires lib="gtk+" version="3.0"/>
   <object class="GtkAdjustment" id="adjustment1">
@@ -425,10 +426,10 @@
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <child>
-                          <object class="GtkTable" id="encodingSelect">
+                          <object class="GtkGrid" id="encodingSelect">
                             <property name="can_focus">False</property>
-                            <property name="n_rows">2</property>
-                            <property name="n_columns">3</property>
+                            <property name="row_homogeneous">True</property>
+                            <property name="column_homogeneous">True</property>
                             <child>
                               <object class="GtkCheckButton" id="encodingFormatPCM">
                                 <property name="label" translatable="yes">PCM</property>
@@ -439,6 +440,10 @@
                                 <property name="active">True</property>
                                 <property name="draw_indicator">True</property>
                               </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">0</property>
+                              </packing>
                             </child>
                             <child>
                               <object class="GtkCheckButton" id="encodingFormatAC3">
@@ -450,7 +455,7 @@
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
-                                <property name="right_attach">2</property>
+                                <property name="top_attach">0</property>
                               </packing>
                             </child>
                             <child>
@@ -462,8 +467,8 @@
                                 <property name="draw_indicator">True</property>
                               </object>
                               <packing>
-                                <property name="top_attach">1</property>
-                                <property name="bottom_attach">2</property>
+                                <property name="left_attach">2</property>
+                                <property name="top_attach">0</property>
                               </packing>
                             </child>
                             <child>
@@ -475,8 +480,8 @@
                                 <property name="draw_indicator">True</property>
                               </object>
                               <packing>
-                                <property name="left_attach">2</property>
-                                <property name="right_attach">3</property>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">1</property>
                               </packing>
                             </child>
                             <child>
@@ -489,9 +494,7 @@
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
-                                <property name="right_attach">2</property>
                                 <property name="top_attach">1</property>
-                                <property name="bottom_attach">2</property>
                               </packing>
                             </child>
                             <child>
@@ -504,9 +507,7 @@
                               </object>
                               <packing>
                                 <property name="left_attach">2</property>
-                                <property name="right_attach">3</property>
                                 <property name="top_attach">1</property>
-                                <property name="bottom_attach">2</property>
                               </packing>
                             </child>
                           </object>
diff --git a/src/sinkwidget.h b/src/sinkwidget.h
index 0044ffc..924fca0 100644
--- a/src/sinkwidget.h
+++ b/src/sinkwidget.h
@@ -46,7 +46,7 @@ public:
 
 #if HAVE_EXT_DEVICE_RESTORE_API
     encodingList encodings[PAVU_NUM_ENCODINGS];
-    Gtk::Table *encodingSelect;
+    Gtk::Grid *encodingSelect;
 #endif
 
     virtual void onMuteToggleButton();
diff --git a/src/streamwidget.cc b/src/streamwidget.cc
index 00df09f..d203b20 100644
--- a/src/streamwidget.cc
+++ b/src/streamwidget.cc
@@ -66,7 +66,7 @@ void StreamWidget::init(MainWindow* mainWindow) {
 
 bool StreamWidget::onContextTriggerEvent(GdkEventButton* event) {
     if (GDK_BUTTON_PRESS == event->type && 3 == event->button) {
-        contextMenu.popup(event->button, event->time);
+        contextMenu.popup_at_pointer((GdkEvent*)event);
         return true;
     }
     return false;
-- 
2.26.2