X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcommon%2Fquassel.h;h=b658677d30cd15f41ae512b9fbd31fe305e25357;hb=ab7ef4d24f62b5848b628482b7762ebfc0b53e1a;hp=85660afc8edfa311165d54e20242934f7fe099d9;hpb=37110ceaa070167b4f40ed449ac9ea130503a792;p=quassel.git diff --git a/src/common/quassel.h b/src/common/quassel.h index 85660afc..b658677d 100644 --- a/src/common/quassel.h +++ b/src/common/quassel.h @@ -32,12 +32,14 @@ #include #include "abstractcliparser.h" +#include "abstractsignalwatcher.h" +#include "singleton.h" class QFile; class Logger; -class Quassel : public QObject +class Quassel : public QObject, public Singleton { // TODO Qt5: Use Q_GADGET Q_OBJECT @@ -113,11 +115,7 @@ public: * * This list should be cleaned up after every protocol break, as we can assume them to be present then. */ - #if QT_VERSION >= 0x050000 enum class Feature : uint32_t { - #else - enum Feature { - #endif SynchronizedMarkerLine, SaslAuthentication, SaslExternal, @@ -136,9 +134,7 @@ public: LongTime, ///< Serialize time as 64-bit values RichMessages, ///< Real Name and Avatar URL in backlog BacklogFilterType, ///< BacklogManager supports filtering backlog by MessageType -#if QT_VERSION >= 0x050500 EcdsaCertfpKeys, ///< ECDSA keys for CertFP in identities -#endif LongMessageId, ///< 64-bit IDs for messages SyncedCoreInfo, ///< CoreInfo dynamically updated using signals }; @@ -146,7 +142,7 @@ public: class Features; - static Quassel *instance(); + Quassel(); /** * Provides access to the Logger instance. @@ -197,31 +193,45 @@ public: using QuitHandler = std::function; + /** + * Registers a handler that is called when the application is supposed to quit. + * + * @note If multiple handlers are registered, they are processed in order of registration. + * @note If any handler is registered, quit() will not call QCoreApplication::quit(). It relies + * on one of the handlers doing so, instead. + * @param quitHandler Handler to register + */ static void registerQuitHandler(QuitHandler quitHandler); const QString &coreDumpFileName(); +public slots: + /** + * Requests to quit the application. + * + * Calls any registered quit handlers. If no handlers are registered, calls QCoreApplication::quit(). + */ + void quit(); + signals: void messageLogged(const QDateTime &timeStamp, const QString &msg); protected: static bool init(); - static void destroy(); static void setRunMode(Quassel::RunMode runMode); static void setDataDirPaths(const QStringList &paths); static QStringList findDataDirPaths(); - static void disableCrashHandler(); friend class CoreApplication; friend class QtUiApplication; friend class MonolithicApplication; private: - Quassel(); void setupEnvironment(); void registerMetaTypes(); + void setupSignalHandling(); /** * Requests a reload of relevant runtime configuration. @@ -233,22 +243,16 @@ private: */ bool reloadConfig(); - /** - * Requests to quit the application. - * - * Calls any registered quit handlers. If no handlers are registered, calls QCoreApplication::quit(). - */ - void quit(); - void logBacktrace(const QString &filename); - static void handleSignal(int signal); +private slots: + void handleSignal(AbstractSignalWatcher::Action action); private: BuildInfo _buildInfo; RunMode _runMode; bool _initialized{false}; - bool _handleCrashes{true}; + bool _quitting{false}; QString _coreDumpFileName; QString _configDirPath; @@ -258,6 +262,7 @@ private: std::shared_ptr _cliParser; Logger *_logger; + AbstractSignalWatcher *_signalWatcher{nullptr}; std::vector _reloadHandlers; std::vector _quitHandlers;