diff options
Diffstat (limited to 'tests/manual/x11vkbwrapper/main.cpp')
-rw-r--r-- | tests/manual/x11vkbwrapper/main.cpp | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/tests/manual/x11vkbwrapper/main.cpp b/tests/manual/x11vkbwrapper/main.cpp new file mode 100644 index 00000000..cb8a25dc --- /dev/null +++ b/tests/manual/x11vkbwrapper/main.cpp @@ -0,0 +1,128 @@ +/**************************************************************************** +** +** 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 <QGuiApplication> +#include <QQmlApplicationEngine> +#include <QDBusConnection> +#include <QtVirtualKeyboard> +#include <QObject> +#include <QtDBus/QtDBus> +#include <X11/Xutil.h> + +#include <atspi/atspi.h> +#include <dbus/dbus.h> + +#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<int>(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; + } +} |