File indexing completed on 2024-05-19 09:44:38
0001 // SPDX-FileCopyrightText: 2022 Felipe Kinoshita <kinofhek@gmail.com> 0002 // SPDX-License-Identifier: LGPL-2.1-or-later 0003 0004 #include <QtGlobal> 0005 #ifdef Q_OS_ANDROID 0006 #include <QGuiApplication> 0007 #else 0008 #include <QApplication> 0009 #endif 0010 #include <QIcon> 0011 #include <QQmlApplicationEngine> 0012 #include <QQuickStyle> 0013 #include <QQuickWindow> 0014 #include <QUrl> 0015 #include <QtQml> 0016 0017 #include <KAboutData> 0018 #include <KLocalizedContext> 0019 #include <KLocalizedString> 0020 #ifdef HAVE_KDBUSADDONS 0021 #include <KDBusService> 0022 #endif 0023 0024 #ifdef Q_OS_WINDOWS 0025 #include <Windows.h> 0026 #endif 0027 0028 constexpr auto APPLICATION_ID = "org.kde.francis"; 0029 0030 #include "app.h" 0031 #include "config.h" 0032 #include "controller.h" 0033 #include "version-francis.h" 0034 0035 Q_DECL_EXPORT int main(int argc, char *argv[]) 0036 { 0037 #ifdef Q_OS_ANDROID 0038 QGuiApplication app(argc, argv); 0039 QQuickStyle::setStyle(QStringLiteral("org.kde.breeze")); 0040 #else 0041 QApplication app(argc, argv); 0042 // Default to org.kde.desktop style unless the user forces another style 0043 if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_STYLE")) { 0044 QQuickStyle::setStyle(QStringLiteral("org.kde.desktop")); 0045 } 0046 0047 #endif 0048 QCoreApplication::setOrganizationName(QStringLiteral("KDE")); 0049 KLocalizedString::setApplicationDomain("francis"); 0050 0051 KAboutData aboutData( 0052 // The program name used internally. 0053 QStringLiteral("francis"), 0054 // A displayable program name string. 0055 i18nc("@title", "Francis"), 0056 // The program version string. 0057 QStringLiteral(FRANCIS_VERSION_STRING), 0058 // Short description of what the app does. 0059 i18n("Track your time"), 0060 // The license this code is released under. 0061 KAboutLicense::GPL_V3, 0062 // Copyright Statement. 0063 i18n("© KDE Community")); 0064 aboutData.addAuthor(i18nc("@info:credit", "Felipe Kinoshita"), 0065 i18nc("@info:credit", "Author"), 0066 QStringLiteral("kinofhek@gmail.com"), 0067 QStringLiteral("https://fhek.gitlab.io")); 0068 aboutData.addAuthor(i18nc("@info:credit", "Carl Schwan"), 0069 i18nc("@info:credit", "Maintainer"), 0070 QStringLiteral("carl@carlschwan.eu"), 0071 QStringLiteral("https://carlschwan.eu/")); 0072 aboutData.setBugAddress("https://bugs.kde.org/enter_bug.cgi?product=Francis"); 0073 KAboutData::setApplicationData(aboutData); 0074 QGuiApplication::setWindowIcon(QIcon::fromTheme(QStringLiteral("org.kde.francis"))); 0075 0076 QQmlApplicationEngine engine; 0077 0078 auto config = Config::self(); 0079 qmlRegisterSingletonInstance(APPLICATION_ID, 1, 0, "Config", config); 0080 0081 App application; 0082 qmlRegisterSingletonInstance(APPLICATION_ID, 1, 0, "App", &application); 0083 0084 qmlRegisterSingletonType(APPLICATION_ID, 1, 0, "About", [](QQmlEngine *engine, QJSEngine *) -> QJSValue { 0085 return engine->toScriptValue(KAboutData::applicationData()); 0086 }); 0087 0088 Controller controller; 0089 qmlRegisterSingletonInstance(APPLICATION_ID, 1, 0, "Controller", &controller); 0090 0091 engine.rootContext()->setContextObject(new KLocalizedContext(&engine)); 0092 engine.load(QUrl(QStringLiteral("qrc:///main.qml"))); 0093 0094 if (engine.rootObjects().isEmpty()) { 0095 return -1; 0096 } 0097 0098 #ifdef HAVE_KDBUSADDONS 0099 KDBusService service(KDBusService::Unique); 0100 #endif 0101 0102 // Restore window size and position 0103 const auto rootObjects = engine.rootObjects(); 0104 for (auto obj : rootObjects) { 0105 auto view = qobject_cast<QQuickWindow *>(obj); 0106 if (view) { 0107 if (view->isVisible()) { 0108 application.restoreWindowGeometry(view); 0109 } 0110 break; 0111 } 0112 } 0113 0114 return app.exec(); 0115 }