From: Erwan Tulou Date: Sat, 14 Mar 2009 10:13:40 +0000 (+0100) Subject: at qt4 termination, ensure quit() function is executed in the right thread X-Git-Tag: 1.0.0-pre1~35 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=ed9fae5e469fe0fcae7c1fac1ee0a31c62e968fb;p=vlc at qt4 termination, ensure quit() function is executed in the right thread Signed-off-by: RĂ©mi Denis-Courmont --- diff --git a/modules/gui/qt4/Modules.am b/modules/gui/qt4/Modules.am index f118476d5b..ce0f73e62c 100644 --- a/modules/gui/qt4/Modules.am +++ b/modules/gui/qt4/Modules.am @@ -57,6 +57,7 @@ nodist_SOURCES_qt4 = \ components/sout/sout_widgets.moc.cpp \ util/input_slider.moc.cpp \ util/customwidgets.moc.cpp \ + util/qvlcapp.moc.cpp \ resources.cpp \ ui/equalizer.h \ ui/v4l2.h \ diff --git a/modules/gui/qt4/qt4.cpp b/modules/gui/qt4/qt4.cpp index 7a07f71163..5aae67ca08 100644 --- a/modules/gui/qt4/qt4.cpp +++ b/modules/gui/qt4/qt4.cpp @@ -329,7 +329,7 @@ static void Close( vlc_object_t *p_this ) intf_sys_t *p_sys = p_intf->p_sys; var_Destroy (p_this->p_libvlc, "qt4-iface"); - QApplication::quit(); + QVLCApp::triggerQuit(); vlc_join (p_sys->thread, NULL); #ifdef Q_WS_X11 diff --git a/modules/gui/qt4/qt4.hpp b/modules/gui/qt4/qt4.hpp index 62a26c5dfd..9077cb900d 100644 --- a/modules/gui/qt4/qt4.hpp +++ b/modules/gui/qt4/qt4.hpp @@ -52,7 +52,7 @@ enum { MsgEventType = 300, }; -class QApplication; +class QVLCApp; class QMenu; class MainInterface; class QSettings; @@ -61,7 +61,7 @@ struct intf_sys_t { vlc_thread_t thread; - QApplication *p_app; /* Main Qt Application */ + QVLCApp *p_app; /* Main Qt Application */ MainInterface *p_mi; /* Main Interface, NULL if DialogProvider Mode */ QSettings *mainSettings; /* Qt State settings not messing main VLC ones */ diff --git a/modules/gui/qt4/util/qvlcapp.hpp b/modules/gui/qt4/util/qvlcapp.hpp index b2a2ad61a5..905a4155da 100644 --- a/modules/gui/qt4/util/qvlcapp.hpp +++ b/modules/gui/qt4/util/qvlcapp.hpp @@ -30,13 +30,26 @@ class QVLCApp : public QApplication { + Q_OBJECT + public: - QVLCApp( int & argc, char ** argv ) : QApplication( argc, argv, true ) { } + QVLCApp( int & argc, char ** argv ) : QApplication( argc, argv, true ) + { + connect( this, SIGNAL(quitSignal()), this, SLOT(quit()) ); + } + + static void triggerQuit() + { + QVLCApp *app = qobject_cast( instance() ); + if ( app ) + emit app->quitSignal(); + } #if defined (Q_WS_X11) QVLCApp( Display *dp, int & argc, char ** argv ) : QApplication( dp, argc, argv ) { + connect( this, SIGNAL(quitSignal()), this, SLOT(quit()) ); } #endif @@ -54,6 +67,11 @@ protected: return false; } #endif + + +signals: + void quitSignal(); + }; #endif