diff --git a/inputcontext/QskHunspellCompositionModel.cpp b/inputcontext/QskHunspellCompositionModel.cpp index d811908a..ca50f5f6 100644 --- a/inputcontext/QskHunspellCompositionModel.cpp +++ b/inputcontext/QskHunspellCompositionModel.cpp @@ -10,8 +10,8 @@ public: QVector< QString > candidates; }; -QskHunspellCompositionModel::QskHunspellCompositionModel() : - QskInputCompositionModel(), +QskHunspellCompositionModel::QskHunspellCompositionModel( QObject* parent ): + Inherited( parent ), m_data( new PrivateData() ) { #if 1 diff --git a/inputcontext/QskHunspellCompositionModel.h b/inputcontext/QskHunspellCompositionModel.h index 8ba15e0c..178d3321 100644 --- a/inputcontext/QskHunspellCompositionModel.h +++ b/inputcontext/QskHunspellCompositionModel.h @@ -10,8 +10,10 @@ class QskHunspellCompositionModel : public QskInputCompositionModel { + using Inherited = QskInputCompositionModel; + public: - QskHunspellCompositionModel(); + QskHunspellCompositionModel( QObject* parent = nullptr ); virtual ~QskHunspellCompositionModel() override; virtual bool supportsSuggestions() const override final; diff --git a/inputcontext/QskInputCompositionModel.cpp b/inputcontext/QskInputCompositionModel.cpp index 96ddd22e..17905e92 100644 --- a/inputcontext/QskInputCompositionModel.cpp +++ b/inputcontext/QskInputCompositionModel.cpp @@ -62,7 +62,8 @@ public: int groupIndex; }; -QskInputCompositionModel::QskInputCompositionModel(): +QskInputCompositionModel::QskInputCompositionModel( QObject* parent ): + QObject( parent ), m_data( new PrivateData ) { m_data->groupIndex = 0; diff --git a/inputcontext/QskInputCompositionModel.h b/inputcontext/QskInputCompositionModel.h index 239550b6..5e299ce8 100644 --- a/inputcontext/QskInputCompositionModel.h +++ b/inputcontext/QskInputCompositionModel.h @@ -20,7 +20,7 @@ class QskInputCompositionModel : public QObject Q_PROPERTY( QVector< Qt::Key > groups READ groups NOTIFY groupsChanged ) public: - QskInputCompositionModel(); + QskInputCompositionModel( QObject* parent = nullptr ); virtual ~QskInputCompositionModel(); // to determine whether to show the suggestion bar: diff --git a/inputcontext/QskInputContext.cpp b/inputcontext/QskInputContext.cpp index 828b5c96..0cd7722b 100644 --- a/inputcontext/QskInputContext.cpp +++ b/inputcontext/QskInputContext.cpp @@ -31,7 +31,7 @@ QskInputContext::QskInputContext() : { setObjectName( "InputContext" ); - m_data->compositionModel = new QskInputCompositionModel(); + m_data->compositionModel = new QskInputCompositionModel( this ); connect( m_data->compositionModel, &QskInputCompositionModel::candidatesChanged, this, &QskInputContext::handleCandidatesChanged ); @@ -40,7 +40,7 @@ QskInputContext::QskInputContext() : this, &QskInputContext::setInputPanel ); #if 1 - setCompositionModel( QLocale::Chinese, new QskPinyinCompositionModel() ); + setCompositionModel( QLocale::Chinese, new QskPinyinCompositionModel( this ) ); #endif setInputPanel( qskSetup->inputPanel() ); @@ -48,11 +48,10 @@ QskInputContext::QskInputContext() : QskInputContext::~QskInputContext() { +#if 1 if ( m_data->inputPanel ) delete m_data->inputPanel; - - qDeleteAll( m_data->compositionModels ); - delete m_data->compositionModel; +#endif } bool QskInputContext::isValid() const @@ -60,14 +59,19 @@ bool QskInputContext::isValid() const return true; } +bool QskInputContext::hasCapability( Capability ) const +{ + // what is QPlatformInputContext::HiddenTextCapability ??? + return true; +} + void QskInputContext::update( Qt::InputMethodQueries queries ) { - if ( !m_data->inputItem ) + if ( m_data->inputItem == nullptr ) return; QInputMethodQueryEvent queryEvent( queries ); - if ( !QCoreApplication::sendEvent( m_data->inputItem, &queryEvent ) ) - return; + QCoreApplication::sendEvent( m_data->inputItem, &queryEvent ); // Qt::ImCursorRectangle // Qt::ImFont @@ -219,6 +223,11 @@ QLocale QskInputContext::locale() const return m_data->inputPanel ? m_data->inputPanel->locale() : QLocale(); } +Qt::LayoutDirection QskInputContext::inputDirection() const +{ + return Inherited::inputDirection(); +} + void QskInputContext::setFocusObject( QObject* focusObject ) { if ( focusObject == nullptr ) @@ -245,8 +254,7 @@ void QskInputContext::setFocusObject( QObject* focusObject ) if( inputItemChanged ) { QInputMethodQueryEvent queryEvent( Qt::ImEnabled ); - if ( !QCoreApplication::sendEvent( m_data->inputItem, &queryEvent ) ) - return; + QCoreApplication::sendEvent( m_data->inputItem, &queryEvent ); if ( !queryEvent.value( Qt::ImEnabled ).toBool() ) { @@ -302,7 +310,7 @@ void QskInputContext::invokeAction( QInputMethod::Action action, int cursorPosit { auto model = compositionModel(); - switch ( static_cast< QskVirtualKeyboard::Action >( action ) ) + switch ( static_cast< int >( action ) ) { case QskVirtualKeyboard::Compose: { @@ -323,6 +331,11 @@ void QskInputContext::invokeAction( QInputMethod::Action action, int cursorPosit break; } + case QInputMethod::Click: + case QInputMethod::ContextMenu: + { + break; + } } } @@ -382,4 +395,25 @@ void QskInputContext::setInputPanel( QskVirtualKeyboard* inputPanel ) } } +void QskInputContext::reset() +{ +} + +void QskInputContext::commit() +{ +} + +bool QskInputContext::eventFilter( QObject* object, QEvent* event ) +{ + if ( object == m_data->inputItem ) + return filterEvent( event ); + + return false; +} + +bool QskInputContext::filterEvent( const QEvent* ) +{ + return false; +} + #include "moc_QskInputContext.cpp" diff --git a/inputcontext/QskInputContext.h b/inputcontext/QskInputContext.h index 470d9f5d..5da3adab 100644 --- a/inputcontext/QskInputContext.h +++ b/inputcontext/QskInputContext.h @@ -24,6 +24,7 @@ public: virtual ~QskInputContext(); virtual bool isValid() const override; + virtual bool hasCapability( Capability ) const override; virtual void update( Qt::InputMethodQueries ) override; virtual void invokeAction( QInputMethod::Action, int ) override; @@ -35,14 +36,21 @@ public: virtual void hideInputPanel() override; virtual bool isInputPanelVisible() const override; + virtual void reset() override; + virtual void commit() override; + virtual void setFocusObject( QObject* ) override; virtual QLocale locale() const override; + virtual Qt::LayoutDirection inputDirection() const override; void setCompositionModel( const QLocale&, QskInputCompositionModel* ); Q_INVOKABLE QQuickItem* inputItem(); + virtual bool eventFilter( QObject*, QEvent * ) override; + virtual bool filterEvent( const QEvent* ) override; + private Q_SLOTS: void handleCandidatesChanged(); void setInputPanel( QskVirtualKeyboard* ); diff --git a/inputcontext/QskPinyinCompositionModel.cpp b/inputcontext/QskPinyinCompositionModel.cpp index d5170ddc..ca515f9e 100644 --- a/inputcontext/QskPinyinCompositionModel.cpp +++ b/inputcontext/QskPinyinCompositionModel.cpp @@ -18,8 +18,8 @@ public: QVector< Qt::Key > groups; }; -QskPinyinCompositionModel::QskPinyinCompositionModel(): - QskInputCompositionModel(), +QskPinyinCompositionModel::QskPinyinCompositionModel( QObject* parent ): + Inherited( parent ), m_data( new PrivateData ) { #if 1 @@ -124,5 +124,3 @@ void QskPinyinCompositionModel::handleGroupIndexChanged() { // ### implement } - -#include "moc_QskPinyinCompositionModel.cpp" diff --git a/inputcontext/QskPinyinCompositionModel.h b/inputcontext/QskPinyinCompositionModel.h index cc0544fa..994edd79 100644 --- a/inputcontext/QskPinyinCompositionModel.h +++ b/inputcontext/QskPinyinCompositionModel.h @@ -10,10 +10,10 @@ class QskPinyinCompositionModel : public QskInputCompositionModel { - Q_OBJECT + using Inherited = QskInputCompositionModel; public: - QskPinyinCompositionModel(); + QskPinyinCompositionModel( QObject* parent = nullptr ); virtual ~QskPinyinCompositionModel() override; virtual bool supportsSuggestions() const override final; diff --git a/src/controls/QskTextInput.cpp b/src/controls/QskTextInput.cpp index 38f768ff..c0d402bb 100644 --- a/src/controls/QskTextInput.cpp +++ b/src/controls/QskTextInput.cpp @@ -24,8 +24,10 @@ static inline void qskBindSignals( const QQuickTextInput* wrappedInput, QObject::connect( wrappedInput, &QQuickTextInput::textChanged, input, [ input ] { input->Q_EMIT textChanged( input->text() ); } ); +#if QT_VERSION >= QT_VERSION_CHECK(5, 9, 0) QObject::connect( wrappedInput, &QQuickTextInput::textEdited, input, [ input ] { input->Q_EMIT textEdited( input->text() ); } ); +#endif QObject::connect( wrappedInput, &QQuickTextInput::textChanged, input, [ input ] { input->Q_EMIT textChanged( input->text() ); } ); @@ -42,8 +44,10 @@ static inline void qskBindSignals( const QQuickTextInput* wrappedInput, QObject::connect( wrappedInput, &QQuickTextInput::readOnlyChanged, input, &QskTextInput::readOnlyChanged ); +#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0) QObject::connect( wrappedInput, &QQuickTextInput::overwriteModeChanged, input, &QskTextInput::overwriteModeChanged ); +#endif QObject::connect( wrappedInput, &QQuickTextInput::maximumLengthChanged, input, &QskTextInput::maximumLengthChanged ); @@ -232,9 +236,12 @@ void QskTextInput::setFontRole( int role ) polish(); resetImplicitSize(); - qskUpdateInputMethod( this, - Qt::ImCursorRectangle | Qt::ImFont | Qt::ImAnchorRectangle ); + Qt::InputMethodQueries queries = Qt::ImCursorRectangle | Qt::ImFont; +#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0) + queries |= Qt::ImAnchorRectangle; +#endif + qskUpdateInputMethod( this, queries ); Q_EMIT fontRoleChanged(); } } @@ -374,17 +381,29 @@ QString QskTextInput::displayText() const QString QskTextInput::preeditText() const { +#if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0) return m_data->textInput->preeditText(); +#else + return QString(); +#endif } bool QskTextInput::overwriteMode() const { +#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0) return m_data->textInput->overwriteMode(); +#else + return false; +#endif } void QskTextInput::setOverwriteMode( bool overwrite ) { +#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0) m_data->textInput->setOverwriteMode( overwrite ); +#else + Q_UNUSED( overwrite ) +#endif } bool QskTextInput::autoScroll() const