diff --git a/srcpkgs/pavucontrol/patches/fix-segfault.patch b/srcpkgs/pavucontrol/patches/fix-segfault.patch new file mode 100644 index 0000000000..fe7fcba5cc --- /dev/null +++ b/srcpkgs/pavucontrol/patches/fix-segfault.patch @@ -0,0 +1,319 @@ +Upstream: yes, not released. + +Remove configure.ac changes to avoid need to reconfigure. +We know we have the necessary version of its dependencies. + +From 284082551938b65e71d06bda793fedbd4a4f41ab 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 | 24 ++++++++++++------------ + src/sinkwidget.h | 2 +- + src/streamwidget.cc | 2 +- + 10 files changed, 46 insertions(+), 35 deletions(-) + +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 f3d8620..e1a0a82 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); +@@ -222,7 +222,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 2ff5739..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..bcdde8e 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 e26e0c4..ed83b04 100644 +--- a/src/pavucontrol.glade ++++ b/src/pavucontrol.glade +@@ -425,10 +425,10 @@ + True + False + +- ++ + False +- 2 +- 3 ++ True ++ True + + + PCM +@@ -439,6 +439,10 @@ + True + True + ++ ++ 0 ++ 0 ++ + + + +@@ -450,7 +454,7 @@ + + + 1 +- 2 ++ 0 + + + +@@ -462,8 +466,8 @@ + True + + +- 1 +- 2 ++ 2 ++ 0 + + + +@@ -475,8 +479,8 @@ + True + + +- 2 +- 3 ++ 0 ++ 1 + + + +@@ -489,9 +493,7 @@ + + + 1 +- 2 + 1 +- 2 + + + +@@ -504,9 +506,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; +-- +GitLab + diff --git a/srcpkgs/pavucontrol/template b/srcpkgs/pavucontrol/template index 14edda2c54..b80f1b85a7 100644 --- a/srcpkgs/pavucontrol/template +++ b/srcpkgs/pavucontrol/template @@ -1,7 +1,7 @@ # Template file for 'pavucontrol' pkgname=pavucontrol version=4.0 -revision=1 +revision=2 build_style=gnu-configure hostmakedepends="pkg-config intltool" makedepends="gtkmm-devel libcanberra-devel gtk+3-devel pulseaudio-devel" @@ -11,3 +11,4 @@ license="GPL-2.0-or-later" homepage="https://freedesktop.org/software/pulseaudio/pavucontrol/" distfiles="${homepage}/${pkgname}-${version}.tar.xz" checksum=8fc45bac9722aefa6f022999cbb76242d143c31b314e2dbb38f034f4069d14e2 +patch_args=-Np1