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
 
 /*!
     \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.
     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
 {
 */
 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();
 }
     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();
 
     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);
     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
 
 /*!
     \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
     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: {
         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: {
         break;
     }
     case QEvent::ShortcutOverride: {
@@ -1418,6 +1376,52 @@ bool QGraphicsProxyWidget::focusNextPrevChild(bool next)
 /*!
     \reimp
 */
 /*!
     \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);
 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);
     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);
 
     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);
 
     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 *);
     void _q_removeWidgetSlot();
 
     void embedSubWindow(QWidget *);