summaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
authoraavit <qt-info@nokia.com>2011-11-02 08:25:56 (GMT)
committeraavit <qt-info@nokia.com>2011-11-02 08:25:56 (GMT)
commit582dec4b753b84cc69eb140290ceff346bce76b9 (patch)
tree5655a148070fd4aa1fb4728b404d31f72f9e02be /src/gui
parent257824bc7b2416e0b66d98423e25525da9141d1f (diff)
parent621431fe5128c6d61095dc6cf92d8b34c4c4284b (diff)
downloadQt-582dec4b753b84cc69eb140290ceff346bce76b9.zip
Qt-582dec4b753b84cc69eb140290ceff346bce76b9.tar.gz
Qt-582dec4b753b84cc69eb140290ceff346bce76b9.tar.bz2
Merge remote-tracking branch 'qt-mainline/4.8'
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/dialogs/dialogs.pri6
-rw-r--r--src/gui/inputmethod/qcoefepinputcontext_p.h1
-rw-r--r--src/gui/inputmethod/qcoefepinputcontext_s60.cpp37
-rw-r--r--src/gui/kernel/qapplication.cpp28
-rw-r--r--src/gui/kernel/qapplication.h4
-rw-r--r--src/gui/kernel/qapplication_p.h3
-rw-r--r--src/gui/kernel/qapplication_s60.cpp180
-rw-r--r--src/gui/kernel/qt_s60_p.h19
-rw-r--r--src/gui/kernel/qwidget_s60.cpp6
-rw-r--r--src/gui/painting/qgraphicssystemex_symbian.cpp6
-rw-r--r--src/gui/painting/qpainter.cpp22
-rw-r--r--src/gui/styles/qs60style_p.h4
-rw-r--r--src/gui/styles/qs60style_s60.cpp10
-rw-r--r--src/gui/styles/styles.pri6
-rw-r--r--src/gui/util/util.pri6
-rw-r--r--src/gui/widgets/qlabel.cpp2
16 files changed, 258 insertions, 82 deletions
diff --git a/src/gui/dialogs/dialogs.pri b/src/gui/dialogs/dialogs.pri
index 1dddb44..fc1ea9e 100644
--- a/src/gui/dialogs/dialogs.pri
+++ b/src/gui/dialogs/dialogs.pri
@@ -109,11 +109,7 @@ SOURCES += \
dialogs/qprintpreviewdialog.cpp
symbian:contains(QT_CONFIG, s60) {
- contains(CONFIG, is_using_gnupoc) {
- LIBS += -lcommondialogs
- } else {
- LIBS += -lCommonDialogs
- }
+ LIBS += -lcommondialogs
SOURCES += dialogs/qfiledialog_symbian.cpp \
dialogs/qcolordialog_symbian.cpp
}
diff --git a/src/gui/inputmethod/qcoefepinputcontext_p.h b/src/gui/inputmethod/qcoefepinputcontext_p.h
index ad51b4b..90d47f9 100644
--- a/src/gui/inputmethod/qcoefepinputcontext_p.h
+++ b/src/gui/inputmethod/qcoefepinputcontext_p.h
@@ -205,6 +205,7 @@ private:
QBasicTimer m_tempPreeditStringTimeout;
bool m_hasTempPreeditString;
QString m_cachedPreeditString;
+ int m_cachedCursorAndAnchorPosition;
int m_splitViewResizeBy;
Qt::WindowStates m_splitViewPreviousWindowStates;
diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp
index 8f13c53..ed7411f 100644
--- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp
+++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp
@@ -380,6 +380,7 @@ QCoeFepInputContext::QCoeFepInputContext(QObject *parent)
m_formatRetriever(0),
m_pointerHandler(0),
m_hasTempPreeditString(false),
+ m_cachedCursorAndAnchorPosition(-1),
m_splitViewResizeBy(0),
m_splitViewPreviousWindowStates(Qt::WindowNoState),
m_splitViewPreviousFocusItem(0),
@@ -448,9 +449,18 @@ void QCoeFepInputContext::reset()
}
// Store a copy of preedit text, if prediction is active and input context is reseted.
// This is to ensure that we can replace preedit string after losing focus to FEP manager's
- // internal sub-windows.
- if (m_cachedPreeditString.isEmpty() && !(currentHints & Qt::ImhNoPredictiveText))
+ // internal sub-windows. Additionally, store the cursor position if there is no selected text.
+ // This allows input context to replace preedit strings if they are not at the end of current
+ // text.
+ if (m_cachedPreeditString.isEmpty() && !(currentHints & Qt::ImhNoPredictiveText)) {
m_cachedPreeditString = m_preeditString;
+ if (focusWidget() && !m_cachedPreeditString.isEmpty()) {
+ int cursor = focusWidget()->inputMethodQuery(Qt::ImCursorPosition).toInt();
+ int anchor = focusWidget()->inputMethodQuery(Qt::ImAnchorPosition).toInt();
+ if (cursor == anchor)
+ m_cachedCursorAndAnchorPosition = cursor;
+ }
+ }
commitCurrentString(true);
// QGraphicsScene calls reset() when changing focus item. Unfortunately, the new focus item is
@@ -491,6 +501,7 @@ void QCoeFepInputContext::setFocusWidget(QWidget *w)
void QCoeFepInputContext::widgetDestroyed(QWidget *w)
{
m_cachedPreeditString.clear();
+ m_cachedCursorAndAnchorPosition = -1;
// Make sure that the input capabilities of whatever new widget got focused are queried.
CCoeControl *ctrl = w->effectiveWinId();
@@ -1350,6 +1361,7 @@ void QCoeFepInputContext::StartFepInlineEditL(const TDesC& aInitialInlineText,
return;
m_cachedPreeditString.clear();
+ m_cachedCursorAndAnchorPosition = -1;
commitTemporaryPreeditString();
@@ -1408,8 +1420,16 @@ void QCoeFepInputContext::UpdateFepInlineTextL(const TDesC& aNewInlineText,
QString newPreeditString = qt_TDesC2QString(aNewInlineText);
QInputMethodEvent event(newPreeditString, attributes);
if (!m_cachedPreeditString.isEmpty()) {
- event.setCommitString(QLatin1String(""), -m_cachedPreeditString.length(), m_cachedPreeditString.length());
+ int cursorPos = w->inputMethodQuery(Qt::ImCursorPosition).toInt();
+ // Predicted word is either replaced from the end of the word (normal case),
+ // or from stored location, if the predicted word is either in the beginning of,
+ // or in the middle of already committed word.
+ int diff = cursorPos - m_cachedCursorAndAnchorPosition;
+ int replaceLocation = (diff != m_cachedPreeditString.length()) ? diff : m_cachedPreeditString.length();
+
+ event.setCommitString(QLatin1String(""), -replaceLocation, m_cachedPreeditString.length());
m_cachedPreeditString.clear();
+ m_cachedCursorAndAnchorPosition = -1;
} else if (newPreeditString.isEmpty() && m_preeditString.isEmpty()) {
// In Symbian world this means "erase last character".
event.setCommitString(QLatin1String(""), -1, 1);
@@ -1507,6 +1527,10 @@ void QCoeFepInputContext::SetCursorSelectionForFepL(const TCursorSelection& aCur
int pos = aCursorSelection.iAnchorPos;
int length = aCursorSelection.iCursorPos - pos;
+ if (m_cachedCursorAndAnchorPosition != -1) {
+ pos = m_cachedCursorAndAnchorPosition;
+ length = 0;
+ }
QList<QInputMethodEvent::Attribute> attributes;
attributes << QInputMethodEvent::Attribute(QInputMethodEvent::Selection, pos, length, QVariant());
@@ -1524,6 +1548,13 @@ void QCoeFepInputContext::GetCursorSelectionForFep(TCursorSelection& aCursorSele
int cursor = w->inputMethodQuery(Qt::ImCursorPosition).toInt() + m_preeditString.size();
int anchor = w->inputMethodQuery(Qt::ImAnchorPosition).toInt() + m_preeditString.size();
+
+ // If the position is stored, use that value, so that word replacement from proposed word
+ // lists are added to the correct position.
+ if (m_cachedCursorAndAnchorPosition != -1) {
+ cursor = m_cachedCursorAndAnchorPosition;
+ anchor = m_cachedCursorAndAnchorPosition;
+ }
QString text = w->inputMethodQuery(Qt::ImSurroundingText).value<QString>();
int combinedSize = text.size() + m_preeditString.size();
if (combinedSize < anchor || combinedSize < cursor) {
diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp
index 35a9559..3605472 100644
--- a/src/gui/kernel/qapplication.cpp
+++ b/src/gui/kernel/qapplication.cpp
@@ -3426,7 +3426,35 @@ QString QApplication::sessionKey() const
}
#endif
+/*!
+ \since 4.7.4
+ \fn void QApplication::aboutToReleaseGpuResources()
+
+ This signal is emitted when application is about to release all
+ GPU resources associated to contexts owned by application.
+
+ The signal is particularly useful if your application has allocated
+ GPU resources directly apart from Qt and needs to do some last-second
+ cleanup.
+
+ \warning This signal is only emitted on Symbian.
+
+ \sa aboutToUseGpuResources()
+*/
+/*!
+ \since 4.7.4
+ \fn void QApplication::aboutToUseGpuResources()
+
+ This signal is emitted when application is about to use GPU resources.
+
+ The signal is particularly useful if your application needs to know
+ when GPU resources are be available.
+
+ \warning This signal is only emitted on Symbian.
+
+ \sa aboutToFreeGpuResources()
+*/
/*!
\since 4.2
diff --git a/src/gui/kernel/qapplication.h b/src/gui/kernel/qapplication.h
index 1548849..3334056 100644
--- a/src/gui/kernel/qapplication.h
+++ b/src/gui/kernel/qapplication.h
@@ -305,6 +305,10 @@ Q_SIGNALS:
void commitDataRequest(QSessionManager &sessionManager);
void saveStateRequest(QSessionManager &sessionManager);
#endif
+#ifdef Q_OS_SYMBIAN
+ void aboutToReleaseGpuResources();
+ void aboutToUseGpuResources();
+#endif
public:
QString styleSheet() const;
diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h
index 0756d6c..c4cb19c 100644
--- a/src/gui/kernel/qapplication_p.h
+++ b/src/gui/kernel/qapplication_p.h
@@ -564,6 +564,9 @@ public:
void symbianHandleLiteModeStartup();
void _q_aboutToQuit();
+
+ void emitAboutToReleaseGpuResources();
+ void emitAboutToUseGpuResources();
#endif
#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_MAC) || defined(Q_WS_QPA)
void sendSyntheticEnterLeave(QWidget *widget);
diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp
index 7d198ce..46b16cb 100644
--- a/src/gui/kernel/qapplication_s60.cpp
+++ b/src/gui/kernel/qapplication_s60.cpp
@@ -92,6 +92,10 @@
#include <graphics/wstfxconst.h>
#endif
+#ifdef COE_GROUPED_POINTER_EVENT_VERSION
+#include <coeeventdata.h>
+#endif
+
QT_BEGIN_NAMESPACE
// Goom Events through Window Server
@@ -235,6 +239,9 @@ void QS60Data::controlVisibilityChanged(CCoeControl *control, bool visible)
if (QTLWExtra *topData = qt_widget_private(window)->maybeTopData()) {
QWidgetBackingStoreTracker &backingStore = topData->backingStore;
if (visible) {
+ QApplicationPrivate *d = QApplicationPrivate::instance();
+ d->emitAboutToUseGpuResources();
+
if (backingStore.data()) {
backingStore.registerWidget(widget);
} else {
@@ -244,6 +251,9 @@ void QS60Data::controlVisibilityChanged(CCoeControl *control, bool visible)
widget->repaint();
}
} else {
+ QApplicationPrivate *d = QApplicationPrivate::instance();
+ d->emitAboutToReleaseGpuResources();
+
// In certain special scenarios we may get an ENotVisible event
// without a previous EPartiallyVisible. The backingstore must
// still be destroyed, hence the registerWidget() call below.
@@ -584,7 +594,11 @@ QSymbianControl::~QSymbianControl()
{
// Ensure backing store is deleted before the top-level
// window is destroyed
- qt_widget_private(qwidget)->topData()->backingStore.destroy();
+ 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;
@@ -667,71 +681,121 @@ void QSymbianControl::HandleLongTapEventL( const TPoint& aPenEventLocation, cons
}
#ifdef QT_SYMBIAN_SUPPORTS_ADVANCED_POINTER
+#ifdef COE_GROUPED_POINTER_EVENT_VERSION
+void QSymbianControl::translateMultiEventPointerEvent(const CCoeEventData &eventData )
+{
+ TUint count = eventData.Count();
+ QVector<TouchEventParams> touches;
+ touches.reserve(count);
+ for (int i = 0; i < count; i++) {
+ const TPointerEvent *pointerEvent = eventData.Pointer(i);
+ const TAdvancedPointerEvent *advEvent = pointerEvent->AdvancedPointerEvent();
+ if (advEvent)
+ touches.push_back(TouchEventFromAdvancedPointerEvent(advEvent));
+ }
+ if (touches.size())
+ processTouchEvents(touches);
+}
+#endif
+
void QSymbianControl::translateAdvancedPointerEvent(const TAdvancedPointerEvent *event)
{
+ processTouchEvents(QVector<TouchEventParams>(1, TouchEventFromAdvancedPointerEvent(event)));
+}
+
+QSymbianControl::TouchEventParams QSymbianControl::TouchEventFromAdvancedPointerEvent(const TAdvancedPointerEvent *event)
+{
QApplicationPrivate *d = QApplicationPrivate::instance();
QPointF screenPos = qwidget->mapToGlobal(translatePointForFixedNativeOrientation(event->iPosition));
qreal pressure;
- if(d->pressureSupported
+ if (d->pressureSupported
&& event->Pressure() > 0) //workaround for misconfigured HAL
pressure = event->Pressure() / qreal(d->maxTouchPressure);
else
pressure = qreal(1.0);
- processTouchEvent(event->PointerNumber(), event->iType, screenPos, pressure);
+ return TouchEventParams(event->PointerNumber(), event->iType, screenPos, pressure);
}
#endif
-void QSymbianControl::processTouchEvent(int pointerNumber, TPointerEvent::TType type, QPointF screenPos, qreal pressure)
+QSymbianControl::TouchEventParams::TouchEventParams()
+{}
+
+QSymbianControl::TouchEventParams::TouchEventParams(int pointerNumber, TPointerEvent::TType type, QPointF screenPos, qreal pressure)
+ : pointerNumber(pointerNumber),
+ type(type),
+ screenPos(screenPos),
+ pressure(pressure)
+{}
+
+void QSymbianControl::processTouchEvents(const QVector<TouchEventParams> &touches)
{
QRect screenGeometry = qApp->desktop()->screenGeometry(qwidget);
QApplicationPrivate *d = QApplicationPrivate::instance();
+ // get the maximum pointer number
+ int numUpdates = touches.size();
+ int maxPointerNumber = 0;
+ for (int i = 0; i < numUpdates; ++i) {
+ const TouchEventParams &touch = touches[i];
+ maxPointerNumber = qMax(maxPointerNumber, touch.pointerNumber);
+ }
+
+ // ensure there are sufficient touch events in the list,
+ // touch events will be indexed by pointerNumber
QList<QTouchEvent::TouchPoint> points = d->appAllTouchPoints;
- while (points.count() <= pointerNumber)
+ while (points.count() <= maxPointerNumber)
points.append(QTouchEvent::TouchPoint(points.count()));
- Qt::TouchPointStates allStates = 0;
+ // first set all active touch points to stationary
for (int i = 0; i < points.count(); ++i) {
QTouchEvent::TouchPoint &touchPoint = points[i];
+ if (touchPoint.state() != Qt::TouchPointReleased) {
+ touchPoint.setState(Qt::TouchPointStationary);
+ }
+ }
- if (touchPoint.id() == pointerNumber) {
- Qt::TouchPointStates state;
- switch (type) {
- case TPointerEvent::EButton1Down:
+ // Add all info about moving or state changed touch points
+ for (int i = 0; i < numUpdates; ++i) {
+ const TouchEventParams &touch = touches[i];
+ QTouchEvent::TouchPoint &touchPoint = points[touch.pointerNumber];
+ Qt::TouchPointStates state;
+ switch (touch.type) {
+ case TPointerEvent::EButton1Down:
#ifdef QT_SYMBIAN_SUPPORTS_ADVANCED_POINTER
- case TPointerEvent::EEnterHighPressure:
+ case TPointerEvent::EEnterHighPressure:
#endif
- state = Qt::TouchPointPressed;
- break;
- case TPointerEvent::EButton1Up:
+ state = Qt::TouchPointPressed;
+ break;
+ case TPointerEvent::EButton1Up:
#ifdef QT_SYMBIAN_SUPPORTS_ADVANCED_POINTER
- case TPointerEvent::EExitCloseProximity:
-#endif
- state = Qt::TouchPointReleased;
- break;
- case TPointerEvent::EDrag:
- state = Qt::TouchPointMoved;
- break;
- default:
- // how likely is this to happen?
- state = Qt::TouchPointStationary;
- break;
- }
- if (pointerNumber == 0)
- state |= Qt::TouchPointPrimary;
- touchPoint.setState(state);
+ case TPointerEvent::EExitCloseProximity:
+#endif
+ state = Qt::TouchPointReleased;
+ break;
+ case TPointerEvent::EDrag:
+ state = Qt::TouchPointMoved;
+ break;
+ default:
+ // how likely is this to happen?
+ state = Qt::TouchPointStationary;
+ break;
+ }
+ if (touch.pointerNumber == 0)
+ state |= Qt::TouchPointPrimary;
+ touchPoint.setState(state);
- touchPoint.setScreenPos(screenPos);
- touchPoint.setNormalizedPos(QPointF(screenPos.x() / screenGeometry.width(),
- screenPos.y() / screenGeometry.height()));
+ touchPoint.setScreenPos(touch.screenPos);
+ touchPoint.setNormalizedPos(QPointF(touch.screenPos.x() / screenGeometry.width(),
+ touch.screenPos.y() / screenGeometry.height()));
- touchPoint.setPressure(pressure);
- } else if (touchPoint.state() != Qt::TouchPointReleased) {
- // all other active touch points should be marked as stationary
- touchPoint.setState(Qt::TouchPointStationary);
- }
+ touchPoint.setPressure(touch.pressure);
+ }
+ // check the resulting state of all touch points
+ Qt::TouchPointStates allStates = 0;
+ for (int i = 0; i < points.count(); ++i) {
+ QTouchEvent::TouchPoint &touchPoint = points[i];
allStates |= touchPoint.state();
}
@@ -750,6 +814,28 @@ void QSymbianControl::processTouchEvent(int pointerNumber, TPointerEvent::TType
void QSymbianControl::HandlePointerEventL(const TPointerEvent& pEvent)
{
#ifdef QT_SYMBIAN_SUPPORTS_ADVANCED_POINTER
+#ifdef COE_GROUPED_POINTER_EVENT_VERSION
+ if (pEvent.iType == TPointerEvent::EDataCCoeEventData) {
+ // only advanced pointers can be data type pointer events
+ const TAdvancedPointerEvent *advEvent = pEvent.AdvancedPointerEvent();
+ if (!advEvent)
+ return;
+ const CCoeEventData& eventData = CCoeEventData::EventData(*advEvent);
+ if (eventData.Type() == CWsEventWithData::EPointerEvent) {
+ QT_TRYCATCH_LEAVING(translateMultiEventPointerEvent(eventData));
+ // pointer 0 events and unnumbered events should also be handled as mouse events
+ for (int i=0; i<eventData.Count(); i++) {
+ const TPointerEvent *pointerEvent = eventData.Pointer(i);
+ const TAdvancedPointerEvent *advEvent = pointerEvent->AdvancedPointerEvent();
+ if (!advEvent || advEvent->PointerNumber() == 0) {
+ m_longTapDetector->PointerEventL(*pointerEvent);
+ QT_TRYCATCH_LEAVING(HandlePointerEvent(*pointerEvent));
+ }
+ }
+ return;
+ }
+ }
+#endif
if (pEvent.IsAdvancedPointerEvent()) {
const TAdvancedPointerEvent *advancedPointerEvent = pEvent.AdvancedPointerEvent();
translateAdvancedPointerEvent(advancedPointerEvent);
@@ -823,7 +909,7 @@ void QSymbianControl::HandlePointerEvent(const TPointerEvent& pEvent)
//Generate single touch event for S60 5.0 (has touchscreen, does not have advanced pointers)
#ifndef QT_SYMBIAN_SUPPORTS_ADVANCED_POINTER
if (S60->hasTouchscreen) {
- processTouchEvent(0, pEvent.iType, QPointF(globalPos), 1.0);
+ processTouchEvents(QVector<TouchEventParams>(1, TouchEventParams(0, pEvent.iType, QPointF(globalPos), 1.0)));
}
#endif
@@ -2795,6 +2881,24 @@ void QApplicationPrivate::_q_aboutToQuit()
#endif
}
+void QApplicationPrivate::emitAboutToReleaseGpuResources()
+{
+#ifdef Q_SYMBIAN_SUPPORTS_SURFACES
+ Q_Q(QApplication);
+ QPointer<QApplication> guard(q);
+ emit q->aboutToReleaseGpuResources();
+#endif
+}
+
+void QApplicationPrivate::emitAboutToUseGpuResources()
+{
+#ifdef Q_SYMBIAN_SUPPORTS_SURFACES
+ Q_Q(QApplication);
+ QPointer<QApplication> guard(q);
+ emit q->aboutToUseGpuResources();
+#endif
+}
+
QS60ThreadLocalData::QS60ThreadLocalData()
{
CCoeEnv *env = CCoeEnv::Static();
diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h
index 5ad5b00..5b5d5ce 100644
--- a/src/gui/kernel/qt_s60_p.h
+++ b/src/gui/kernel/qt_s60_p.h
@@ -102,6 +102,10 @@ class QSymbianTypeFaceExtras;
typedef QHash<QString, const QSymbianTypeFaceExtras *> QSymbianTypeFaceExtrasHash;
typedef void (*QThreadLocalReleaseFunc)();
+#ifdef COE_GROUPED_POINTER_EVENT_VERSION
+class CCoeEventData;
+#endif
+
class Q_AUTOTEST_EXPORT QS60ThreadLocalData
{
public:
@@ -308,10 +312,23 @@ private:
const QPoint &globalPos,
Qt::MouseButton button,
Qt::KeyboardModifiers modifiers);
- void processTouchEvent(int pointerNumber, TPointerEvent::TType type, QPointF screenPos, qreal pressure);
+ struct TouchEventParams
+ {
+ TouchEventParams();
+ TouchEventParams(int pointerNumber, TPointerEvent::TType type, QPointF screenPos, qreal pressure);
+ int pointerNumber;
+ TPointerEvent::TType type;
+ QPointF screenPos;
+ qreal pressure;
+ };
+ void processTouchEvents(const QVector<TouchEventParams> &touches);
void HandleLongTapEventL( const TPoint& aPenEventLocation, const TPoint& aPenEventScreenLocation );
#ifdef QT_SYMBIAN_SUPPORTS_ADVANCED_POINTER
+#ifdef COE_GROUPED_POINTER_EVENT_VERSION
+ void translateMultiEventPointerEvent(const CCoeEventData &eventData );
+#endif
void translateAdvancedPointerEvent(const TAdvancedPointerEvent *event);
+ TouchEventParams TouchEventFromAdvancedPointerEvent(const TAdvancedPointerEvent *event);
#endif
bool isSplitViewWidget(QWidget *widget);
bool hasFocusedAndVisibleChild(QWidget *parentWidget);
diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp
index 396c306..a37c265 100644
--- a/src/gui/kernel/qwidget_s60.cpp
+++ b/src/gui/kernel/qwidget_s60.cpp
@@ -1040,8 +1040,12 @@ void QWidgetPrivate::registerTouchWindow()
RWindow *rwindow = static_cast<RWindow *>(q->effectiveWinId()->DrawableWindow());
QSymbianControl *window = static_cast<QSymbianControl *>(q->effectiveWinId());
//Enabling advanced pointer events for controls that already have active windows causes a panic.
- if (!window->isControlActive())
+ if (!window->isControlActive()) {
rwindow->EnableAdvancedPointers();
+#ifdef COE_GROUPED_POINTER_EVENT_VERSION
+ qt_symbian_throwIfError(window->ConfigureEventData(CCoeControl::EEventDataAllowGroupedPointerEvents));
+#endif
+ }
}
#endif
}
diff --git a/src/gui/painting/qgraphicssystemex_symbian.cpp b/src/gui/painting/qgraphicssystemex_symbian.cpp
index 32e040f..5a182ff 100644
--- a/src/gui/painting/qgraphicssystemex_symbian.cpp
+++ b/src/gui/painting/qgraphicssystemex_symbian.cpp
@@ -46,7 +46,7 @@
#include <e32property.h>
-#ifdef Q_SYMBIAN_SUPPORTS_SURFACES
+#if defined(Q_SYMBIAN_SUPPORTS_SURFACES) && !defined (QT_NO_EGL)
#include "private/qegl_p.h"
#endif
@@ -55,7 +55,7 @@ QT_BEGIN_NAMESPACE
static bool bcm2727Initialized = false;
static bool bcm2727 = false;
-#ifdef Q_SYMBIAN_SUPPORTS_SURFACES
+#if defined(Q_SYMBIAN_SUPPORTS_SURFACES) && !defined (QT_NO_EGL)
typedef EGLBoolean (*NOK_resource_profiling)(EGLDisplay, EGLint, EGLint*, EGLint, EGLint*);
#define EGL_PROF_TOTAL_MEMORY_NOK 0x3070
#endif
@@ -69,7 +69,7 @@ bool QSymbianGraphicsSystemEx::hasBCM2727()
if (bcm2727Initialized)
return bcm2727;
-#ifdef Q_SYMBIAN_SUPPORTS_SURFACES
+#if defined(Q_SYMBIAN_SUPPORTS_SURFACES) && !defined (QT_NO_EGL)
EGLDisplay display = QEgl::display();
#if 1
// Hacky but fast ~0ms.
diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp
index fb5ce96..72357a6 100644
--- a/src/gui/painting/qpainter.cpp
+++ b/src/gui/painting/qpainter.cpp
@@ -9509,7 +9509,7 @@ void qt_draw_helper(QPainterPrivate *p, const QPainterPath &path, QPainterPrivat
\oldcode
void *visual = QPaintDevice::x11AppVisual(screen);
\newcode
- void *visual = qApp->x11Info(screen).visual();
+ void *visual = widget->x11Info().appVisual(screen);
\endcode
\sa QWidget::x11Info(), QPixmap::x11Info()
@@ -9521,7 +9521,7 @@ void qt_draw_helper(QPainterPrivate *p, const QPainterPath &path, QPainterPrivat
\oldcode
unsigned long colormap = QPaintDevice::x11AppColormap(screen);
\newcode
- unsigned long colormap = qApp->x11Info(screen).colormap();
+ unsigned long colormap = widget->x11Info().appColormap(screen);
\endcode
\sa QWidget::x11Info(), QPixmap::x11Info()
@@ -9533,7 +9533,7 @@ void qt_draw_helper(QPainterPrivate *p, const QPainterPath &path, QPainterPrivat
\oldcode
Display *display = QPaintDevice::x11AppDisplay();
\newcode
- Display *display = qApp->x11Info().display();
+ Display *display = widget->x11Info().display();
\endcode
\sa QWidget::x11Info(), QPixmap::x11Info()
@@ -9545,7 +9545,7 @@ void qt_draw_helper(QPainterPrivate *p, const QPainterPath &path, QPainterPrivat
\oldcode
int screen = QPaintDevice::x11AppScreen();
\newcode
- int screen = qApp->x11Info().screen();
+ int screen = widget->x11Info().appScreen();
\endcode
\sa QWidget::x11Info(), QPixmap::x11Info()
@@ -9557,7 +9557,7 @@ void qt_draw_helper(QPainterPrivate *p, const QPainterPath &path, QPainterPrivat
\oldcode
int depth = QPaintDevice::x11AppDepth(screen);
\newcode
- int depth = qApp->x11Info(screen).depth();
+ int depth = widget->x11Info().appDepth(screen);
\endcode
\sa QWidget::x11Info(), QPixmap::x11Info()
@@ -9569,7 +9569,7 @@ void qt_draw_helper(QPainterPrivate *p, const QPainterPath &path, QPainterPrivat
\oldcode
int cells = QPaintDevice::x11AppCells(screen);
\newcode
- int cells = qApp->x11Info(screen).cells();
+ int cells = widget->x11Info().appCells(screen);
\endcode
\sa QWidget::x11Info(), QPixmap::x11Info()
@@ -9581,7 +9581,7 @@ void qt_draw_helper(QPainterPrivate *p, const QPainterPath &path, QPainterPrivat
\oldcode
unsigned long window = QPaintDevice::x11AppRootWindow(screen);
\newcode
- unsigned long window = qApp->x11Info(screen).appRootWindow();
+ unsigned long window = widget->x11Info().appRootWindow(screen);
\endcode
\sa QWidget::x11Info(), QPixmap::x11Info()
@@ -9593,7 +9593,7 @@ void qt_draw_helper(QPainterPrivate *p, const QPainterPath &path, QPainterPrivat
\oldcode
bool isDefault = QPaintDevice::x11AppDefaultColormap(screen);
\newcode
- bool isDefault = qApp->x11Info(screen).defaultColormap();
+ bool isDefault = widget->x11Info().appDefaultColormap(screen);
\endcode
\sa QWidget::x11Info(), QPixmap::x11Info()
@@ -9605,7 +9605,7 @@ void qt_draw_helper(QPainterPrivate *p, const QPainterPath &path, QPainterPrivat
\oldcode
bool isDefault = QPaintDevice::x11AppDefaultVisual(screen);
\newcode
- bool isDefault = qApp->x11Info(screen).defaultVisual();
+ bool isDefault = widget->x11Info().appDefaultVisual(screen);
\endcode
\sa QWidget::x11Info(), QPixmap::x11Info()
@@ -9625,7 +9625,7 @@ void qt_draw_helper(QPainterPrivate *p, const QPainterPath &path, QPainterPrivat
\oldcode
bool isDefault = QPaintDevice::x11AppDpiX(screen);
\newcode
- bool isDefault = qApp->x11Info(screen).appDpiX();
+ bool isDefault = widget->x11Info().appDpiX(screen);
\endcode
\sa QWidget::x11Info(), QPixmap::x11Info()
@@ -9637,7 +9637,7 @@ void qt_draw_helper(QPainterPrivate *p, const QPainterPath &path, QPainterPrivat
\oldcode
bool isDefault = QPaintDevice::x11AppDpiY(screen);
\newcode
- bool isDefault = qApp->x11Info(screen).appDpiY();
+ bool isDefault = widget->x11Info().appDpiY(screen);
\endcode
\sa QWidget::x11Info(), QPixmap::x11Info()
diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h
index 2fa8c7f..ad55761 100644
--- a/src/gui/styles/qs60style_p.h
+++ b/src/gui/styles/qs60style_p.h
@@ -473,8 +473,8 @@ public:
private: //data members
//TODO: consider changing these to non-pointers as the classes are rather small anyway
- AnimationData *m_defaultData;
- AnimationDataV2 *m_currentData;
+ QScopedPointer<AnimationData> m_defaultData;
+ QScopedPointer<AnimationDataV2> m_currentData;
};
#endif //Q_WS_S60
diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp
index cfb10fa..eb59115 100644
--- a/src/gui/styles/qs60style_s60.cpp
+++ b/src/gui/styles/qs60style_s60.cpp
@@ -132,14 +132,12 @@ AnimationDataV2::~AnimationDataV2()
QS60StyleAnimation::QS60StyleAnimation(const QS60StyleEnums::SkinParts part, int frames, int interval)
{
- QT_TRAP_THROWING(m_defaultData = new (ELeave) AnimationData(part, frames, interval));
- QT_TRAP_THROWING(m_currentData = new (ELeave) AnimationDataV2(*m_defaultData));
+ m_defaultData.reset(new AnimationData(part, frames, interval));
+ m_currentData.reset(new AnimationDataV2(*m_defaultData));
}
QS60StyleAnimation::~QS60StyleAnimation()
{
- delete m_currentData;
- delete m_defaultData;
}
void QS60StyleAnimation::setAnimationObject(CAknBitmapAnimation* animation)
@@ -152,9 +150,7 @@ void QS60StyleAnimation::setAnimationObject(CAknBitmapAnimation* animation)
void QS60StyleAnimation::resetToDefaults()
{
- delete m_currentData;
- m_currentData = 0;
- QT_TRAP_THROWING(m_currentData = new (ELeave) AnimationDataV2(*m_defaultData));
+ m_currentData.reset(new AnimationDataV2(*m_defaultData));
}
class QS60StyleModeSpecifics
diff --git a/src/gui/styles/styles.pri b/src/gui/styles/styles.pri
index b6eeec9..45ed8eb 100644
--- a/src/gui/styles/styles.pri
+++ b/src/gui/styles/styles.pri
@@ -172,11 +172,7 @@ contains( styles, s60 ):contains(QT_CONFIG, s60) {
symbian {
SOURCES += styles/qs60style_s60.cpp
LIBS += -legul -lbmpanim
- contains(CONFIG, is_using_gnupoc) {
- LIBS += -laknicon -laknskins -laknskinsrv -lfontutils
- } else {
- LIBS += -lAknIcon -lAKNSKINS -lAKNSKINSRV -lFontUtils
- }
+ LIBS += -laknicon -laknskins -laknskinsrv -lfontutils
} else {
SOURCES += styles/qs60style_simulated.cpp
RESOURCES += styles/qstyle_s60_simulated.qrc
diff --git a/src/gui/util/util.pri b/src/gui/util/util.pri
index 7395604..7cf1a55 100644
--- a/src/gui/util/util.pri
+++ b/src/gui/util/util.pri
@@ -57,9 +57,5 @@ symbian {
DEFINES += USE_SCHEMEHANDLER
}
- contains(CONFIG, is_using_gnupoc) {
- LIBS += -ldirectorylocalizer
- } else {
- LIBS += -lDirectoryLocalizer
- }
+ LIBS += -ldirectorylocalizer
}
diff --git a/src/gui/widgets/qlabel.cpp b/src/gui/widgets/qlabel.cpp
index c0be3e1..2b6eeb7 100644
--- a/src/gui/widgets/qlabel.cpp
+++ b/src/gui/widgets/qlabel.cpp
@@ -60,7 +60,7 @@
#endif
#ifdef Q_OS_SYMBIAN
-#include "qt_s60_p.h"
+#include "private/qt_s60_p.h"
#endif
QT_BEGIN_NAMESPACE