From: Gatis Paeglis Date: Tue, 22 May 2012 18:08:00 +0000 (+0200) Subject: Fix Qt 5 to-do's in QGraphicsProxyWidget X-Git-Tag: 071012110112~783 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9b7b90cf550abd107b03ce3d6d8e4ff87401bcd8;p=profile%2Fivi%2Fqtbase.git Fix Qt 5 to-do's in QGraphicsProxyWidget Task-number: QTBUG-25091 Change-Id: Ic4160f90f69167d40ee1e569562d25eb009615aa Reviewed-by: Bradley T. Hughes Reviewed-by: Lars Knoll --- diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp index 56ea4f9..d1be832 100644 --- a/src/widgets/graphicsview/qgraphicsitem.cpp +++ b/src/widgets/graphicsview/qgraphicsitem.cpp @@ -1077,22 +1077,6 @@ void QGraphicsItemPrivate::updateSceneTransformFromParent() /*! \internal - This helper function helped us add input method query support in - Qt 4.4.1 without having to reimplement the inputMethodQuery() - function in QGraphicsProxyWidget. ### Qt 5: Remove. We cannot - remove it in 4.5+ even if we do reimplement the function properly, - because apps compiled with 4.4 will not be able to call the - reimplementation. -*/ -QVariant QGraphicsItemPrivate::inputMethodQueryHelper(Qt::InputMethodQuery query) const -{ - Q_UNUSED(query); - return QVariant(); -} - -/*! - \internal - Make sure not to trigger any pure virtual function calls (e.g., prepareGeometryChange) if the item is in its destructor, i.e. inDestructor is 1. @@ -7331,13 +7315,6 @@ void QGraphicsItem::inputMethodEvent(QInputMethodEvent *event) */ QVariant QGraphicsItem::inputMethodQuery(Qt::InputMethodQuery query) const { - if (isWidget()) { - // ### Qt 5: Remove. The reimplementation in - // QGraphicsProxyWidget solves this problem (but requires a - // recompile to take effect). - return d_ptr->inputMethodQueryHelper(query); - } - Q_UNUSED(query); return QVariant(); } diff --git a/src/widgets/graphicsview/qgraphicsitem_p.h b/src/widgets/graphicsview/qgraphicsitem_p.h index 1783fdb..77b54c1 100644 --- a/src/widgets/graphicsview/qgraphicsitem_p.h +++ b/src/widgets/graphicsview/qgraphicsitem_p.h @@ -273,8 +273,6 @@ public: void combineTransformFromParent(QTransform *x, const QTransform *viewTransform = 0) const; virtual void updateSceneTransformFromParent(); - // ### Qt 5: Remove. Workaround for reimplementation added after Qt 4.4. - virtual QVariant inputMethodQueryHelper(Qt::InputMethodQuery query) const; static bool movableAncestorIsSelected(const QGraphicsItem *item); virtual void setPosHelper(const QPointF &pos); diff --git a/src/widgets/graphicsview/qgraphicsproxywidget.cpp b/src/widgets/graphicsview/qgraphicsproxywidget.cpp index b09ddba..f4d43e4 100644 --- a/src/widgets/graphicsview/qgraphicsproxywidget.cpp +++ b/src/widgets/graphicsview/qgraphicsproxywidget.cpp @@ -339,42 +339,6 @@ void QGraphicsProxyWidgetPrivate::removeSubFocusHelper(QWidget *widget, Qt::Focu /*! \internal - - Reimplemented from QGraphicsItemPrivate. ### Qt 5: Move impl to - reimplementation QGraphicsProxyWidget::inputMethodQuery(). -*/ -QVariant QGraphicsProxyWidgetPrivate::inputMethodQueryHelper(Qt::InputMethodQuery query) const -{ - Q_Q(const QGraphicsProxyWidget); - if (!widget || !q->hasFocus()) - return QVariant(); - - QWidget *focusWidget = widget->focusWidget(); - if (!focusWidget) - focusWidget = widget; - QVariant v = focusWidget->inputMethodQuery(query); - QPointF focusWidgetPos = q->subWidgetRect(focusWidget).topLeft(); - switch (v.type()) { - case QVariant::RectF: - v = v.toRectF().translated(focusWidgetPos); - break; - case QVariant::PointF: - v = v.toPointF() + focusWidgetPos; - break; - case QVariant::Rect: - v = v.toRect().translated(focusWidgetPos.toPoint()); - break; - case QVariant::Point: - v = v.toPoint() + focusWidgetPos.toPoint(); - break; - default: - break; - } - return v; -} - -/*! - \internal Some of the logic is shared with QApplicationPrivate::focusNextPrevChild_helper */ QWidget *QGraphicsProxyWidgetPrivate::findFocusChild(QWidget *child, bool next) const @@ -860,13 +824,7 @@ bool QGraphicsProxyWidget::event(QEvent *event) break; } case QEvent::InputMethod: { - // Forward input method events if the focus widget enables - // input methods. - // ### Qt 4.5: this code must also go into a reimplementation - // of inputMethodEvent(). - QWidget *focusWidget = d->widget->focusWidget(); - if (focusWidget && focusWidget->testAttribute(Qt::WA_InputMethodEnabled)) - QApplication::sendEvent(focusWidget, event); + inputMethodEvent(static_cast(event)); break; } case QEvent::ShortcutOverride: { @@ -1418,6 +1376,52 @@ bool QGraphicsProxyWidget::focusNextPrevChild(bool next) /*! \reimp */ +QVariant QGraphicsProxyWidget::inputMethodQuery(Qt::InputMethodQuery query) const +{ + Q_D(const QGraphicsProxyWidget); + + if (!d->widget || !hasFocus()) + return QVariant(); + + QWidget *focusWidget = widget()->focusWidget(); + if (!focusWidget) + focusWidget = d->widget; + QVariant v = focusWidget->inputMethodQuery(query); + QPointF focusWidgetPos = subWidgetRect(focusWidget).topLeft(); + switch (v.type()) { + case QVariant::RectF: + v = v.toRectF().translated(focusWidgetPos); + break; + case QVariant::PointF: + v = v.toPointF() + focusWidgetPos; + break; + case QVariant::Rect: + v = v.toRect().translated(focusWidgetPos.toPoint()); + break; + case QVariant::Point: + v = v.toPoint() + focusWidgetPos.toPoint(); + break; + default: + break; + } + return v; +} + +/*! + \reimp +*/ +void QGraphicsProxyWidget::inputMethodEvent(QInputMethodEvent *event) +{ + // Forward input method events if the focus widget enables input methods. + Q_D(const QGraphicsProxyWidget); + QWidget *focusWidget = d->widget->focusWidget(); + if (focusWidget && focusWidget->testAttribute(Qt::WA_InputMethodEnabled)) + QApplication::sendEvent(focusWidget, event); +} + +/*! + \reimp +*/ QSizeF QGraphicsProxyWidget::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const { Q_D(const QGraphicsProxyWidget); diff --git a/src/widgets/graphicsview/qgraphicsproxywidget.h b/src/widgets/graphicsview/qgraphicsproxywidget.h index 90a90e0..7bd1cf0 100644 --- a/src/widgets/graphicsview/qgraphicsproxywidget.h +++ b/src/widgets/graphicsview/qgraphicsproxywidget.h @@ -116,9 +116,9 @@ protected: void focusInEvent(QFocusEvent *event); void focusOutEvent(QFocusEvent *event); bool focusNextPrevChild(bool next); - // ### Qt 4.5: - // QVariant inputMethodQuery(Qt::InputMethodQuery query) const; - // void inputMethodEvent(QInputMethodEvent *event); + + QVariant inputMethodQuery(Qt::InputMethodQuery query) const; + void inputMethodEvent(QInputMethodEvent *event); QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const; void resizeEvent(QGraphicsSceneResizeEvent *event); diff --git a/src/widgets/graphicsview/qgraphicsproxywidget_p.h b/src/widgets/graphicsview/qgraphicsproxywidget_p.h index e7e4139..fd47c8a 100644 --- a/src/widgets/graphicsview/qgraphicsproxywidget_p.h +++ b/src/widgets/graphicsview/qgraphicsproxywidget_p.h @@ -84,9 +84,6 @@ public: QWidget *findFocusChild(QWidget *child, bool next) const; void removeSubFocusHelper(QWidget *widget, Qt::FocusReason reason); - // ### Qt 5: Remove. Workaround for reimplementation added after Qt 4.4. - QVariant inputMethodQueryHelper(Qt::InputMethodQuery query) const; - void _q_removeWidgetSlot(); void embedSubWindow(QWidget *);