summaryrefslogtreecommitdiff
path: root/source/xap/pavucontrol
diff options
context:
space:
mode:
authorPatrick J Volkerding <volkerdi@slackware.com>2021-04-30 18:09:21 +0000
committerEric Hameleers <alien@slackware.com>2021-05-01 08:59:57 +0200
commit47328317b34b179ce388a8211b61554215c37148 (patch)
tree09c7ab980b47cbe6c7b912f103f8380841b3cb7a /source/xap/pavucontrol
parentded2ad645c217d20866979991ea57ca71b602f74 (diff)
downloadcurrent-47328317b34b179ce388a8211b61554215c37148.tar.gz
Fri Apr 30 18:09:21 UTC 202120210430180921
l/gvfs-1.48.1-x86_64-1.txz: Upgraded. l/imagemagick-7.0.11_10-x86_64-1.txz: Upgraded. n/php-7.4.18-x86_64-1.txz: Upgraded. This update fixes bugs and security issues. For more information, see: https://www.php.net/ChangeLog-7.php#7.4.18 (* Security fix *) n/postfix-3.6.0-x86_64-1.txz: Upgraded. x/libepoxy-1.5.7-x86_64-1.txz: Upgraded. x/libinput-1.17.2-x86_64-1.txz: Upgraded. x/xorgproto-2021.4-x86_64-1.txz: Upgraded. xap/pavucontrol-4.0-x86_64-4.txz: Rebuilt. Fix segfault after crtl-Q. Thanks to Jonathan Woithe and 2slguevH. xap/pidgin-2.14.4-x86_64-1.txz: Upgraded.
Diffstat (limited to 'source/xap/pavucontrol')
-rwxr-xr-xsource/xap/pavucontrol/pavucontrol.SlackBuild4
-rw-r--r--source/xap/pavucontrol/sigsegv_on_quit.patch150
2 files changed, 153 insertions, 1 deletions
diff --git a/source/xap/pavucontrol/pavucontrol.SlackBuild b/source/xap/pavucontrol/pavucontrol.SlackBuild
index 49864a59..c6294e42 100755
--- a/source/xap/pavucontrol/pavucontrol.SlackBuild
+++ b/source/xap/pavucontrol/pavucontrol.SlackBuild
@@ -24,7 +24,7 @@ cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=pavucontrol
VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
-BUILD=${BUILD:-3}
+BUILD=${BUILD:-4}
NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}
@@ -76,6 +76,8 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \+
+zcat $CWD/sigsegv_on_quit.patch.gz | patch -p1 --verbose || exit 1
+
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS -std=c++11" \
./configure \
diff --git a/source/xap/pavucontrol/sigsegv_on_quit.patch b/source/xap/pavucontrol/sigsegv_on_quit.patch
new file mode 100644
index 00000000..21a35504
--- /dev/null
+++ b/source/xap/pavucontrol/sigsegv_on_quit.patch
@@ -0,0 +1,150 @@
+diff --git a/src/mainwindow.cc b/src/mainwindow.cc
+index 6fa3480..6d6463a 100644
+--- a/src/mainwindow.cc
++++ b/src/mainwindow.cc
+@@ -35,6 +35,8 @@
+
+ #include "i18n.h"
+
++#include "pavuapplication.h"
++
+ /* Used for profile sorting */
+ struct profile_prio_compare {
+ bool operator() (const pa_card_profile_info2& lhs, const pa_card_profile_info2& rhs) const {
+@@ -200,7 +202,6 @@ void MainWindow::on_realize() {
+ }
+
+ bool MainWindow::on_key_press_event(GdkEventKey* event) {
+-
+ if (event->state & GDK_CONTROL_MASK) {
+ switch (event->keyval) {
+ case GDK_KEY_KP_1:
+@@ -221,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();
++ g_MainApp -> quit();
+ return true;
+ }
+ }
+diff --git a/src/pavuapplication.cc b/src/pavuapplication.cc
+index e8520ec..3298c1c 100644
+--- a/src/pavuapplication.cc
++++ b/src/pavuapplication.cc
+@@ -30,6 +30,9 @@
+ #include "pavucontrol.h"
+ #include "mainwindow.h"
+
++
++std::unique_ptr<PavuApplication> g_MainApp;
++
+ PavuApplication::PavuApplication() :
+ Gtk::Application("org.pulseaudio.pavucontrol", Gio::ApplicationFlags::APPLICATION_HANDLES_COMMAND_LINE),
+ mainWindow(NULL),
+@@ -143,26 +146,26 @@ int main(int argc, char *argv[]) {
+ signal(SIGPIPE, SIG_IGN);
+
+ /* Create the application */
+- auto app = PavuApplication();
++ g_MainApp = std::unique_ptr<PavuApplication>(new PavuApplication());
+
+ /* Add command-line options */
+- app.add_main_option_entry(
++ g_MainApp->add_main_option_entry(
+ Gio::Application::OptionType::OPTION_TYPE_INT,
+ "tab", 't',
+ _("Select a specific tab on load."),
+ _("number"));
+
+- app.add_main_option_entry(
++ g_MainApp->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(
++ g_MainApp->add_main_option_entry(
+ Gio::Application::OptionType::OPTION_TYPE_BOOL,
+ "maximize", 'm',
+ _("Maximize the window."));
+
+- app.add_main_option_entry(
++ g_MainApp->add_main_option_entry(
+ Gio::Application::OptionType::OPTION_TYPE_BOOL,
+ "version", 'v',
+ _("Show version."));
+@@ -170,7 +173,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);
++ g_MainApp->signal_command_line().connect(sigc::bind(sigc::ptr_fun(&on_command_line), g_MainApp.get()), false);
+
+ /* Run the application.
+ * In the first launched instance, this will return when its window is
+@@ -179,5 +182,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 g_MainApp->run(argc, argv);
+ }
+diff --git a/src/pavuapplication.h b/src/pavuapplication.h
+index 3589c5d..ba56dc9 100644
+--- a/src/pavuapplication.h
++++ b/src/pavuapplication.h
+@@ -21,6 +21,7 @@
+ #ifndef pavuapplication_h
+ #define pavuapplication_h
+
++#include <memory>
+ #include "pavucontrol.h"
+ #include "mainwindow.h"
+
+@@ -49,4 +50,6 @@ private:
+ };
+
+
++extern std::unique_ptr<PavuApplication> g_MainApp;
++
+ #endif
+diff --git a/src/pavucontrol.cc b/src/pavucontrol.cc
+index 6981707..dbdf92a 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();
++ g_MainApp ->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();
++ g_MainApp ->quit();
+ return;
+ }
+ }
+@@ -613,7 +614,7 @@ gboolean connect_to_pulse(gpointer userdata) {
+ else {
+ if(!retry) {
+ reconnect_timeout = -1;
+- Gtk::Main::quit();
++ g_MainApp ->quit();
+ } else {
+ g_debug(_("Connection failed, attempting reconnect"));
+ reconnect_timeout = 5;