Fix Qt 5 to-do's in QGraphicsProxyWidget

Task-number: QTBUG-25091

Change-Id: Ic4160f90f69167d40ee1e569562d25eb009615aa
Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
This commit is contained in:
Gatis Paeglis 2012-05-22 20:08:00 +02:00 committed by Qt by Nokia
parent ccd56e9844
commit 9b7b90cf55
5 changed files with 50 additions and 74 deletions

View File

@ -1074,22 +1074,6 @@ void QGraphicsItemPrivate::updateSceneTransformFromParent()
dirtySceneTransform = 0;
}
/*!
\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
@ -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();
}

View 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);

View File

@ -337,42 +337,6 @@ void QGraphicsProxyWidgetPrivate::removeSubFocusHelper(QWidget *widget, Qt::Focu
QApplication::sendEvent(widget->style(), &event);
}
/*!
\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
@ -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: {
@ -1415,6 +1373,52 @@ bool QGraphicsProxyWidget::focusNextPrevChild(bool next)
return QGraphicsWidget::focusNextPrevChild(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
*/

View 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);

View 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 *);