/**************************************************************************** ** ** Copyright (C) 2019 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:GPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 or (at your option) any later version ** approved by the KDE Free Qt Foundation. The licenses are as published by ** the Free Software Foundation and appearing in the file LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #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; QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication 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")); engine.load(QStringLiteral("qrc:/keyboard.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 *switchObject = engine.rootObjects().first(); QObject *keyboardObject = engine.rootObjects().last(); QScreen *screen = app.primaryScreen(); QRect screenRect = screen->geometry(); int x1 = 0; int y1 = 0; int x2 = 0; int y2 = 0; screenRect.getCoords(&x1, &y1, &x2, &y2); switchObject->setProperty("x", x2 - switchObject->property("width").toInt()); switchObject->setProperty("y", y2 - switchObject->property("height").toInt()); keyboardObject->setProperty("x", x2 - static_cast(screen->size().rwidth()/keyboardObject->property("scaleFactor").toFloat())); keyboardObject->setProperty("y", y2 - switchObject->property("height").toInt()); 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; } }