diff options
Diffstat (limited to 'src/main.cpp')
-rw-r--r-- | src/main.cpp | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/src/main.cpp b/src/main.cpp index 0c196a33..042ef8c0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,16 +15,20 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include <iostream> + #include <QApplication> #include <QCommandLineParser> #include <QDesktopWidget> #include <QDir> #include <QFile> #include <QFontDatabase> +#include <QGuiApplication> #include <QLabel> #include <QLibraryInfo> #include <QMessageBox> #include <QPoint> +#include <QScreen> #include <QSettings> #include <QStandardPaths> #include <QTranslator> @@ -33,17 +37,22 @@ #include "Logging.h" #include "MainWindow.h" #include "MatrixClient.h" -#include "RunGuard.h" #include "Utils.h" #include "config/nheko.h" +#include "singleapplication.h" #if defined(Q_OS_MAC) #include "emoji/MacHelper.h" #endif +#ifdef QML_DEBUGGING +#include <QQmlDebuggingEnabler> +QQmlDebuggingEnabler enabler; +#endif + #if defined(Q_OS_LINUX) #include <boost/stacktrace.hpp> -#include <signal.h> +#include <csignal> void stacktraceHandler(int signum) @@ -72,7 +81,8 @@ registerSignalHandlers() QPoint screenCenter(int width, int height) { - QRect screenGeometry = QApplication::desktop()->screenGeometry(); + // Deprecated in 5.13: QRect screenGeometry = QApplication::desktop()->screenGeometry(); + QRect screenGeometry = QGuiApplication::primaryScreen()->geometry(); int x = (screenGeometry.width() - width) / 2; int y = (screenGeometry.height() - height) / 2; @@ -94,18 +104,6 @@ createCacheDirectory() int main(int argc, char *argv[]) { - RunGuard guard("run_guard"); - - if (!guard.tryToRun()) { - QApplication a(argc, argv); - - QMessageBox msgBox; - msgBox.setText("Another instance of Nheko is running"); - msgBox.exec(); - - return 0; - } - #if defined(Q_OS_LINUX) || defined(Q_OS_WIN) || defined(Q_OS_FREEBSD) if (qgetenv("QT_SCALE_FACTOR").size() == 0) { float factor = utils::scaleFactor(); @@ -115,24 +113,23 @@ main(int argc, char *argv[]) } #endif - QApplication app(argc, argv); QCoreApplication::setApplicationName("nheko"); QCoreApplication::setApplicationVersion(nheko::version); QCoreApplication::setOrganizationName("nheko"); QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); + SingleApplication app(argc, + argv, + false, + SingleApplication::Mode::User | + SingleApplication::Mode::ExcludeAppPath | + SingleApplication::Mode::ExcludeAppVersion); QCommandLineParser parser; parser.addHelpOption(); parser.addVersionOption(); parser.process(app); - QFontDatabase::addApplicationFont(":/fonts/fonts/OpenSans/OpenSans-Regular.ttf"); - QFontDatabase::addApplicationFont(":/fonts/fonts/OpenSans/OpenSans-Italic.ttf"); - QFontDatabase::addApplicationFont(":/fonts/fonts/OpenSans/OpenSans-Bold.ttf"); - QFontDatabase::addApplicationFont(":/fonts/fonts/OpenSans/OpenSans-Semibold.ttf"); - QFontDatabase::addApplicationFont(":/fonts/fonts/EmojiOne/emojione-android.ttf"); - app.setWindowIcon(QIcon(":/logos/nheko.png")); http::init(); @@ -188,6 +185,11 @@ main(int argc, char *argv[]) nhlog::net()->debug("bye"); } }); + QObject::connect(&app, &SingleApplication::instanceStarted, &w, [&w]() { + w.show(); + w.raise(); + w.activateWindow(); + }); #if defined(Q_OS_MAC) // Temporary solution for the emoji picker until |