Fix Qt 5 to-do's in QGraphicsProxyWidget
authorGatis Paeglis <gatis.paeglis@nokia.com>
Tue, 22 May 2012 18:08:00 +0000 (20:08 +0200)
committerQt by Nokia <qt-info@nokia.com>
Sat, 26 May 2012 08:14:12 +0000 (10:14 +0200)
Task-number: QTBUG-25091

Change-Id: Ic4160f90f69167d40ee1e569562d25eb009615aa
Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
src/widgets/graphicsview/qgraphicsitem.cpp
src/widgets/graphicsview/qgraphicsitem_p.h
src/widgets/graphicsview/qgraphicsproxywidget.cpp
src/widgets/graphicsview/qgraphicsproxywidget.h
src/widgets/graphicsview/qgraphicsproxywidget_p.h

index 56ea4f9..d1be832 100644 (file)
@@ -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();
 }
index 1783fdb..77b54c1 100644 (file)
@@ -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);
index b09ddba..f4d43e4 100644 (file)
@@ -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<QInputMethodEvent *>(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);
index 90a90e0..7bd1cf0 100644 (file)
@@ -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);
index e7e4139..fd47c8a 100644 (file)
@@ -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 *);