Add QEvdevKeyMapper platform interface
Task-number: QTBUG-84220 Change-Id: I4f3a54415c5509b4bde486b54c56b0e05976bac6 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
This commit is contained in:
parent
9166abcd99
commit
5b1befa31a
@ -72,6 +72,9 @@ public:
|
||||
static void changeKeyboard();
|
||||
static QList<int> possibleKeys(QKeyEvent *e);
|
||||
|
||||
template <typename T>
|
||||
T *platformInterface() const;
|
||||
|
||||
private:
|
||||
friend QKeyMapperPrivate *qt_keymapper_private();
|
||||
Q_DECLARE_PRIVATE(QKeyMapper)
|
||||
@ -96,6 +99,22 @@ public:
|
||||
|
||||
QKeyMapperPrivate *qt_keymapper_private(); // from qkeymapper.cpp
|
||||
|
||||
// ----------------- QPlatformInterface -----------------
|
||||
|
||||
namespace QPlatformInterface::Private {
|
||||
|
||||
#if QT_CONFIG(evdev)
|
||||
struct Q_GUI_EXPORT QEvdevKeyMapper
|
||||
{
|
||||
QT_DECLARE_PLATFORM_INTERFACE(QEvdevKeyMapper)
|
||||
virtual void loadKeymap(const QString &filename) = 0;
|
||||
virtual void switchLang() = 0;
|
||||
};
|
||||
#endif
|
||||
|
||||
} // QPlatformInterface::Private
|
||||
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // QKEYMAPPER_P_H
|
||||
|
@ -47,6 +47,8 @@
|
||||
#include <qpa/qplatformscreen_p.h>
|
||||
#include <qpa/qplatformwindow_p.h>
|
||||
|
||||
#include <QtGui/private/qkeymapper_p.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
using namespace QPlatformInterface::Private;
|
||||
@ -86,6 +88,16 @@ QT_DEFINE_PRIVATE_PLATFORM_INTERFACE(QXcbScreen);
|
||||
QT_DEFINE_PRIVATE_PLATFORM_INTERFACE(QXcbWindow);
|
||||
#endif
|
||||
|
||||
#if QT_CONFIG(evdev)
|
||||
QT_DEFINE_PRIVATE_PLATFORM_INTERFACE(QEvdevKeyMapper);
|
||||
|
||||
template <>
|
||||
QEvdevKeyMapper *QKeyMapper::platformInterface<QEvdevKeyMapper>() const
|
||||
{
|
||||
return dynamic_cast<QEvdevKeyMapper*>(QGuiApplicationPrivate::platformIntegration());
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // QT_NO_OPENGL
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -9,7 +9,6 @@ qt_add_module(PlatformHeaders
|
||||
SOURCES
|
||||
eglfsfunctions/qeglfsfunctions_p.h
|
||||
helper/qplatformheaderhelper_p.h
|
||||
linuxfbfunctions/qlinuxfbfunctions_p.h
|
||||
waylandfunctions/qwaylandwindowfunctions_p.h
|
||||
windowsfunctions/qwindowswindowfunctions_p.h
|
||||
PUBLIC_LIBRARIES
|
||||
|
@ -10,7 +10,6 @@ qt_add_module(PlatformHeaders
|
||||
# SOURCES
|
||||
# eglfsfunctions/qeglfsfunctions_p.h
|
||||
# helper/qplatformheaderhelper_p.h
|
||||
# linuxfbfunctions/qlinuxfbfunctions_p.h
|
||||
# waylandfunctions/qwaylandwindowfunctions_p.h
|
||||
# windowsfunctions/qwindowswindowfunctions_p.h
|
||||
# special case end
|
||||
|
@ -38,49 +38,6 @@
|
||||
version it was developed against.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\typedef QEglFSFunctions::LoadKeymapType
|
||||
|
||||
Function type for loadKeymap.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QByteArray QEglFSFunctions::loadKeymapTypeIdentifier()
|
||||
|
||||
\return the identifier that can be passed to
|
||||
QGuiApplication::platformFunction() to query the entry point for the
|
||||
loadKeymap function implementation.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void QEglFSFunctions::loadKeymap(const QString &filename)
|
||||
|
||||
Loads and switches to the keymap from \a filename. When \a filename is
|
||||
empty, the default keymap, which is either the built-on one or the keymap
|
||||
given in the plugin specification, is restored.
|
||||
|
||||
\note This is functional only when the evdev keyboard support code is
|
||||
compiled in to the platform plugin. When using external generic plugins via
|
||||
the \c{-plugin} argument, or when the environment variable
|
||||
\c{QT_QPA_EGLFS_DISABLE_INPUT} is set or when building Qt without evdev
|
||||
support, this function will have no effect.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void QEglFSFunctions::switchLang()
|
||||
|
||||
Switches between English and other language when the keymap is loaded.
|
||||
Usually the keymap contains two languages: English and national. When
|
||||
you load the keymap, English is selected by default. This function allows
|
||||
to switch between these languages.
|
||||
|
||||
\note This is functional only when the evdev keyboard support code is
|
||||
compiled in to the platform plugin. When using external generic plugins via
|
||||
the \c{-plugin} argument, or when the environment variable
|
||||
\c{QT_QPA_EGLFS_DISABLE_INPUT} is set or when building Qt without evdev
|
||||
support, this function will have no effect.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn int QEglFSFunctions::vsp2AddLayer(const QScreen *screen, int dmabufFd, const QSize &size, const QPoint &position, uint drmPixelFormat, uint bytesPerLine)
|
||||
\internal
|
||||
|
@ -59,25 +59,6 @@ QT_BEGIN_NAMESPACE
|
||||
class QEglFSFunctions
|
||||
{
|
||||
public:
|
||||
typedef void (*LoadKeymapType)(const QString &filename);
|
||||
typedef void (*SwitchLangType)();
|
||||
static QByteArray loadKeymapTypeIdentifier() { return QByteArrayLiteral("EglFSLoadKeymap"); }
|
||||
static QByteArray switchLangTypeIdentifier() { return QByteArrayLiteral("EglFSSwitchLang"); }
|
||||
|
||||
static void loadKeymap(const QString &filename)
|
||||
{
|
||||
LoadKeymapType func = reinterpret_cast<LoadKeymapType>(QGuiApplication::platformFunction(loadKeymapTypeIdentifier()));
|
||||
if (func)
|
||||
func(filename);
|
||||
}
|
||||
|
||||
static void switchLang()
|
||||
{
|
||||
SwitchLangType func = reinterpret_cast<SwitchLangType>(QGuiApplication::platformFunction(switchLangTypeIdentifier()));
|
||||
if (func)
|
||||
func();
|
||||
}
|
||||
|
||||
typedef int (*Vsp2AddLayerType)(const QScreen *screen, int dmabufFd, const QSize &size, const QPoint &position, uint drmPixelFormat, uint bytesPerLine);
|
||||
static QByteArray vsp2AddLayerTypeIdentifier() { return QByteArrayLiteral("EglFSVsp2AddLayer"); }
|
||||
|
||||
|
@ -1 +0,0 @@
|
||||
HEADERS += $$PWD/qlinuxfbfunctions_p.h
|
@ -1,82 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the documentation of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:FDL$
|
||||
** 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 Free Documentation License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Free
|
||||
** Documentation License version 1.3 as published by the Free Software
|
||||
** Foundation and appearing in the file included in the packaging of
|
||||
** this file. Please review the following information to ensure
|
||||
** the GNU Free Documentation License version 1.3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
/*!
|
||||
\class QLinuxFbFunctions
|
||||
\inmodule QtPlatformHeaders
|
||||
|
||||
\brief The QLinuxFbFunctions class is an inline class containing
|
||||
platform-specific functionality for the linuxfb platform plugin that is
|
||||
typically used on systems running Embedded Linux or Android.
|
||||
|
||||
\note There is no binary compatibility guarantee for this class,
|
||||
meaning that an application using it is only guaranteed to work with the Qt
|
||||
version it was developed against.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\typedef QLinuxFbFunctions::LoadKeymapType
|
||||
|
||||
Function type for loadKeymap.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QByteArray QLinuxFbFunctions::loadKeymapTypeIdentifier()
|
||||
|
||||
\return the identifier that can be passed to
|
||||
QGuiApplication::platformFunction() to query the entry point for the
|
||||
loadKeymap function implementation.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void QLinuxFbFunctions::loadKeymap(const QString &filename)
|
||||
|
||||
Loads and switches to the keymap from \a filename. When \a filename is
|
||||
empty, the default keymap, which is either the built-on one or the keymap
|
||||
given in the plugin specification, is restored.
|
||||
|
||||
\note This is functional only when the evdev keyboard support code is
|
||||
compiled in to the platform plugin. When using external generic plugins via
|
||||
the \c{-plugin} argument, or when the environment variable
|
||||
\c{QT_QPA_FB_DISABLE_INPUT} is set or when building Qt without evdev
|
||||
support, this function will have no effect.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn void QLinuxFbFunctions::switchLang()
|
||||
|
||||
Switches between English and other language when the keymap is loaded.
|
||||
Usually the keymap contains two languages: English and national. When
|
||||
you load the keymap, English is selected by default. This function allows
|
||||
to switch between these languages.
|
||||
|
||||
\note This is functional only when the evdev keyboard support code is
|
||||
compiled in to the platform plugin. When using external generic plugins via
|
||||
the \c{-plugin} argument, or when the environment variable
|
||||
\c{QT_QPA_FB_DISABLE_INPUT} is set or when building Qt without evdev
|
||||
support, this function will have no effect.
|
||||
*/
|
@ -1,85 +0,0 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** 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 Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or 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.GPL2 and 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-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QLINUXFBFUNCTIONS_H
|
||||
#define QLINUXFBFUNCTIONS_H
|
||||
|
||||
//
|
||||
// W A R N I N G
|
||||
// -------------
|
||||
//
|
||||
// This file is not part of the Qt API. It exists purely as an
|
||||
// implementation detail. This header file may change from version to
|
||||
// version without notice, or even be removed.
|
||||
//
|
||||
// We mean it.
|
||||
//
|
||||
|
||||
#include <QtCore/QByteArray>
|
||||
#include <QtGui/QGuiApplication>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QLinuxFbFunctions
|
||||
{
|
||||
public:
|
||||
typedef void (*LoadKeymapType)(const QString &filename);
|
||||
typedef void (*SwitchLangType)();
|
||||
static QByteArray loadKeymapTypeIdentifier() { return QByteArrayLiteral("LinuxFbLoadKeymap"); }
|
||||
static QByteArray switchLangTypeIdentifier() { return QByteArrayLiteral("LinuxFbSwitchLang"); }
|
||||
|
||||
static void loadKeymap(const QString &filename)
|
||||
{
|
||||
LoadKeymapType func = reinterpret_cast<LoadKeymapType>(QGuiApplication::platformFunction(loadKeymapTypeIdentifier()));
|
||||
if (func)
|
||||
func(filename);
|
||||
}
|
||||
|
||||
static void switchLang()
|
||||
{
|
||||
SwitchLangType func = reinterpret_cast<SwitchLangType>(QGuiApplication::platformFunction(switchLangTypeIdentifier()));
|
||||
if (func)
|
||||
func();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // QLINUXFBFUNCTIONS_H
|
@ -5,7 +5,6 @@ include(eglfsfunctions/eglfsfunctions.pri)
|
||||
include(windowsfunctions/windowsfunctions.pri)
|
||||
include(helper/helper.pri)
|
||||
include(waylandfunctions/waylandfunctions.pri)
|
||||
include(linuxfbfunctions/linuxfbfunctions.pri)
|
||||
|
||||
QMAKE_DOCS = $$PWD/doc/qtplatformheaders.qdocconf
|
||||
|
||||
|
@ -432,39 +432,26 @@ QPlatformNativeInterface::NativeResourceForContextFunction QEglFSIntegration::na
|
||||
|
||||
QFunctionPointer QEglFSIntegration::platformFunction(const QByteArray &function) const
|
||||
{
|
||||
#if QT_CONFIG(evdev)
|
||||
if (function == QEglFSFunctions::loadKeymapTypeIdentifier())
|
||||
return QFunctionPointer(loadKeymapStatic);
|
||||
else if (function == QEglFSFunctions::switchLangTypeIdentifier())
|
||||
return QFunctionPointer(switchLangStatic);
|
||||
#endif
|
||||
|
||||
return qt_egl_device_integration()->platformFunction(function);
|
||||
}
|
||||
|
||||
void QEglFSIntegration::loadKeymapStatic(const QString &filename)
|
||||
{
|
||||
#if QT_CONFIG(evdev)
|
||||
QEglFSIntegration *self = static_cast<QEglFSIntegration *>(QGuiApplicationPrivate::platformIntegration());
|
||||
if (self->m_kbdMgr)
|
||||
self->m_kbdMgr->loadKeymap(filename);
|
||||
void QEglFSIntegration::loadKeymap(const QString &filename)
|
||||
{
|
||||
if (m_kbdMgr)
|
||||
m_kbdMgr->loadKeymap(filename);
|
||||
else
|
||||
qWarning("QEglFSIntegration: Cannot load keymap, no keyboard handler found");
|
||||
#else
|
||||
Q_UNUSED(filename);
|
||||
#endif
|
||||
}
|
||||
|
||||
void QEglFSIntegration::switchLangStatic()
|
||||
void QEglFSIntegration::switchLang()
|
||||
{
|
||||
#if QT_CONFIG(evdev)
|
||||
QEglFSIntegration *self = static_cast<QEglFSIntegration *>(QGuiApplicationPrivate::platformIntegration());
|
||||
if (self->m_kbdMgr)
|
||||
self->m_kbdMgr->switchLang();
|
||||
if (m_kbdMgr)
|
||||
m_kbdMgr->switchLang();
|
||||
else
|
||||
qWarning("QEglFSIntegration: Cannot switch language, no keyboard handler found");
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
void QEglFSIntegration::createInputHandlers()
|
||||
{
|
||||
|
@ -59,6 +59,7 @@
|
||||
#include <qpa/qplatformnativeinterface.h>
|
||||
#include <qpa/qplatformopenglcontext.h>
|
||||
#include <qpa/qplatformscreen.h>
|
||||
#include <QtGui/private/qkeymapper_p.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
@ -68,8 +69,11 @@ class QFbVtHandler;
|
||||
class QEvdevKeyboardManager;
|
||||
|
||||
class Q_EGLFS_EXPORT QEglFSIntegration : public QPlatformIntegration, public QPlatformNativeInterface
|
||||
#if QT_CONFIG(evdev)
|
||||
, public QPlatformInterface::Private::QEvdevKeyMapper
|
||||
#endif
|
||||
#ifndef QT_NO_OPENGL
|
||||
, public QPlatformInterface::Private::QEGLIntegration
|
||||
, public QPlatformInterface::Private::QEGLIntegration
|
||||
#endif
|
||||
{
|
||||
public:
|
||||
@ -116,11 +120,14 @@ public:
|
||||
QPointer<QWindow> pointerWindow() { return m_pointerWindow; }
|
||||
void setPointerWindow(QWindow *pointerWindow) { m_pointerWindow = pointerWindow; }
|
||||
|
||||
#if QT_CONFIG(evdev)
|
||||
void loadKeymap(const QString &filename) override;
|
||||
void switchLang() override;
|
||||
#endif
|
||||
|
||||
private:
|
||||
EGLNativeDisplayType nativeDisplay() const;
|
||||
void createInputHandlers();
|
||||
static void loadKeymapStatic(const QString &filename);
|
||||
static void switchLangStatic();
|
||||
|
||||
EGLDisplay m_display;
|
||||
QPlatformInputContext *m_inputContext;
|
||||
|
@ -70,8 +70,6 @@
|
||||
#include <QtInputSupport/private/qtslib_p.h>
|
||||
#endif
|
||||
|
||||
#include <QtPlatformHeaders/private/qlinuxfbfunctions_p.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
QLinuxFbIntegration::QLinuxFbIntegration(const QStringList ¶mList)
|
||||
@ -181,40 +179,26 @@ QPlatformNativeInterface *QLinuxFbIntegration::nativeInterface() const
|
||||
|
||||
QFunctionPointer QLinuxFbIntegration::platformFunction(const QByteArray &function) const
|
||||
{
|
||||
#if QT_CONFIG(evdev)
|
||||
if (function == QLinuxFbFunctions::loadKeymapTypeIdentifier())
|
||||
return QFunctionPointer(loadKeymapStatic);
|
||||
else if (function == QLinuxFbFunctions::switchLangTypeIdentifier())
|
||||
return QFunctionPointer(switchLangStatic);
|
||||
#else
|
||||
Q_UNUSED(function);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void QLinuxFbIntegration::loadKeymapStatic(const QString &filename)
|
||||
{
|
||||
#if QT_CONFIG(evdev)
|
||||
QLinuxFbIntegration *self = static_cast<QLinuxFbIntegration *>(QGuiApplicationPrivate::platformIntegration());
|
||||
if (self->m_kbdMgr)
|
||||
self->m_kbdMgr->loadKeymap(filename);
|
||||
void QLinuxFbIntegration::loadKeymap(const QString &filename)
|
||||
{
|
||||
if (m_kbdMgr)
|
||||
m_kbdMgr->loadKeymap(filename);
|
||||
else
|
||||
qWarning("QLinuxFbIntegration: Cannot load keymap, no keyboard handler found");
|
||||
#else
|
||||
Q_UNUSED(filename);
|
||||
#endif
|
||||
}
|
||||
|
||||
void QLinuxFbIntegration::switchLangStatic()
|
||||
void QLinuxFbIntegration::switchLang()
|
||||
{
|
||||
#if QT_CONFIG(evdev)
|
||||
QLinuxFbIntegration *self = static_cast<QLinuxFbIntegration *>(QGuiApplicationPrivate::platformIntegration());
|
||||
if (self->m_kbdMgr)
|
||||
self->m_kbdMgr->switchLang();
|
||||
if (m_kbdMgr)
|
||||
m_kbdMgr->switchLang();
|
||||
else
|
||||
qWarning("QLinuxFbIntegration: Cannot switch language, no keyboard handler found");
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -42,6 +42,7 @@
|
||||
|
||||
#include <qpa/qplatformintegration.h>
|
||||
#include <qpa/qplatformnativeinterface.h>
|
||||
#include <QtGui/private/qkeymapper_p.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
@ -51,6 +52,9 @@ class QFbVtHandler;
|
||||
class QEvdevKeyboardManager;
|
||||
|
||||
class QLinuxFbIntegration : public QPlatformIntegration, public QPlatformNativeInterface
|
||||
#if QT_CONFIG(evdev)
|
||||
, public QPlatformInterface::Private::QEvdevKeyMapper
|
||||
#endif
|
||||
{
|
||||
public:
|
||||
QLinuxFbIntegration(const QStringList ¶mList);
|
||||
@ -74,10 +78,13 @@ public:
|
||||
|
||||
QFunctionPointer platformFunction(const QByteArray &function) const override;
|
||||
|
||||
#if QT_CONFIG(evdev)
|
||||
void loadKeymap(const QString &filename) override;
|
||||
void switchLang() override;
|
||||
#endif
|
||||
|
||||
private:
|
||||
void createInputHandlers();
|
||||
static void loadKeymapStatic(const QString &filename);
|
||||
static void switchLangStatic();
|
||||
|
||||
QFbScreen *m_primaryScreen;
|
||||
QPlatformInputContext *m_inputContext;
|
||||
|
Loading…
x
Reference in New Issue
Block a user