// Copyright (C) 2019 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include #include #include #include #include #include #include #include #include #include "handlekeyevents.h" #include "handleatspievents.h" #include "handledbusforchrome.h" #include "common_defs.h" #ifdef QT_TESTING_RUN #include "handlelanguagechange.h" #endif int main(int argc, char *argv[]) { qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard")); bool error = false; QApplication app(argc, argv); /** Setup DBus starts */ auto *extensionHandler = new HandleDbusForChrome(&app); if (!QDBusConnection::sessionBus().isConnected()) { qWarning() << "Cannot connect to the D-Bus session bus.\n" << "To start it, run:\n" << "\teval `dbus-launch --auto-syntax`\n"; } QDBusConnection::sessionBus().registerObject("/", &app); if (!QDBusConnection::sessionBus().registerService(SERVICE_NAME)) { qWarning() << "Failed to register D-Bus service x11vkb.chromium.dbus.service: " << qPrintable(QDBusConnection::sessionBus().lastError().message()); } /** Setup DBus ends */ QQmlApplicationEngine engine(QStringLiteral("qrc:/main.qml")); QQmlContext* ctx = engine.rootContext(); /** Only for testing purpose*/ #ifdef QT_TESTING_RUN ctx->setContextProperty("QT_TESTING_RUN", QVariant(true)); #endif HandleKeyEvents handleKeyEvents; if (!handleKeyEvents.init()) { qWarning() << "Creation of xdo_t instance failed"; error = true; } app.installEventFilter(&handleKeyEvents); ctx->setContextProperty("receiver", &handleKeyEvents); HandleATSPIEvents handleATSPIEvents; if (!handleATSPIEvents.init()) { error = true; } ctx->setContextProperty("atspiFocus", &handleATSPIEvents); QObject::connect(extensionHandler, &HandleDbusForChrome::showKeyboard, &handleATSPIEvents, &HandleATSPIEvents::setKeyboardVisible); /** Only for testing purpose*/ #ifdef QT_TESTING_RUN HandleLanguageChange hj; QObject::connect(engine.rootObjects().last(), SIGNAL(languageChangedSignal(QString)), &hj, SLOT(languageChanged(QString))); #endif /** If error(s) exit */ if (!error) { return app.exec(); } else { return 1; } }