diff --git a/31.patch b/31.patch new file mode 100644 index 0000000..d790dac --- /dev/null +++ b/31.patch @@ -0,0 +1,333 @@ +From 9c4870b066999248b679b518f43b19a2065cdf40 Mon Sep 17 00:00:00 2001 +From: Felipe Sateler +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 + 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 @@ + ++ + + + +@@ -425,10 +426,10 @@ + True + False + +- ++ + False +- 2 +- 3 ++ True ++ True + + + PCM +@@ -439,6 +440,10 @@ + True + True + ++ ++ 0 ++ 0 ++ + + + +@@ -450,7 +455,7 @@ + + + 1 +- 2 ++ 0 + + + +@@ -462,8 +467,8 @@ + True + + +- 1 +- 2 ++ 2 ++ 0 + + + +@@ -475,8 +480,8 @@ + True + + +- 2 +- 3 ++ 0 ++ 1 + + + +@@ -489,9 +494,7 @@ + + + 1 +- 2 + 1 +- 2 + + + +@@ -504,9 +507,7 @@ + + + 2 +- 3 + 1 +- 2 + + + +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 + diff --git a/pavucontrol.spec b/pavucontrol.spec index 12da40c..da96239 100644 --- a/pavucontrol.spec +++ b/pavucontrol.spec @@ -1,11 +1,12 @@ Name: pavucontrol Version: 4.0 -Release: 3%{?dist} +Release: 4%{?dist} Summary: Volume control for PulseAudio License: GPLv2+ URL: http://freedesktop.org/software/pulseaudio/%{name} Source0: http://freedesktop.org/software/pulseaudio/%{name}/%{name}-%{version}.tar.xz +Patch0: 31.patch BuildRequires: gcc-c++ BuildRequires: pulseaudio-libs-devel >= 3.0 @@ -22,7 +23,7 @@ tools this one allows you to control both the volume of hardware devices and of each playback stream separately. %prep -%setup -q +%autosetup -p1 %build %configure \ @@ -50,6 +51,9 @@ desktop-file-validate $RPM_BUILD_ROOT%{_datadir}/applications/pavucontrol.deskto %{_datadir}/applications/pavucontrol.desktop %changelog +* Sat Jun 13 2020 Julian Sikorski - 4.0-4 +- Fix crash on Ctrl-Q using a patch from upstream gitlab (RH #1725150) + * Wed Jan 29 2020 Fedora Release Engineering - 4.0-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild