projects
/
quassel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
core: Allow clean shutdown of the core
[quassel.git]
/
src
/
core
/
coreapplication.cpp
diff --git
a/src/core/coreapplication.cpp
b/src/core/coreapplication.cpp
index
90f3905
..
9ad6ef0
100644
(file)
--- a/
src/core/coreapplication.cpp
+++ b/
src/core/coreapplication.cpp
@@
-18,10
+18,8
@@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
-#include "core.h"
#include "coreapplication.h"
#include "coreapplication.h"
-
CoreApplication::CoreApplication(int &argc, char **argv)
: QCoreApplication(argc, argv)
{
CoreApplication::CoreApplication(int &argc, char **argv)
: QCoreApplication(argc, argv)
{
@@
-30,12
+28,10
@@
CoreApplication::CoreApplication(int &argc, char **argv)
#endif /* Q_OS_MAC */
Quassel::setRunMode(Quassel::CoreOnly);
#endif /* Q_OS_MAC */
Quassel::setRunMode(Quassel::CoreOnly);
-}
-
-
-CoreApplication::~CoreApplication()
-{
- _core.reset();
+ Quassel::registerQuitHandler([this]() {
+ connect(_core.get(), SIGNAL(shutdownComplete()), this, SLOT(onShutdownComplete()));
+ _core->shutdown();
+ });
}
}
@@
-48,3
+44,10
@@
void CoreApplication::init()
_core.reset(new Core{}); // FIXME C++14: std::make_unique
_core->init();
}
_core.reset(new Core{}); // FIXME C++14: std::make_unique
_core->init();
}
+
+
+void CoreApplication::onShutdownComplete()
+{
+ connect(_core.get(), SIGNAL(destroyed()), QCoreApplication::instance(), SLOT(quit()));
+ _core.release()->deleteLater();
+}