diff options
author | Gareth Stockwell <gareth.stockwell@sosco.com> | 2009-10-01 15:41:28 +0100 |
---|---|---|
committer | Gareth Stockwell <gareth.stockwell@sosco.com> | 2009-10-01 15:41:28 +0100 |
commit | f00aeb98d457b16ac90e98f3dd18bf4f53fefeb3 (patch) | |
tree | 275e3f2b7e73baba2469764004febfbcc3a35ad1 /src/gui/kernel/qwidget_s60.cpp | |
parent | 99d0b5de2bf4415076ceb96b2f2459e81bddfa43 (diff) | |
download | qt4-tools-f00aeb98d457b16ac90e98f3dd18bf4f53fefeb3.tar.gz |
Immediately activate native windows created by calling winId() on an already-visible widget
If a widget is visible when winId() is called on it, this change means that the newly-created native window will be activated immediately.
Diffstat (limited to 'src/gui/kernel/qwidget_s60.cpp')
-rw-r--r-- | src/gui/kernel/qwidget_s60.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp index d6e0a97a94..c1d7262d85 100644 --- a/src/gui/kernel/qwidget_s60.cpp +++ b/src/gui/kernel/qwidget_s60.cpp @@ -405,6 +405,9 @@ void QWidgetPrivate::create_sys(WId window, bool /* initializeWindow */, bool de int x, y, w, h; data.crect.getRect(&x, &y, &w, &h); control->SetRect(TRect(TPoint(x, y), TSize(w, h))); + + if (q->isVisible() && q->testAttribute(Qt::WA_Mapped)) + activateSymbianWindow(); } if (destroyw) { @@ -436,10 +439,9 @@ void QWidgetPrivate::show_sys() if (q->internalWinId()) { WId id = q->internalWinId(); - if (!extra->activated) { - QT_TRAP_THROWING(id->ActivateL()); - extra->activated = 1; - } + if (!extra->activated) + activateSymbianWindow(); + id->MakeVisible(true); if(q->isWindow()) @@ -455,6 +457,19 @@ void QWidgetPrivate::show_sys() invalidateBuffer(q->rect()); } +void QWidgetPrivate::activateSymbianWindow() +{ + Q_Q(QWidget); + + Q_ASSERT(q->testAttribute(Qt::WA_WState_Created)); + Q_ASSERT(q->testAttribute(Qt::WA_Mapped)); + Q_ASSERT(!extra->activated); + + WId id = q->internalWinId(); + QT_TRAP_THROWING(id->ActivateL()); + extra->activated = 1; +} + void QWidgetPrivate::hide_sys() { Q_Q(QWidget); |