File indexing completed on 2024-04-21 05:54:14
0001 // SPDX-FileCopyrightText: 2022 Felipe Kinoshita <kinofhek@gmail.com> 0002 // SPDX-License-Identifier: LGPL-2.1-or-later 0003 0004 #include <QIcon> 0005 #include <QQmlApplicationEngine> 0006 #include <QUrl> 0007 #include <QtQml> 0008 #include <QQuickStyle> 0009 #include <QQuickWindow> 0010 0011 #include "about.h" 0012 #include "version-tasks.h" 0013 #include <KAboutData> 0014 #include <KLocalizedContext> 0015 #include <KLocalizedString> 0016 0017 #ifndef Q_OS_ANDROID 0018 #include <QApplication> 0019 0020 #include <KDBusService> 0021 #include <KWindowSystem> 0022 #else 0023 #include <QGuiApplication> 0024 #endif 0025 0026 constexpr auto APPLICATION_ID = "org.kde.tasks"; 0027 0028 #include "config.h" 0029 #include "controller.h" 0030 #include "tasksmodel.h" 0031 0032 Q_DECL_EXPORT int main(int argc, char *argv[]) 0033 { 0034 #ifndef Q_OS_ANDROID 0035 QApplication app(argc, argv); 0036 QQuickStyle::setStyle(QStringLiteral("org.kde.desktop")); 0037 #else 0038 QGuiApplication app(argc, argv); 0039 QQuickStyle::setStyle(QStringLiteral("org.kde.breeze")); 0040 #endif 0041 0042 KLocalizedString::setApplicationDomain("toad"); 0043 0044 QCoreApplication::setOrganizationName(QStringLiteral("KDE")); 0045 QCoreApplication::setApplicationName(QStringLiteral("tasks")); 0046 0047 KAboutData aboutData( 0048 // The program name used internally. 0049 QStringLiteral("tasks"), 0050 // A displayable program name string. 0051 i18nc("@title", "Tasks"), 0052 // The program version string. 0053 QStringLiteral(TASKS_VERSION_STRING), 0054 // Short description of what the app does. 0055 i18n("Organize your tasks"), 0056 // The license this code is released under. 0057 KAboutLicense::GPL, 0058 // Copyright Statement. 0059 i18n("© 2022 Felipe Kinoshita")); 0060 aboutData.addAuthor(i18nc("@info:credit", "Felipe Kinoshita"), i18nc("@info:credit", "Author"), QStringLiteral("kinofhek@gmail.com"), QStringLiteral("https://fhek.gitlab.io")); 0061 aboutData.setBugAddress("https://invent.kde.org/utilities/toad/-/issues/new"); 0062 KAboutData::setApplicationData(aboutData); 0063 QGuiApplication::setWindowIcon(QIcon::fromTheme(QStringLiteral("org.kde.tasks"))); 0064 0065 QQmlApplicationEngine engine; 0066 0067 auto config = Config::self(); 0068 0069 qmlRegisterSingletonInstance(APPLICATION_ID, 1, 0, "Config", config); 0070 0071 AboutType about; 0072 qmlRegisterSingletonInstance(APPLICATION_ID, 1, 0, "AboutType", &about); 0073 0074 Controller controller; 0075 qmlRegisterSingletonInstance(APPLICATION_ID, 1, 0, "Controller", &controller); 0076 0077 qmlRegisterUncreatableType<TasksModel>(APPLICATION_ID, 1,0 , "TasksModel", QStringLiteral("Must be created from C++")); 0078 auto tasksModel = new TasksModel(qApp); 0079 0080 engine.rootContext()->setContextObject(new KLocalizedContext(&engine)); 0081 engine.setInitialProperties( 0082 /* QMap<QString, QVariant> or QVariantMap */ { 0083 { QStringLiteral("tasksModel"), QVariant::fromValue(tasksModel) } 0084 } 0085 ); 0086 engine.load(QUrl(QStringLiteral("qrc:///main.qml"))); 0087 0088 if (engine.rootObjects().isEmpty()) { 0089 return -1; 0090 } 0091 0092 #ifndef Q_OS_ANDROID 0093 KDBusService service(KDBusService::Unique); 0094 0095 // Raise window when new instance is requested e.g middle click on taskmanager 0096 QObject::connect(&service, &KDBusService::activateRequested, &engine, [&engine](const QStringList & /*arguments*/, const QString & /*workingDirectory*/) { 0097 const auto rootObjects = engine.rootObjects(); 0098 for (auto obj : rootObjects) { 0099 auto view = qobject_cast<QQuickWindow *>(obj); 0100 if (view) { 0101 KWindowSystem::updateStartupId(view); 0102 KWindowSystem::activateWindow(view); 0103 return; 0104 } 0105 } 0106 }); 0107 #endif 0108 0109 // Restore window size and position 0110 const auto rootObjects = engine.rootObjects(); 0111 for (auto obj : rootObjects) { 0112 auto view = qobject_cast<QQuickWindow *>(obj); 0113 if (view) { 0114 if (view->isVisible()) { 0115 controller.restoreWindowGeometry(view); 0116 } 0117 break; 0118 } 0119 } 0120 0121 return app.exec(); 0122 }