Add implementation of virtual keyboard based on BPS events
Change-Id: Ida4fa344c54db32b7b22b08a124b8c7b6df8adef Reviewed-by: Sean Harmer <sean.harmer@kdab.com> Reviewed-by: Nicolas Arnaud-Cormos <nicolas@kdab.com> Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
This commit is contained in:
parent
77a8bd1e01
commit
a818a1eb2f
@ -84,11 +84,13 @@ contains(QT_CONFIG, opengles2) {
|
|||||||
CONFIG(blackberry) {
|
CONFIG(blackberry) {
|
||||||
SOURCES += qqnxnavigatorbps.cpp \
|
SOURCES += qqnxnavigatorbps.cpp \
|
||||||
qqnxeventdispatcher_blackberry.cpp \
|
qqnxeventdispatcher_blackberry.cpp \
|
||||||
qqnxbpseventfilter.cpp
|
qqnxbpseventfilter.cpp \
|
||||||
|
qqnxvirtualkeyboardbps.cpp
|
||||||
|
|
||||||
HEADERS += qqnxnavigatorbps.h \
|
HEADERS += qqnxnavigatorbps.h \
|
||||||
qqnxeventdispatcher_blackberry.h \
|
qqnxeventdispatcher_blackberry.h \
|
||||||
qqnxbpseventfilter.h
|
qqnxbpseventfilter.h \
|
||||||
|
qqnxvirtualkeyboardbps.h
|
||||||
|
|
||||||
LIBS += -lbps
|
LIBS += -lbps
|
||||||
}
|
}
|
||||||
@ -98,12 +100,12 @@ CONFIG(qqnx_pps) {
|
|||||||
|
|
||||||
SOURCES += qqnxnavigatorpps.cpp \
|
SOURCES += qqnxnavigatorpps.cpp \
|
||||||
qqnxnavigatoreventnotifier.cpp \
|
qqnxnavigatoreventnotifier.cpp \
|
||||||
qqnxvirtualkeyboard.cpp \
|
qqnxvirtualkeyboardpps.cpp \
|
||||||
qqnxclipboard.cpp
|
qqnxclipboard.cpp
|
||||||
|
|
||||||
HEADERS += qqnxnavigatorpps.h \
|
HEADERS += qqnxnavigatorpps.h \
|
||||||
qqnxnavigatoreventnotifier.h \
|
qqnxnavigatoreventnotifier.h \
|
||||||
qqnxvirtualkeyboard.h \
|
qqnxvirtualkeyboardpps.h \
|
||||||
qqnxclipboard.h
|
qqnxclipboard.h
|
||||||
|
|
||||||
LIBS += -lpps -lclipboard
|
LIBS += -lpps -lclipboard
|
||||||
|
@ -43,6 +43,7 @@
|
|||||||
#include "qqnxnavigatoreventhandler.h"
|
#include "qqnxnavigatoreventhandler.h"
|
||||||
#include "qqnxscreen.h"
|
#include "qqnxscreen.h"
|
||||||
#include "qqnxscreeneventhandler.h"
|
#include "qqnxscreeneventhandler.h"
|
||||||
|
#include "qqnxvirtualkeyboardbps.h"
|
||||||
|
|
||||||
#include <QAbstractEventDispatcher>
|
#include <QAbstractEventDispatcher>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
@ -56,10 +57,12 @@ QT_BEGIN_NAMESPACE
|
|||||||
static QQnxBpsEventFilter *s_instance = 0;
|
static QQnxBpsEventFilter *s_instance = 0;
|
||||||
|
|
||||||
QQnxBpsEventFilter::QQnxBpsEventFilter(QQnxNavigatorEventHandler *navigatorEventHandler,
|
QQnxBpsEventFilter::QQnxBpsEventFilter(QQnxNavigatorEventHandler *navigatorEventHandler,
|
||||||
QQnxScreenEventHandler *screenEventHandler, QObject *parent)
|
QQnxScreenEventHandler *screenEventHandler,
|
||||||
|
QQnxVirtualKeyboardBps *virtualKeyboard, QObject *parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, m_navigatorEventHandler(navigatorEventHandler)
|
, m_navigatorEventHandler(navigatorEventHandler)
|
||||||
, m_screenEventHandler(screenEventHandler)
|
, m_screenEventHandler(screenEventHandler)
|
||||||
|
, m_virtualKeyboard(virtualKeyboard)
|
||||||
{
|
{
|
||||||
Q_ASSERT(s_instance == 0);
|
Q_ASSERT(s_instance == 0);
|
||||||
|
|
||||||
@ -132,6 +135,9 @@ bool QQnxBpsEventFilter::bpsEventFilter(bps_event_t *event)
|
|||||||
if (eventDomain == navigator_get_domain())
|
if (eventDomain == navigator_get_domain())
|
||||||
return handleNavigatorEvent(event);
|
return handleNavigatorEvent(event);
|
||||||
|
|
||||||
|
if (m_virtualKeyboard->handleEvent(event))
|
||||||
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,13 +52,15 @@ class QAbstractEventDispatcher;
|
|||||||
class QQnxNavigatorEventHandler;
|
class QQnxNavigatorEventHandler;
|
||||||
class QQnxScreen;
|
class QQnxScreen;
|
||||||
class QQnxScreenEventHandler;
|
class QQnxScreenEventHandler;
|
||||||
|
class QQnxVirtualKeyboardBps;
|
||||||
|
|
||||||
class QQnxBpsEventFilter : public QObject
|
class QQnxBpsEventFilter : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
QQnxBpsEventFilter(QQnxNavigatorEventHandler *navigatorEventHandler,
|
QQnxBpsEventFilter(QQnxNavigatorEventHandler *navigatorEventHandler,
|
||||||
QQnxScreenEventHandler *screenEventHandler, QObject *parent = 0);
|
QQnxScreenEventHandler *screenEventHandler,
|
||||||
|
QQnxVirtualKeyboardBps *virtualKeyboard, QObject *parent = 0);
|
||||||
~QQnxBpsEventFilter();
|
~QQnxBpsEventFilter();
|
||||||
|
|
||||||
void installOnEventDispatcher(QAbstractEventDispatcher *dispatcher);
|
void installOnEventDispatcher(QAbstractEventDispatcher *dispatcher);
|
||||||
@ -75,6 +77,7 @@ private:
|
|||||||
private:
|
private:
|
||||||
QQnxNavigatorEventHandler *m_navigatorEventHandler;
|
QQnxNavigatorEventHandler *m_navigatorEventHandler;
|
||||||
QQnxScreenEventHandler *m_screenEventHandler;
|
QQnxScreenEventHandler *m_screenEventHandler;
|
||||||
|
QQnxVirtualKeyboardBps *m_virtualKeyboard;
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -54,13 +54,14 @@
|
|||||||
#if defined(Q_OS_BLACKBERRY)
|
#if defined(Q_OS_BLACKBERRY)
|
||||||
#include "qqnxbpseventfilter.h"
|
#include "qqnxbpseventfilter.h"
|
||||||
#include "qqnxnavigatorbps.h"
|
#include "qqnxnavigatorbps.h"
|
||||||
|
#include "qqnxvirtualkeyboardbps.h"
|
||||||
#elif defined(QQNX_PPS)
|
#elif defined(QQNX_PPS)
|
||||||
#include "qqnxnavigatorpps.h"
|
#include "qqnxnavigatorpps.h"
|
||||||
|
#include "qqnxvirtualkeyboardpps.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(QQNX_PPS)
|
#if defined(QQNX_PPS)
|
||||||
# include "qqnxnavigatoreventnotifier.h"
|
# include "qqnxnavigatoreventnotifier.h"
|
||||||
# include "qqnxvirtualkeyboard.h"
|
|
||||||
# include "qqnxclipboard.h"
|
# include "qqnxclipboard.h"
|
||||||
|
|
||||||
# if defined(QQNX_IMF)
|
# if defined(QQNX_IMF)
|
||||||
@ -159,20 +160,14 @@ QQnxIntegration::QQnxIntegration()
|
|||||||
m_screenEventThread->start();
|
m_screenEventThread->start();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(QQNX_PPS)
|
// Not on BlackBerry, it has specialised event dispatcher which also handles virtual keyboard events
|
||||||
|
#if !defined(Q_OS_BLACKBERRY) && defined(QQNX_PPS)
|
||||||
// Create/start the keyboard class.
|
// Create/start the keyboard class.
|
||||||
m_virtualKeyboard = new QQnxVirtualKeyboard();
|
m_virtualKeyboard = new QQnxVirtualKeyboardPps();
|
||||||
|
|
||||||
// delay invocation of start() to the time the event loop is up and running
|
// delay invocation of start() to the time the event loop is up and running
|
||||||
// needed to have the QThread internals of the main thread properly initialized
|
// needed to have the QThread internals of the main thread properly initialized
|
||||||
QMetaObject::invokeMethod(m_virtualKeyboard, "start", Qt::QueuedConnection);
|
QMetaObject::invokeMethod(m_virtualKeyboard, "start", Qt::QueuedConnection);
|
||||||
|
|
||||||
// TODO check if we need to do this for all screens or only the primary one
|
|
||||||
QObject::connect(m_virtualKeyboard, SIGNAL(heightChanged(int)),
|
|
||||||
primaryDisplay(), SLOT(keyboardHeightChanged(int)));
|
|
||||||
|
|
||||||
// Set up the input context
|
|
||||||
m_inputContext = new QQnxInputContext(*m_virtualKeyboard);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(Q_OS_BLACKBERRY)
|
#if defined(Q_OS_BLACKBERRY)
|
||||||
@ -186,13 +181,27 @@ QQnxIntegration::QQnxIntegration()
|
|||||||
m_services = new QQnxServices(m_navigator);
|
m_services = new QQnxServices(m_navigator);
|
||||||
|
|
||||||
#if defined(Q_OS_BLACKBERRY)
|
#if defined(Q_OS_BLACKBERRY)
|
||||||
m_bpsEventFilter = new QQnxBpsEventFilter(m_navigatorEventHandler, m_screenEventHandler);
|
QQnxVirtualKeyboardBps* virtualKeyboardBps = new QQnxVirtualKeyboardBps;
|
||||||
|
m_bpsEventFilter = new QQnxBpsEventFilter(m_navigatorEventHandler, m_screenEventHandler, virtualKeyboardBps);
|
||||||
Q_FOREACH (QQnxScreen *screen, m_screens)
|
Q_FOREACH (QQnxScreen *screen, m_screens)
|
||||||
m_bpsEventFilter->registerForScreenEvents(screen);
|
m_bpsEventFilter->registerForScreenEvents(screen);
|
||||||
|
|
||||||
m_bpsEventFilter->installOnEventDispatcher(m_eventDispatcher);
|
m_bpsEventFilter->installOnEventDispatcher(m_eventDispatcher);
|
||||||
|
|
||||||
|
m_virtualKeyboard = virtualKeyboardBps;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (m_virtualKeyboard) {
|
||||||
|
// TODO check if we need to do this for all screens or only the primary one
|
||||||
|
QObject::connect(m_virtualKeyboard, SIGNAL(heightChanged(int)),
|
||||||
|
primaryDisplay(), SLOT(keyboardHeightChanged(int)));
|
||||||
|
|
||||||
|
#if defined(QQNX_PPS)
|
||||||
|
// Set up the input context
|
||||||
|
m_inputContext = new QQnxInputContext(*m_virtualKeyboard);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QQnxIntegration::~QQnxIntegration()
|
QQnxIntegration::~QQnxIntegration()
|
||||||
|
209
src/plugins/platforms/qnx/qqnxvirtualkeyboardbps.cpp
Normal file
209
src/plugins/platforms/qnx/qqnxvirtualkeyboardbps.cpp
Normal file
@ -0,0 +1,209 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2012 Research In Motion
|
||||||
|
** Contact: http://www.qt-project.org/
|
||||||
|
**
|
||||||
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
** This file may be used under the terms of the GNU Lesser General Public
|
||||||
|
** License version 2.1 as published by the Free Software Foundation and
|
||||||
|
** appearing in the file LICENSE.LGPL included in the packaging of this
|
||||||
|
** file. Please review the following information to ensure the GNU Lesser
|
||||||
|
** General Public License version 2.1 requirements will be met:
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** In addition, as a special exception, Nokia gives you certain additional
|
||||||
|
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU General
|
||||||
|
** Public License version 3.0 as published by the Free Software Foundation
|
||||||
|
** and appearing in the file LICENSE.GPL included in the packaging of this
|
||||||
|
** file. Please review the following information to ensure the GNU General
|
||||||
|
** Public License version 3.0 requirements will be met:
|
||||||
|
** http://www.gnu.org/copyleft/gpl.html.
|
||||||
|
**
|
||||||
|
** Other Usage
|
||||||
|
** Alternatively, this file may be used in accordance with the terms and
|
||||||
|
** conditions contained in a signed written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "qqnxvirtualkeyboardbps.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
#include <bps/event.h>
|
||||||
|
#include <bps/locale.h>
|
||||||
|
#include <bps/virtualkeyboard.h>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
QQnxVirtualKeyboardBps::QQnxVirtualKeyboardBps(QObject *parent)
|
||||||
|
: QQnxAbstractVirtualKeyboard(parent)
|
||||||
|
{
|
||||||
|
if (locale_request_events(0) != BPS_SUCCESS)
|
||||||
|
qWarning("QQNX: Failed to register for locale events");
|
||||||
|
|
||||||
|
if (virtualkeyboard_request_events(0) != BPS_SUCCESS)
|
||||||
|
qWarning("QQNX: Failed to register for virtual keyboard events");
|
||||||
|
|
||||||
|
int height = 0;
|
||||||
|
if (virtualkeyboard_get_height(&height) != BPS_SUCCESS)
|
||||||
|
qWarning("QQNX: Failed to get virtual keyboard height");
|
||||||
|
|
||||||
|
setHeight(height);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QQnxVirtualKeyboardBps::handleEvent(bps_event_t *event)
|
||||||
|
{
|
||||||
|
const int eventDomain = bps_event_get_domain(event);
|
||||||
|
if (eventDomain == locale_get_domain())
|
||||||
|
return handleLocaleEvent(event);
|
||||||
|
|
||||||
|
if (eventDomain == virtualkeyboard_get_domain())
|
||||||
|
return handleVirtualKeyboardEvent(event);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QQnxVirtualKeyboardBps::showKeyboard()
|
||||||
|
{
|
||||||
|
#if defined(QQNXVIRTUALKEYBOARD_DEBUG)
|
||||||
|
qDebug() << Q_FUNC_INFO << "current visibility=" << isVisible();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
virtualkeyboard_show();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QQnxVirtualKeyboardBps::hideKeyboard()
|
||||||
|
{
|
||||||
|
#if defined(QQNXVIRTUALKEYBOARD_DEBUG)
|
||||||
|
qDebug() << Q_FUNC_INFO << "current visibility=" << isVisible();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
virtualkeyboard_hide();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QQnxVirtualKeyboardBps::applyKeyboardMode(KeyboardMode mode)
|
||||||
|
{
|
||||||
|
virtualkeyboard_layout_t layout = VIRTUALKEYBOARD_LAYOUT_DEFAULT;
|
||||||
|
|
||||||
|
switch (mode) {
|
||||||
|
case Url:
|
||||||
|
layout = VIRTUALKEYBOARD_LAYOUT_URL;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Email:
|
||||||
|
layout = VIRTUALKEYBOARD_LAYOUT_EMAIL;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Web:
|
||||||
|
layout = VIRTUALKEYBOARD_LAYOUT_WEB;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NumPunc:
|
||||||
|
layout = VIRTUALKEYBOARD_LAYOUT_NUM_PUNC;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Symbol:
|
||||||
|
layout = VIRTUALKEYBOARD_LAYOUT_SYMBOL;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Phone:
|
||||||
|
layout = VIRTUALKEYBOARD_LAYOUT_PHONE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Pin:
|
||||||
|
layout = VIRTUALKEYBOARD_LAYOUT_PIN;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Default: // fall through
|
||||||
|
default:
|
||||||
|
layout = VIRTUALKEYBOARD_LAYOUT_DEFAULT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(QQNXVIRTUALKEYBOARD_DEBUG)
|
||||||
|
qDebug() << Q_FUNC_INFO << "mode=" << mode;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
virtualkeyboard_change_options(layout, VIRTUALKEYBOARD_ENTER_DEFAULT);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QQnxVirtualKeyboardBps::handleLocaleEvent(bps_event_t *event)
|
||||||
|
{
|
||||||
|
if (bps_event_get_code(event) == LOCALE_INFO) {
|
||||||
|
const QString language = QString::fromAscii(locale_event_get_language(event));
|
||||||
|
const QString country = QString::fromAscii(locale_event_get_country(event));
|
||||||
|
|
||||||
|
const QLocale newLocale(language + QLatin1Char('_') + country);
|
||||||
|
|
||||||
|
#if defined(QQNXVIRTUALKEYBOARD_DEBUG)
|
||||||
|
qDebug() << Q_FUNC_INFO << "current locale" << locale() << "new locale=" << newLocale;
|
||||||
|
#endif
|
||||||
|
setLocale(newLocale);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(QQNXVIRTUALKEYBOARD_DEBUG)
|
||||||
|
qDebug() << "QQNX: Unhandled locale event. code=" << bps_event_get_code(event);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QQnxVirtualKeyboardBps::handleVirtualKeyboardEvent(bps_event_t *event)
|
||||||
|
{
|
||||||
|
switch (bps_event_get_code(event)) {
|
||||||
|
case VIRTUALKEYBOARD_EVENT_VISIBLE:
|
||||||
|
#if defined(QQNXVIRTUALKEYBOARD_DEBUG)
|
||||||
|
qDebug() << Q_FUNC_INFO << "EVENT VISIBLE: current visibility=" << isVisible();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
setVisible(true);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VIRTUALKEYBOARD_EVENT_HIDDEN:
|
||||||
|
#if defined(QQNXVIRTUALKEYBOARD_DEBUG)
|
||||||
|
qDebug() << Q_FUNC_INFO << "EVENT HIDDEN: current visibility=" << isVisible();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
setVisible(false);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VIRTUALKEYBOARD_EVENT_INFO: {
|
||||||
|
const int newHeight = virtualkeyboard_event_get_height(event);
|
||||||
|
|
||||||
|
#if defined(QQNXVIRTUALKEYBOARD_DEBUG)
|
||||||
|
qDebug() << Q_FUNC_INFO << "EVENT INFO: current height=" << height() << "new height=" << newHeight;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
setHeight(newHeight);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
#if defined(QQNXVIRTUALKEYBOARD_DEBUG)
|
||||||
|
qDebug() << "QQNX: Unhandled virtual keyboard event. code=" << bps_event_get_code(event);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
72
src/plugins/platforms/qnx/qqnxvirtualkeyboardbps.h
Normal file
72
src/plugins/platforms/qnx/qqnxvirtualkeyboardbps.h
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2012 Research In Motion
|
||||||
|
** Contact: http://www.qt-project.org/
|
||||||
|
**
|
||||||
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
** This file may be used under the terms of the GNU Lesser General Public
|
||||||
|
** License version 2.1 as published by the Free Software Foundation and
|
||||||
|
** appearing in the file LICENSE.LGPL included in the packaging of this
|
||||||
|
** file. Please review the following information to ensure the GNU Lesser
|
||||||
|
** General Public License version 2.1 requirements will be met:
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** In addition, as a special exception, Nokia gives you certain additional
|
||||||
|
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU General
|
||||||
|
** Public License version 3.0 as published by the Free Software Foundation
|
||||||
|
** and appearing in the file LICENSE.GPL included in the packaging of this
|
||||||
|
** file. Please review the following information to ensure the GNU General
|
||||||
|
** Public License version 3.0 requirements will be met:
|
||||||
|
** http://www.gnu.org/copyleft/gpl.html.
|
||||||
|
**
|
||||||
|
** Other Usage
|
||||||
|
** Alternatively, this file may be used in accordance with the terms and
|
||||||
|
** conditions contained in a signed written agreement between you and Nokia.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef QQNXVIRTUALKEYBOARDBPS_H
|
||||||
|
#define QQNXVIRTUALKEYBOARDBPS_H
|
||||||
|
|
||||||
|
#include "qqnxabstractvirtualkeyboard.h"
|
||||||
|
|
||||||
|
struct bps_event_t;
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
class QQnxVirtualKeyboardBps : public QQnxAbstractVirtualKeyboard
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit QQnxVirtualKeyboardBps(QObject *parent = 0);
|
||||||
|
|
||||||
|
bool handleEvent(bps_event_t *event);
|
||||||
|
|
||||||
|
bool showKeyboard();
|
||||||
|
bool hideKeyboard();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void applyKeyboardMode(KeyboardMode mode);
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool handleLocaleEvent(bps_event_t *event);
|
||||||
|
bool handleVirtualKeyboardEvent(bps_event_t *event);
|
||||||
|
};
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
#endif // QQNXVIRTUALKEYBOARDBPS_H
|
@ -39,7 +39,7 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "qqnxvirtualkeyboard.h"
|
#include "qqnxvirtualkeyboardpps.h"
|
||||||
#include "qqnxscreen.h"
|
#include "qqnxscreen.h"
|
||||||
|
|
||||||
#include <QtCore/QDebug>
|
#include <QtCore/QDebug>
|
||||||
@ -58,13 +58,13 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
const char *QQnxVirtualKeyboard::ms_PPSPath = "/pps/services/input/control";
|
const char *QQnxVirtualKeyboardPps::ms_PPSPath = "/pps/services/input/control";
|
||||||
const size_t QQnxVirtualKeyboard::ms_bufferSize = 2048;
|
const size_t QQnxVirtualKeyboardPps::ms_bufferSize = 2048;
|
||||||
|
|
||||||
// Huge hack for keyboard shadow (see QNX PR 88400). Should be removed ASAP.
|
// Huge hack for keyboard shadow (see QNX PR 88400). Should be removed ASAP.
|
||||||
#define KEYBOARD_SHADOW_HEIGHT 8
|
#define KEYBOARD_SHADOW_HEIGHT 8
|
||||||
|
|
||||||
QQnxVirtualKeyboard::QQnxVirtualKeyboard()
|
QQnxVirtualKeyboardPps::QQnxVirtualKeyboardPps()
|
||||||
: m_encoder(0),
|
: m_encoder(0),
|
||||||
m_decoder(0),
|
m_decoder(0),
|
||||||
m_buffer(0),
|
m_buffer(0),
|
||||||
@ -73,26 +73,26 @@ QQnxVirtualKeyboard::QQnxVirtualKeyboard()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
QQnxVirtualKeyboard::~QQnxVirtualKeyboard()
|
QQnxVirtualKeyboardPps::~QQnxVirtualKeyboardPps()
|
||||||
{
|
{
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QQnxVirtualKeyboard::start()
|
void QQnxVirtualKeyboardPps::start()
|
||||||
{
|
{
|
||||||
#ifdef QQNXVIRTUALKEYBOARD_DEBUG
|
#if defined(QQNXVIRTUALKEYBOARD_DEBUG)
|
||||||
qDebug() << "QQNX: starting keyboard event processing";
|
qDebug() << "QQNX: starting keyboard event processing";
|
||||||
#endif
|
#endif
|
||||||
if (!connect())
|
if (!connect())
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QQnxVirtualKeyboard::applyKeyboardMode(KeyboardMode mode)
|
void QQnxVirtualKeyboardPps::applyKeyboardMode(KeyboardMode mode)
|
||||||
{
|
{
|
||||||
applyKeyboardModeOptions(mode);
|
applyKeyboardModeOptions(mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QQnxVirtualKeyboard::close()
|
void QQnxVirtualKeyboardPps::close()
|
||||||
{
|
{
|
||||||
delete m_readNotifier;
|
delete m_readNotifier;
|
||||||
m_readNotifier = 0;
|
m_readNotifier = 0;
|
||||||
@ -118,7 +118,7 @@ void QQnxVirtualKeyboard::close()
|
|||||||
m_buffer = 0;
|
m_buffer = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QQnxVirtualKeyboard::connect()
|
bool QQnxVirtualKeyboardPps::connect()
|
||||||
{
|
{
|
||||||
close();
|
close();
|
||||||
|
|
||||||
@ -153,7 +153,7 @@ bool QQnxVirtualKeyboard::connect()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QQnxVirtualKeyboard::queryPPSInfo()
|
bool QQnxVirtualKeyboardPps::queryPPSInfo()
|
||||||
{
|
{
|
||||||
// Request info, requires id to regenerate res message.
|
// Request info, requires id to regenerate res message.
|
||||||
pps_encoder_add_string(m_encoder, "msg", "info");
|
pps_encoder_add_string(m_encoder, "msg", "info");
|
||||||
@ -169,11 +169,11 @@ bool QQnxVirtualKeyboard::queryPPSInfo()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QQnxVirtualKeyboard::ppsDataReady()
|
void QQnxVirtualKeyboardPps::ppsDataReady()
|
||||||
{
|
{
|
||||||
ssize_t nread = qt_safe_read(m_fd, m_buffer, ms_bufferSize - 1);
|
ssize_t nread = qt_safe_read(m_fd, m_buffer, ms_bufferSize - 1);
|
||||||
|
|
||||||
#ifdef QQNXVIRTUALKEYBOARD_DEBUG
|
#if defined(QQNXVIRTUALKEYBOARD_DEBUG)
|
||||||
qDebug() << "QQNX: keyboardMessage size: " << nread;
|
qDebug() << "QQNX: keyboardMessage size: " << nread;
|
||||||
#endif
|
#endif
|
||||||
if (nread < 0){
|
if (nread < 0){
|
||||||
@ -196,7 +196,7 @@ void QQnxVirtualKeyboard::ppsDataReady()
|
|||||||
m_buffer[nread] = 0;
|
m_buffer[nread] = 0;
|
||||||
pps_decoder_parse_pps_str(m_decoder, m_buffer);
|
pps_decoder_parse_pps_str(m_decoder, m_buffer);
|
||||||
pps_decoder_push(m_decoder, NULL);
|
pps_decoder_push(m_decoder, NULL);
|
||||||
#ifdef QQNXVIRTUALKEYBOARD_DEBUG
|
#if defined(QQNXVIRTUALKEYBOARD_DEBUG)
|
||||||
pps_decoder_dump_tree(m_decoder, stderr);
|
pps_decoder_dump_tree(m_decoder, stderr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -225,7 +225,7 @@ void QQnxVirtualKeyboard::ppsDataReady()
|
|||||||
qCritical("QQnxVirtualKeyboard: Unexpected keyboard PPS message type");
|
qCritical("QQnxVirtualKeyboard: Unexpected keyboard PPS message type");
|
||||||
}
|
}
|
||||||
|
|
||||||
void QQnxVirtualKeyboard::handleKeyboardInfoMessage()
|
void QQnxVirtualKeyboardPps::handleKeyboardInfoMessage()
|
||||||
{
|
{
|
||||||
int newHeight = 0;
|
int newHeight = 0;
|
||||||
const char *value;
|
const char *value;
|
||||||
@ -261,14 +261,14 @@ void QQnxVirtualKeyboard::handleKeyboardInfoMessage()
|
|||||||
const QLocale locale = QLocale(languageId + QLatin1Char('_') + countryId);
|
const QLocale locale = QLocale(languageId + QLatin1Char('_') + countryId);
|
||||||
setLocale(locale);
|
setLocale(locale);
|
||||||
|
|
||||||
#ifdef QQNXVIRTUALKEYBOARD_DEBUG
|
#if defined(QQNXVIRTUALKEYBOARD_DEBUG)
|
||||||
qDebug() << "QQNX: handleKeyboardInfoMessage size=" << newHeight << "locale=" << locale;
|
qDebug() << "QQNX: handleKeyboardInfoMessage size=" << newHeight << "locale=" << locale;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QQnxVirtualKeyboard::showKeyboard()
|
bool QQnxVirtualKeyboardPps::showKeyboard()
|
||||||
{
|
{
|
||||||
#ifdef QQNXVIRTUALKEYBOARD_DEBUG
|
#if defined(QQNXVIRTUALKEYBOARD_DEBUG)
|
||||||
qDebug() << "QQNX: showKeyboard()";
|
qDebug() << "QQNX: showKeyboard()";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -300,9 +300,9 @@ bool QQnxVirtualKeyboard::showKeyboard()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QQnxVirtualKeyboard::hideKeyboard()
|
bool QQnxVirtualKeyboardPps::hideKeyboard()
|
||||||
{
|
{
|
||||||
#ifdef QQNXVIRTUALKEYBOARD_DEBUG
|
#if defined(QQNXVIRTUALKEYBOARD_DEBUG)
|
||||||
qDebug() << "QQNX: hideKeyboard()";
|
qDebug() << "QQNX: hideKeyboard()";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -332,7 +332,7 @@ bool QQnxVirtualKeyboard::hideKeyboard()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QQnxVirtualKeyboard::applyKeyboardModeOptions(KeyboardMode mode)
|
void QQnxVirtualKeyboardPps::applyKeyboardModeOptions(KeyboardMode mode)
|
||||||
{
|
{
|
||||||
// Try to connect.
|
// Try to connect.
|
||||||
if (m_fd == -1 && !connect())
|
if (m_fd == -1 && !connect())
|
||||||
@ -379,49 +379,49 @@ void QQnxVirtualKeyboard::applyKeyboardModeOptions(KeyboardMode mode)
|
|||||||
pps_encoder_reset(m_encoder);
|
pps_encoder_reset(m_encoder);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QQnxVirtualKeyboard::addDefaultModeOptions()
|
void QQnxVirtualKeyboardPps::addDefaultModeOptions()
|
||||||
{
|
{
|
||||||
pps_encoder_add_string(m_encoder, "enter", "enter.default");
|
pps_encoder_add_string(m_encoder, "enter", "enter.default");
|
||||||
pps_encoder_add_string(m_encoder, "type", "default");
|
pps_encoder_add_string(m_encoder, "type", "default");
|
||||||
}
|
}
|
||||||
|
|
||||||
void QQnxVirtualKeyboard::addUrlModeOptions()
|
void QQnxVirtualKeyboardPps::addUrlModeOptions()
|
||||||
{
|
{
|
||||||
pps_encoder_add_string(m_encoder, "enter", "enter.default");
|
pps_encoder_add_string(m_encoder, "enter", "enter.default");
|
||||||
pps_encoder_add_string(m_encoder, "type", "url");
|
pps_encoder_add_string(m_encoder, "type", "url");
|
||||||
}
|
}
|
||||||
|
|
||||||
void QQnxVirtualKeyboard::addEmailModeOptions()
|
void QQnxVirtualKeyboardPps::addEmailModeOptions()
|
||||||
{
|
{
|
||||||
pps_encoder_add_string(m_encoder, "enter", "enter.default");
|
pps_encoder_add_string(m_encoder, "enter", "enter.default");
|
||||||
pps_encoder_add_string(m_encoder, "type", "email");
|
pps_encoder_add_string(m_encoder, "type", "email");
|
||||||
}
|
}
|
||||||
|
|
||||||
void QQnxVirtualKeyboard::addWebModeOptions()
|
void QQnxVirtualKeyboardPps::addWebModeOptions()
|
||||||
{
|
{
|
||||||
pps_encoder_add_string(m_encoder, "enter", "enter.default");
|
pps_encoder_add_string(m_encoder, "enter", "enter.default");
|
||||||
pps_encoder_add_string(m_encoder, "type", "web");
|
pps_encoder_add_string(m_encoder, "type", "web");
|
||||||
}
|
}
|
||||||
|
|
||||||
void QQnxVirtualKeyboard::addNumPuncModeOptions()
|
void QQnxVirtualKeyboardPps::addNumPuncModeOptions()
|
||||||
{
|
{
|
||||||
pps_encoder_add_string(m_encoder, "enter", "enter.default");
|
pps_encoder_add_string(m_encoder, "enter", "enter.default");
|
||||||
pps_encoder_add_string(m_encoder, "type", "numPunc");
|
pps_encoder_add_string(m_encoder, "type", "numPunc");
|
||||||
}
|
}
|
||||||
|
|
||||||
void QQnxVirtualKeyboard::addPhoneModeOptions()
|
void QQnxVirtualKeyboardPps::addPhoneModeOptions()
|
||||||
{
|
{
|
||||||
pps_encoder_add_string(m_encoder, "enter", "enter.default");
|
pps_encoder_add_string(m_encoder, "enter", "enter.default");
|
||||||
pps_encoder_add_string(m_encoder, "type", "phone");
|
pps_encoder_add_string(m_encoder, "type", "phone");
|
||||||
}
|
}
|
||||||
|
|
||||||
void QQnxVirtualKeyboard::addPinModeOptions()
|
void QQnxVirtualKeyboardPps::addPinModeOptions()
|
||||||
{
|
{
|
||||||
pps_encoder_add_string(m_encoder, "enter", "enter.default");
|
pps_encoder_add_string(m_encoder, "enter", "enter.default");
|
||||||
pps_encoder_add_string(m_encoder, "type", "pin");
|
pps_encoder_add_string(m_encoder, "type", "pin");
|
||||||
}
|
}
|
||||||
|
|
||||||
void QQnxVirtualKeyboard::addSymbolModeOptions()
|
void QQnxVirtualKeyboardPps::addSymbolModeOptions()
|
||||||
{
|
{
|
||||||
pps_encoder_add_string(m_encoder, "enter", "enter.default");
|
pps_encoder_add_string(m_encoder, "enter", "enter.default");
|
||||||
pps_encoder_add_string(m_encoder, "type", "symbol");
|
pps_encoder_add_string(m_encoder, "type", "symbol");
|
@ -39,8 +39,8 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifndef VIRTUALKEYBOARD_H_
|
#ifndef VIRTUALKEYBOARDPPS_H_
|
||||||
#define VIRTUALKEYBOARD_H_
|
#define VIRTUALKEYBOARDPPS_H_
|
||||||
|
|
||||||
#include "qqnxabstractvirtualkeyboard.h"
|
#include "qqnxabstractvirtualkeyboard.h"
|
||||||
|
|
||||||
@ -50,13 +50,12 @@ QT_BEGIN_NAMESPACE
|
|||||||
|
|
||||||
class QSocketNotifier;
|
class QSocketNotifier;
|
||||||
|
|
||||||
/* Shamelessly copied from the browser - this should be rewritten once we have a proper PPS wrapper class */
|
class QQnxVirtualKeyboardPps : public QQnxAbstractVirtualKeyboard
|
||||||
class QQnxVirtualKeyboard : public QQnxAbstractVirtualKeyboard
|
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
QQnxVirtualKeyboard();
|
QQnxVirtualKeyboardPps();
|
||||||
~QQnxVirtualKeyboard();
|
~QQnxVirtualKeyboardPps();
|
||||||
|
|
||||||
bool showKeyboard();
|
bool showKeyboard();
|
||||||
bool hideKeyboard();
|
bool hideKeyboard();
|
||||||
@ -98,4 +97,4 @@ private:
|
|||||||
static const size_t ms_bufferSize;
|
static const size_t ms_bufferSize;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* VIRTUALKEYBOARD_H_ */
|
#endif /* VIRTUALKEYBOARDPPS_H_ */
|
Loading…
Reference in New Issue
Block a user