diff options
Diffstat (limited to 'src/gui/kernel/qinputmethod.cpp')
-rw-r--r-- | src/gui/kernel/qinputmethod.cpp | 88 |
1 files changed, 64 insertions, 24 deletions
diff --git a/src/gui/kernel/qinputmethod.cpp b/src/gui/kernel/qinputmethod.cpp index 2684c43518..365b088840 100644 --- a/src/gui/kernel/qinputmethod.cpp +++ b/src/gui/kernel/qinputmethod.cpp @@ -1,31 +1,37 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtGui module of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL21$ +** $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 http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** 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 2.1 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** 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. ** -** As a special exception, The Qt Company gives you certain additional -** rights. These rights are described in The Qt Company 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 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$ ** @@ -91,6 +97,7 @@ void QInputMethod::setInputItemTransform(const QTransform &transform) d->inputItemTransform = transform; emit cursorRectangleChanged(); + emit anchorRectangleChanged(); } @@ -120,6 +127,19 @@ void QInputMethod::setInputItemRectangle(const QRectF &rect) d->inputRectangle = rect; } +static QRectF inputMethodQueryRectangle_helper(Qt::InputMethodQuery imquery, const QTransform &xform) +{ + QRectF r; + if (QObject *focusObject = qGuiApp->focusObject()) { + QInputMethodQueryEvent query(imquery); + QGuiApplication::sendEvent(focusObject, &query); + r = query.value(imquery).toRectF(); + if (r.isValid()) + r = xform.mapRect(r); + } + return r; +} + /*! \property QInputMethod::cursorRectangle \brief Input item's cursor rectangle in window coordinates. @@ -130,18 +150,20 @@ void QInputMethod::setInputItemRectangle(const QRectF &rect) QRectF QInputMethod::cursorRectangle() const { Q_D(const QInputMethod); + return inputMethodQueryRectangle_helper(Qt::ImCursorRectangle, d->inputItemTransform); +} - QObject *focusObject = qGuiApp->focusObject(); - if (!focusObject) - return QRectF(); - - QInputMethodQueryEvent query(Qt::ImCursorRectangle); - QGuiApplication::sendEvent(focusObject, &query); - QRectF r = query.value(Qt::ImCursorRectangle).toRectF(); - if (!r.isValid()) - return QRectF(); +/*! + \property QInputMethod::anchorRectangle + \brief Input item's anchor rectangle in window coordinates. - return d->inputItemTransform.mapRect(r); + Anchor rectangle is often used by various text editing controls + like text prediction popups for following the text selection. +*/ +QRectF QInputMethod::anchorRectangle() const +{ + Q_D(const QInputMethod); + return inputMethodQueryRectangle_helper(Qt::ImAnchorRectangle, d->inputItemTransform); } /*! @@ -161,6 +183,18 @@ QRectF QInputMethod::keyboardRectangle() const } /*! + \property QInputMethod::inputItemClipRectangle + \brief Input item's clipped rectangle in window coordinates. + + The clipped input rectangle is often used by various input methods to determine + how much screen real estate is available for the input method (e.g. Virtual Keyboard). +*/ +QRectF QInputMethod::inputItemClipRectangle() const +{ + Q_D(const QInputMethod); + return inputMethodQueryRectangle_helper(Qt::ImInputItemClipRectangle, d->inputItemTransform); +} +/*! Requests virtual keyboard to open. If the platform doesn't provide virtual keyboard the visibility remains false. @@ -294,6 +328,12 @@ void QInputMethod::update(Qt::InputMethodQueries queries) if (queries & Qt::ImCursorRectangle) emit cursorRectangleChanged(); + + if (queries & (Qt::ImAnchorRectangle)) + emit anchorRectangleChanged(); + + if (queries & (Qt::ImInputItemClipRectangle)) + emit inputItemClipRectangleChanged(); } /*! |