summary refs log tree commit diff
path: root/src/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp46
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