From 9ceac782c62e889852bfc1f72840d838ba98ebff Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Tue, 28 Jun 2011 13:08:45 +0100 Subject: Fix KERN-EXEC 0 errors in symbian bearer plugin The plugin was ignoring errors when opening a handle, and as a result crashed if the handle was invalid. Error checking / handle validity checks added. Task-number: QTBUG-18572 Reviewed-by: mread --- src/plugins/bearer/symbian/qnetworksession_impl.cpp | 9 ++++++++- src/plugins/bearer/symbian/symbianengine.cpp | 14 +++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/plugins/bearer/symbian/qnetworksession_impl.cpp b/src/plugins/bearer/symbian/qnetworksession_impl.cpp index 791ebf2..5639c4f 100644 --- a/src/plugins/bearer/symbian/qnetworksession_impl.cpp +++ b/src/plugins/bearer/symbian/qnetworksession_impl.cpp @@ -476,6 +476,8 @@ TUint QNetworkSessionPrivateImpl::iapClientCount(TUint aIAPId) const { TRequestStatus status; TUint connectionCount; + if (!iConnectionMonitor.Handle()) + return 0; iConnectionMonitor.GetConnectionCount(connectionCount, status); User::WaitForRequest(status); if (status.Int() == KErrNone) { @@ -573,7 +575,8 @@ void QNetworkSessionPrivateImpl::stop() #endif if (!isOpen && publicConfig.isValid() && - publicConfig.type() == QNetworkConfiguration::InternetAccessPoint) { + publicConfig.type() == QNetworkConfiguration::InternetAccessPoint && + iConnectionMonitor.Handle()) { #ifdef QT_BEARERMGMT_SYMBIAN_DEBUG qDebug() << "QNS this : " << QString::number((uint)this) << " - " << "since session is not open, using RConnectionMonitor to stop() the interface"; @@ -855,6 +858,8 @@ quint64 QNetworkSessionPrivateImpl::transferredData(TUint dataType) const return 0; } + if (!iConnectionMonitor.Handle()) + return 0; TUint count; TRequestStatus status; iConnectionMonitor.GetConnectionCount(count, status); @@ -1497,6 +1502,8 @@ bool QNetworkSessionPrivateImpl::easyWlanTrueIapId(TUint32 &trueIapId) const // Loop through all connections that connection monitor is aware // and check for IAPs based on easy WLAN + if (!iConnectionMonitor.Handle()) + return false; TRequestStatus status; TUint connectionCount; iConnectionMonitor.GetConnectionCount(connectionCount, status); diff --git a/src/plugins/bearer/symbian/symbianengine.cpp b/src/plugins/bearer/symbian/symbianengine.cpp index 71687dd..04edbb7 100644 --- a/src/plugins/bearer/symbian/symbianengine.cpp +++ b/src/plugins/bearer/symbian/symbianengine.cpp @@ -104,11 +104,19 @@ void SymbianEngine::initialize() return; } - TRAP_IGNORE(iConnectionMonitor.ConnectL()); + TRAP(error, { + iConnectionMonitor.ConnectL(); + CleanupClosePushL(iConnectionMonitor); #ifdef SNAP_FUNCTIONALITY_AVAILABLE - TRAP_IGNORE(iConnectionMonitor.SetUintAttribute(EBearerIdAll, 0, KBearerGroupThreshold, 1)); + User::LeaveIfError(iConnectionMonitor.SetUintAttribute(EBearerIdAll, 0, KBearerGroupThreshold, 1)); #endif - TRAP_IGNORE(iConnectionMonitor.NotifyEventL(*this)); + iConnectionMonitor.NotifyEventL(*this); + CleanupStack::Pop(); + }); + if (error != KErrNone) { + iInitOk = false; + return; + } #ifdef SNAP_FUNCTIONALITY_AVAILABLE TRAP(error, iCmManager.OpenL()); -- cgit v0.12 From 177f466bc581f8ad5bd4e883e8bc342a0b6c7484 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Niemel=C3=A4?= Date: Wed, 29 Jun 2011 10:52:39 +0300 Subject: Added qmlshadersplugin to Symbian s60installs.pro-file. Task-number: QTBUG-18346 Reviewed-by: Sami Merila --- src/s60installs/s60installs.pro | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) mode change 100644 => 100755 src/s60installs/s60installs.pro diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro old mode 100644 new mode 100755 index 17b229f..573e585 --- a/src/s60installs/s60installs.pro +++ b/src/s60installs/s60installs.pro @@ -150,16 +150,19 @@ symbian: { folderlistmodelImport.sources = $$QT_BUILD_TREE/imports/Qt/labs/folderlistmodel/qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll gesturesImport.sources = $$QT_BUILD_TREE/imports/Qt/labs/gestures/qmlgesturesplugin$${QT_LIBINFIX}.dll particlesImport.sources = $$QT_BUILD_TREE/imports/Qt/labs/particles/qmlparticlesplugin$${QT_LIBINFIX}.dll + shadersImport.sources = $$QT_BUILD_TREE/imports/Qt/labs/shaders/qmlshadersplugin$${QT_LIBINFIX}.dll folderlistmodelImport.sources += $$QT_SOURCE_TREE/src/imports/folderlistmodel/qmldir gesturesImport.sources += $$QT_SOURCE_TREE/src/imports/gestures/qmldir particlesImport.sources += $$QT_SOURCE_TREE/src/imports/particles/qmldir + shadersImport.sources += $$QT_SOURCE_TREE/src/imports/shaders/qmldir folderlistmodelImport.path = c:$$QT_IMPORTS_BASE_DIR/Qt/labs/folderlistmodel gesturesImport.path = c:$$QT_IMPORTS_BASE_DIR/Qt/labs/gestures particlesImport.path = c:$$QT_IMPORTS_BASE_DIR/Qt/labs/particles + shadersImport.path = c:$$QT_IMPORTS_BASE_DIR/Qt/labs/shaders - DEPLOYMENT += folderlistmodelImport gesturesImport particlesImport + DEPLOYMENT += folderlistmodelImport gesturesImport particlesImport shadersImport } graphicssystems_plugins.path = c:$$QT_PLUGINS_BASE_DIR/graphicssystems -- cgit v0.12 From f8560717dd56514269cfb081c7f4b94e231e10d7 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Tue, 28 Jun 2011 17:07:13 +0200 Subject: Fix text color in some cases of QML and QStaticText This reverts 518c2a58ed6fdfd7449cb4476aa8ea0d32ad16e3 which caused a regression. When writing systems are mixed and an underline is set on the font, QPainter will set a pen with the current color and a new width on itself before drawing the decoration. This would cause the recorder in QStaticText to mark the pen as dirty, saving the current pen color in all subsequent text items. The effect was e.g. that in QML the cached color would override the current one, making it impossible to change the color on the text without forcing a relayout somehow. The right fix is to only mark the pen as dirty when its color actually changes. Task-number: QTBUG-20159 Reviewed-by: Jiang Jiang --- .../graphicsitems/qdeclarativetextlayout.cpp | 15 ++++---- .../graphicsitems/qdeclarativetextlayout_p.h | 2 +- src/gui/text/qstatictext.cpp | 10 ++++-- tests/auto/qstatictext/tst_qstatictext.cpp | 40 ++++++++++++++++++++++ 4 files changed, 57 insertions(+), 10 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetextlayout.cpp b/src/declarative/graphicsitems/qdeclarativetextlayout.cpp index cf2ef26..9aef504 100644 --- a/src/declarative/graphicsitems/qdeclarativetextlayout.cpp +++ b/src/declarative/graphicsitems/qdeclarativetextlayout.cpp @@ -72,14 +72,17 @@ class DrawTextItemRecorder: public QPaintEngine public: DrawTextItemRecorder(bool untransformedCoordinates, bool useBackendOptimizations) : m_inertText(0), m_dirtyPen(false), m_useBackendOptimizations(useBackendOptimizations), - m_untransformedCoordinates(untransformedCoordinates) + m_untransformedCoordinates(untransformedCoordinates), m_currentColor(Qt::black) { } virtual void updateState(const QPaintEngineState &newState) { - if (newState.state() & QPaintEngine::DirtyPen) + if (newState.state() & QPaintEngine::DirtyPen + && newState.pen().color() != m_currentColor) { m_dirtyPen = true; + m_currentColor = newState.pen().color(); + } } virtual void drawTextItem(const QPointF &position, const QTextItem &textItem) @@ -115,7 +118,7 @@ class DrawTextItemRecorder: public QPaintEngine currentItem.positionOffset = positionOffset; currentItem.useBackendOptimizations = m_useBackendOptimizations; if (m_dirtyPen) - currentItem.color = state->pen().color(); + currentItem.color = m_currentColor; m_inertText->items.append(currentItem); } @@ -172,6 +175,7 @@ class DrawTextItemRecorder: public QPaintEngine bool m_dirtyPen; bool m_useBackendOptimizations; bool m_untransformedCoordinates; + QColor m_currentColor; }; class DrawTextItemDevice: public QPaintDevice @@ -299,7 +303,7 @@ void QDeclarativeTextLayout::clearLayout() QTextLayout::clearLayout(); } -void QDeclarativeTextLayout::prepare(QPainter *painter) +void QDeclarativeTextLayout::prepare() { if (!d || !d->cached) { @@ -308,7 +312,6 @@ void QDeclarativeTextLayout::prepare(QPainter *painter) InertTextPainter *itp = inertTextPainter(); itp->device.begin(d); - itp->painter.setPen(painter->pen()); QTextLayout::draw(&itp->painter, QPointF(0, 0)); glyph_t *glyphPool = d->glyphs.data(); @@ -347,7 +350,7 @@ void QDeclarativeTextLayout::draw(QPainter *painter, const QPointF &p) return; } - prepare(painter); + prepare(); int itemCount = d->items.count(); diff --git a/src/declarative/graphicsitems/qdeclarativetextlayout_p.h b/src/declarative/graphicsitems/qdeclarativetextlayout_p.h index 85d333e..d83ce7e 100644 --- a/src/declarative/graphicsitems/qdeclarativetextlayout_p.h +++ b/src/declarative/graphicsitems/qdeclarativetextlayout_p.h @@ -61,7 +61,7 @@ public: void beginLayout(); void clearLayout(); - void prepare(QPainter *); + void prepare(); void draw(QPainter *, const QPointF & = QPointF()); private: diff --git a/src/gui/text/qstatictext.cpp b/src/gui/text/qstatictext.cpp index 414de51..73a871b 100644 --- a/src/gui/text/qstatictext.cpp +++ b/src/gui/text/qstatictext.cpp @@ -430,14 +430,17 @@ namespace { public: DrawTextItemRecorder(bool untransformedCoordinates, bool useBackendOptimizations) : m_dirtyPen(false), m_useBackendOptimizations(useBackendOptimizations), - m_untransformedCoordinates(untransformedCoordinates) + m_untransformedCoordinates(untransformedCoordinates), m_currentColor(Qt::black) { } virtual void updateState(const QPaintEngineState &newState) { - if (newState.state() & QPaintEngine::DirtyPen) + if (newState.state() & QPaintEngine::DirtyPen + && newState.pen().color() != m_currentColor) { m_dirtyPen = true; + m_currentColor = newState.pen().color(); + } } virtual void drawTextItem(const QPointF &position, const QTextItem &textItem) @@ -453,7 +456,7 @@ namespace { currentItem.positionOffset = m_glyphs.size(); // Offset into position pool currentItem.useBackendOptimizations = m_useBackendOptimizations; if (m_dirtyPen) - currentItem.color = state->pen().color(); + currentItem.color = m_currentColor; QTransform matrix = m_untransformedCoordinates ? QTransform() : state->transform(); matrix.translate(position.x(), position.y()); @@ -524,6 +527,7 @@ namespace { bool m_dirtyPen; bool m_useBackendOptimizations; bool m_untransformedCoordinates; + QColor m_currentColor; }; class DrawTextItemDevice: public QPaintDevice diff --git a/tests/auto/qstatictext/tst_qstatictext.cpp b/tests/auto/qstatictext/tst_qstatictext.cpp index b6f06d3..66a2dd4 100644 --- a/tests/auto/qstatictext/tst_qstatictext.cpp +++ b/tests/auto/qstatictext/tst_qstatictext.cpp @@ -93,6 +93,9 @@ private slots: void drawUnderlinedText(); void unprintableCharacter_qtbug12614(); + + void underlinedColor_qtbug20159(); + void textDocumentColor(); }; void tst_QStaticText::init() @@ -764,5 +767,42 @@ void tst_QStaticText::unprintableCharacter_qtbug12614() QVERIFY(staticText.size().isValid()); // Force layout. Should not crash. } +void tst_QStaticText::underlinedColor_qtbug20159() +{ + QString multiScriptText; + multiScriptText += QChar(0x0410); // Cyrillic 'A' + multiScriptText += QLatin1Char('A'); + + QStaticText staticText(multiScriptText); + + QFont font; + font.setUnderline(true); + + staticText.prepare(QTransform(), font); + + QStaticTextPrivate *d = QStaticTextPrivate::get(&staticText); + QCOMPARE(d->itemCount, 2); + + // The pen should not be marked as dirty when drawing the underline + QVERIFY(!d->items[0].color.isValid()); + QVERIFY(!d->items[1].color.isValid()); +} + +void tst_QStaticText::textDocumentColor() +{ + QStaticText staticText("AB"); + staticText.setTextFormat(Qt::RichText); + staticText.prepare(); + + QStaticTextPrivate *d = QStaticTextPrivate::get(&staticText); + QCOMPARE(d->itemCount, 2); + + // The pen should not be marked as dirty when drawing the underline + QVERIFY(!d->items[0].color.isValid()); + QVERIFY(d->items[1].color.isValid()); + + QCOMPARE(d->items[1].color, QColor(Qt::red)); +} + QTEST_MAIN(tst_QStaticText) #include "tst_qstatictext.moc" -- cgit v0.12 From d5301d0b54b334d4f2e4e7d460d02303a18b5e22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simo=20F=C3=A4lt?= Date: Fri, 17 Jun 2011 09:31:01 +0300 Subject: QTBUG-19500 lupdate fails to run from the Mac binary package on Mac OS X 10.5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaced std::cout with QTextStream Reviewed-by: Eckhart Köppen (cherry picked from commit f078275a2a4b2a279a6fcc24df3c21fe8b21f007) --- tools/linguist/lupdate/main.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/linguist/lupdate/main.cpp b/tools/linguist/lupdate/main.cpp index 737bfd0..727fad9 100644 --- a/tools/linguist/lupdate/main.cpp +++ b/tools/linguist/lupdate/main.cpp @@ -61,12 +61,14 @@ static QString m_defaultExtensions; static void printOut(const QString & out) { - std::cout << qPrintable(out); + QTextStream stream(stdout); + stream << out; } static void printErr(const QString & out) { - std::cerr << qPrintable(out); + QTextStream stream(stderr); + stream << out; } class LU { -- cgit v0.12 From 2197b8be6003ad3d0071564afb7080650202661b Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Wed, 29 Jun 2011 14:36:09 +0300 Subject: Fix QWidget::palettePropagation2() autotest on Symbian Autotest fails since calling QApplication::setPalette() clears away QPalette hash (class specific palette information). QS60Style tries to re-set theme-specific hash after updating application palette with real theme background, but does not take into account that application might have defined own custom palette hash data. As a fix, store the previously set palette hash information and restore it after calling QApplication::setPalette(). Additionally, remove the palette change event sending, since QApplication will post that event anyway when palette is updated. Task-number: QT-5011 Reviewed-by: Miikka Heikkinen --- src/gui/styles/qs60style_s60.cpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index 5699dbb..783dc05 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -1433,12 +1433,26 @@ QPixmap QS60StylePrivate::backgroundTexture(bool skipCreation) // Notify all widgets that palette is updated with the actual background texture. QPalette pal = QApplication::palette(); pal.setBrush(QPalette::Window, *m_background); + + //Application palette hash is automatically cleared when QApplication::setPalette is called. + //To avoid losing palette hash data, back it up before calling the setPalette() API and + //restore it afterwards. + typedef QHash PaletteHash; + PaletteHash hash; + if (qt_app_palettes_hash() || !qt_app_palettes_hash()->isEmpty()) + hash = *qt_app_palettes_hash(); QApplication::setPalette(pal); - setThemePaletteHash(&pal); + if (hash.isEmpty()) { + //set default theme palette hash + setThemePaletteHash(&pal); + } else { + for (int i = 0; i < hash.count() - 1; i++) { + QByteArray widgetClassName = hash.keys().at(i); + QApplication::setPalette(hash.value(widgetClassName), widgetClassName); + } + } storeThemePalette(&pal); - foreach (QWidget *widget, QApplication::allWidgets()){ - QEvent e(QEvent::PaletteChange); - QApplication::sendEvent(widget, &e); + foreach (QWidget *widget, QApplication::allWidgets()) { setThemePalette(widget); widget->ensurePolished(); } -- cgit v0.12 From c1759aa657f5f729c96696b819465c70266c21c8 Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Wed, 29 Jun 2011 14:40:24 +0300 Subject: Fix QWidget::palettePropagation2() autotest on Symbian (part 2) Add also include to QS60Style to avoid build failure. Task-number: QT-5011 Reviewed-by: Miikka Heikkinen --- src/gui/styles/qs60style_s60.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index 783dc05..6b66a09 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -44,6 +44,7 @@ #include "qpainter.h" #include "qstyleoption.h" #include "qstyle.h" +#include "private/qapplication_p.h" #include "private/qt_s60_p.h" #include "private/qpixmap_raster_symbian_p.h" #include "private/qcore_symbian_p.h" -- cgit v0.12