summaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
authorQt Continuous Integration System <qt-info@nokia.com>2011-12-20 10:04:27 (GMT)
committerQt Continuous Integration System <qt-info@nokia.com>2011-12-20 10:04:27 (GMT)
commit6fcbbb233cacfcf658f7f9cae5bb7486c713bc04 (patch)
treea67d42a80db0a48d3228613b6d58c6d69965b870 /src/gui
parent8d87a34453fe0f18ebee5a9a0a4edd6f58b896ef (diff)
parentb4c12d184aa673003bdcd1a9ccd0a863774bc1c9 (diff)
downloadQt-6fcbbb233cacfcf658f7f9cae5bb7486c713bc04.zip
Qt-6fcbbb233cacfcf658f7f9cae5bb7486c713bc04.tar.gz
Qt-6fcbbb233cacfcf658f7f9cae5bb7486c713bc04.tar.bz2
Merge branch 'master' of scm.dev.nokia.troll.no:qt/qt-symbian-staging into master-integration
* 'master' of scm.dev.nokia.troll.no:qt/qt-symbian-staging: Fix missing part from commit dae052cb11c0018121f2c4028aed9db17769fd77 Fix m_longTapDetector causing crash. Fix to incorrect ApplicationActivate event in QtOpenGL Symbian - Fix QFile::map with non page aligned offsets
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/kernel/qapplication_s60.cpp57
-rw-r--r--src/gui/kernel/qwidget.cpp1
-rw-r--r--src/gui/kernel/qwidget_p.h1
-rw-r--r--src/gui/kernel/qwidget_s60.cpp18
4 files changed, 47 insertions, 30 deletions
diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp
index 587c0f2..1518d2d 100644
--- a/src/gui/kernel/qapplication_s60.cpp
+++ b/src/gui/kernel/qapplication_s60.cpp
@@ -552,11 +552,13 @@ void QSymbianControl::ConstructL(bool isWindowOwning, bool desktop)
// the control's window
qwidget->d_func()->createExtra();
- SetFocusing(true);
- m_longTapDetector = QLongTapTimer::NewL(this);
- m_doubleClickTimer.invalidate();
+ if (!qwidget->d_func()->isGLGlobalShareWidget) {
+ SetFocusing(true);
+ m_longTapDetector = QLongTapTimer::NewL(this);
+ m_doubleClickTimer.invalidate();
- DrawableWindow()->SetPointerGrab(ETrue);
+ DrawableWindow()->SetPointerGrab(ETrue);
+ }
}
#ifdef Q_SYMBIAN_TRANSITION_EFFECTS
@@ -590,25 +592,27 @@ void QSymbianControl::ConstructL(bool isWindowOwning, bool desktop)
QSymbianControl::~QSymbianControl()
{
- // Ensure backing store is deleted before the top-level
- // window is destroyed
- QT_TRY {
- qt_widget_private(qwidget)->topData()->backingStore.destroy();
- } QT_CATCH(const std::exception&) {
- // ignore exceptions, nothing can be done
- }
-
- if (S60->curWin == this)
- S60->curWin = 0;
- if (!QApplicationPrivate::is_app_closing) {
+ if (!qwidget->d_func()->isGLGlobalShareWidget) { // GLGlobalShareWidget doesn't interact with scene
+ // Ensure backing store is deleted before the top-level
+ // window is destroyed
QT_TRY {
- setFocusSafely(false);
+ qt_widget_private(qwidget)->topData()->backingStore.destroy();
} QT_CATCH(const std::exception&) {
// ignore exceptions, nothing can be done
}
+
+ if (S60->curWin == this)
+ S60->curWin = 0;
+ if (!QApplicationPrivate::is_app_closing) {
+ QT_TRY {
+ setFocusSafely(false);
+ } QT_CATCH(const std::exception&) {
+ // ignore exceptions, nothing can be done
+ }
+ }
+ S60->appUi()->RemoveFromStack(this);
+ delete m_longTapDetector;
}
- S60->appUi()->RemoveFromStack(this);
- delete m_longTapDetector;
}
void QSymbianControl::setWidget(QWidget *w)
@@ -826,7 +830,8 @@ void QSymbianControl::HandlePointerEventL(const TPointerEvent& pEvent)
const TPointerEvent *pointerEvent = eventData.Pointer(i);
const TAdvancedPointerEvent *advEvent = pointerEvent->AdvancedPointerEvent();
if (!advEvent || advEvent->PointerNumber() == 0) {
- m_longTapDetector->PointerEventL(*pointerEvent);
+ if (m_longTapDetector)
+ m_longTapDetector->PointerEventL(*pointerEvent);
QT_TRYCATCH_LEAVING(HandlePointerEvent(*pointerEvent));
}
}
@@ -843,8 +848,8 @@ void QSymbianControl::HandlePointerEventL(const TPointerEvent& pEvent)
}
}
#endif
-
- m_longTapDetector->PointerEventL(pEvent);
+ if (m_longTapDetector)
+ m_longTapDetector->PointerEventL(pEvent);
QT_TRYCATCH_LEAVING(HandlePointerEvent(pEvent));
}
@@ -1535,6 +1540,10 @@ void QSymbianControl::FocusChanged(TDrawNow /* aDrawNow */)
if (m_ignoreFocusChanged || (qwidget->windowType() & Qt::WindowType_Mask) == Qt::Desktop)
return;
+ // just in case
+ if (qwidget->d_func()->isGLGlobalShareWidget)
+ return;
+
#ifdef Q_WS_S60
if (S60->splitViewLastWidget)
return;
@@ -1710,7 +1719,8 @@ void QSymbianControl::HandleResourceChange(int resourceType)
}
void QSymbianControl::CancelLongTapTimer()
{
- m_longTapDetector->Cancel();
+ if (m_longTapDetector)
+ m_longTapDetector->Cancel();
}
TTypeUid::Ptr QSymbianControl::MopSupplyObject(TTypeUid id)
@@ -1723,6 +1733,9 @@ TTypeUid::Ptr QSymbianControl::MopSupplyObject(TTypeUid id)
void QSymbianControl::setFocusSafely(bool focus)
{
+ if (qwidget->d_func()->isGLGlobalShareWidget)
+ return;
+
// The stack hack in here is very unfortunate, but it is the only way to ensure proper
// focus in Symbian. If this is not executed, the control which happens to be on
// the top of the stack may randomly be assigned focus by Symbian, for example
diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp
index 7055c6b..bceda66 100644
--- a/src/gui/kernel/qwidget.cpp
+++ b/src/gui/kernel/qwidget.cpp
@@ -314,6 +314,7 @@ QWidgetPrivate::QWidgetPrivate(int version)
#elif defined(Q_OS_SYMBIAN)
, symbianScreenNumber(0)
, fixNativeOrientationCalled(false)
+ , isGLGlobalShareWidget(0)
#endif
{
if (!qApp) {
diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h
index 9ac9479..94c1d63 100644
--- a/src/gui/kernel/qwidget_p.h
+++ b/src/gui/kernel/qwidget_p.h
@@ -916,6 +916,7 @@ public:
void reparentChildren();
void registerTouchWindow();
QList<WId> widCleanupList;
+ uint isGLGlobalShareWidget : 1;
#endif
};
diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp
index a37c265..fefa781 100644
--- a/src/gui/kernel/qwidget_s60.cpp
+++ b/src/gui/kernel/qwidget_s60.cpp
@@ -393,16 +393,18 @@ void QWidgetPrivate::create_sys(WId window, bool /* initializeWindow */, bool de
stackingFlags = ECoeStackFlagStandard;
}
control->MakeVisible(false);
- QT_TRAP_THROWING(control->ControlEnv()->AppUi()->AddToStackL(control.data(), ECoeStackPriorityDefault, stackingFlags));
- // Avoid keyboard focus to a hidden window.
- control->setFocusSafely(false);
- RDrawableWindow *const drawableWindow = control->DrawableWindow();
- // Request mouse move events.
- drawableWindow->PointerFilter(EPointerFilterEnterExit
- | EPointerFilterMove | EPointerFilterDrag, 0);
- drawableWindow->EnableVisibilityChangeEvents();
+ if (!isGLGlobalShareWidget) {
+ QT_TRAP_THROWING(control->ControlEnv()->AppUi()->AddToStackL(control.data(), ECoeStackPriorityDefault, stackingFlags));
+ // Avoid keyboard focus to a hidden window.
+ control->setFocusSafely(false);
+ RDrawableWindow *const drawableWindow = control->DrawableWindow();
+ // Request mouse move events.
+ drawableWindow->PointerFilter(EPointerFilterEnterExit
+ | EPointerFilterMove | EPointerFilterDrag, 0);
+ drawableWindow->EnableVisibilityChangeEvents();
+ }
}
q->setAttribute(Qt::WA_WState_Created);