#include #include #include #include #include "appsettings.h" #include "catcontroller.h" #include "traycontroller.h" int main(int argc, char *argv[]) { QCoreApplication::setOrganizationName("TNCat"); QCoreApplication::setApplicationName("TNCat"); QApplication::setQuitOnLastWindowClosed(false); // QApplication (not QGuiApplication) so QSystemTrayIcon can show a menu. QApplication app(argc, argv); QQuickStyle::setStyle("Basic"); AppSettings settings; CatController cat(&settings); TrayController tray(&cat); if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"))) { qWarning("TNCat: Wayland does not let a client place its own window. " "Run with QT_QPA_PLATFORM=xcb for the cat to walk."); } QQmlApplicationEngine engine; engine.setInitialProperties({ { "cat", QVariant::fromValue(&cat) }, { "settings", QVariant::fromValue(&settings) }, }); QObject::connect(&engine, &QQmlApplicationEngine::objectCreationFailed, &app, [] { QCoreApplication::exit(1); }, Qt::QueuedConnection); engine.loadFromModule("TNCat", "Main"); if (QObject *root = engine.rootObjects().value(0)) { QObject::connect(&tray, &TrayController::settingsRequested, root, [root] { QMetaObject::invokeMethod(root, "openSettings"); }); } return app.exec(); }