From 7fcda24112d690575007ddcb11e097a9c33e0f19 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Thu, 12 May 2011 13:41:11 +0200 Subject: QmlDirParser: Fix typeInfo accessor. Reviewed-by: Kai Koehne --- src/declarative/qml/qdeclarativedirparser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/declarative/qml/qdeclarativedirparser.cpp b/src/declarative/qml/qdeclarativedirparser.cpp index 362b99c..48ff46a 100644 --- a/src/declarative/qml/qdeclarativedirparser.cpp +++ b/src/declarative/qml/qdeclarativedirparser.cpp @@ -240,7 +240,7 @@ QList QDeclarativeDirParser::components() cons } #ifdef QT_CREATOR -QList QDeclarativeDirParser::typeInfos() const +QList QDeclarativeDirParser::typeInfos() const { return _typeInfos; } -- cgit v0.12 From 01a374fe8a6ac0b6e374081c07720e77c61effff Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Mon, 16 May 2011 11:08:38 +1000 Subject: Doc Change-Id: I25f1885ef285fb3bd14c1f499b9f42e38bba5ec6 Task-number: QTBUG-19265 --- src/declarative/qml/qdeclarativeproperty.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/declarative/qml/qdeclarativeproperty.cpp b/src/declarative/qml/qdeclarativeproperty.cpp index 0dd0edb..f058af1 100644 --- a/src/declarative/qml/qdeclarativeproperty.cpp +++ b/src/declarative/qml/qdeclarativeproperty.cpp @@ -183,6 +183,9 @@ QDeclarativeProperty::QDeclarativeProperty(QObject *obj, const QString &name) /*! Creates a QDeclarativeProperty for the property \a name of \a obj using the \l{QDeclarativeContext} {context} \a ctxt. + + Creating a QDeclarativeProperty without a context will render some + properties - like attached properties - inaccessible. */ QDeclarativeProperty::QDeclarativeProperty(QObject *obj, const QString &name, QDeclarativeContext *ctxt) : d(new QDeclarativePropertyPrivate) -- cgit v0.12 From d03065da2999b8539d8c5160b58d56dd94373d6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= Date: Tue, 17 May 2011 12:12:52 +0200 Subject: Fixed crashes in Observer mode related to infinite bounding rects Bug fixed by avoiding uniting or subtracting QPolygonF with potentially infinite coordinates. The LiveSelectionIndicator now uses a QGraphicsRectItem rather than a QGraphicsPolygonItem and displays only the boundaries of selected objects, not including their children. The SubcomponentMaskLayerItem now works with rectangles and uses a QRegion to determine the area around the current context, converting this to a polygon only as a last step. Reviewed-by: Kai Koehne Task-number: QTCREATORBUG-4559 Change-Id: I266f5387fa67017fc50215282a95b4ee6498be6d --- .../editor/liveselectionindicator.cpp | 73 +++++++--------------- .../editor/liveselectionindicator_p.h | 10 +-- .../editor/subcomponentmasklayeritem.cpp | 22 ++++--- 3 files changed, 38 insertions(+), 67 deletions(-) diff --git a/src/plugins/qmltooling/declarativeobserver/editor/liveselectionindicator.cpp b/src/plugins/qmltooling/declarativeobserver/editor/liveselectionindicator.cpp index 96e9dbf..ecd768e 100644 --- a/src/plugins/qmltooling/declarativeobserver/editor/liveselectionindicator.cpp +++ b/src/plugins/qmltooling/declarativeobserver/editor/liveselectionindicator.cpp @@ -44,20 +44,17 @@ #include "../qdeclarativeviewobserver_p_p.h" #include "../qmlobserverconstants_p.h" -#include - -#include +#include #include #include #include -#include - QT_BEGIN_NAMESPACE -LiveSelectionIndicator::LiveSelectionIndicator(QDeclarativeViewObserver *editorView, - QGraphicsObject *layerItem) - : m_layerItem(layerItem), m_view(editorView) +LiveSelectionIndicator::LiveSelectionIndicator(QDeclarativeViewObserver *viewObserver, + QGraphicsObject *layerItem) + : m_layerItem(layerItem) + , m_view(viewObserver) { } @@ -68,24 +65,23 @@ LiveSelectionIndicator::~LiveSelectionIndicator() void LiveSelectionIndicator::show() { - foreach (QGraphicsPolygonItem *item, m_indicatorShapeHash.values()) + foreach (QGraphicsRectItem *item, m_indicatorShapeHash) item->show(); } void LiveSelectionIndicator::hide() { - foreach (QGraphicsPolygonItem *item, m_indicatorShapeHash.values()) + foreach (QGraphicsRectItem *item, m_indicatorShapeHash) item->hide(); } void LiveSelectionIndicator::clear() { if (!m_layerItem.isNull()) { - QHashIterator iter(m_indicatorShapeHash); - while (iter.hasNext()) { - iter.next(); - m_layerItem.data()->scene()->removeItem(iter.value()); - delete iter.value(); + QGraphicsScene *scene = m_layerItem.data()->scene(); + foreach (QGraphicsRectItem *item, m_indicatorShapeHash) { + scene->removeItem(item); + delete item; } } @@ -93,56 +89,29 @@ void LiveSelectionIndicator::clear() } -QPolygonF LiveSelectionIndicator::addBoundingRectToPolygon(QGraphicsItem *item, QPolygonF &polygon) -{ - // ### remove this if statement when QTBUG-12172 gets fixed - if (item->boundingRect() != QRectF(0,0,0,0)) { - QPolygonF bounding = item->mapToScene(item->boundingRect()); - if (bounding.isClosed()) //avoid crashes if there is an infinite scale. - polygon = polygon.united(bounding); - } - - foreach (QGraphicsItem *child, item->childItems()) { - if (!QDeclarativeViewObserverPrivate::get(m_view)->isEditorItem(child)) - addBoundingRectToPolygon(child, polygon); - } - return polygon; -} - void LiveSelectionIndicator::setItems(const QList > &itemList) { clear(); - // set selections to also all children if they are not editor items - foreach (const QWeakPointer &object, itemList) { if (object.isNull()) continue; QGraphicsItem *item = object.data(); - QGraphicsPolygonItem *newSelectionIndicatorGraphicsItem - = new QGraphicsPolygonItem(m_layerItem.data()); if (!m_indicatorShapeHash.contains(item)) { - m_indicatorShapeHash.insert(item, newSelectionIndicatorGraphicsItem); - - QPolygonF boundingShapeInSceneSpace; - addBoundingRectToPolygon(item, boundingShapeInSceneSpace); - - QRectF boundingRect - = m_view->adjustToScreenBoundaries(boundingShapeInSceneSpace.boundingRect()); - QPolygonF boundingRectInLayerItemSpace = m_layerItem.data()->mapFromScene(boundingRect); - - QPen pen; - pen.setColor(QColor(108, 141, 221)); - newSelectionIndicatorGraphicsItem->setData(Constants::EditorItemDataKey, - QVariant(true)); - newSelectionIndicatorGraphicsItem->setFlag(QGraphicsItem::ItemIsSelectable, false); - newSelectionIndicatorGraphicsItem->setPolygon(boundingRectInLayerItemSpace); - newSelectionIndicatorGraphicsItem->setPen(pen); + QGraphicsRectItem *selectionIndicator = new QGraphicsRectItem(m_layerItem.data()); + m_indicatorShapeHash.insert(item, selectionIndicator); + + const QRectF boundingRect = m_view->adjustToScreenBoundaries(item->mapRectToScene(item->boundingRect())); + const QRectF boundingRectInLayerItemSpace = m_layerItem.data()->mapRectFromScene(boundingRect); + + selectionIndicator->setData(Constants::EditorItemDataKey, true); + selectionIndicator->setFlag(QGraphicsItem::ItemIsSelectable, false); + selectionIndicator->setRect(boundingRectInLayerItemSpace); + selectionIndicator->setPen(QColor(108, 141, 221)); } } } QT_END_NAMESPACE - diff --git a/src/plugins/qmltooling/declarativeobserver/editor/liveselectionindicator_p.h b/src/plugins/qmltooling/declarativeobserver/editor/liveselectionindicator_p.h index da95955..85deb75 100644 --- a/src/plugins/qmltooling/declarativeobserver/editor/liveselectionindicator_p.h +++ b/src/plugins/qmltooling/declarativeobserver/editor/liveselectionindicator_p.h @@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE class QGraphicsObject; -class QGraphicsPolygonItem; +class QGraphicsRectItem; class QGraphicsItem; class QPolygonF; QT_END_NAMESPACE @@ -63,7 +63,7 @@ class QDeclarativeViewObserver; class LiveSelectionIndicator { public: - LiveSelectionIndicator(QDeclarativeViewObserver* editorView, QGraphicsObject *layerItem); + LiveSelectionIndicator(QDeclarativeViewObserver *viewObserver, QGraphicsObject *layerItem); ~LiveSelectionIndicator(); void show(); @@ -74,13 +74,9 @@ public: void setItems(const QList > &itemList); private: - QPolygonF addBoundingRectToPolygon(QGraphicsItem *item, QPolygonF &polygon); - -private: - QHash m_indicatorShapeHash; + QHash m_indicatorShapeHash; QWeakPointer m_layerItem; QDeclarativeViewObserver *m_view; - }; QT_END_NAMESPACE diff --git a/src/plugins/qmltooling/declarativeobserver/editor/subcomponentmasklayeritem.cpp b/src/plugins/qmltooling/declarativeobserver/editor/subcomponentmasklayeritem.cpp index 15d2a2c..3543160 100644 --- a/src/plugins/qmltooling/declarativeobserver/editor/subcomponentmasklayeritem.cpp +++ b/src/plugins/qmltooling/declarativeobserver/editor/subcomponentmasklayeritem.cpp @@ -86,6 +86,13 @@ static QRectF resizeRect(const QRectF &newRect, const QRectF &oldRect) return result; } +static QPolygonF regionToPolygon(const QRegion ®ion) +{ + QPainterPath path; + foreach (const QRect &rect, region.rects()) + path.addRect(rect); + return path.toFillPolygon(); +} void SubcomponentMaskLayerItem::setCurrentItem(QGraphicsItem *item) { @@ -95,25 +102,24 @@ void SubcomponentMaskLayerItem::setCurrentItem(QGraphicsItem *item) if (!m_currentItem) return; - QPolygonF viewPoly(QRectF(m_observer->declarativeView()->rect())); - viewPoly = m_observer->declarativeView()->mapToScene(viewPoly.toPolygon()); + QRect viewRect = m_observer->declarativeView()->rect(); + viewRect = m_observer->declarativeView()->mapToScene(viewRect).boundingRect().toRect(); QRectF itemRect = item->boundingRect() | item->childrenBoundingRect(); - QPolygonF itemPoly(itemRect); - itemPoly = item->mapToScene(itemPoly); + itemRect = item->mapRectToScene(itemRect); // if updating the same item as before, resize the rectangle only bigger, not smaller. if (prevItem == item && prevItem != 0) { - m_itemPolyRect = resizeRect(itemPoly.boundingRect(), m_itemPolyRect); + m_itemPolyRect = resizeRect(itemRect, m_itemPolyRect); } else { - m_itemPolyRect = itemPoly.boundingRect(); + m_itemPolyRect = itemRect; } QRectF borderRect = m_itemPolyRect; borderRect.adjust(-1, -1, 1, 1); m_borderRect->setRect(borderRect); - itemPoly = viewPoly.subtracted(QPolygonF(m_itemPolyRect)); - setPolygon(itemPoly); + const QRegion externalRegion = QRegion(viewRect).subtracted(m_itemPolyRect.toRect()); + setPolygon(regionToPolygon(externalRegion)); } QGraphicsItem *SubcomponentMaskLayerItem::currentItem() const -- cgit v0.12 From bdd8f188ac352c99ee218318a59089f387a31d60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Lindeijer?= Date: Tue, 17 May 2011 11:23:10 +0200 Subject: Pass QList as const reference when possible Avoids some reference counting. Reviewed-by: Kai Koehne Change-Id: I4de83aa4df6833fa2287ac1854bbb0052d15cee9 --- .../qmltooling/declarativeobserver/qdeclarativeviewobserver.cpp | 9 +++++---- .../qmltooling/declarativeobserver/qdeclarativeviewobserver_p.h | 2 +- .../declarativeobserver/qdeclarativeviewobserver_p_p.h | 7 ++++--- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/plugins/qmltooling/declarativeobserver/qdeclarativeviewobserver.cpp b/src/plugins/qmltooling/declarativeobserver/qdeclarativeviewobserver.cpp index 2286990..d9ff9db 100644 --- a/src/plugins/qmltooling/declarativeobserver/qdeclarativeviewobserver.cpp +++ b/src/plugins/qmltooling/declarativeobserver/qdeclarativeviewobserver.cpp @@ -557,7 +557,7 @@ void QDeclarativeViewObserverPrivate::changeTool(Constants::DesignTool tool, } } -void QDeclarativeViewObserverPrivate::setSelectedItemsForTools(QList items) +void QDeclarativeViewObserverPrivate::setSelectedItemsForTools(const QList &items) { foreach (const QWeakPointer &obj, currentSelection) { if (QGraphicsItem *item = obj.data()) { @@ -582,7 +582,7 @@ void QDeclarativeViewObserverPrivate::setSelectedItemsForTools(QListupdateSelectedItems(); } -void QDeclarativeViewObserverPrivate::setSelectedItems(QList items) +void QDeclarativeViewObserverPrivate::setSelectedItems(const QList &items) { QList > oldList = currentSelection; setSelectedItemsForTools(items); @@ -633,7 +633,8 @@ void QDeclarativeViewObserverPrivate::highlight(QGraphicsObject * item, ContextF highlight(QList() << item, flags); } -void QDeclarativeViewObserverPrivate::highlight(QList items, ContextFlags flags) +void QDeclarativeViewObserverPrivate::highlight(const QList &items, + ContextFlags flags) { if (items.isEmpty()) return; @@ -1064,7 +1065,7 @@ void QDeclarativeViewObserver::sendDesignModeBehavior(bool inDesignMode) data->debugService->sendMessage(message); } -void QDeclarativeViewObserver::sendCurrentObjects(QList objects) +void QDeclarativeViewObserver::sendCurrentObjects(const QList &objects) { QByteArray message; QDataStream ds(&message, QIODevice::WriteOnly); diff --git a/src/plugins/qmltooling/declarativeobserver/qdeclarativeviewobserver_p.h b/src/plugins/qmltooling/declarativeobserver/qdeclarativeviewobserver_p.h index 6e986c2..0ad447c 100644 --- a/src/plugins/qmltooling/declarativeobserver/qdeclarativeviewobserver_p.h +++ b/src/plugins/qmltooling/declarativeobserver/qdeclarativeviewobserver_p.h @@ -78,7 +78,7 @@ public: bool showAppOnTop() const; void sendDesignModeBehavior(bool inDesignMode); - void sendCurrentObjects(QList items); + void sendCurrentObjects(const QList &); void sendAnimationSpeed(qreal slowDownFactor); void sendAnimationPaused(bool paused); void sendCurrentTool(Constants::DesignTool toolId); diff --git a/src/plugins/qmltooling/declarativeobserver/qdeclarativeviewobserver_p_p.h b/src/plugins/qmltooling/declarativeobserver/qdeclarativeviewobserver_p_p.h index 6022555..eba71d4 100644 --- a/src/plugins/qmltooling/declarativeobserver/qdeclarativeviewobserver_p_p.h +++ b/src/plugins/qmltooling/declarativeobserver/qdeclarativeviewobserver_p_p.h @@ -117,15 +117,16 @@ public: QList selectableItems(const QPointF &scenePos) const; QList selectableItems(const QRectF &sceneRect, Qt::ItemSelectionMode selectionMode) const; - void setSelectedItemsForTools(QList items); - void setSelectedItems(QList items); + void setSelectedItemsForTools(const QList &items); + void setSelectedItems(const QList &items); QList selectedItems() const; void changeTool(Constants::DesignTool tool, Constants::ToolFlags flags = Constants::NoToolFlags); void clearHighlight(); - void highlight(QList item, ContextFlags flags = ContextSensitive); + void highlight(const QList &item, + ContextFlags flags = ContextSensitive); void highlight(QGraphicsObject *item, ContextFlags flags = ContextSensitive); bool mouseInsideContextItem() const; -- cgit v0.12 From acea7c9f5ece102f22d264834b6eece21020adf4 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Fri, 20 May 2011 14:25:24 +0200 Subject: QDeclarativeDebug: Fix autotest --- tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp b/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp index d3c7032..9582f09 100644 --- a/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp +++ b/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp @@ -1012,7 +1012,7 @@ void tst_QDeclarativeDebug::setBindingForObject() // set handler // rootObject = findRootObject(); - QCOMPARE(rootObject.children().size(), 4); // Rectangle, Text, MouseArea, QDeclarativeComponentAttached + QCOMPARE(rootObject.children().size(), 5); // Rectangle, Text, MouseArea, Component.onCompleted, NonScriptPropertyElement QDeclarativeDebugObjectReference mouseAreaObject = rootObject.children().at(2); QDeclarativeDebugObjectQuery *q_obj = m_dbg->queryObjectRecursive(mouseAreaObject, this); waitForQuery(q_obj); -- cgit v0.12 From 26b640f62b789f26a4a1e16b602e3b5ced76888b Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Mon, 23 May 2011 13:43:56 +0300 Subject: QS60Style: Remove 3.x specific code from style Remove S60 3.x support from QS60Style. Task-number: QTBUG-18615 Reviewed-by: Miikka Heikkinen --- src/gui/styles/qs60style.cpp | 213 +++++++++++++-------------------- src/gui/styles/qs60style_p.h | 3 - src/gui/styles/qs60style_s60.cpp | 45 +------ src/gui/styles/qs60style_simulated.cpp | 19 --- 4 files changed, 84 insertions(+), 196 deletions(-) diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index d68ef89..1098364 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -91,11 +91,8 @@ static const qreal goldenRatio = 1.618; const layoutHeader QS60StylePrivate::m_layoutHeaders[] = { // *** generated layout data *** -{240,320,1,19,"QVGA Landscape"}, -{320,240,1,19,"QVGA Portrait"}, {360,640,1,19,"NHD Landscape"}, {640,360,1,19,"NHD Portrait"}, -{352,800,1,12,"E90 Landscape"}, {480,640,1,19,"VGA Landscape"} // *** End of generated data *** }; @@ -104,11 +101,8 @@ const int QS60StylePrivate::m_numberOfLayouts = const short QS60StylePrivate::data[][MAX_PIXELMETRICS] = { // *** generated pixel metrics *** -{5,0,-909,0,0,2,0,2,-1,7,12,22,15,15,7,198,-909,-909,-909,20,13,2,0,0,21,7,18,30,3,3,1,-909,-909,0,1,0,0,12,20,15,15,18,18,1,115,18,0,-909,-909,-909,-909,0,0,16,2,-909,0,0,-909,16,-909,-909,-909,-909,32,18,55,24,55,4,4,4,9,13,-909,5,51,11,5,0,3,3,6,8,3,3,-909,2,-909,-909,-909,-909,5,5,3,1,106}, -{5,0,-909,0,0,1,0,2,-1,8,14,22,15,15,7,164,-909,-909,-909,19,15,2,0,0,21,8,27,28,4,4,1,-909,-909,0,7,6,0,13,23,17,17,21,21,7,115,21,0,-909,-909,-909,-909,0,0,15,1,-909,0,0,-909,15,-909,-909,-909,-909,32,21,65,27,65,3,3,5,10,15,-909,5,58,13,5,0,4,4,7,9,4,4,-909,2,-909,-909,-909,-909,6,6,3,1,106}, {7,0,-909,0,0,2,0,5,-1,25,69,46,37,37,9,258,-909,-909,-909,23,19,11,0,0,32,25,72,44,5,5,2,-909,-909,0,7,21,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,25,2,-909,0,0,-909,25,-909,-909,-909,-909,87,27,77,35,77,13,3,6,8,19,-909,7,74,19,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1,135}, {7,0,-909,0,0,2,0,5,-1,25,68,46,37,37,9,258,-909,-909,-909,31,19,13,0,0,32,25,60,52,5,5,2,-909,-909,0,7,32,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,26,2,-909,0,0,-909,26,-909,-909,-909,-909,87,27,96,35,96,12,3,6,8,19,-909,7,74,22,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1,135}, -{7,0,-909,0,0,2,0,2,-1,10,20,27,18,18,9,301,-909,-909,-909,29,18,5,0,0,35,7,32,30,5,5,2,-909,-909,0,2,8,0,16,28,21,21,26,26,2,170,26,0,-909,-909,-909,-909,0,0,21,6,-909,0,0,-909,-909,-909,-909,-909,-909,54,26,265,34,265,5,5,6,3,18,-909,7,72,19,7,0,5,6,8,11,6,5,-909,2,-909,-909,-909,-909,5,5,3,1,106}, {9,0,-909,0,0,2,0,5,-1,34,99,76,51,51,25,352,-909,-909,-909,29,25,7,0,0,43,34,42,76,7,7,2,-909,-909,0,9,14,0,23,39,30,30,37,37,9,391,40,0,-909,-909,-909,-909,0,0,29,2,-909,0,0,-909,29,-909,-909,-909,-909,115,37,96,48,96,19,19,9,1,25,-909,9,101,24,9,0,7,7,7,16,7,7,-909,3,-909,-909,-909,-909,9,9,3,1,184} // *** End of generated data *** }; @@ -532,29 +526,14 @@ void QS60StylePrivate::setCurrentLayout(int index) void QS60StylePrivate::drawPart(QS60StyleEnums::SkinParts skinPart, QPainter *painter, const QRect &rect, SkinElementFlags flags) { - static const bool doCache = -#if defined(Q_WS_S60) - // Freezes on 3.1. Anyways, caching is only really needed on touch UI - !(QSysInfo::s60Version() == QSysInfo::SV_S60_3_1 || QSysInfo::s60Version() == QSysInfo::SV_S60_3_2); -#else - true; -#endif - - const QPixmap skinPartPixMap((doCache ? cachedPart : part)(skinPart, rect.size(), painter, flags)); + const QPixmap skinPartPixMap((cachedPart)(skinPart, rect.size(), painter, flags)); if (!skinPartPixMap.isNull()) painter->drawPixmap(rect.topLeft(), skinPartPixMap); } void QS60StylePrivate::drawFrame(SkinFrameElements frameElement, QPainter *painter, const QRect &rect, SkinElementFlags flags) { - static const bool doCache = -#if defined(Q_WS_S60) - // Freezes on 3.1. Anyways, caching is only really needed on touch UI - !(QSysInfo::s60Version() == QSysInfo::SV_S60_3_1 || QSysInfo::s60Version() == QSysInfo::SV_S60_3_2); -#else - true; -#endif - const QPixmap frameElementPixMap((doCache ? cachedFrame : frame)(frameElement, rect.size(), flags)); + const QPixmap frameElementPixMap((cachedFrame)(frameElement, rect.size(), flags)); if (!frameElementPixMap.isNull()) painter->drawPixmap(rect.topLeft(), frameElementPixMap); } @@ -1040,23 +1019,10 @@ void QS60Style::drawComplexControl(ComplexControl control, const QStyleOptionCom drawPrimitive(PE_FrameFocusRect, optionSlider, painter, widget);*/ //Groove graphics - if (QS60StylePrivate::hasSliderGrooveGraphic()) { - const QS60StylePrivate::SkinElements grooveElement = horizontal ? - QS60StylePrivate::SE_SliderGrooveHorizontal : - QS60StylePrivate::SE_SliderGrooveVertical; - QS60StylePrivate::drawSkinElement(grooveElement, painter, sliderGroove, flags); - } else { - const QPoint sliderGrooveCenter = sliderGroove.center(); - const bool horizontal = optionSlider->orientation == Qt::Horizontal; - painter->save(); - if (widget) - painter->setPen(widget->palette().windowText().color()); - if (horizontal) - painter->drawLine(0, sliderGrooveCenter.y(), sliderGroove.right(), sliderGrooveCenter.y()); - else - painter->drawLine(sliderGrooveCenter.x(), 0, sliderGrooveCenter.x(), sliderGroove.bottom()); - painter->restore(); - } + const QS60StylePrivate::SkinElements grooveElement = horizontal ? + QS60StylePrivate::SE_SliderGrooveHorizontal : + QS60StylePrivate::SE_SliderGrooveVertical; + QS60StylePrivate::drawSkinElement(grooveElement, painter, sliderGroove, flags); //Handle graphics const QRect sliderHandle = subControlRect(control, optionSlider, SC_SliderHandle, widget); @@ -1979,36 +1945,31 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, if (!tbWidget || (widget && qobject_cast(widget->parentWidget()))) break; - // Normally in S60 5.0+ there is no background for toolbar, but in some cases with versatile QToolBar, + // Normally in S60 there is no background for toolbar, but in some cases with versatile QToolBar, // it looks a bit strange. So, lets fillRect with Button. - if (!QS60StylePrivate::isToolBarBackground()) { - QList actions = tbWidget->actions(); - bool justToolButtonsInToolBar = true; - for (int i = 0; i < actions.size(); ++i) { - QWidget *childWidget = tbWidget->widgetForAction(actions.at(i)); - const QToolButton *button = qobject_cast(childWidget); - if (!button){ - justToolButtonsInToolBar = false; - } - } - - // Draw frame background - // for vertical toolbars with text only and - // for toolbars with extension buttons and - // for toolbars with widgets in them. - if (!justToolButtonsInToolBar || - (tbWidget && - (tbWidget->orientation() == Qt::Vertical) && - (tbWidget->toolButtonStyle() == Qt::ToolButtonTextOnly))) { - painter->save(); - if (widget) - painter->setBrush(widget->palette().button()); - painter->setOpacity(0.3); - painter->fillRect(toolBar->rect, painter->brush()); - painter->restore(); - } - } else { - QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_ToolBar, painter, toolBar->rect, flags); + QList actions = tbWidget->actions(); + bool justToolButtonsInToolBar = true; + for (int i = 0; i < actions.size(); ++i) { + QWidget *childWidget = tbWidget->widgetForAction(actions.at(i)); + const QToolButton *button = qobject_cast(childWidget); + if (!button) + justToolButtonsInToolBar = false; + } + + // Draw frame background + // for vertical toolbars with text only and + // for toolbars with extension buttons and + // for toolbars with widgets in them. + if (!justToolButtonsInToolBar + || (tbWidget + && tbWidget->orientation() == Qt::Vertical + && tbWidget->toolButtonStyle() == Qt::ToolButtonTextOnly)) { + painter->save(); + if (widget) + painter->setBrush(widget->palette().button()); + painter->setOpacity(0.3); + painter->fillRect(toolBar->rect, painter->brush()); + painter->restore(); } } break; @@ -2416,52 +2377,46 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti case PE_IndicatorBranch: #if defined(Q_WS_S60) - // 3.1 AVKON UI does not have tree view component, use common style for drawing there - if (QSysInfo::s60Version() == QSysInfo::SV_S60_3_1) { -#else - if (true) { -#endif - QCommonStyle::drawPrimitive(element, option, painter, widget); - } else { - if (const QStyleOptionViewItemV2 *vopt = qstyleoption_cast(option)) { - const bool rightLine = option->state & State_Item; - const bool downLine = option->state & State_Sibling; - const bool upLine = option->state & (State_Open | State_Children | State_Item | State_Sibling); - QS60StylePrivate::SkinElementFlags adjustedFlags = flags; - - QS60StyleEnums::SkinParts skinPart; - bool drawSkinPart = false; - if (rightLine && downLine && upLine) { - skinPart = QS60StyleEnums::SP_QgnIndiHlLineBranch; - drawSkinPart = true; - } else if (rightLine && upLine) { - skinPart = QS60StyleEnums::SP_QgnIndiHlLineEnd; - drawSkinPart = true; - } else if (upLine && downLine) { - skinPart = QS60StyleEnums::SP_QgnIndiHlLineStraight; - drawSkinPart = true; - } - - if (option->direction == Qt::RightToLeft) - adjustedFlags |= QS60StylePrivate::SF_Mirrored_X_Axis; - - if (drawSkinPart) - QS60StylePrivate::drawSkinPart(skinPart, painter, option->rect, adjustedFlags); - - if (option->state & State_Children) { - QS60StyleEnums::SkinParts skinPart = - (option->state & State_Open) ? QS60StyleEnums::SP_QgnIndiHlColSuper : QS60StyleEnums::SP_QgnIndiHlExpSuper; - const QRect selectionRect = subElementRect(SE_ItemViewItemCheckIndicator, vopt, widget); - const int minDimension = qMin(option->rect.width(), option->rect.height()); - const int magicTweak = (option->direction == Qt::RightToLeft) ? -3 : 3; //@todo: magic - //The branch indicator icon in S60 is supposed to be superimposed on top of branch lines. - QRect iconRect(QPoint(option->rect.left() + magicTweak, selectionRect.top() + 1), QSize(minDimension, minDimension)); - if (!QS60StylePrivate::isTouchSupported()) - iconRect.translate(0, -4); //@todo: magic - QS60StylePrivate::drawSkinPart(skinPart, painter, iconRect, adjustedFlags); - } + if (const QStyleOptionViewItemV2 *vopt = qstyleoption_cast(option)) { + const bool rightLine = option->state & State_Item; + const bool downLine = option->state & State_Sibling; + const bool upLine = option->state & (State_Open | State_Children | State_Item | State_Sibling); + QS60StylePrivate::SkinElementFlags adjustedFlags = flags; + + QS60StyleEnums::SkinParts skinPart; + bool drawSkinPart = false; + if (rightLine && downLine && upLine) { + skinPart = QS60StyleEnums::SP_QgnIndiHlLineBranch; + drawSkinPart = true; + } else if (rightLine && upLine) { + skinPart = QS60StyleEnums::SP_QgnIndiHlLineEnd; + drawSkinPart = true; + } else if (upLine && downLine) { + skinPart = QS60StyleEnums::SP_QgnIndiHlLineStraight; + drawSkinPart = true; + } + + if (option->direction == Qt::RightToLeft) + adjustedFlags |= QS60StylePrivate::SF_Mirrored_X_Axis; + + if (drawSkinPart) + QS60StylePrivate::drawSkinPart(skinPart, painter, option->rect, adjustedFlags); + + if (option->state & State_Children) { + QS60StyleEnums::SkinParts skinPart = + (option->state & State_Open) ? QS60StyleEnums::SP_QgnIndiHlColSuper : QS60StyleEnums::SP_QgnIndiHlExpSuper; + const QRect selectionRect = subElementRect(SE_ItemViewItemCheckIndicator, vopt, widget); + const int minDimension = qMin(option->rect.width(), option->rect.height()); + const int magicTweak = (option->direction == Qt::RightToLeft) ? -3 : 3; + //The branch indicator icon in S60 is supposed to be superimposed on top of branch lines. + QRect iconRect(QPoint(option->rect.left() + magicTweak, selectionRect.top() + 1), QSize(minDimension, minDimension)); + iconRect.translate(0, -4); + QS60StylePrivate::drawSkinPart(skinPart, painter, iconRect, adjustedFlags); } } +#else + QCommonStyle::drawPrimitive(element, option, painter, widget); +#endif break; case PE_PanelItemViewRow: // ### Qt 5: remove #ifndef QT_NO_ITEMVIEWS @@ -2483,10 +2438,7 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti case PE_PanelScrollAreaCorner: break; case PE_IndicatorItemViewItemDrop: - if (QS60StylePrivate::isTouchSupported()) - QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_DropArea, painter, option->rect, flags); - else - commonStyleDraws = true; + QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_DropArea, painter, option->rect, flags); break; // todo: items are below with #ifdefs "just in case". in final version, remove all non-required cases case PE_FrameLineEdit: @@ -2662,13 +2614,11 @@ QSize QS60Style::sizeFromContents(ContentsType ct, const QStyleOption *opt, } } sz = QCommonStyle::sizeFromContents( ct, opt, csz, widget); - if (QS60StylePrivate::isTouchSupported()) { - //Make itemview easier to use in touch devices - sz.setHeight(sz.height() + 2 * pixelMetric(PM_FocusFrameVMargin)); - //QCommonStyle does not adjust height with horizontal margin, it only adjusts width - if (ct == CT_MenuItem) - sz.setHeight(sz.height() - 8); //QCommonstyle adds 8 to height that this style handles through PM values - } + //Make itemview easier to use in touch devices + sz.setHeight(sz.height() + 2 * pixelMetric(PM_FocusFrameVMargin)); + //QCommonStyle does not adjust height with horizontal margin, it only adjusts width + if (ct == CT_MenuItem) + sz.setHeight(sz.height() - 8); //QCommonstyle adds 8 to height that this style handles through PM values break; #ifndef QT_NO_COMBOBOX case CT_ComboBox: { @@ -3302,8 +3252,7 @@ void QS60Style::polish(QApplication *application) QCommonStyle::polish(qApp); d->m_originalPalette = application->palette(); d->setThemePalette(application); - if (QS60StylePrivate::isTouchSupported()) - qApp->installEventFilter(this); + qApp->installEventFilter(this); } /*! @@ -3318,8 +3267,7 @@ void QS60Style::unpolish(QApplication *application) const QPalette newPalette = QApplication::style()->standardPalette(); QApplication::setPalette(newPalette); QApplicationPrivate::setSystemPalette(d->m_originalPalette); - if (QS60StylePrivate::isTouchSupported()) - qApp->removeEventFilter(this); + qApp->removeEventFilter(this); } /*! @@ -3330,11 +3278,10 @@ bool QS60Style::event(QEvent *e) #ifdef QT_KEYPAD_NAVIGATION Q_D(QS60Style); const QEvent::Type eventType = e->type(); - if ((eventType == QEvent::FocusIn || - eventType == QEvent::FocusOut || - eventType == QEvent::EnterEditFocus || - eventType == QEvent::LeaveEditFocus) && - QS60StylePrivate::isTouchSupported()) + if (eventType == QEvent::FocusIn + || eventType == QEvent::FocusOut + || eventType == QEvent::EnterEditFocus + || eventType == QEvent::LeaveEditFocus) return false; #endif diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h index ee981c0..1cf069b 100644 --- a/src/gui/styles/qs60style_p.h +++ b/src/gui/styles/qs60style_p.h @@ -516,9 +516,6 @@ public: void setBackgroundTexture(QApplication *application) const; static void deleteBackground(); - static bool isTouchSupported(); - static bool isToolBarBackground(); - static bool hasSliderGrooveGraphic(); static bool isSingleClickUi(); static bool isWidgetPressed(const QWidget *widget); diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index f8a6b96..58d70a4 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -692,21 +692,6 @@ QPixmap QS60StyleModeSpecifics::fromFbsBitmap(CFbsBitmap *icon, CFbsBitmap *mask return pixmap; } -bool QS60StylePrivate::isTouchSupported() -{ - return bool(AknLayoutUtils::PenEnabled()); -} - -bool QS60StylePrivate::isToolBarBackground() -{ - return (QSysInfo::s60Version() == QSysInfo::SV_S60_3_1 || QSysInfo::s60Version() == QSysInfo::SV_S60_3_2); -} - -bool QS60StylePrivate::hasSliderGrooveGraphic() -{ - return QSysInfo::s60Version() != QSysInfo::SV_S60_3_1; -} - bool QS60StylePrivate::isSingleClickUi() { return (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0); @@ -1067,20 +1052,8 @@ void QS60StyleModeSpecifics::frameIdAndCenterId(QS60StylePrivate::SkinFrameEleme switch(frameElement) { case QS60StylePrivate::SF_ToolTip: - if (QSysInfo::s60Version() != QSysInfo::SV_S60_3_1) { - centerId.Set(EAknsMajorGeneric, 0x19c2); - frameId.Set(EAknsMajorSkin, 0x5300); - } else { - centerId.Set(KAknsIIDQsnFrPopupCenter); - frameId.iMinor = centerId.iMinor - 9; - } - break; - case QS60StylePrivate::SF_ToolBar: - if (QSysInfo::s60Version() == QSysInfo::SV_S60_3_1 || - QSysInfo::s60Version() == QSysInfo::SV_S60_3_2) { - centerId.Set(KAknsIIDQsnFrPopupCenterSubmenu); - frameId.Set(KAknsIIDQsnFrPopupSub); - } + centerId.Set(EAknsMajorGeneric, 0x19c2); + frameId.Set(EAknsMajorSkin, 0x5300); break; case QS60StylePrivate::SF_PopupBackground: centerId.Set(KAknsIIDQsnFrPopupCenterSubmenu); @@ -1222,10 +1195,7 @@ void QS60StylePrivate::setActiveLayout() //not found, lets try with either of dimensions if (activeLayoutIndex==-1){ - const QSysInfo::S60Version currentRelease = QSysInfo::s60Version(); const bool landscape = screenHeight < screenWidth; - - activeLayoutIndex = (currentRelease == QSysInfo::SV_S60_3_1 || currentRelease == QSysInfo::SV_S60_3_2) ? 0 : 2; activeLayoutIndex += (!landscape) ? 1 : 0; } @@ -1281,9 +1251,7 @@ bool QS60StyleModeSpecifics::disabledPartGraphic(QS60StyleEnums::SkinParts &part case QS60StyleEnums::SP_QsnFrButtonSideLInactive: case QS60StyleEnums::SP_QsnFrButtonSideRInactive: case QS60StyleEnums::SP_QsnFrButtonCenterInactive: - if (!(QSysInfo::s60Version()==QSysInfo::SV_S60_3_1 || - QSysInfo::s60Version()==QSysInfo::SV_S60_3_2)) - disabledGraphic = true; + disabledGraphic = true; break; default: break; @@ -1299,9 +1267,7 @@ bool QS60StyleModeSpecifics::disabledFrameGraphic(QS60StylePrivate::SkinFrameEle switch(frame){ // inactive button graphics are available from 5.0 onwards case QS60StylePrivate::SF_ButtonInactive: - if (!(QSysInfo::s60Version()==QSysInfo::SV_S60_3_1 || - QSysInfo::s60Version()==QSysInfo::SV_S60_3_2)) - disabledGraphic = true; + disabledGraphic = true; break; default: break; @@ -1312,9 +1278,6 @@ bool QS60StyleModeSpecifics::disabledFrameGraphic(QS60StylePrivate::SkinFrameEle QPixmap QS60StyleModeSpecifics::generateMissingThemeGraphic(QS60StyleEnums::SkinParts &part, const QSize &size, QS60StylePrivate::SkinElementFlags flags) { - if (!QS60StylePrivate::isTouchSupported()) - return QPixmap(); - QS60StyleEnums::SkinParts updatedPart = part; switch(part){ // AVKON UI has a abnormal handling for scrollbar graphics. It is possible that the root diff --git a/src/gui/styles/qs60style_simulated.cpp b/src/gui/styles/qs60style_simulated.cpp index ca02cdf..d0789a8 100644 --- a/src/gui/styles/qs60style_simulated.cpp +++ b/src/gui/styles/qs60style_simulated.cpp @@ -318,25 +318,6 @@ QPixmap QS60StylePrivate::backgroundTexture(bool /*skipCreation*/) return *m_background; } -bool QS60StylePrivate::isTouchSupported() -{ -#ifdef QT_KEYPAD_NAVIGATION - return !QApplication::keypadNavigationEnabled(); -#else - return true; -#endif -} - -bool QS60StylePrivate::isToolBarBackground() -{ - return true; -} - -bool QS60StylePrivate::hasSliderGrooveGraphic() -{ - return false; -} - bool QS60StylePrivate::isSingleClickUi() { return false; -- cgit v0.12 From 95570aee41ddb620f3b661e2baddc428ebe35326 Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Mon, 23 May 2011 14:57:20 +0300 Subject: QS60Style: icon is not shown correctly in a menu item in all cases Style was using a pixel metric value for the rect, when it has already earlier calculated a correct size rect to use for an itemview item icon. Use the calculated value, as it is correct in all cases (just icon, icon + checkbox, icon + text, icon + checkbox + text). Task-number: QTBUG-19330 Reviewed-by: Miikka Heikkinen --- src/gui/styles/qs60style.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 1098364..63b45d3 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -1797,7 +1797,7 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, drawPrimitive(PE_IndicatorMenuCheckMark, &optionCheckBox, painter, widget); //draw icon and/or checkState - QPixmap pix = menuItem->icon.pixmap(pixelMetric(PM_SmallIconSize), + QPixmap pix = menuItem->icon.pixmap(iconRect.width(), enabled ? QIcon::Normal : QIcon::Disabled); const bool itemWithIcon = !pix.isNull(); if (itemWithIcon) { -- cgit v0.12 From 3060da958981af8074ac68e47c30c519ff60eec9 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Wed, 25 May 2011 13:18:11 +0300 Subject: Document the Symbian main window size issue at application start. In Symbian, application main window will report incorrect size at show event handler because softkeys and status pane are constructed after the show is called. The right place to get the main window size is the the resize event handler. Task-number: QTBUG-19012 Reviewed-by: Laszlo Agocs --- doc/src/windows-and-dialogs/mainwindow.qdoc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/doc/src/windows-and-dialogs/mainwindow.qdoc b/doc/src/windows-and-dialogs/mainwindow.qdoc index f2b29c9..e1a5e82 100644 --- a/doc/src/windows-and-dialogs/mainwindow.qdoc +++ b/doc/src/windows-and-dialogs/mainwindow.qdoc @@ -145,6 +145,17 @@ depends on the result of QWidget::frameGeometry() and the capability of the window manager to do proper window placement, neither of which can be guaranteed. + + \section2 Symbian Peculiarities + + On Symbian, the status pane and softkeys are not created until + after QWidget::show() is called for the main window of the application. + This means that at the time when the application main window gets the + show event, the application main window width() and height() methods + still return full screen width and height instead of the client area + width and height as expected. The correct place to get the main window + size is the resize event handler of the main window, as the resize event + will be sent each time the client area of the window changes. */ /*! -- cgit v0.12 From 8f3b6f7b294b9ad52e9fdc812f13f1e7b7720e0d Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Fri, 27 May 2011 14:35:32 +0300 Subject: Fix the build break caused by the missing parameter for QSKIP macro. This commit fixes the build break caused by the missing parameter for QSKIP macro, introduced in commit 05d8caa4c42b5539d993a898830307c21cb942b6. Reviewed by: Guoqing Zhang --- tests/auto/qstring/tst_qstring.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/qstring/tst_qstring.cpp b/tests/auto/qstring/tst_qstring.cpp index 11fd986..c19b168 100644 --- a/tests/auto/qstring/tst_qstring.cpp +++ b/tests/auto/qstring/tst_qstring.cpp @@ -4334,7 +4334,7 @@ void tst_QString::localeAwareCompare_data() void tst_QString::localeAwareCompare() { #ifdef Q_OS_SYMBIAN - QSKIP("QTBUG-16921: There is no way to set up the system locale, so this test is not reliable in Symbian."); + QSKIP("QTBUG-16921: There is no way to set up the system locale, so this test is not reliable in Symbian.", SkipSingle); #else #ifdef Q_OS_WIN # ifndef Q_OS_WINCE -- cgit v0.12 From 706fc1c894addd6602470b25aba686491c891a14 Mon Sep 17 00:00:00 2001 From: Honglei Zhang Date: Sun, 29 May 2011 11:19:35 +0300 Subject: Fix bug about daylight saving missing on Symbian platfrom. Daylight saving support for QDateTime is missing from Symbian platform. This is bug fix for QTBUG-6859. This bug was fixed by commit 2a20705. However, this original fix was removed by 01cf310d2 because of different implementation before S60 5.0 platform. This fix is re-applied since Qt is not going to support S60 3.x platform. Task-number: QTBUG-6859 Reviewed-by: Trust Me --- src/corelib/corelib.pro | 1 + src/corelib/tools/qdatetime.cpp | 60 +++++++++++++++++++++------------- tests/auto/qdatetime/qdatetime.pro | 4 +-- tests/auto/qdatetime/tst_qdatetime.cpp | 7 ++++ 4 files changed, 46 insertions(+), 26 deletions(-) diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro index 58d2c7b..9673861 100644 --- a/src/corelib/corelib.pro +++ b/src/corelib/corelib.pro @@ -45,4 +45,5 @@ symbian: { "UNPAGED" \ "$${LITERAL_HASH}endif" MMP_RULES += pagingBlock + LIBS += -ltzclient } diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp index 4303731..a6fee43 100644 --- a/src/corelib/tools/qdatetime.cpp +++ b/src/corelib/tools/qdatetime.cpp @@ -75,6 +75,7 @@ #if defined(Q_OS_SYMBIAN) #include +#include #endif QT_BEGIN_NAMESPACE @@ -4029,23 +4030,32 @@ static QDateTimePrivate::Spec utcToLocal(QDate &date, QTime &time) #elif defined(Q_OS_SYMBIAN) // months and days are zero index based _LIT(KUnixEpoch, "19700000:000000.000000"); - TTimeIntervalSeconds utcOffset = User::UTCOffset(); TTimeIntervalSeconds tTimeIntervalSecsSince1Jan1970UTC(secsSince1Jan1970UTC); TTime epochTTime; TInt err = epochTTime.Set(KUnixEpoch); tm res; if(err == KErrNone) { TTime utcTTime = epochTTime + tTimeIntervalSecsSince1Jan1970UTC; - utcTTime = utcTTime + utcOffset; - TDateTime utcDateTime = utcTTime.DateTime(); - res.tm_sec = utcDateTime.Second(); - res.tm_min = utcDateTime.Minute(); - res.tm_hour = utcDateTime.Hour(); - res.tm_mday = utcDateTime.Day() + 1; // non-zero based index for tm struct - res.tm_mon = utcDateTime.Month(); - res.tm_year = utcDateTime.Year() - 1900; - res.tm_isdst = 0; - brokenDown = &res; + TRAP(err, + RTz tz; + User::LeaveIfError(tz.Connect()); + CleanupClosePushL(tz); + res.tm_isdst = tz.IsDaylightSavingOnL(*tz.GetTimeZoneIdL(),utcTTime); + User::LeaveIfError(tz.ConvertToLocalTime(utcTTime)); + CleanupStack::PopAndDestroy(&tz)); + if (KErrNone == err) { + TDateTime localDateTime = utcTTime.DateTime(); + res.tm_sec = localDateTime.Second(); + res.tm_min = localDateTime.Minute(); + res.tm_hour = localDateTime.Hour(); + res.tm_mday = localDateTime.Day() + 1; // non-zero based index for tm struct + res.tm_mon = localDateTime.Month(); + res.tm_year = localDateTime.Year() - 1900; + // Symbian's timezone server doesn't know how to handle DST before year 1997 + if (res.tm_year < 97) + res.tm_isdst = -1; + brokenDown = &res; + } } #elif !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) // use the reentrant version of localtime() where available @@ -4120,23 +4130,27 @@ static void localToUtc(QDate &date, QTime &time, int isdst) #elif defined(Q_OS_SYMBIAN) // months and days are zero index based _LIT(KUnixEpoch, "19700000:000000.000000"); - TTimeIntervalSeconds utcOffset = TTimeIntervalSeconds(0 - User::UTCOffset().Int()); TTimeIntervalSeconds tTimeIntervalSecsSince1Jan1970UTC(secsSince1Jan1970UTC); TTime epochTTime; TInt err = epochTTime.Set(KUnixEpoch); tm res; if(err == KErrNone) { - TTime utcTTime = epochTTime + tTimeIntervalSecsSince1Jan1970UTC; - utcTTime = utcTTime + utcOffset; - TDateTime utcDateTime = utcTTime.DateTime(); - res.tm_sec = utcDateTime.Second(); - res.tm_min = utcDateTime.Minute(); - res.tm_hour = utcDateTime.Hour(); - res.tm_mday = utcDateTime.Day() + 1; // non-zero based index for tm struct - res.tm_mon = utcDateTime.Month(); - res.tm_year = utcDateTime.Year() - 1900; - res.tm_isdst = (int)isdst; - brokenDown = &res; + TTime localTTime = epochTTime + tTimeIntervalSecsSince1Jan1970UTC; + RTz tz; + if (KErrNone == tz.Connect()) { + if (KErrNone == tz.ConvertToUniversalTime(localTTime)) { + TDateTime utcDateTime = localTTime.DateTime(); + res.tm_sec = utcDateTime.Second(); + res.tm_min = utcDateTime.Minute(); + res.tm_hour = utcDateTime.Hour(); + res.tm_mday = utcDateTime.Day() + 1; // non-zero based index for tm struct + res.tm_mon = utcDateTime.Month(); + res.tm_year = utcDateTime.Year() - 1900; + res.tm_isdst = (int)isdst; + brokenDown = &res; + } + tz.Close(); + } } #elif !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) // use the reentrant version of gmtime() where available diff --git a/tests/auto/qdatetime/qdatetime.pro b/tests/auto/qdatetime/qdatetime.pro index 08a321e..a3f3091 100644 --- a/tests/auto/qdatetime/qdatetime.pro +++ b/tests/auto/qdatetime/qdatetime.pro @@ -1,5 +1,4 @@ load(qttest_p4) - SOURCES += tst_qdatetime.cpp QT = core @@ -10,6 +9,5 @@ win32-msvc|win32-msvc9x { QMAKE_CFLAGS_RELEASE -= -O1 QMAKE_CXXFLAGS_RELEASE -= -O1 } - - CONFIG += parallel_test +HEADERS = tst_qdatetime.loc diff --git a/tests/auto/qdatetime/tst_qdatetime.cpp b/tests/auto/qdatetime/tst_qdatetime.cpp index 95995e8..5462250 100644 --- a/tests/auto/qdatetime/tst_qdatetime.cpp +++ b/tests/auto/qdatetime/tst_qdatetime.cpp @@ -155,9 +155,16 @@ Q_DECLARE_METATYPE(QTime) tst_QDateTime::tst_QDateTime() { +#ifdef Q_OS_SYMBIAN + // Symbian's timezone server cannot handle DST correctly for dates before year 1997 + uint x1 = QDateTime(QDate(2000, 1, 1), QTime()).toTime_t(); + uint x2 = QDateTime(QDate(2000, 6, 1), QTime()).toTime_t(); + europeanTimeZone = (x1 == 946681200 && x2 == 959810400); +#else uint x1 = QDateTime(QDate(1990, 1, 1), QTime()).toTime_t(); uint x2 = QDateTime(QDate(1990, 6, 1), QTime()).toTime_t(); europeanTimeZone = (x1 == 631148400 && x2 == 644191200); +#endif } tst_QDateTime::~tst_QDateTime() -- cgit v0.12 From df4a40c6ecfac9ff7b3c03ffed62be87047db35e Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Tue, 31 May 2011 13:19:17 +0300 Subject: Fix the build break for QStyleSheetStyle autotest on Symbian This commit fixes the build break on Symbian caused by using Motif style which is not supported in Symbian. Reviewed by: Sami Merila --- tests/auto/qstylesheetstyle/tst_qstylesheetstyle.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/auto/qstylesheetstyle/tst_qstylesheetstyle.cpp b/tests/auto/qstylesheetstyle/tst_qstylesheetstyle.cpp index 1799019..a4fc1a9 100644 --- a/tests/auto/qstylesheetstyle/tst_qstylesheetstyle.cpp +++ b/tests/auto/qstylesheetstyle/tst_qstylesheetstyle.cpp @@ -1608,7 +1608,12 @@ class ChangeEventWidget : public QWidget static bool recurse = false; if (!recurse) { recurse = true; + +#ifdef Q_OS_SYMBIAN + QStyle *style = new QWindowsStyle(); +#else QStyle *style = new QMotifStyle; +#endif style->setParent(this); setStyle(style); recurse = false; -- cgit v0.12 From 53f60f45e7db106b9e41184ef83716c362142112 Mon Sep 17 00:00:00 2001 From: Tomi Vihria Date: Tue, 31 May 2011 16:56:50 +0300 Subject: Fixed def files for ARMV5 Reviewed-by: Trust Me --- src/s60installs/eabi/QtGuiu.def | 21 ++++++++++++++++----- src/s60installs/eabi/QtOpenGLu.def | 11 +++++++---- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index 8cd3dd4..ecdec9d 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -12180,7 +12180,7 @@ EXPORTS _ZNK14QVolatileImage7toImageEv @ 12179 NONAME _ZNK14QVolatileImage9byteCountEv @ 12180 NONAME _ZNK14QVolatileImage9constBitsEv @ 12181 NONAME - _ZN15QGraphicsSystem22releaseCachedResourcesEv @ 12182 NONAME + _ZN15QGraphicsSystem22releaseCachedResourcesEv @ 12182 NONAME ABSENT _Z32qt_s60_setPartialScreenInputModeb @ 12183 NONAME _Z18qt_addBitmapToPathffPKhiiiP12QPainterPath @ 12184 NONAME _Z22qt_fontdata_from_indexi @ 12185 NONAME @@ -12288,7 +12288,7 @@ EXPORTS _ZN11QTextEngine27positionAfterVisualMovementEiN11QTextCursor13MoveOperationE @ 12287 NONAME _ZN11QTextEngine9alignLineERK11QScriptLine @ 12288 NONAME _ZN11QTextEngine9endOfLineEi @ 12289 NONAME - _ZN11QTextLayout18setCursorMoveStyleEN11QTextCursor9MoveStyleE @ 12290 NONAME + _ZN11QTextLayout18setCursorMoveStyleEN11QTextCursor9MoveStyleE @ 12290 NONAME ABSENT _ZN11QTextObject18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12291 NONAME _ZN11QTextObject25staticMetaObjectExtraDataE @ 12292 NONAME DATA 8 _ZN11QToolButton18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12293 NONAME @@ -12352,7 +12352,7 @@ EXPORTS _ZN13QSwipeGesture18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12351 NONAME _ZN13QSwipeGesture25staticMetaObjectExtraDataE @ 12352 NONAME DATA 8 _ZN13QTextDocument18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12353 NONAME - _ZN13QTextDocument25setDefaultCursorMoveStyleEN11QTextCursor9MoveStyleE @ 12354 NONAME + _ZN13QTextDocument25setDefaultCursorMoveStyleEN11QTextCursor9MoveStyleE @ 12354 NONAME ABSENT _ZN13QTextDocument25staticMetaObjectExtraDataE @ 12355 NONAME DATA 8 _ZN13QWidgetAction18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12356 NONAME _ZN13QWidgetAction25staticMetaObjectExtraDataE @ 12357 NONAME DATA 8 @@ -12641,7 +12641,7 @@ EXPORTS _ZN9QGroupBox18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12640 NONAME _ZN9QGroupBox25staticMetaObjectExtraDataE @ 12641 NONAME DATA 8 _ZN9QLineEdit18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12642 NONAME - _ZN9QLineEdit18setCursorMoveStyleEN11QTextCursor9MoveStyleE @ 12643 NONAME + _ZN9QLineEdit18setCursorMoveStyleEN11QTextCursor9MoveStyleE @ 12643 NONAME ABSENT _ZN9QLineEdit25staticMetaObjectExtraDataE @ 12644 NONAME DATA 8 _ZN9QListView18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 12645 NONAME _ZN9QListView25staticMetaObjectExtraDataE @ 12646 NONAME DATA 8 @@ -12666,7 +12666,7 @@ EXPORTS _ZNK10QBlittable12capabilitiesEv @ 12665 NONAME _ZNK10QBlittable4sizeEv @ 12666 NONAME _ZNK10QTabWidget14heightForWidthEi @ 12667 NONAME - _ZNK10QTextBlock7isValidEv @ 12668 NONAME + _ZNK10QTextBlock7isValidEv @ 12668 NONAME ABSENT _ZNK10QZipWriter10isWritableEv @ 12669 NONAME _ZNK10QZipWriter17compressionPolicyEv @ 12670 NONAME _ZNK10QZipWriter19creationPermissionsEv @ 12671 NONAME @@ -12738,4 +12738,15 @@ EXPORTS _ZTV19QIdentityProxyModel @ 12737 NONAME _ZTV20QBlittablePixmapData @ 12738 NONAME _Zls6QDebugPK13QSymbianEvent @ 12739 NONAME + _ZN11QTextLayout18setCursorMoveStyleEN2Qt15CursorMoveStyleE @ 12740 NONAME + _ZN13QTextDocument25setDefaultCursorMoveStyleEN2Qt15CursorMoveStyleE @ 12741 NONAME + _ZN15QGraphicsSystem17platformExtensionEv @ 12742 NONAME + _ZN24QSymbianGraphicsSystemEx10hasBCM2727Ev @ 12743 NONAME + _ZN24QSymbianGraphicsSystemEx13forceToRasterEP7QWidget @ 12744 NONAME + _ZN24QSymbianGraphicsSystemEx22releaseAllGpuResourcesEv @ 12745 NONAME + _ZN24QSymbianGraphicsSystemEx25releaseCachedGpuResourcesEv @ 12746 NONAME + _ZN9QLineEdit18setCursorMoveStyleEN2Qt15CursorMoveStyleE @ 12747 NONAME + _ZTI17QGraphicsSystemEx @ 12748 NONAME + _ZTI24QSymbianGraphicsSystemEx @ 12749 NONAME + _ZTV24QSymbianGraphicsSystemEx @ 12750 NONAME diff --git a/src/s60installs/eabi/QtOpenGLu.def b/src/s60installs/eabi/QtOpenGLu.def index c252484..695829c 100644 --- a/src/s60installs/eabi/QtOpenGLu.def +++ b/src/s60installs/eabi/QtOpenGLu.def @@ -719,7 +719,7 @@ EXPORTS _ZN13QGLPixmapData14reclaimTextureEv @ 718 NONAME _ZN13QGLPixmapData21detachTextureFromPoolEv @ 719 NONAME _ZN13QGLPixmapData9hibernateEv @ 720 NONAME - _ZN17QGLGraphicsSystem22releaseCachedResourcesEv @ 721 NONAME + _ZN17QGLGraphicsSystem22releaseCachedResourcesEv @ 721 NONAME ABSENT _ZN13QGLPixmapData11idealFormatER6QImage6QFlagsIN2Qt19ImageConversionFlagEE @ 722 NONAME _ZN13QGLPixmapData24releaseNativeImageHandleEv @ 723 NONAME _ZN13QGLPixmapData25initFromNativeImageHandleEPvRK7QString @ 724 NONAME @@ -763,9 +763,9 @@ EXPORTS _ZTI27QGLContextGroupResourceBase @ 762 NONAME ABSENT _ZTV22QGLContextResourceBase @ 763 NONAME ABSENT _ZTV27QGLContextGroupResourceBase @ 764 NONAME ABSENT - _ZThn104_N20QGLTextureGlyphCacheD0Ev @ 765 NONAME ABSENT - _ZThn104_N20QGLTextureGlyphCacheD1Ev @ 766 NONAME ABSENT - _ZThn8_NK16QGLWindowSurface8featuresEv @ 767 NONAME ABSENT + _ZThn104_N20QGLTextureGlyphCacheD0Ev @ 765 NONAME + _ZThn104_N20QGLTextureGlyphCacheD1Ev @ 766 NONAME + _ZThn8_NK16QGLWindowSurface8featuresEv @ 767 NONAME _ZN14QGLSignalProxy18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 768 NONAME _ZN14QGLSignalProxy25staticMetaObjectExtraDataE @ 769 NONAME DATA 8 _ZN16QGLShaderProgram18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 770 NONAME @@ -780,4 +780,7 @@ EXPORTS _ZN9QGLShader25staticMetaObjectExtraDataE @ 779 NONAME DATA 8 _ZN9QGLWidget18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 780 NONAME _ZN9QGLWidget25staticMetaObjectExtraDataE @ 781 NONAME DATA 8 + _ZN17QGLGraphicsSystem17platformExtensionEv @ 782 NONAME + _ZN17QGLGraphicsSystem25releaseCachedGpuResourcesEv @ 783 NONAME + _ZThn4_N17QGLGraphicsSystem25releaseCachedGpuResourcesEv @ 784 NONAME -- cgit v0.12 From fac834807c1cc4f9fdc412f50a85780e4df8562d Mon Sep 17 00:00:00 2001 From: Tomi Vihria Date: Wed, 1 Jun 2011 08:28:15 +0300 Subject: Fixed def files for WINSCW Reviewed-by: Trust Me --- src/s60installs/bwins/QtGuiu.def | 31 ++++++++++++++++++++++--------- src/s60installs/bwins/QtOpenGLu.def | 4 +++- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index 3c9c16d..7468b85 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -12979,7 +12979,7 @@ EXPORTS ?byteCount@QVolatileImage@@QBEHXZ @ 12978 NONAME ; int QVolatileImage::byteCount(void) const ??0QVolatileImage@@QAE@ABV0@@Z @ 12979 NONAME ; QVolatileImage::QVolatileImage(class QVolatileImage const &) ?depth@QVolatileImage@@QBEHXZ @ 12980 NONAME ; int QVolatileImage::depth(void) const - ?releaseCachedResources@QGraphicsSystem@@UAEXXZ @ 12981 NONAME ; void QGraphicsSystem::releaseCachedResources(void) + ?releaseCachedResources@QGraphicsSystem@@UAEXXZ @ 12981 NONAME ABSENT ; void QGraphicsSystem::releaseCachedResources(void) ?qt_s60_setPartialScreenInputMode@@YAX_N@Z @ 12982 NONAME ; void qt_s60_setPartialScreenInputMode(bool) png_access_version_number @ 12983 NONAME png_benign_error @ 12984 NONAME @@ -13228,7 +13228,7 @@ EXPORTS ?qt_static_metacall@QToolBox@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13227 NONAME ; void QToolBox::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) ?staticMetaObjectExtraData@QSplitter@@0UQMetaObjectExtraData@@B @ 13228 NONAME ; struct QMetaObjectExtraData const QSplitter::staticMetaObjectExtraData ?qt_static_metacall@QGraphicsTextItem@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13229 NONAME ; void QGraphicsTextItem::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) - ?setCursorMoveStyle@QLineControl@@QAEXW4MoveStyle@QTextCursor@@@Z @ 13230 NONAME ; void QLineControl::setCursorMoveStyle(enum QTextCursor::MoveStyle) + ?setCursorMoveStyle@QLineControl@@QAEXW4MoveStyle@QTextCursor@@@Z @ 13230 NONAME ABSENT ; void QLineControl::setCursorMoveStyle(enum QTextCursor::MoveStyle) ?qt_static_metacall@QGraphicsView@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13231 NONAME ; void QGraphicsView::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) ?qt_static_metacall@QGraphicsOpacityEffect@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13232 NONAME ; void QGraphicsOpacityEffect::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) ?staticMetaObjectExtraData@QGraphicsBlurEffect@@0UQMetaObjectExtraData@@B @ 13233 NONAME ; struct QMetaObjectExtraData const QGraphicsBlurEffect::staticMetaObjectExtraData @@ -13260,7 +13260,7 @@ EXPORTS ?qt_static_metacall@QGraphicsScene@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13259 NONAME ; void QGraphicsScene::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) ?staticMetaObjectExtraData@QTextList@@0UQMetaObjectExtraData@@B @ 13260 NONAME ; struct QMetaObjectExtraData const QTextList::staticMetaObjectExtraData ?qt_fontdata_from_index@@YA?AVQByteArray@@H@Z @ 13261 NONAME ; class QByteArray qt_fontdata_from_index(int) - ?defaultCursorMoveStyle@QTextDocument@@QBE?AW4MoveStyle@QTextCursor@@XZ @ 13262 NONAME ; enum QTextCursor::MoveStyle QTextDocument::defaultCursorMoveStyle(void) const + ?defaultCursorMoveStyle@QTextDocument@@QBE?AW4MoveStyle@QTextCursor@@XZ @ 13262 NONAME ABSENT ; enum QTextCursor::MoveStyle QTextDocument::defaultCursorMoveStyle(void) const ?offsetInLigature@QTextEngine@@QAE?AUQFixed@@PBUQScriptItem@@HHH@Z @ 13263 NONAME ; struct QFixed QTextEngine::offsetInLigature(struct QScriptItem const *, int, int, int) ?qt_static_metacall@QGraphicsAnchor@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13264 NONAME ; void QGraphicsAnchor::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) ?swap@QImage@@QAEXAAV1@@Z @ 13265 NONAME ; void QImage::swap(class QImage &) @@ -13333,7 +13333,7 @@ EXPORTS ?staticMetaObjectExtraData@QProxyModel@@0UQMetaObjectExtraData@@B @ 13332 NONAME ; struct QMetaObjectExtraData const QProxyModel::staticMetaObjectExtraData ?staticMetaObjectExtraData@QInputContextPlugin@@0UQMetaObjectExtraData@@B @ 13333 NONAME ; struct QMetaObjectExtraData const QInputContextPlugin::staticMetaObjectExtraData ?metaObject@QIdentityProxyModel@@UBEPBUQMetaObject@@XZ @ 13334 NONAME ; struct QMetaObject const * QIdentityProxyModel::metaObject(void) const - ?cursorMoveStyle@QLineControl@@QBE?AW4MoveStyle@QTextCursor@@XZ @ 13335 NONAME ; enum QTextCursor::MoveStyle QLineControl::cursorMoveStyle(void) const + ?cursorMoveStyle@QLineControl@@QBE?AW4MoveStyle@QTextCursor@@XZ @ 13335 NONAME ABSENT ; enum QTextCursor::MoveStyle QLineControl::cursorMoveStyle(void) const ?removeColumns@QIdentityProxyModel@@UAE_NHHABVQModelIndex@@@Z @ 13336 NONAME ; bool QIdentityProxyModel::removeColumns(int, int, class QModelIndex const &) ?qt_static_metacall@QDirModel@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13337 NONAME ; void QDirModel::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) ?qt_static_metacall@QMdiSubWindow@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13338 NONAME ; void QMdiSubWindow::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) @@ -13571,7 +13571,7 @@ EXPORTS ?d_func@QBlitterPaintEngine@@AAEPAVQBlitterPaintEnginePrivate@@XZ @ 13570 NONAME ; class QBlitterPaintEnginePrivate * QBlitterPaintEngine::d_func(void) ?setNumberPrefix@QTextListFormat@@QAEXABVQString@@@Z @ 13571 NONAME ; void QTextListFormat::setNumberPrefix(class QString const &) ?qt_static_metacall@QAbstractSpinBox@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13572 NONAME ; void QAbstractSpinBox::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) - ?setCursorMoveStyle@QLineEdit@@QAEXW4MoveStyle@QTextCursor@@@Z @ 13573 NONAME ; void QLineEdit::setCursorMoveStyle(enum QTextCursor::MoveStyle) + ?setCursorMoveStyle@QLineEdit@@QAEXW4MoveStyle@QTextCursor@@@Z @ 13573 NONAME ABSENT ; void QLineEdit::setCursorMoveStyle(enum QTextCursor::MoveStyle) ?lineHeight@QTextBlockFormat@@QBEMMM@Z @ 13574 NONAME ; float QTextBlockFormat::lineHeight(float, float) const ??0QIdentityProxyModel@@IAE@AAVQIdentityProxyModelPrivate@@PAVQObject@@@Z @ 13575 NONAME ; QIdentityProxyModel::QIdentityProxyModel(class QIdentityProxyModelPrivate &, class QObject *) ?staticMetaObjectExtraData@QGraphicsEffect@@0UQMetaObjectExtraData@@B @ 13576 NONAME ; struct QMetaObjectExtraData const QGraphicsEffect::staticMetaObjectExtraData @@ -13660,7 +13660,7 @@ EXPORTS ?swap@QIcon@@QAEXAAV1@@Z @ 13659 NONAME ; void QIcon::swap(class QIcon &) ?columnCount@QIdentityProxyModel@@UBEHABVQModelIndex@@@Z @ 13660 NONAME ; int QIdentityProxyModel::columnCount(class QModelIndex const &) const ?unmarkRasterOverlay@QBlittablePixmapData@@QAEXABVQRectF@@@Z @ 13661 NONAME ; void QBlittablePixmapData::unmarkRasterOverlay(class QRectF const &) - ?cursorMoveStyle@QLineEdit@@QBE?AW4MoveStyle@QTextCursor@@XZ @ 13662 NONAME ; enum QTextCursor::MoveStyle QLineEdit::cursorMoveStyle(void) const + ?cursorMoveStyle@QLineEdit@@QBE?AW4MoveStyle@QTextCursor@@XZ @ 13662 NONAME ABSENT ; enum QTextCursor::MoveStyle QLineEdit::cursorMoveStyle(void) const ?trUtf8@QIdentityProxyModel@@SA?AVQString@@PBD0H@Z @ 13663 NONAME ; class QString QIdentityProxyModel::trUtf8(char const *, char const *, int) ?brushOriginChanged@QBlitterPaintEngine@@UAEXXZ @ 13664 NONAME ; void QBlitterPaintEngine::brushOriginChanged(void) ?openFile@QFileOpenEvent@@QBE_NAAVQFile@@V?$QFlags@W4OpenModeFlag@QIODevice@@@@@Z @ 13665 NONAME ; bool QFileOpenEvent::openFile(class QFile &, class QFlags) const @@ -13683,7 +13683,7 @@ EXPORTS ?unlock@QBlittable@@QAEXXZ @ 13682 NONAME ; void QBlittable::unlock(void) ?swap@QRegion@@QAEXAAV1@@Z @ 13683 NONAME ; void QRegion::swap(class QRegion &) ?staticMetaObjectExtraData@QLCDNumber@@0UQMetaObjectExtraData@@B @ 13684 NONAME ; struct QMetaObjectExtraData const QLCDNumber::staticMetaObjectExtraData - ?setDefaultCursorMoveStyle@QTextDocument@@QAEXW4MoveStyle@QTextCursor@@@Z @ 13685 NONAME ; void QTextDocument::setDefaultCursorMoveStyle(enum QTextCursor::MoveStyle) + ?setDefaultCursorMoveStyle@QTextDocument@@QAEXW4MoveStyle@QTextCursor@@@Z @ 13685 NONAME ABSENT ; void QTextDocument::setDefaultCursorMoveStyle(enum QTextCursor::MoveStyle) ?staticMetaObjectExtraData@QS60Style@@0UQMetaObjectExtraData@@B @ 13686 NONAME ; struct QMetaObjectExtraData const QS60Style::staticMetaObjectExtraData ?qt_static_metacall@QWidgetAction@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13687 NONAME ; void QWidgetAction::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) ?qt_static_metacall@QListView@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13688 NONAME ; void QListView::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) @@ -13724,7 +13724,7 @@ EXPORTS ?staticMetaObjectExtraData@QProgressBar@@0UQMetaObjectExtraData@@B @ 13723 NONAME ; struct QMetaObjectExtraData const QProgressBar::staticMetaObjectExtraData ?qt_static_metacall@QLineEdit@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13724 NONAME ; void QLineEdit::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) ?drawStaticTextItem@QBlitterPaintEngine@@UAEXPAVQStaticTextItem@@@Z @ 13725 NONAME ; void QBlitterPaintEngine::drawStaticTextItem(class QStaticTextItem *) - ?setCursorMoveStyle@QTextLayout@@QAEXW4MoveStyle@QTextCursor@@@Z @ 13726 NONAME ; void QTextLayout::setCursorMoveStyle(enum QTextCursor::MoveStyle) + ?setCursorMoveStyle@QTextLayout@@QAEXW4MoveStyle@QTextCursor@@@Z @ 13726 NONAME ABSENT ; void QTextLayout::setCursorMoveStyle(enum QTextCursor::MoveStyle) ?lock@QBlittable@@QAEPAVQImage@@XZ @ 13727 NONAME ; class QImage * QBlittable::lock(void) ?setFontHintingPreference@QTextCharFormat@@QAEXW4HintingPreference@QFont@@@Z @ 13728 NONAME ; void QTextCharFormat::setFontHintingPreference(enum QFont::HintingPreference) ?qt_static_metacall@QPixmapColorizeFilter@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13729 NONAME ; void QPixmapColorizeFilter::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) @@ -13776,7 +13776,7 @@ EXPORTS ?trUtf8@QIdentityProxyModel@@SA?AVQString@@PBD0@Z @ 13775 NONAME ; class QString QIdentityProxyModel::trUtf8(char const *, char const *) ?qt_static_metacall@QRadioButton@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13776 NONAME ; void QRadioButton::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) ??1QInternalMimeData@@UAE@XZ @ 13777 NONAME ; QInternalMimeData::~QInternalMimeData(void) - ?cursorMoveStyle@QTextLayout@@QBE?AW4MoveStyle@QTextCursor@@XZ @ 13778 NONAME ; enum QTextCursor::MoveStyle QTextLayout::cursorMoveStyle(void) const + ?cursorMoveStyle@QTextLayout@@QBE?AW4MoveStyle@QTextCursor@@XZ @ 13778 NONAME ABSENT ; enum QTextCursor::MoveStyle QTextLayout::cursorMoveStyle(void) const ?qt_addBitmapToPath@@YAXMMPBEHHHPAVQPainterPath@@@Z @ 13779 NONAME ; void qt_addBitmapToPath(float, float, unsigned char const *, int, int, int, class QPainterPath *) ?qt_static_metacall@QTextTable@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13780 NONAME ; void QTextTable::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) ?qt_static_metacall@QItemSelectionModel@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13781 NONAME ; void QItemSelectionModel::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) @@ -13786,4 +13786,17 @@ EXPORTS ?qt_static_metacall@QGraphicsWidget@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13785 NONAME ; void QGraphicsWidget::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) ?qt_static_metacall@QShortcut@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 13786 NONAME ; void QShortcut::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) ?endOfLine@QTextEngine@@AAEHH@Z @ 13787 NONAME ; int QTextEngine::endOfLine(int) + ?setCursorMoveStyle@QTextLayout@@QAEXW4CursorMoveStyle@Qt@@@Z @ 13788 NONAME ; void QTextLayout::setCursorMoveStyle(enum Qt::CursorMoveStyle) + ?defaultCursorMoveStyle@QTextDocument@@QBE?AW4CursorMoveStyle@Qt@@XZ @ 13789 NONAME ; enum Qt::CursorMoveStyle QTextDocument::defaultCursorMoveStyle(void) const + ?cursorMoveStyle@QTextLayout@@QBE?AW4CursorMoveStyle@Qt@@XZ @ 13790 NONAME ; enum Qt::CursorMoveStyle QTextLayout::cursorMoveStyle(void) const + ?setDefaultCursorMoveStyle@QTextDocument@@QAEXW4CursorMoveStyle@Qt@@@Z @ 13791 NONAME ; void QTextDocument::setDefaultCursorMoveStyle(enum Qt::CursorMoveStyle) + ?setCursorMoveStyle@QLineControl@@QAEXW4CursorMoveStyle@Qt@@@Z @ 13792 NONAME ; void QLineControl::setCursorMoveStyle(enum Qt::CursorMoveStyle) + ?cursorMoveStyle@QLineEdit@@QBE?AW4CursorMoveStyle@Qt@@XZ @ 13793 NONAME ; enum Qt::CursorMoveStyle QLineEdit::cursorMoveStyle(void) const + ?forceToRaster@QSymbianGraphicsSystemEx@@UAEXPAVQWidget@@@Z @ 13794 NONAME ; void QSymbianGraphicsSystemEx::forceToRaster(class QWidget *) + ?releaseCachedGpuResources@QSymbianGraphicsSystemEx@@UAEXXZ @ 13795 NONAME ; void QSymbianGraphicsSystemEx::releaseCachedGpuResources(void) + ?setCursorMoveStyle@QLineEdit@@QAEXW4CursorMoveStyle@Qt@@@Z @ 13796 NONAME ; void QLineEdit::setCursorMoveStyle(enum Qt::CursorMoveStyle) + ?platformExtension@QGraphicsSystem@@UAEPAVQGraphicsSystemEx@@XZ @ 13797 NONAME ; class QGraphicsSystemEx * QGraphicsSystem::platformExtension(void) + ?releaseAllGpuResources@QSymbianGraphicsSystemEx@@UAEXXZ @ 13798 NONAME ; void QSymbianGraphicsSystemEx::releaseAllGpuResources(void) + ?cursorMoveStyle@QLineControl@@QBE?AW4CursorMoveStyle@Qt@@XZ @ 13799 NONAME ; enum Qt::CursorMoveStyle QLineControl::cursorMoveStyle(void) const + ?hasBCM2727@QSymbianGraphicsSystemEx@@UAE_NXZ @ 13800 NONAME ; bool QSymbianGraphicsSystemEx::hasBCM2727(void) diff --git a/src/s60installs/bwins/QtOpenGLu.def b/src/s60installs/bwins/QtOpenGLu.def index b4dcf4f..745bc9b 100644 --- a/src/s60installs/bwins/QtOpenGLu.def +++ b/src/s60installs/bwins/QtOpenGLu.def @@ -715,7 +715,7 @@ EXPORTS ?detachTextureFromPool@QGLPixmapData@@QAEXXZ @ 714 NONAME ; void QGLPixmapData::detachTextureFromPool(void) ?reclaimTexture@QGLPixmapData@@QAEXXZ @ 715 NONAME ; void QGLPixmapData::reclaimTexture(void) ?destroyTexture@QGLPixmapData@@QAEXXZ @ 716 NONAME ; void QGLPixmapData::destroyTexture(void) - ?releaseCachedResources@QGLGraphicsSystem@@UAEXXZ @ 717 NONAME ; void QGLGraphicsSystem::releaseCachedResources(void) + ?releaseCachedResources@QGLGraphicsSystem@@UAEXXZ @ 717 NONAME ABSENT ; void QGLGraphicsSystem::releaseCachedResources(void) ?serialNumber@QGLTextureGlyphCache@@QBEHXZ @ 718 NONAME ; int QGLTextureGlyphCache::serialNumber(void) const ?forceToImage@QGLPixmapData@@QAEXXZ @ 719 NONAME ; void QGLPixmapData::forceToImage(void) ?idealFormat@QGLPixmapData@@QAE?AW4Format@QImage@@AAV3@V?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 720 NONAME ; enum QImage::Format QGLPixmapData::idealFormat(class QImage &, class QFlags) @@ -874,4 +874,6 @@ EXPORTS ?staticMetaObjectExtraData@QGraphicsShaderEffect@@0UQMetaObjectExtraData@@B @ 873 NONAME ; struct QMetaObjectExtraData const QGraphicsShaderEffect::staticMetaObjectExtraData ?staticMetaObjectExtraData@QGLEngineShaderManager@@0UQMetaObjectExtraData@@B @ 874 NONAME ; struct QMetaObjectExtraData const QGLEngineShaderManager::staticMetaObjectExtraData ?qt_static_metacall@QGLShaderProgram@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z @ 875 NONAME ; void QGLShaderProgram::qt_static_metacall(class QObject *, enum QMetaObject::Call, int, void * *) + ?platformExtension@QGLGraphicsSystem@@UAEPAVQGraphicsSystemEx@@XZ @ 876 NONAME ; class QGraphicsSystemEx * QGLGraphicsSystem::platformExtension(void) + ?releaseCachedGpuResources@QGLGraphicsSystem@@UAEXXZ @ 877 NONAME ; void QGLGraphicsSystem::releaseCachedGpuResources(void) -- cgit v0.12 From 8c3a4568dcbb75c36ea3c22ced4d10d4b3522d9f Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Wed, 1 Jun 2011 10:53:29 +0300 Subject: Fix the build break for QUrl autotest on Symbian This commit fixes the linking problem for QUrl autotest on Symbian Reviewed by: Guoqing Zhang --- tests/auto/qurl/tst_qurl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/auto/qurl/tst_qurl.cpp b/tests/auto/qurl/tst_qurl.cpp index 613053b..c23c633 100644 --- a/tests/auto/qurl/tst_qurl.cpp +++ b/tests/auto/qurl/tst_qurl.cpp @@ -3167,8 +3167,8 @@ void tst_QUrl::nameprep_testsuite_data() #ifdef QT_BUILD_INTERNAL QT_BEGIN_NAMESPACE -extern void qt_nameprep(QString *source, int from); -extern bool qt_check_std3rules(const QChar *, int); +Q_CORE_EXPORT extern void qt_nameprep(QString *source, int from); +Q_CORE_EXPORT extern bool qt_check_std3rules(const QChar *, int); QT_END_NAMESPACE #endif -- cgit v0.12 From e31bcd340a24a8698ee4dc85dd2ccb2bd6ab10e7 Mon Sep 17 00:00:00 2001 From: mread Date: Thu, 26 May 2011 14:11:18 +0100 Subject: Schedule Symbian active objects with a round robin scheduler Each call to QEventDispatcherSymbian::processEvents allows pre-existing active objects with priority >= CActive::EPriorityStandard to run once. Active objects with lower priorities can only run if no higher priority active object has run. Task-number: QTBUG-15019 Reviewed-by: Tom Sutcliffe Reviewed-by: axis --- src/corelib/kernel/qeventdispatcher_symbian.cpp | 205 +++++++++++++++++++----- src/gui/kernel/qeventdispatcher_s60.cpp | 34 +--- 2 files changed, 171 insertions(+), 68 deletions(-) diff --git a/src/corelib/kernel/qeventdispatcher_symbian.cpp b/src/corelib/kernel/qeventdispatcher_symbian.cpp index 1d7ecce..8ce806b 100644 --- a/src/corelib/kernel/qeventdispatcher_symbian.cpp +++ b/src/corelib/kernel/qeventdispatcher_symbian.cpp @@ -59,7 +59,6 @@ QT_BEGIN_NAMESPACE #define WAKE_UP_PRIORITY CActive::EPriorityStandard #define TIMER_PRIORITY CActive::EPriorityHigh -#define NULLTIMER_PRIORITY CActive::EPriorityLow #define COMPLETE_DEFERRED_ACTIVE_OBJECTS_PRIORITY CActive::EPriorityIdle static inline int qt_pipe_write(int socket, const char *data, qint64 len) @@ -124,16 +123,8 @@ private: }; /* - * This class is designed to aid in implementing event handling in a more round robin fashion. We - * cannot change active objects that we do not own, but the active objects that Qt owns will use - * this as a base class with convenience functions. - * - * Here is how it works: On every RunL, the deriving class should call maybeQueueForLater(). - * This will return whether the active object has been queued, or whether it should run immediately. - * Queued objects will run again after other events have been processed. - * - * The QCompleteDeferredAOs class is a special object that runs after all others, which will - * reactivate the objects that were previously not run. + * This class can be used as a base class for Qt active objects, but currently does not offer + * any special functionality. */ QActiveObject::QActiveObject(TInt priority, QEventDispatcherSymbian *dispatcher) : CActive(priority), @@ -146,25 +137,11 @@ QActiveObject::QActiveObject(TInt priority, QEventDispatcherSymbian *dispatcher) QActiveObject::~QActiveObject() { - if (m_hasRunAgain) - m_dispatcher->removeDeferredActiveObject(this); } bool QActiveObject::maybeQueueForLater() { - Q_ASSERT(!m_hasRunAgain); - - if (!m_hasAlreadyRun || m_dispatcher->iterationCount() != m_iterationCount) { - // First occurrence of this event in this iteration. - m_hasAlreadyRun = true; - m_iterationCount = m_dispatcher->iterationCount(); - return false; - } else { - // The event has already occurred. - m_dispatcher->addDeferredActiveObject(this); - m_hasRunAgain = true; - return true; - } + return false; } bool QActiveObject::maybeDeferSocketEvent() @@ -233,7 +210,7 @@ void QWakeUpActiveObject::RunL() } QTimerActiveObject::QTimerActiveObject(QEventDispatcherSymbian *dispatcher, SymbianTimerInfo *timerInfo) - : QActiveObject((timerInfo->interval) ? TIMER_PRIORITY : NULLTIMER_PRIORITY , dispatcher), + : QActiveObject(TIMER_PRIORITY, dispatcher), m_timerInfo(timerInfo), m_expectedTimeSinceLastEvent(0) { // start the timeout timer to ensure initialisation @@ -708,6 +685,138 @@ void QSocketActiveObject::deleteLater() } } +/* Round robin active object scheduling for Qt apps. + * + * Qt and Symbian have different views on how events should be handled. Qt expects + * round-robin event processing, whereas Symbian implements a strict priority based + * system. + * + * This scheduler class, and its use in QEventDispatcherSymbian::processEvents, + * introduces round robin scheduling for high priority active objects, but leaves + * those with low priorities scheduled in priority order. + * The algorithm used is that, during each call to processEvents, any pre-existing + * runnable active object may run, but only once. Active objects with priority + * lower than EPriorityStandard can only run if no higher priority active object + * has run. + * This is done by implementing an alternative scheduling algorithm which requires + * access to the internal members of the active object system. The iSpare member of + * CActive is replaced with a flag indicating that the object is new (CBase zero + * initialization sets this), or not run, or ran. Only active objects with the + * not run flag are allowed to run. + */ +class QtRRActiveScheduler +{ +public: + static void MarkReadyToRun(); + enum RunResult { + NothingFound, + ObjectRun, + ObjectDelayed + }; + static RunResult RunMarkedIfReady(TInt &runPriority, TInt minimumPriority); + static bool UseRRActiveScheduler(); + +private: + // active scheduler access kit, for gaining access to the internals of active objects for + // alternative active scheduler implementations. + class TRequestStatusAccess + { + public: + enum { ERequestActiveFlags = 3 }; // TRequestStatus::EActive | TRequestStatus::ERequestPending + TInt iStatus; + TUint iFlags; + }; + + class CActiveDataAccess : public CBase + { + public: + TRequestStatusAccess iStatus; + TPriQueLink iLink; + enum TMarks + { + ENewObject, // CBase zero initialization sets this, new objects cannot be run in the processEvents in which they are created + ENotRun, // This object has not yet run in the current processEvents call + ERan // This object has run in the current processEvents call + }; + int iMark; //TAny* iSpare; + }; + + class CActiveFuncAccess : public CActive + { + public: + // these functions are needed in RunMarkedIfReady + using CActive::RunL; + using CActive::RunError; + }; + + class CActiveSchedulerAccess : public CBase + { + public: + using CBase::Extension_; + struct TLoop; + TLoop* iStack; + TPriQue iActiveQ; + TAny* iSpare; + }; +}; + +void QtRRActiveScheduler::MarkReadyToRun() +{ + CActiveScheduler *pS=CActiveScheduler::Current(); + if (pS!=NULL) + { + TDblQueIter iterator(((CActiveSchedulerAccess*)pS)->iActiveQ); + for (CActive* active=iterator++; active!=NULL; active=iterator++) { + ((CActiveDataAccess*)active)->iMark = CActiveDataAccess::ENotRun; + } + } +} + +QtRRActiveScheduler::RunResult QtRRActiveScheduler::RunMarkedIfReady(TInt &runPriority, TInt minimumPriority) +{ + RunResult result = NothingFound; + TInt error=KErrNone; + CActiveScheduler *pS=CActiveScheduler::Current(); + if (pS!=NULL) { + TDblQueIter iterator(((CActiveSchedulerAccess*)pS)->iActiveQ); + for (CActiveFuncAccess *active=iterator++; active!=NULL; active=iterator++) { + CActiveDataAccess *dataAccess = (CActiveDataAccess*)active; + if (active->IsActive() && (active->iStatus!=KRequestPending)) { + int& mark = dataAccess->iMark; + if (mark == CActiveDataAccess::ENotRun && active->Priority()>=minimumPriority) { + mark = CActiveDataAccess::ERan; + runPriority = active->Priority(); + dataAccess->iStatus.iFlags&=~TRequestStatusAccess::ERequestActiveFlags; + int vptr = *(int*)active; // vptr can be used to identify type when debugging leaves + TRAP(error, active->RunL()); + if (error!=KErrNone) + error=active->RunError(error); + if (error) { + qWarning("Active object (ptr=0x%08x, vptr=0x%08x) leave: %i\n", active, vptr, error); + pS->Error(error); + } + return ObjectRun; + } + result = ObjectDelayed; + } + } + } + return result; +} + +bool QtRRActiveScheduler::UseRRActiveScheduler() +{ + // This code allows euser to declare incompatible active object / scheduler internal data structures + // in the future, disabling Qt's round robin scheduler use. + // By default the Extension_ function will set the second argument to NULL. We therefore use NULL to indicate + // that the data structures are compatible with before when this protocol was recognised. + // The extension id used is QtCore's UID. + CActiveSchedulerAccess *access = (CActiveSchedulerAccess *)CActiveScheduler::Current(); + TAny* schedulerCompatibilityNumber; + access->Extension_(0x2001B2DC, schedulerCompatibilityNumber, NULL); + return schedulerCompatibilityNumber == NULL; +} + #ifdef QT_SYMBIAN_PRIORITY_DROP class QIdleDetectorThread { @@ -864,6 +973,7 @@ void QEventDispatcherSymbian::closingDown() bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags flags ) { + const bool useRRScheduler = QtRRActiveScheduler::UseRRActiveScheduler(); bool handledAnyEvent = false; bool oldNoSocketEventsValue = m_noSocketEvents; bool oldInsideTimerEventValue = m_insideTimerEvent; @@ -894,8 +1004,9 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla handledAnyEvent = sendDeferredSocketEvents(); } - bool handledSymbianEvent = false; + QtRRActiveScheduler::RunResult handledSymbianEvent = QtRRActiveScheduler::NothingFound; m_interrupt = false; + int minPriority = KMinTInt; #ifdef QT_SYMBIAN_PRIORITY_DROP QElapsedTimer eventTimer; @@ -921,6 +1032,10 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla CActiveScheduler::Current()->WaitForAnyRequest(); } + if (useRRScheduler && handledSymbianEvent == QtRRActiveScheduler::NothingFound) { + QtRRActiveScheduler::MarkReadyToRun(); + } + #ifdef QT_SYMBIAN_PRIORITY_DROP if (idleDetectorThread()->hasRun()) { if (m_delay > baseDelay) @@ -936,11 +1051,31 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla eventTimer.start(); #endif - TInt error; - handledSymbianEvent = CActiveScheduler::RunIfReady(error, KMinTInt); - if (error) { - qWarning("CActiveScheduler::RunIfReady() returned error: %i\n", error); - CActiveScheduler::Current()->Error(error); + if (useRRScheduler) { + // Standard or above priority AOs are scheduled round robin. + // Lower priority AOs can only run if nothing higher priority has run. + int runPriority = minPriority; + handledSymbianEvent = QtRRActiveScheduler::RunMarkedIfReady(runPriority, minPriority); + minPriority = qMin(runPriority, int(CActive::EPriorityStandard)); + } else { + TInt error; + handledSymbianEvent = + CActiveScheduler::RunIfReady(error, minPriority) + ? QtRRActiveScheduler::ObjectRun + : QtRRActiveScheduler::NothingFound; + if (error) { + qWarning("CActiveScheduler::RunIfReady() returned error: %i\n", error); + CActiveScheduler::Current()->Error(error); + } + } + + if (handledSymbianEvent == QtRRActiveScheduler::NothingFound) { + // no runnable or delayed active object was found, the signal that caused us to get here must be bad + qFatal("QEventDispatcherSymbian::processEvents(): Caught Symbian stray signal"); + } else if (handledSymbianEvent == QtRRActiveScheduler::ObjectDelayed) { + // signal the thread to compensate for the un-handled signal absorbed + RThread().RequestSignal(); + break; } #ifdef QT_SYMBIAN_PRIORITY_DROP @@ -949,10 +1084,8 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla m_avgEventTime = (m_avgEventTime * 95 + eventDur * 5) / 100; #endif - if (!handledSymbianEvent) { - qFatal("QEventDispatcherSymbian::processEvents(): Caught Symbian stray signal"); - } handledAnyEvent = true; + if (m_interrupt) { break; } diff --git a/src/gui/kernel/qeventdispatcher_s60.cpp b/src/gui/kernel/qeventdispatcher_s60.cpp index 3f20c08..fd2280e 100644 --- a/src/gui/kernel/qeventdispatcher_s60.cpp +++ b/src/gui/kernel/qeventdispatcher_s60.cpp @@ -58,47 +58,17 @@ QtEikonEnv::~QtEikonEnv() void QtEikonEnv::RunL() { - QEventDispatcherS60 *dispatcher = qobject_cast(QAbstractEventDispatcher::instance()); - if (!dispatcher) { - CEikonEnv::RunL(); - return; - } - - if (m_lastIterationCount != dispatcher->iterationCount()) { - m_hasAlreadyRun = false; - m_lastIterationCount = dispatcher->iterationCount(); - } - - if (m_hasAlreadyRun) { - // Fool the active scheduler into believing we are still waiting for events. - // The window server thinks we are not, however. - m_savedStatusCode = iStatus.Int(); - iStatus = KRequestPending; - SetActive(); - dispatcher->queueDeferredActiveObjectsCompletion(); - } else { - m_hasAlreadyRun = true; - CEikonEnv::RunL(); - } + CEikonEnv::RunL(); + return; } void QtEikonEnv::DoCancel() { - complete(); - CEikonEnv::DoCancel(); } void QtEikonEnv::complete() { - if (m_hasAlreadyRun) { - if (m_savedStatusCode != KRequestPending) { - TRequestStatus *status = &iStatus; - QEventDispatcherSymbian::RequestComplete(status, m_savedStatusCode); - m_savedStatusCode = KRequestPending; - } - m_hasAlreadyRun = false; - } } QEventDispatcherS60::QEventDispatcherS60(QObject *parent) -- cgit v0.12 From cf573d54c588e1ee10a7d8979faef2e0ab8bb17e Mon Sep 17 00:00:00 2001 From: mread Date: Wed, 1 Jun 2011 11:36:45 +0100 Subject: tst_qeventloop runs the event loop to ensure socket messages arrive Auto test tst_qeventloop assumed that socket messages would be received within a single call to processEvents(). But this is not necessarily the case, and in particular with the combination of Symbian round robin active scheduler and new socket engine. So tst_qeventloop now uses an event loop to complete the test rather than just a single call to processEvents(). Task-number: QTBUG-15019 Reviewed-by: brad --- tests/auto/qeventloop/tst_qeventloop.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tests/auto/qeventloop/tst_qeventloop.cpp b/tests/auto/qeventloop/tst_qeventloop.cpp index b31f8cd..9196a47 100644 --- a/tests/auto/qeventloop/tst_qeventloop.cpp +++ b/tests/auto/qeventloop/tst_qeventloop.cpp @@ -602,10 +602,12 @@ public slots: QTcpSocket *serverSocket = server->nextPendingConnection(); serverSocket->write(data, size); serverSocket->flush(); - QTest::qSleep(200); //allow the TCP/IP stack time to loopback the data, so our socket is ready to read - QCoreApplication::processEvents(QEventLoop::ExcludeSocketNotifiers); + QEventLoop loop; + QTimer::singleShot(200, &loop, SLOT(quit())); //allow the TCP/IP stack time to loopback the data, so our socket is ready to read + loop.exec(QEventLoop::ExcludeSocketNotifiers); testResult = dataArrived; - QCoreApplication::processEvents(); //check the deferred event is processed + QTimer::singleShot(200, &loop, SLOT(quit())); + loop.exec(); //check the deferred event is processed serverSocket->close(); QThread::currentThread()->exit(0); } -- cgit v0.12 From 8b55d8421f786d3f631ccca16ac0e229e23bbc9c Mon Sep 17 00:00:00 2001 From: mread Date: Wed, 1 Jun 2011 12:14:30 +0100 Subject: Removing unused code after introduction of round robin scheduler Existing code that was used to defer active objects and otherwise alter their execution time is unnecessary and unused after the round robin scheduler introduction. So it is being removed here. Task-number: QTBUG-15019 Reviewed-by: Shane Kearns --- src/corelib/kernel/qeventdispatcher_symbian.cpp | 194 +----------------------- src/corelib/kernel/qeventdispatcher_symbian_p.h | 40 +---- src/gui/kernel/qapplication_s60.cpp | 2 +- src/gui/kernel/qeventdispatcher_s60.cpp | 36 ----- src/gui/kernel/qeventdispatcher_s60_p.h | 27 ---- src/s60installs/bwins/QtCoreu.def | 14 +- src/s60installs/bwins/QtGuiu.def | 2 +- src/s60installs/eabi/QtCoreu.def | 10 +- src/s60installs/eabi/QtGuiu.def | 2 +- 9 files changed, 26 insertions(+), 301 deletions(-) diff --git a/src/corelib/kernel/qeventdispatcher_symbian.cpp b/src/corelib/kernel/qeventdispatcher_symbian.cpp index 8ce806b..b216075 100644 --- a/src/corelib/kernel/qeventdispatcher_symbian.cpp +++ b/src/corelib/kernel/qeventdispatcher_symbian.cpp @@ -59,7 +59,6 @@ QT_BEGIN_NAMESPACE #define WAKE_UP_PRIORITY CActive::EPriorityStandard #define TIMER_PRIORITY CActive::EPriorityHigh -#define COMPLETE_DEFERRED_ACTIVE_OBJECTS_PRIORITY CActive::EPriorityIdle static inline int qt_pipe_write(int socket, const char *data, qint64 len) { @@ -123,15 +122,12 @@ private: }; /* - * This class can be used as a base class for Qt active objects, but currently does not offer - * any special functionality. + * This class can be used as a base class for Qt active objects. + * Socket active objects can use it to defer their activity. */ QActiveObject::QActiveObject(TInt priority, QEventDispatcherSymbian *dispatcher) : CActive(priority), - m_dispatcher(dispatcher), - m_hasAlreadyRun(false), - m_hasRunAgain(false), - m_iterationCount(1) + m_dispatcher(dispatcher) { } @@ -139,19 +135,12 @@ QActiveObject::~QActiveObject() { } -bool QActiveObject::maybeQueueForLater() -{ - return false; -} - bool QActiveObject::maybeDeferSocketEvent() { - Q_ASSERT(!m_hasRunAgain); Q_ASSERT(m_dispatcher); if (!m_dispatcher->areSocketEventsBlocked()) { return false; } - m_hasRunAgain = true; m_dispatcher->addDeferredSocketActiveObject(this); return true; } @@ -163,13 +152,11 @@ void QActiveObject::reactivateAndComplete() SetActive(); TRequestStatus *status = &iStatus; QEventDispatcherSymbian::RequestComplete(status, error); - - m_hasRunAgain = false; - m_hasAlreadyRun = false; } QWakeUpActiveObject::QWakeUpActiveObject(QEventDispatcherSymbian *dispatcher) - : QActiveObject(WAKE_UP_PRIORITY, dispatcher) + : CActive(WAKE_UP_PRIORITY), + m_dispatcher(dispatcher) { m_hostThreadId = RThread().Id(); CActiveScheduler::Add(this); @@ -201,17 +188,14 @@ void QWakeUpActiveObject::DoCancel() void QWakeUpActiveObject::RunL() { - if (maybeQueueForLater()) - return; - iStatus = KRequestPending; SetActive(); QT_TRYCATCH_LEAVING(m_dispatcher->wakeUpWasCalled()); } QTimerActiveObject::QTimerActiveObject(QEventDispatcherSymbian *dispatcher, SymbianTimerInfo *timerInfo) - : QActiveObject(TIMER_PRIORITY, dispatcher), - m_timerInfo(timerInfo), m_expectedTimeSinceLastEvent(0) + : CActive(TIMER_PRIORITY), + m_dispatcher(dispatcher), m_timerInfo(timerInfo), m_expectedTimeSinceLastEvent(0) { // start the timeout timer to ensure initialisation m_timeoutTimer.start(); @@ -288,9 +272,6 @@ void QTimerActiveObject::Run() return; } - if (maybeQueueForLater()) - return; - if (m_timerInfo->interval > 0) { // Start a new timer immediately so that we don't lose time. m_timerInfo->msLeft = m_timerInfo->interval; @@ -342,44 +323,6 @@ SymbianTimerInfo::~SymbianTimerInfo() delete timerAO; } -QCompleteDeferredAOs::QCompleteDeferredAOs(QEventDispatcherSymbian *dispatcher) - : CActive(COMPLETE_DEFERRED_ACTIVE_OBJECTS_PRIORITY), - m_dispatcher(dispatcher) -{ - CActiveScheduler::Add(this); - iStatus = KRequestPending; - SetActive(); -} - -QCompleteDeferredAOs::~QCompleteDeferredAOs() -{ - Cancel(); -} - -void QCompleteDeferredAOs::complete() -{ - if (iStatus.Int() == KRequestPending) { - TRequestStatus *status = &iStatus; - QEventDispatcherSymbian::RequestComplete(status, KErrNone); - } -} - -void QCompleteDeferredAOs::DoCancel() -{ - if (iStatus.Int() == KRequestPending) { - TRequestStatus *status = &iStatus; - QEventDispatcherSymbian::RequestComplete(status, KErrNone); - } -} - -void QCompleteDeferredAOs::RunL() -{ - iStatus = KRequestPending; - SetActive(); - - QT_TRYCATCH_LEAVING(m_dispatcher->reactivateDeferredActiveObjects()); -} - QSelectThread::QSelectThread() : m_quit(false) { @@ -654,8 +597,6 @@ void QSocketActiveObject::RunL() { if (maybeDeferSocketEvent()) return; - if (maybeQueueForLater()) - return; QT_TRYCATCH_LEAVING(run()); } @@ -920,7 +861,6 @@ QEventDispatcherSymbian::QEventDispatcherSymbian(QObject *parent) m_selectThread(0), m_activeScheduler(0), m_wakeUpAO(0), - m_completeDeferredAOs(0), m_interrupt(false), m_wakeUpDone(0), m_iterationCount(0), @@ -945,7 +885,6 @@ void QEventDispatcherSymbian::startingUp() CActiveScheduler::Install(m_activeScheduler); } m_wakeUpAO = q_check_ptr(new QWakeUpActiveObject(this)); - m_completeDeferredAOs = q_check_ptr(new QCompleteDeferredAOs(this)); // We already might have posted events, wakeup once to process them wakeUp(); } @@ -964,7 +903,6 @@ void QEventDispatcherSymbian::closingDown() delete m_selectThread; m_selectThread = 0; - delete m_completeDeferredAOs; delete m_wakeUpAO; if (m_activeScheduler) { delete m_activeScheduler; @@ -1184,41 +1122,11 @@ bool QEventDispatcherSymbian::sendPostedEvents() //return false; } -inline void QEventDispatcherSymbian::addDeferredActiveObject(QActiveObject *object) -{ - queueDeferredActiveObjectsCompletion(); - m_deferredActiveObjects.append(object); -} - -inline void QEventDispatcherSymbian::removeDeferredActiveObject(QActiveObject *object) -{ - m_deferredActiveObjects.removeAll(object); - m_deferredSocketEvents.removeAll(object); -} - inline void QEventDispatcherSymbian::addDeferredSocketActiveObject(QActiveObject *object) { m_deferredSocketEvents.append(object); } -void QEventDispatcherSymbian::queueDeferredActiveObjectsCompletion() -{ - m_completeDeferredAOs->complete(); -} - -void QEventDispatcherSymbian::reactivateDeferredActiveObjects() -{ - while (!m_deferredActiveObjects.isEmpty()) { - QActiveObject *object = m_deferredActiveObjects.takeFirst(); - object->reactivateAndComplete(); - } - - // We do this because we want to return from processEvents. This is because - // each invocation of processEvents should only run each active object once. - // The active scheduler should run them continously, however. - m_interrupt = true; -} - bool QEventDispatcherSymbian::sendDeferredSocketEvents() { bool sentAnyEvents = false; @@ -1294,14 +1202,6 @@ void QEventDispatcherSymbian::registerTimer ( int timerId, int interval, QObject m_timerList.insert(timerId, timer); timer->timerAO->Start(); - - if (m_insideTimerEvent) - // If we are inside a timer event, we need to prevent event starvation - // by preventing newly created timers from running in the same event processing - // iteration. Do this by calling the maybeQueueForLater() function to "fake" that we have - // already run once. This will cause the next run to be added to the deferred - // queue instead. - timer->timerAO->maybeQueueForLater(); } bool QEventDispatcherSymbian::unregisterTimer ( int timerId ) @@ -1364,86 +1264,6 @@ void CQtActiveScheduler::Error(TInt aError) const QT_CATCH (const std::bad_alloc&) {} // ignore alloc fails, nothing more can be done } -bool QActiveObject::wait(CActive* ao, int ms) -{ - if (!ao->IsActive()) - return true; //request already complete - bool timedout = false; - if (ms > 0) { - TRequestStatus tstat; - RTimer t; - if (KErrNone != t.CreateLocal()) - return false; - t.HighRes(tstat, ms*1000); - User::WaitForRequest(tstat, ao->iStatus); - if (tstat != KRequestPending) { - timedout = true; - } else { - t.Cancel(); - //balance thread semaphore - User::WaitForRequest(tstat); - } - t.Close(); - } else { - User::WaitForRequest(ao->iStatus); - } - if (timedout) - return false; - - //evil cast to allow calling of protected virtual - ((QActiveObject*)ao)->RunL(); - - //clear active & pending flags - ao->iStatus = TRequestStatus(); - - return true; -} - -bool QActiveObject::wait(QList aos, int ms) -{ - QVector stati; - stati.reserve(aos.count() + 1); - foreach (CActive* ao, aos) { - if (!ao->IsActive()) - return true; //request already complete - stati.append(&(ao->iStatus)); - } - bool timedout = false; - TRequestStatus tstat; - RTimer t; - if (ms > 0) { - if (KErrNone != t.CreateLocal()) - return false; - t.HighRes(tstat, ms*1000); - stati.append(&tstat); - } - User::WaitForNRequest(stati.data(), stati.count()); - if (ms > 0) { - if (tstat != KRequestPending) { - timedout = true; - } else { - t.Cancel(); - //balance thread semaphore - User::WaitForRequest(tstat); - } - t.Close(); - } - if (timedout) - return false; - - foreach (CActive* ao, aos) { - if (ao->iStatus != KRequestPending) { - //evil cast to allow calling of protected virtual - ((QActiveObject*)ao)->RunL(); - - //clear active & pending flags - ao->iStatus = TRequestStatus(); - break; //only call one - } - } - return true; -} - QT_END_NAMESPACE #include "moc_qeventdispatcher_symbian_p.cpp" diff --git a/src/corelib/kernel/qeventdispatcher_symbian_p.h b/src/corelib/kernel/qeventdispatcher_symbian_p.h index e327a9c..1b81599 100644 --- a/src/corelib/kernel/qeventdispatcher_symbian_p.h +++ b/src/corelib/kernel/qeventdispatcher_symbian_p.h @@ -83,23 +83,14 @@ public: QActiveObject(TInt priority, QEventDispatcherSymbian *dispatcher); ~QActiveObject(); - bool maybeQueueForLater(); bool maybeDeferSocketEvent(); void reactivateAndComplete(); - - static bool wait(CActive* ao, int ms); - static bool wait(QList aos, int ms); protected: QEventDispatcherSymbian *m_dispatcher; - -private: - bool m_hasAlreadyRun : 1; - bool m_hasRunAgain : 1; - int m_iterationCount; }; -class QWakeUpActiveObject : public QActiveObject +class QWakeUpActiveObject : public CActive { public: QWakeUpActiveObject(QEventDispatcherSymbian *dispatcher); @@ -112,6 +103,7 @@ protected: void RunL(); private: + QEventDispatcherSymbian *m_dispatcher; TThreadId m_hostThreadId; }; @@ -132,7 +124,7 @@ struct SymbianTimerInfo : public QSharedData typedef QExplicitlySharedDataPointer SymbianTimerInfoPtr; // This is a bit of a proxy class. See comments in SetActive and Start for details. -class QTimerActiveObject : public QActiveObject +class QTimerActiveObject : public CActive { public: QTimerActiveObject(QEventDispatcherSymbian *dispatcher, SymbianTimerInfo *timerInfo); @@ -149,28 +141,13 @@ private: void StartTimer(); private: + QEventDispatcherSymbian *m_dispatcher; SymbianTimerInfo *m_timerInfo; QElapsedTimer m_timeoutTimer; int m_expectedTimeSinceLastEvent; RTimer m_rTimer; }; -class QCompleteDeferredAOs : public CActive -{ -public: - QCompleteDeferredAOs(QEventDispatcherSymbian *dispatcher); - ~QCompleteDeferredAOs(); - - void complete(); - -protected: - void DoCancel(); - void RunL(); - -private: - QEventDispatcherSymbian *m_dispatcher; -}; - class QSocketActiveObject : public QActiveObject { public: @@ -254,12 +231,6 @@ public: void wakeUpWasCalled(); void reactivateSocketNotifier(QSocketNotifier *notifier); - void addDeferredActiveObject(QActiveObject *object); - void removeDeferredActiveObject(QActiveObject *object); - void queueDeferredActiveObjectsCompletion(); - // Can be overridden to activate local active objects too, but do call baseclass! - virtual void reactivateDeferredActiveObjects(); - inline int iterationCount() const { return m_iterationCount; } void addDeferredSocketActiveObject(QActiveObject *object); @@ -282,7 +253,6 @@ private: QHash m_notifiers; QWakeUpActiveObject *m_wakeUpAO; - QCompleteDeferredAOs *m_completeDeferredAOs; volatile bool m_interrupt; QAtomicInt m_wakeUpDone; @@ -292,8 +262,6 @@ private: bool m_noSocketEvents; //deferred until socket events are enabled QList m_deferredSocketEvents; - //deferred until idle - QList m_deferredActiveObjects; int m_delay; int m_avgEventTime; diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index e9d58c7..899147f 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -1694,7 +1694,7 @@ void qt_init(QApplicationPrivate * /* priv */, int) if (commandLine) { // After this construction, CEikonEnv will be available from CEikonEnv::Static(). // (much like our qApp). - QtEikonEnv* coe = new QtEikonEnv; + CEikonEnv* coe = new CEikonEnv; //not using QT_TRAP_THROWING, because coe owns the cleanupstack so it can't be pushed there. TRAPD(err, coe->ConstructAppFromCommandLineL(factory, *commandLine)); if(err != KErrNone) { diff --git a/src/gui/kernel/qeventdispatcher_s60.cpp b/src/gui/kernel/qeventdispatcher_s60.cpp index fd2280e..d5a2761 100644 --- a/src/gui/kernel/qeventdispatcher_s60.cpp +++ b/src/gui/kernel/qeventdispatcher_s60.cpp @@ -45,32 +45,6 @@ QT_BEGIN_NAMESPACE -QtEikonEnv::QtEikonEnv() - : m_lastIterationCount(0) - , m_savedStatusCode(KRequestPending) - , m_hasAlreadyRun(false) -{ -} - -QtEikonEnv::~QtEikonEnv() -{ -} - -void QtEikonEnv::RunL() -{ - CEikonEnv::RunL(); - return; -} - -void QtEikonEnv::DoCancel() -{ - CEikonEnv::DoCancel(); -} - -void QtEikonEnv::complete() -{ -} - QEventDispatcherS60::QEventDispatcherS60(QObject *parent) : QEventDispatcherSymbian(parent), m_noInputEvents(false) @@ -153,14 +127,4 @@ void QEventDispatcherS60::removeInputEventsForWidget(QObject *object) } } -// reimpl -void QEventDispatcherS60::reactivateDeferredActiveObjects() -{ - if (S60->qtOwnsS60Environment) { - static_cast(CCoeEnv::Static())->complete(); - } - - QEventDispatcherSymbian::reactivateDeferredActiveObjects(); -} - QT_END_NAMESPACE diff --git a/src/gui/kernel/qeventdispatcher_s60_p.h b/src/gui/kernel/qeventdispatcher_s60_p.h index 49ec568..c7cf2b2 100644 --- a/src/gui/kernel/qeventdispatcher_s60_p.h +++ b/src/gui/kernel/qeventdispatcher_s60_p.h @@ -62,31 +62,6 @@ QT_BEGIN_NAMESPACE class QEventDispatcherS60; -class QtEikonEnv : public CEikonEnv -{ -public: - QtEikonEnv(); - ~QtEikonEnv(); - - // from CActive. - void RunL(); - void DoCancel(); - - void complete(); - -private: - // Workaround for a BC break from S60 3.2 -> 5.0, where the CEikonEnv override was removed. - // To avoid linking to that when we build against 3.2, define an empty body here. - // Reserved_*() have been verified to be empty in the S60 code. - void Reserved_1() {} - void Reserved_2() {} - -private: - int m_lastIterationCount; - TInt m_savedStatusCode; - bool m_hasAlreadyRun; -}; - class Q_GUI_EXPORT QEventDispatcherS60 : public QEventDispatcherSymbian { Q_OBJECT @@ -102,8 +77,6 @@ public: void saveInputEvent(QSymbianControl *control, QWidget *widget, QInputEvent *event); - void reactivateDeferredActiveObjects(); - private: bool sendDeferredInputEvents(); diff --git a/src/s60installs/bwins/QtCoreu.def b/src/s60installs/bwins/QtCoreu.def index 76a9a55..4ee3f39 100644 --- a/src/s60installs/bwins/QtCoreu.def +++ b/src/s60installs/bwins/QtCoreu.def @@ -1000,7 +1000,7 @@ EXPORTS ?addDays@QDate@@QBE?AV1@H@Z @ 999 NONAME ; class QDate QDate::addDays(int) const ?addDays@QDateTime@@QBE?AV1@H@Z @ 1000 NONAME ; class QDateTime QDateTime::addDays(int) const ?addDefaultAnimation@QStateMachine@@QAEXPAVQAbstractAnimation@@@Z @ 1001 NONAME ; void QStateMachine::addDefaultAnimation(class QAbstractAnimation *) - ?addDeferredActiveObject@QEventDispatcherSymbian@@QAEXPAVQActiveObject@@@Z @ 1002 NONAME ; void QEventDispatcherSymbian::addDeferredActiveObject(class QActiveObject *) + ?addDeferredActiveObject@QEventDispatcherSymbian@@QAEXPAVQActiveObject@@@Z @ 1002 NONAME ABSENT ; void QEventDispatcherSymbian::addDeferredActiveObject(class QActiveObject *) ?addEncodedQueryItem@QUrl@@QAEXABVQByteArray@@0@Z @ 1003 NONAME ; void QUrl::addEncodedQueryItem(class QByteArray const &, class QByteArray const &) ?addExtraNamespaceDeclaration@QXmlStreamReader@@QAEXABVQXmlStreamNamespaceDeclaration@@@Z @ 1004 NONAME ; void QXmlStreamReader::addExtraNamespaceDeclaration(class QXmlStreamNamespaceDeclaration const &) ?addExtraNamespaceDeclarations@QXmlStreamReader@@QAEXABV?$QVector@VQXmlStreamNamespaceDeclaration@@@@@Z @ 1005 NONAME ; void QXmlStreamReader::addExtraNamespaceDeclarations(class QVector const &) @@ -3062,7 +3062,7 @@ EXPORTS ?removeColumn@QAbstractItemModel@@QAE_NHABVQModelIndex@@@Z @ 3061 NONAME ; bool QAbstractItemModel::removeColumn(int, class QModelIndex const &) ?removeColumns@QAbstractItemModel@@UAE_NHHABVQModelIndex@@@Z @ 3062 NONAME ; bool QAbstractItemModel::removeColumns(int, int, class QModelIndex const &) ?removeDefaultAnimation@QStateMachine@@QAEXPAVQAbstractAnimation@@@Z @ 3063 NONAME ; void QStateMachine::removeDefaultAnimation(class QAbstractAnimation *) - ?removeDeferredActiveObject@QEventDispatcherSymbian@@QAEXPAVQActiveObject@@@Z @ 3064 NONAME ; void QEventDispatcherSymbian::removeDeferredActiveObject(class QActiveObject *) + ?removeDeferredActiveObject@QEventDispatcherSymbian@@QAEXPAVQActiveObject@@@Z @ 3064 NONAME ABSENT ; void QEventDispatcherSymbian::removeDeferredActiveObject(class QActiveObject *) ?removeEncodedQueryItem@QUrl@@QAEXABVQByteArray@@@Z @ 3065 NONAME ; void QUrl::removeEncodedQueryItem(class QByteArray const &) ?removeEventFilter@QObject@@QAEXPAV1@@Z @ 3066 NONAME ; void QObject::removeEventFilter(class QObject *) ?removeFormat@QMimeData@@QAEXABVQString@@@Z @ 3067 NONAME ; void QMimeData::removeFormat(class QString const &) @@ -4484,8 +4484,8 @@ EXPORTS ?selectThread@QEventDispatcherSymbian@@AAEAAVQSelectThread@@XZ @ 4483 NONAME ; class QSelectThread & QEventDispatcherSymbian::selectThread(void) ?qt_symbian_SetupThreadHeap@@YAHHAAUSStdEpocThreadCreateInfo@@@Z @ 4484 NONAME ; int qt_symbian_SetupThreadHeap(int, struct SStdEpocThreadCreateInfo &) ?objectNameChanged@QAbstractDeclarativeData@@2P6AXPAV1@PAVQObject@@@ZA @ 4485 NONAME ; void (*QAbstractDeclarativeData::objectNameChanged)(class QAbstractDeclarativeData *, class QObject *) - ?queueDeferredActiveObjectsCompletion@QEventDispatcherSymbian@@QAEXXZ @ 4486 NONAME ; void QEventDispatcherSymbian::queueDeferredActiveObjectsCompletion(void) - ?reactivateDeferredActiveObjects@QEventDispatcherSymbian@@UAEXXZ @ 4487 NONAME ; void QEventDispatcherSymbian::reactivateDeferredActiveObjects(void) + ?queueDeferredActiveObjectsCompletion@QEventDispatcherSymbian@@QAEXXZ @ 4486 NONAME ABSENT ; void QEventDispatcherSymbian::queueDeferredActiveObjectsCompletion(void) + ?reactivateDeferredActiveObjects@QEventDispatcherSymbian@@UAEXXZ @ 4487 NONAME ABSENT ; void QEventDispatcherSymbian::reactivateDeferredActiveObjects(void) ?contains@QString@@QBE?AVQBool@@ABVQStringRef@@W4CaseSensitivity@Qt@@@Z @ 4488 NONAME ; class QBool QString::contains(class QStringRef const &, enum Qt::CaseSensitivity) const ?swap@QRegExp@@QAEXAAV1@@Z @ 4489 NONAME ; void QRegExp::swap(class QRegExp &) ?indexOf@QStringRef@@QBEHABVQString@@HW4CaseSensitivity@Qt@@@Z @ 4490 NONAME ; int QStringRef::indexOf(class QString const &, int, enum Qt::CaseSensitivity) const @@ -4612,17 +4612,17 @@ EXPORTS ?reactivateAndComplete@QActiveObject@@QAEXXZ @ 4611 NONAME ; void QActiveObject::reactivateAndComplete(void) ?defaultConnection@QSymbianSocketManager@@QBEPAVRConnection@@XZ @ 4612 NONAME ; class RConnection * QSymbianSocketManager::defaultConnection(void) const ?qt_symbianGetSocketServer@@YAAAVRSocketServ@@XZ @ 4613 NONAME ; class RSocketServ & qt_symbianGetSocketServer(void) - ?maybeQueueForLater@QActiveObject@@QAE_NXZ @ 4614 NONAME ; bool QActiveObject::maybeQueueForLater(void) + ?maybeQueueForLater@QActiveObject@@QAE_NXZ @ 4614 NONAME ABSENT ; bool QActiveObject::maybeQueueForLater(void) ??_EQActiveObject@@UAE@I@Z @ 4615 NONAME ; QActiveObject::~QActiveObject(unsigned int) ?lookupSocket@QSymbianSocketManager@@QBE_NHAAVRSocket@@@Z @ 4616 NONAME ; bool QSymbianSocketManager::lookupSocket(int, class RSocket &) const - ?wait@QActiveObject@@SA_NPAVCActive@@H@Z @ 4617 NONAME ; bool QActiveObject::wait(class CActive *, int) + ?wait@QActiveObject@@SA_NPAVCActive@@H@Z @ 4617 NONAME ABSENT ; bool QActiveObject::wait(class CActive *, int) ?instance@QSymbianSocketManager@@SAAAV1@XZ @ 4618 NONAME ; class QSymbianSocketManager & QSymbianSocketManager::instance(void) ??0QSymbianSocketManager@@QAE@XZ @ 4619 NONAME ; QSymbianSocketManager::QSymbianSocketManager(void) ?create@QNonContiguousByteDeviceFactory@@SAPAVQNonContiguousByteDevice@@V?$QSharedPointer@VQRingBuffer@@@@@Z @ 4620 NONAME ; class QNonContiguousByteDevice * QNonContiguousByteDeviceFactory::create(class QSharedPointer) ??1QSymbianSocketManager@@QAE@XZ @ 4621 NONAME ; QSymbianSocketManager::~QSymbianSocketManager(void) ?isResetDisabled@QNonContiguousByteDevice@@QAE_NXZ @ 4622 NONAME ; bool QNonContiguousByteDevice::isResetDisabled(void) ??1QActiveObject@@UAE@XZ @ 4623 NONAME ; QActiveObject::~QActiveObject(void) - ?wait@QActiveObject@@SA_NV?$QList@PAVCActive@@@@H@Z @ 4624 NONAME ; bool QActiveObject::wait(class QList, int) + ?wait@QActiveObject@@SA_NV?$QList@PAVCActive@@@@H@Z @ 4624 NONAME ABSENT ; bool QActiveObject::wait(class QList, int) ?maybeDeferSocketEvent@QActiveObject@@QAE_NXZ @ 4625 NONAME ; bool QActiveObject::maybeDeferSocketEvent(void) ?lookupSocket@QSymbianSocketManager@@QBEHABVRSocket@@@Z @ 4626 NONAME ; int QSymbianSocketManager::lookupSocket(class RSocket const &) const ?areSocketEventsBlocked@QEventDispatcherSymbian@@QBE_NXZ @ 4627 NONAME ; bool QEventDispatcherSymbian::areSocketEventsBlocked(void) const diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index 7468b85..8eabd00 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -12902,7 +12902,7 @@ EXPORTS ??0QStaticTextItem@@QAE@ABV0@@Z @ 12901 NONAME ; QStaticTextItem::QStaticTextItem(class QStaticTextItem const &) ??4QStaticTextItem@@QAEXABV0@@Z @ 12902 NONAME ; void QStaticTextItem::operator=(class QStaticTextItem const &) ?fontEngine@QStaticTextItem@@QBEPAVQFontEngine@@XZ @ 12903 NONAME ; class QFontEngine * QStaticTextItem::fontEngine(void) const - ?reactivateDeferredActiveObjects@QEventDispatcherS60@@UAEXXZ @ 12904 NONAME ; void QEventDispatcherS60::reactivateDeferredActiveObjects(void) + ?reactivateDeferredActiveObjects@QEventDispatcherS60@@UAEXXZ @ 12904 NONAME ABSENT ; void QEventDispatcherS60::reactivateDeferredActiveObjects(void) ?userData@QStaticTextItem@@QBEPAVQStaticTextUserData@@XZ @ 12905 NONAME ; class QStaticTextUserData * QStaticTextItem::userData(void) const ?populate@QTextureGlyphCache@@QAE_NPAVQFontEngine@@HPBIPBUQFixedPoint@@@Z @ 12906 NONAME ; bool QTextureGlyphCache::populate(class QFontEngine *, int, unsigned int const *, struct QFixedPoint const *) ?resetCursorBlinkTimer@QLineControl@@QAEXXZ @ 12907 NONAME ; void QLineControl::resetCursorBlinkTimer(void) diff --git a/src/s60installs/eabi/QtCoreu.def b/src/s60installs/eabi/QtCoreu.def index 76b1568..d6b2e93 100644 --- a/src/s60installs/eabi/QtCoreu.def +++ b/src/s60installs/eabi/QtCoreu.def @@ -1294,7 +1294,7 @@ EXPORTS _ZN23QEventDispatcherSymbian24reactivateSocketNotifierEP15QSocketNotifier @ 1293 NONAME _ZN23QEventDispatcherSymbian24sendDeferredSocketEventsEv @ 1294 NONAME _ZN23QEventDispatcherSymbian24unregisterSocketNotifierEP15QSocketNotifier @ 1295 NONAME - _ZN23QEventDispatcherSymbian31reactivateDeferredActiveObjectsEv @ 1296 NONAME + _ZN23QEventDispatcherSymbian31reactivateDeferredActiveObjectsEv @ 1296 NONAME ABSENT _ZN23QEventDispatcherSymbian5flushEv @ 1297 NONAME _ZN23QEventDispatcherSymbian6wakeUpEv @ 1298 NONAME _ZN23QEventDispatcherSymbian9interruptEv @ 1299 NONAME @@ -3713,7 +3713,7 @@ EXPORTS _ZrsR11QDataStreamR12QEasingCurve @ 3712 NONAME _Z26qt_symbian_SetupThreadHeapiR24SStdEpocThreadCreateInfo @ 3713 NONAME _ZN24QAbstractDeclarativeData17objectNameChangedE @ 3714 NONAME DATA 4 - _ZN23QEventDispatcherSymbian36queueDeferredActiveObjectsCompletionEv @ 3715 NONAME + _ZN23QEventDispatcherSymbian36queueDeferredActiveObjectsCompletionEv @ 3715 NONAME ABSENT _ZN23QCoreApplicationPrivate18symbianCommandLineEv @ 3716 NONAME _ZNK11QMetaMethod8revisionEv @ 3717 NONAME _ZNK13QMetaProperty8revisionEv @ 3718 NONAME @@ -3850,11 +3850,11 @@ EXPORTS _ZN11QTranslator18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv @ 3849 NONAME _ZN11QTranslator25staticMetaObjectExtraDataE @ 3850 NONAME DATA 8 _ZN11QTranslator4loadERK7QLocaleRK7QStringS5_S5_S5_ @ 3851 NONAME - _ZN13QActiveObject18maybeQueueForLaterEv @ 3852 NONAME + _ZN13QActiveObject18maybeQueueForLaterEv @ 3852 NONAME ABSENT _ZN13QActiveObject21maybeDeferSocketEventEv @ 3853 NONAME _ZN13QActiveObject21reactivateAndCompleteEv @ 3854 NONAME - _ZN13QActiveObject4waitE5QListIP7CActiveEi @ 3855 NONAME - _ZN13QActiveObject4waitEP7CActivei @ 3856 NONAME + _ZN13QActiveObject4waitE5QListIP7CActiveEi @ 3855 NONAME ABSENT + _ZN13QActiveObject4waitEP7CActivei @ 3856 NONAME ABSENT _ZN13QActiveObjectC2EiP23QEventDispatcherSymbian @ 3857 NONAME _ZN13QActiveObjectD0Ev @ 3858 NONAME _ZN13QActiveObjectD1Ev @ 3859 NONAME diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index ecdec9d..fb09d5c 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -12104,7 +12104,7 @@ EXPORTS _ZN15QStaticTextItem13setFontEngineEP11QFontEngine @ 12103 NONAME _ZN15QStaticTextItemD1Ev @ 12104 NONAME _ZN15QStaticTextItemD2Ev @ 12105 NONAME - _ZN19QEventDispatcherS6031reactivateDeferredActiveObjectsEv @ 12106 NONAME + _ZN19QEventDispatcherS6031reactivateDeferredActiveObjectsEv @ 12106 NONAME ABSENT _ZN20QGraphicsItemPrivate11setSubFocusEP13QGraphicsItemS1_ @ 12107 NONAME _ZN20QGraphicsItemPrivate13clearSubFocusEP13QGraphicsItemS1_ @ 12108 NONAME _ZN12QLineControl21resetCursorBlinkTimerEv @ 12109 NONAME -- cgit v0.12 From e86393a43b6f80abcb33747b9d1c1f65bcef0dc8 Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Fri, 3 Jun 2011 09:00:40 +0300 Subject: QS60Style: Checked state is not shown on highlighted itemview item An itemview item with checkstate and highlight is drawn incorrectly without checked state. Consolidate check state drawing logic to happen into one place to avoid incorrect check states. Task-number: QTBUG-19668 Reviewed-by: Miikka Heikkinen --- src/gui/styles/qs60style.cpp | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 63b45d3..219b963 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -1445,26 +1445,14 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, checkMarkOption.rect = selectionRect; // Draw selection mark. if (isSelected && selectItems) { - proxy()->drawPrimitive(PE_IndicatorViewItemCheck, &checkMarkOption, painter, widget); // @todo: this should happen in the rect retrievel i.e. subElementRect() if (textRect.right() > selectionRect.left()) textRect.setRight(selectionRect.left()); } else if (voptAdj.features & QStyleOptionViewItemV2::HasCheckIndicator) { checkMarkOption.state = checkMarkOption.state & ~State_HasFocus; - switch (vopt->checkState) { - case Qt::Unchecked: - checkMarkOption.state |= State_Off; - break; - case Qt::PartiallyChecked: - checkMarkOption.state |= State_NoChange; - break; - case Qt::Checked: - checkMarkOption.state |= State_On; - break; - } - drawPrimitive(PE_IndicatorViewItemCheck, &checkMarkOption, painter, widget); } + proxy()->drawPrimitive(PE_IndicatorViewItemCheck, &checkMarkOption, painter, widget); } // draw the text @@ -2114,12 +2102,28 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti #ifndef QT_NO_ITEMVIEWS if (const QAbstractItemView *itemView = (qobject_cast(widget))) { if (const QStyleOptionViewItemV4 *vopt = qstyleoption_cast(option)) { + QStyleOptionViewItemV4 voptAdj = *vopt; const bool checkBoxVisible = vopt->features & QStyleOptionViewItemV2::HasCheckIndicator; const bool singleSelection = itemView->selectionMode() == QAbstractItemView::SingleSelection || itemView->selectionMode() == QAbstractItemView::NoSelection; // draw either checkbox at the beginning if (checkBoxVisible && singleSelection) { - drawPrimitive(PE_IndicatorCheckBox, option, painter, widget); + if (vopt->features & QStyleOptionViewItemV2::HasCheckIndicator) { + switch (vopt->checkState) { + case Qt::Unchecked: + voptAdj.state |= State_Off; + break; + case Qt::PartiallyChecked: + voptAdj.state |= State_NoChange; + break; + case Qt::Checked: + voptAdj.state |= State_On; + break; + default: + break; + } + } + drawPrimitive(PE_IndicatorCheckBox, &voptAdj, painter, widget); // ... or normal "tick" selection at the end. } else if (option->state & State_Selected) { QRect tickRect = option->rect; -- cgit v0.12 From b761f2e1b323012661a9aeed3873b1e5facb0f11 Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Wed, 1 Jun 2011 17:13:51 +1000 Subject: Fixed compile of tst_qscriptextensionplugin on some Windows configurations The debug and release versions of staticplugin are qmake'd with the same destination directory. This causes the generated staticplugin .prl file to always refer to the debug versions of Qt libraries, even if Qt was configured with -release. The .prl mechanism is not useful for this test, so simply disable it to solve the problem. Reviewed-by: ckamm --- tests/auto/qscriptextensionplugin/staticplugin/staticplugin.pro | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/auto/qscriptextensionplugin/staticplugin/staticplugin.pro b/tests/auto/qscriptextensionplugin/staticplugin/staticplugin.pro index a003338..65c4e8f 100644 --- a/tests/auto/qscriptextensionplugin/staticplugin/staticplugin.pro +++ b/tests/auto/qscriptextensionplugin/staticplugin/staticplugin.pro @@ -1,5 +1,6 @@ TEMPLATE = lib CONFIG += static plugin +CONFIG -= create_prl # not needed, and complicates debug/release SOURCES = staticplugin.cpp RESOURCES = staticplugin.qrc QT = core script -- cgit v0.12 From 9af060d82a4738f6fb03aa4738d9377cdbb0df54 Mon Sep 17 00:00:00 2001 From: mread Date: Fri, 3 Jun 2011 12:05:12 +0100 Subject: Skipping tst_QEventLoop::processEventsExcludeSocket for qws tst_QEventLoop::processEventsExcludeSocket is failing on qws after an upgrade to that test. It looks most likely to be a qws fault, so a defect QTBUG-19699 has been raised and this test skipped for qws in the meantime. Reviewed-by: Laszlo Agocs --- tests/auto/qeventloop/tst_qeventloop.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/auto/qeventloop/tst_qeventloop.cpp b/tests/auto/qeventloop/tst_qeventloop.cpp index 9196a47..7a8c441 100644 --- a/tests/auto/qeventloop/tst_qeventloop.cpp +++ b/tests/auto/qeventloop/tst_qeventloop.cpp @@ -633,6 +633,9 @@ public: void tst_QEventLoop::processEventsExcludeSocket() { +#if defined(Q_WS_QWS) + QSKIP("Socket message seems to be leaking through QEventLoop::exec(ExcludeSocketNotifiers) on qws (QTBUG-19699)", SkipAll); +#endif SocketTestThread thread; thread.start(); QVERIFY(thread.wait()); -- cgit v0.12