slackware-current/source/xap/pavucontrol/sigsegv_on_quit.patch
Patrick J Volkerding 47328317b3 Fri Apr 30 18:09:21 UTC 2021
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.
2021-05-01 08:59:57 +02:00

150 lines
4.6 KiB
Diff

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;