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 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(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 #include "pavucontrol.h" #include "mainwindow.h" @@ -49,4 +50,6 @@ private: }; +extern std::unique_ptr 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;