diff options
115 files changed, 1691 insertions, 5514 deletions
diff --git a/bin/patch_capabilities.pl b/bin/patch_capabilities.pl index 8afe776..f82c48f 100755 --- a/bin/patch_capabilities.pl +++ b/bin/patch_capabilities.pl @@ -131,9 +131,13 @@ if (@ARGV) } } - # Remove all dependencies to other packages to reduce unnecessary error messages - # from depended packages that are also patched and therefore have different UID. - if ($line =~ m/^\(0x[0-9|a-f|A-F]*\).*\{.*\}$/) + # Remove dependencies to known problem packages (i.e. packages that are likely to be patched, also) + # to reduce unnecessary error messages. + if ($line =~ m/^\(0x2002af5f\).*\{.*\}$/) + { + $newLine = "\n" + } + if ($line =~ m/^\(0x2001E61C\).*\{.*\}$/) { $newLine = "\n" } @@ -3369,10 +3369,10 @@ Configure options: -debug-and-release . Compile and link two versions of Qt, with and without debugging turned on (Mac only). - -developer-build.... Compile and link Qt with Qt developer options (including auto-tests exporting) + -developer-build ... Compile and link Qt with Qt developer options (including auto-tests exporting) - -opensource......... Compile and link the Open-Source Edition of Qt. - -commercial......... Compile and link the Commercial Edition of Qt. + -opensource ........ Compile and link the Open-Source Edition of Qt. + -commercial ........ Compile and link the Commercial Edition of Qt. * -shared ............ Create and use shared Qt libraries. @@ -3765,7 +3765,7 @@ Qt/X11 only: Requires fontconfig/fontconfig.h, libfontconfig, freetype.h and libfreetype. - $XIN -no-xinput.......... Do not compile Xinput support. + $XIN -no-xinput ......... Do not compile Xinput support. $XIY -xinput ............ Compile Xinput support. This also enabled tablet support which requires IRIX with wacom.h and libXi or XFree86 with X11/extensions/XInput.h and libXi. diff --git a/dist/changes-4.6.2 b/dist/changes-4.6.2 index aa8d40b..aaaaacc 100644 --- a/dist/changes-4.6.2 +++ b/dist/changes-4.6.2 @@ -66,8 +66,21 @@ QtCore QtGui ----- - - foo - * bar + - QAbstractScrollArea + * [QTBUG-1760] Reverted horizontal scrolling with mouse wheel when vertical scrollbar is hidden + + - QBmpHandler + * [QTBUG-7530] Fixed an infinite loop that could occur when reading invalid BMP images. + + - QGraphicsEffect + * [QTBUG-6901] Fixed performance problem when translating items with + graphics effects. + + - QImage + * [QTBUG-7231] Avoid an unnecessary copy in QImage::scaled(). + + - QPDFEngine + * [QTBUG-7249] Fixed the encoding of the Tile and Creator tags in the PDF engine. - QApplication * [QTBUG-6098] Added a flag to avoid construction of application panes. @@ -113,6 +126,15 @@ QtOpenGL - [QTBUG-7490] Better support for user-generated binary shaders. + - QGLWidget + * [QTBUG-7213] Fixed QGLWidget::renderPixmap() on Windows. + + - QGLPixelBuffer + * [QTBUG-7476] Fixed a crash under X11 when drawing QPixmaps to QGLPixelBuffers. + + - QGL2PaintEngineEx + * [QTBUG-7203] Reset the GL stencil mask, op and function in resetGLState(). + QtOpenVG -------- @@ -196,6 +218,7 @@ Qt for Mac OS X - [QTBUG-7832]: Restored missing margins around non-unified toolbars. - [QTBUG-7312]: Menubar and dock disappear after hiding a fullscreen widget on Cocoa. + - [QTBUG-7481]: Re-added the Close button in QPrintPreviewDialog for Mac/Carbon. - [QTBUG-7522]: Drawing fake buttons using QMacStyle+QStyleOptionViewItemV4 lead to crash. - [QTBUG-7625]: Calling showFullScreen() then showNormal() on a widget results in top menu hiding. - [QTBUG-7086]: QFileDialog now correctly responds to fileMode & acceptMode changes. @@ -203,6 +226,7 @@ Qt for Mac OS X - [QTBUG-7305]: Fixed a crash when deleting QMainWindow with native toolbar on Cocoa. - [QTBUG-6882]: Fixed a text layout issue with QHeaderView in right-to-left mode. + Qt for Embedded Linux --------------------- @@ -227,6 +251,14 @@ Qt for Windows CE Qt for Symbian -------------- + * [QTBUG-6556] Improve the DEF file handling scheme, to allow simple enable/ + disable of DEF file usage (for use _during development only_ to decouple + the need to update the DEF files at the precise point that symbols are + removed, therefore allowing builds by CI systems to succeed even if symbols + have been removed. This does not remove the need to update the DEF files + before release. NOTE: Builds generated using this flag are not binary + compatible with previous versions of Qt.) + - QProcess * [QTBUG-7667] Fixed no-timeout case for QProcess::waitForFinished. diff --git a/doc/src/getting-started/installation.qdoc b/doc/src/getting-started/installation.qdoc index 5f95c5a..b679250 100644 --- a/doc/src/getting-started/installation.qdoc +++ b/doc/src/getting-started/installation.qdoc @@ -1038,8 +1038,9 @@ If you are using pre-built binaries, follow the instructions given in the \list \o \bold{Note:} This is not required if you are using pre-built binary package. \endlist - \o Building Qt libraries requires \l{http://www.arm.com/products/DevTools/RVCT.html}{RVCT} 2.2 [build 686] or later, - which is not available free of charge. + \o Building Qt libraries requires \l{http://www.arm.com/products/DevTools/RVCT.html}{RVCT} version 2.2 (build 686 or later), + which is not available free of charge. Usage of later versions of RVCT, including the 3.x and 4.x series, is not supported + in this release. \endlist Running Qt on real device requires the Open C to be installed on the device. diff --git a/examples/multimedia/audioinput/audioinput.cpp b/examples/multimedia/audioinput/audioinput.cpp index 8cc9948..fbf4dc4 100644 --- a/examples/multimedia/audioinput/audioinput.cpp +++ b/examples/multimedia/audioinput/audioinput.cpp @@ -213,6 +213,9 @@ InputTest::InputTest() if(format.sampleSize() != 16) { qWarning()<<"audio device doesn't support 16 bit samples, example cannot run"; + audioInput = 0; + button->setDisabled(true); + button2->setDisabled(true); return; } diff --git a/examples/multimedia/audiooutput/audiooutput.cpp b/examples/multimedia/audiooutput/audiooutput.cpp index 0c57f4d..b44accd 100644 --- a/examples/multimedia/audiooutput/audiooutput.cpp +++ b/examples/multimedia/audiooutput/audiooutput.cpp @@ -179,6 +179,9 @@ AudioTest::AudioTest() if(settings.sampleSize() != 16) { qWarning()<<"audio device doesn't support 16 bit samples, example cannot run"; + button->setDisabled(true); + button2->setDisabled(true); + audioOutput = 0; return; } diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index 7162bad..6113746 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -148,3 +148,19 @@ exists($${EPOCROOT}epoc32/release/winscw/udeb/z/system/install/Series60v5.0.sis MMP_RULES -= PAGED } } + +QMAKE_CXXFLAGS_FAST_VFP.ARMCC = --fpmode fast +# [TODO] QMAKE_CXXFLAGS_FAST_VFP.GCCE = + +symbian { + armfpu = $$find(MMP_RULES, "ARMFPU") + !isEmpty(armfpu) { + vfpv2 = $$find(MMP_RULES, "vfpv2") + !isEmpty(vfpv2) { + # we will respect fpu setting obtained from configure, but, + # if vfpv2 or softvfp+vfpv2 used we want to force RunFast VFP mode + QMAKE_CXXFLAGS.ARMCC += $${QMAKE_CXXFLAGS_FAST_VFP.ARMCC} + # [TODO] QMAKE_CXXFLAGS.GCCE += $${QMAKE_CXXFLAGS_FAST_VFP.GCCE} + } + } +}
\ No newline at end of file diff --git a/mkspecs/features/qttest_p4.prf b/mkspecs/features/qttest_p4.prf index 525e7b2..e0b22f2 100644 --- a/mkspecs/features/qttest_p4.prf +++ b/mkspecs/features/qttest_p4.prf @@ -13,23 +13,19 @@ symbian:{ # prefix test binary with tst_ !contains(TARGET, ^tst_.*):TARGET = $$join(TARGET,,"tst_") -######################################################################## -# Use install rule to run test application. -# This lets you do 'make install' on a test to both build and run it, -# and lets you easily build and run all tests from the parent directory. -# ---------------------------------------------------------------------- -runme.files = -runme.path = . -!isEmpty(DESTDIR): runme.commands = cd ./$(DESTDIR) && -macx: runme.commands += ./$(QMAKE_TARGET).app/Contents/MacOS/$(QMAKE_TARGET) -else:unix: runme.commands += ./$(QMAKE_TARGET) +check.files = +check.path = . +!isEmpty(DESTDIR): check.commands = cd ./$(DESTDIR) && +macx: check.commands += ./$(QMAKE_TARGET).app/Contents/MacOS/$(QMAKE_TARGET) +else:unix: check.commands += ./$(QMAKE_TARGET) else:win32: { - CONFIG(debug, debug|release):runme.commands += debug\\$(QMAKE_TARGET) - else:runme.commands += release\\$(QMAKE_TARGET) + CONFIG(debug, debug|release):check.commands += debug\\$(QMAKE_TARGET) + else:check.commands += release\\$(QMAKE_TARGET) } -embedded: runme.commands += -qws -INSTALLS += runme +embedded: check.commands += -qws +QMAKE_EXTRA_TARGETS += check -######################################################################## +target.path += $$[QT_INSTALL_PREFIX]/tests/qt4 +INSTALLS += target diff --git a/src/3rdparty/phonon/ds9/videowidget.cpp b/src/3rdparty/phonon/ds9/videowidget.cpp index 091be16..95423c6 100644 --- a/src/3rdparty/phonon/ds9/videowidget.cpp +++ b/src/3rdparty/phonon/ds9/videowidget.cpp @@ -218,6 +218,9 @@ namespace Phonon if (toNative && m_noNativeRendererSupported) return current; //no switch here + if (!mediaObject()) + return current; + //firt we delete the renderer //initialization of the widgets for(int i = 0; i < FILTER_COUNT; ++i) { diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index c304876..4348cbc 100644 --- a/src/3rdparty/webkit/VERSION +++ b/src/3rdparty/webkit/VERSION @@ -8,4 +8,4 @@ The commit imported was from the and has the sha1 checksum - 69dd29fbeb12d076741dce70ac6bc155101ccd6f + da5d96a26e80162027bc95ce7e5725fe4b277ff7 diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog index 18d119a..1f6f290 100644 --- a/src/3rdparty/webkit/WebCore/ChangeLog +++ b/src/3rdparty/webkit/WebCore/ChangeLog @@ -2,6 +2,44 @@ Reviewed by Kenneth Rohde Christiansen. + [Qt] In the StyledPainter determine the style from the Render and Scrollbar theme instead of from the paint device + https://bugs.webkit.org/show_bug.cgi?id=34054 + + Getting the style from the painter's paint device is a hack that breaks when + the paint device's style is different than the style that is used when + calculating the metries earlier when there is no painter available. + + This change moves us closer to always using the same style. + + * platform/qt/RenderThemeQt.cpp: + (WebCore::StylePainter::StylePainter): + (WebCore::StylePainter::init): + (WebCore::RenderThemeQt::paintButton): + (WebCore::RenderThemeQt::paintTextField): + (WebCore::RenderThemeQt::paintMenuList): + (WebCore::RenderThemeQt::paintMenuListButton): + (WebCore::RenderThemeQt::paintSliderTrack): + (WebCore::RenderThemeQt::paintMediaMuteButton): + (WebCore::RenderThemeQt::paintMediaPlayButton): + (WebCore::RenderThemeQt::paintMediaSliderTrack): + (WebCore::RenderThemeQt::paintMediaSliderThumb): + * platform/qt/RenderThemeQt.h: + * platform/qt/ScrollbarThemeQt.cpp: + (WebCore::ScrollbarThemeQt::paint): + (WebCore::ScrollbarThemeQt::hitTest): + (WebCore::ScrollbarThemeQt::shouldCenterOnThumb): + (WebCore::ScrollbarThemeQt::scrollbarThickness): + (WebCore::ScrollbarThemeQt::thumbLength): + (WebCore::ScrollbarThemeQt::trackPosition): + (WebCore::ScrollbarThemeQt::trackLength): + (WebCore::ScrollbarThemeQt::paintScrollCorner): + (WebCore::ScrollbarThemeQt::style): + * platform/qt/ScrollbarThemeQt.h: + +2010-01-25 Simon Hausmann <hausmann@webkit.org> + + Reviewed by Kenneth Rohde Christiansen. + [Qt] Use the fallback style on Maemo 5 https://bugs.webkit.org/show_bug.cgi?id=34376 diff --git a/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.cpp b/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.cpp index 6a1eee8..37a6408 100644 --- a/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.cpp +++ b/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.cpp @@ -44,6 +44,7 @@ #include "Page.h" #include "RenderBox.h" #include "RenderTheme.h" +#include "ScrollbarThemeQt.h" #include "UserAgentStyleSheets.h" #include "QWebPageClient.h" #include "qwebpage.h" @@ -66,17 +67,17 @@ namespace WebCore { using namespace HTMLNames; -StylePainter::StylePainter(const RenderObject::PaintInfo& paintInfo) +StylePainter::StylePainter(RenderThemeQt* theme, const RenderObject::PaintInfo& paintInfo) { - init(paintInfo.context ? paintInfo.context : 0); + init(paintInfo.context ? paintInfo.context : 0, theme->qStyle()); } -StylePainter::StylePainter(GraphicsContext* context) +StylePainter::StylePainter(ScrollbarThemeQt* theme, GraphicsContext* context) { - init(context); + init(context, theme->style()); } -void StylePainter::init(GraphicsContext* context) +void StylePainter::init(GraphicsContext* context, QStyle* themeStyle) { painter = static_cast<QPainter*>(context->platformContext()); widget = 0; @@ -85,7 +86,7 @@ void StylePainter::init(GraphicsContext* context) dev = painter->device(); if (dev && dev->devType() == QInternal::Widget) widget = static_cast<QWidget*>(dev); - style = (widget ? widget->style() : QApplication::style()); + style = themeStyle; if (painter) { // the styles often assume being called with a pristine painter where no brush is set, @@ -464,7 +465,7 @@ void RenderThemeQt::setButtonPadding(RenderStyle* style) const bool RenderThemeQt::paintButton(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r) { - StylePainter p(i); + StylePainter p(this, i); if (!p.isValid()) return true; @@ -497,7 +498,7 @@ void RenderThemeQt::adjustTextFieldStyle(CSSStyleSelector*, RenderStyle* style, bool RenderThemeQt::paintTextField(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r) { - StylePainter p(i); + StylePainter p(this, i); if (!p.isValid()) return true; @@ -566,7 +567,7 @@ void RenderThemeQt::setPopupPadding(RenderStyle* style) const bool RenderThemeQt::paintMenuList(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r) { - StylePainter p(i); + StylePainter p(this, i); if (!p.isValid()) return true; @@ -606,7 +607,7 @@ void RenderThemeQt::adjustMenuListButtonStyle(CSSStyleSelector*, RenderStyle* st bool RenderThemeQt::paintMenuListButton(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r) { - StylePainter p(i); + StylePainter p(this, i); if (!p.isValid()) return true; @@ -837,7 +838,7 @@ bool RenderThemeQt::paintMediaMuteButton(RenderObject* o, const RenderObject::Pa if (!mediaElement) return false; - StylePainter p(paintInfo); + StylePainter p(this, paintInfo); if (!p.isValid()) return true; @@ -866,7 +867,7 @@ bool RenderThemeQt::paintMediaPlayButton(RenderObject* o, const RenderObject::Pa if (!mediaElement) return false; - StylePainter p(paintInfo); + StylePainter p(this, paintInfo); if (!p.isValid()) return true; @@ -905,7 +906,7 @@ bool RenderThemeQt::paintMediaSliderTrack(RenderObject* o, const RenderObject::P if (!mediaElement) return false; - StylePainter p(paintInfo); + StylePainter p(this, paintInfo); if (!p.isValid()) return true; @@ -932,7 +933,7 @@ bool RenderThemeQt::paintMediaSliderThumb(RenderObject* o, const RenderObject::P if (!mediaElement) return false; - StylePainter p(paintInfo); + StylePainter p(this, paintInfo); if (!p.isValid()) return true; diff --git a/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.h b/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.h index 19337ac..13fb42f 100644 --- a/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.h +++ b/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.h @@ -35,6 +35,7 @@ namespace WebCore { class RenderStyle; class HTMLMediaElement; +class ScrollbarThemeQt; class RenderThemeQt : public RenderTheme { private: @@ -75,6 +76,8 @@ public: virtual String extraMediaControlsStyleSheet(); #endif + QStyle* qStyle() const; + protected: virtual bool paintCheckbox(RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& r); virtual void setCheckboxSize(RenderStyle*) const; @@ -137,7 +140,6 @@ private: void setButtonPadding(RenderStyle*) const; void setPopupPadding(RenderStyle*) const; - QStyle* qStyle() const; QStyle* fallbackStyle() const; Page* m_page; @@ -152,8 +154,8 @@ private: class StylePainter { public: - explicit StylePainter(const RenderObject::PaintInfo& paintInfo); - explicit StylePainter(GraphicsContext* context); + explicit StylePainter(RenderThemeQt*, const RenderObject::PaintInfo&); + explicit StylePainter(ScrollbarThemeQt*, GraphicsContext*); ~StylePainter(); bool isValid() const { return painter && style; } @@ -170,7 +172,7 @@ public: { style->drawComplexControl(cc, &opt, painter, widget); } private: - void init(GraphicsContext* context); + void init(GraphicsContext* context, QStyle*); QBrush oldBrush; bool oldAntialiasing; diff --git a/src/3rdparty/webkit/WebCore/platform/qt/ScrollbarThemeQt.cpp b/src/3rdparty/webkit/WebCore/platform/qt/ScrollbarThemeQt.cpp index 561e55f..c0692ca 100644 --- a/src/3rdparty/webkit/WebCore/platform/qt/ScrollbarThemeQt.cpp +++ b/src/3rdparty/webkit/WebCore/platform/qt/ScrollbarThemeQt.cpp @@ -140,7 +140,7 @@ bool ScrollbarThemeQt::paint(Scrollbar* scrollbar, GraphicsContext* graphicsCont return false; } - StylePainter p(graphicsContext); + StylePainter p(this, graphicsContext); if (!p.isValid()) return true; @@ -172,14 +172,14 @@ ScrollbarPart ScrollbarThemeQt::hitTest(Scrollbar* scrollbar, const PlatformMous QStyleOptionSlider* opt = styleOptionSlider(scrollbar); const QPoint pos = scrollbar->convertFromContainingWindow(evt.pos()); opt->rect.moveTo(QPoint(0, 0)); - QStyle::SubControl sc = QApplication::style()->hitTestComplexControl(QStyle::CC_ScrollBar, opt, pos, 0); + QStyle::SubControl sc = style()->hitTestComplexControl(QStyle::CC_ScrollBar, opt, pos, 0); return scrollbarPart(sc); } bool ScrollbarThemeQt::shouldCenterOnThumb(Scrollbar*, const PlatformMouseEvent& evt) { // Middle click centers slider thumb (if supported) - return QApplication::style()->styleHint(QStyle::SH_ScrollBar_MiddleClickAbsolutePosition) && evt.button() == MiddleButton; + return style()->styleHint(QStyle::SH_ScrollBar_MiddleClickAbsolutePosition) && evt.button() == MiddleButton; } void ScrollbarThemeQt::invalidatePart(Scrollbar* scrollbar, ScrollbarPart) @@ -190,13 +190,12 @@ void ScrollbarThemeQt::invalidatePart(Scrollbar* scrollbar, ScrollbarPart) int ScrollbarThemeQt::scrollbarThickness(ScrollbarControlSize controlSize) { - QStyle* s = QApplication::style(); QStyleOptionSlider o; o.orientation = Qt::Vertical; o.state &= ~QStyle::State_Horizontal; if (controlSize != RegularScrollbar) o.state |= QStyle::State_Mini; - return s->pixelMetric(QStyle::PM_ScrollBarExtent, &o, 0); + return style()->pixelMetric(QStyle::PM_ScrollBarExtent, &o, 0); } int ScrollbarThemeQt::thumbPosition(Scrollbar* scrollbar) @@ -209,21 +208,21 @@ int ScrollbarThemeQt::thumbPosition(Scrollbar* scrollbar) int ScrollbarThemeQt::thumbLength(Scrollbar* scrollbar) { QStyleOptionSlider* opt = styleOptionSlider(scrollbar); - IntRect thumb = QApplication::style()->subControlRect(QStyle::CC_ScrollBar, opt, QStyle::SC_ScrollBarSlider, 0); + IntRect thumb = style()->subControlRect(QStyle::CC_ScrollBar, opt, QStyle::SC_ScrollBarSlider, 0); return scrollbar->orientation() == HorizontalScrollbar ? thumb.width() : thumb.height(); } int ScrollbarThemeQt::trackPosition(Scrollbar* scrollbar) { QStyleOptionSlider* opt = styleOptionSlider(scrollbar); - IntRect track = QApplication::style()->subControlRect(QStyle::CC_ScrollBar, opt, QStyle::SC_ScrollBarGroove, 0); + IntRect track = style()->subControlRect(QStyle::CC_ScrollBar, opt, QStyle::SC_ScrollBarGroove, 0); return scrollbar->orientation() == HorizontalScrollbar ? track.x() - scrollbar->x() : track.y() - scrollbar->y(); } int ScrollbarThemeQt::trackLength(Scrollbar* scrollbar) { QStyleOptionSlider* opt = styleOptionSlider(scrollbar); - IntRect track = QApplication::style()->subControlRect(QStyle::CC_ScrollBar, opt, QStyle::SC_ScrollBarGroove, 0); + IntRect track = style()->subControlRect(QStyle::CC_ScrollBar, opt, QStyle::SC_ScrollBarGroove, 0); return scrollbar->orientation() == HorizontalScrollbar ? track.width() : track.height(); } @@ -237,7 +236,7 @@ void ScrollbarThemeQt::paintScrollCorner(ScrollView* scrollView, GraphicsContext #if QT_VERSION < 0x040500 context->fillRect(rect, QApplication::palette().color(QPalette::Normal, QPalette::Window)); #else - StylePainter p(context); + StylePainter p(this, context); if (!p.isValid()) return; @@ -247,5 +246,10 @@ void ScrollbarThemeQt::paintScrollCorner(ScrollView* scrollView, GraphicsContext #endif } +QStyle* ScrollbarThemeQt::style() const +{ + return QApplication::style(); +} + } diff --git a/src/3rdparty/webkit/WebCore/platform/qt/ScrollbarThemeQt.h b/src/3rdparty/webkit/WebCore/platform/qt/ScrollbarThemeQt.h index 6ca44ea..cf4882d 100644 --- a/src/3rdparty/webkit/WebCore/platform/qt/ScrollbarThemeQt.h +++ b/src/3rdparty/webkit/WebCore/platform/qt/ScrollbarThemeQt.h @@ -28,6 +28,12 @@ #include "ScrollbarTheme.h" +#include <QtCore/qglobal.h> + +QT_BEGIN_NAMESPACE +class QStyle; +QT_END_NAMESPACE + namespace WebCore { class ScrollbarThemeQt : public ScrollbarTheme { @@ -49,6 +55,8 @@ public: virtual int trackLength(Scrollbar*); virtual int scrollbarThickness(ScrollbarControlSize = RegularScrollbar); + + QStyle* style() const; }; } diff --git a/src/corelib/codecs/qtextcodec.cpp b/src/corelib/codecs/qtextcodec.cpp index 698ca9e..b63a82e 100644 --- a/src/corelib/codecs/qtextcodec.cpp +++ b/src/corelib/codecs/qtextcodec.cpp @@ -958,8 +958,8 @@ QTextCodec *QTextCodec::codecForName(const QByteArray &name) if (nameMatch(cursor->name(), name)) return cursor; QList<QByteArray> aliases = cursor->aliases(); - for (int i = 0; i < aliases.size(); ++i) - if (nameMatch(aliases.at(i), name)) + for (int y = 0; y < aliases.size(); ++y) + if (nameMatch(aliases.at(y), name)) return cursor; } diff --git a/src/corelib/kernel/qabstractitemmodel.cpp b/src/corelib/kernel/qabstractitemmodel.cpp index dbf422e..36e4af9 100644 --- a/src/corelib/kernel/qabstractitemmodel.cpp +++ b/src/corelib/kernel/qabstractitemmodel.cpp @@ -1006,6 +1006,9 @@ void QAbstractItemModelPrivate::columnsRemoved(const QModelIndex &parent, Returns the child of the model index that is stored in the given \a row and \a column. + \note This function does not work for an invalid model index which is often + used as the root index. + \sa parent(), sibling() */ diff --git a/src/gui/dialogs/qfiledialog.cpp b/src/gui/dialogs/qfiledialog.cpp index 21650bb..089e04a 100644 --- a/src/gui/dialogs/qfiledialog.cpp +++ b/src/gui/dialogs/qfiledialog.cpp @@ -229,11 +229,10 @@ Q_GUI_EXPORT _qt_filedialog_save_filename_hook qt_filedialog_save_filename_hook \value ReadOnly Indicates that the model is readonly. \value HideNameFilterDetails Indicates if the is hidden or not. - This value is obsolete and does nothing since Qt 4.5: \value DontUseSheet In previous versions of Qt, the static functions would create a sheet by default if the static function - was given a parent. This is no longer supported in Qt 4.5, The + was given a parent. This is no longer supported and does nothing in Qt 4.5, The static functions will always be an application modal dialog. If you want to use sheets, use QFileDialog::open() instead. diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index ed36f87..b4e19d1 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -2569,6 +2569,7 @@ void QGraphicsItem::setOpacity(qreal opacity) if (newOpacity == d_ptr->opacity) return; + bool wasFullyTransparent = d_ptr->isOpacityNull(); d_ptr->opacity = newOpacity; // Notify change. @@ -2584,7 +2585,9 @@ void QGraphicsItem::setOpacity(qreal opacity) d_ptr->scene->d_func()->markDirty(this, QRectF(), /*invalidateChildren=*/true, /*force=*/false, - /*ignoreOpacity=*/true); + /*ignoreOpacity=*/d_ptr->isOpacityNull()); + if (wasFullyTransparent) + d_ptr->paintedViewBoundingRectsNeedRepaint = 1; } if (d_ptr->isObject) diff --git a/src/gui/graphicsview/qgraphicsitem_p.h b/src/gui/graphicsview/qgraphicsitem_p.h index 5ad6cd5..b3ca3b5 100644 --- a/src/gui/graphicsview/qgraphicsitem_p.h +++ b/src/gui/graphicsview/qgraphicsitem_p.h @@ -358,14 +358,20 @@ public: return o; } + inline bool isOpacityNull() const + { return (opacity < qreal(0.001)); } + + static inline bool isOpacityNull(qreal opacity) + { return (opacity < qreal(0.001)); } + inline bool isFullyTransparent() const { - if (opacity < 0.001) + if (isOpacityNull()) return true; if (!parent) return false; - return calcEffectiveOpacity() < 0.001; + return isOpacityNull(calcEffectiveOpacity()); } inline qreal effectiveOpacity() const { diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index 54d47fa..66707fc 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -251,6 +251,7 @@ #endif #include <private/qgraphicseffect_p.h> #include <private/qgesturemanager_p.h> +#include <private/qpathclipper_p.h> // #define GESTURE_DEBUG #ifndef GESTURE_DEBUG @@ -372,7 +373,10 @@ void QGraphicsScenePrivate::_q_emitUpdated() } } } else { - updateAll = false; + if (views.isEmpty()) { + updateAll = false; + return; + } for (int i = 0; i < views.size(); ++i) views.at(i)->d_func()->processPendingUpdates(); // It's important that we update all views before we dispatch, hence two for-loops. @@ -4603,6 +4607,7 @@ void QGraphicsScenePrivate::drawItems(QPainter *painter, const QTransform *const if (!unpolishedItems.isEmpty()) _q_polishItems(); + updateAll = false; QRectF exposedSceneRect; if (exposedRegion && indexMethod != QGraphicsScene::NoIndex) { exposedSceneRect = exposedRegion->boundingRect().adjusted(-1, -1, 1, 1); @@ -4630,7 +4635,7 @@ void QGraphicsScenePrivate::drawSubtreeRecursive(QGraphicsItem *item, QPainter * return; // Item has neither contents nor children!(?) const qreal opacity = item->d_ptr->combineOpacityFromParent(parentOpacity); - const bool itemIsFullyTransparent = (opacity < 0.0001); + const bool itemIsFullyTransparent = QGraphicsItemPrivate::isOpacityNull(opacity); if (itemIsFullyTransparent && (!itemHasChildren || item->d_ptr->childrenCombineOpacity())) return; @@ -4750,7 +4755,7 @@ void QGraphicsScenePrivate::draw(QGraphicsItem *item, QPainter *painter, const Q qreal opacity, const QTransform *effectTransform, bool wasDirtyParentSceneTransform, bool drawItem) { - const bool itemIsFullyTransparent = (opacity < 0.0001); + const bool itemIsFullyTransparent = QGraphicsItemPrivate::isOpacityNull(opacity); const bool itemClipsChildrenToShape = (item->d_ptr->flags & QGraphicsItem::ItemClipsChildrenToShape); const bool itemHasChildren = !item->d_ptr->children.isEmpty(); @@ -4765,7 +4770,12 @@ void QGraphicsScenePrivate::draw(QGraphicsItem *item, QPainter *painter, const Q painter->setWorldTransform(*transformPtr * *effectTransform); else painter->setWorldTransform(*transformPtr); - painter->setClipPath(item->shape(), Qt::IntersectClip); + QRectF clipRect; + const QPainterPath clipPath(item->shape()); + if (QPathClipper::pathToRect(clipPath, &clipRect)) + painter->setClipRect(clipRect, Qt::IntersectClip); + else + painter->setClipPath(clipPath, Qt::IntersectClip); } // Draw children behind @@ -4801,8 +4811,14 @@ void QGraphicsScenePrivate::draw(QGraphicsItem *item, QPainter *painter, const Q painter->setWorldTransform(*transformPtr); } - if (itemClipsToShape) - painter->setClipPath(item->shape(), Qt::IntersectClip); + if (itemClipsToShape) { + QRectF clipRect; + const QPainterPath clipPath(item->shape()); + if (QPathClipper::pathToRect(clipPath, &clipRect)) + painter->setClipRect(clipRect, Qt::IntersectClip); + else + painter->setClipPath(clipPath, Qt::IntersectClip); + } painter->setOpacity(opacity); if (!item->d_ptr->cacheMode && !item->d_ptr->isWidget) @@ -4980,7 +4996,8 @@ void QGraphicsScenePrivate::processDirtyItemsRecursive(QGraphicsItem *item, bool } const qreal opacity = item->d_ptr->combineOpacityFromParent(parentOpacity); - const bool itemIsFullyTransparent = !item->d_ptr->ignoreOpacity && opacity < 0.0001; + const bool itemIsFullyTransparent = !item->d_ptr->ignoreOpacity + && QGraphicsItemPrivate::isOpacityNull(opacity); if (itemIsFullyTransparent && (!itemHasChildren || item->d_ptr->childrenCombineOpacity())) { resetDirtyItem(item, /*recursive=*/itemHasChildren); return; @@ -5153,6 +5170,7 @@ void QGraphicsScene::drawItems(QPainter *painter, if (!d->unpolishedItems.isEmpty()) d->_q_polishItems(); + d->updateAll = false; QTransform viewTransform = painter->worldTransform(); Q_UNUSED(options); diff --git a/src/gui/graphicsview/qgraphicssceneindex.cpp b/src/gui/graphicsview/qgraphicssceneindex.cpp index 043c4eb..707c71f 100644 --- a/src/gui/graphicsview/qgraphicssceneindex.cpp +++ b/src/gui/graphicsview/qgraphicssceneindex.cpp @@ -279,7 +279,7 @@ void QGraphicsSceneIndexPrivate::recursive_items_helper(QGraphicsItem *item, QRe return; const qreal opacity = item->d_ptr->combineOpacityFromParent(parentOpacity); - const bool itemIsFullyTransparent = (opacity < 0.0001); + const bool itemIsFullyTransparent = QGraphicsItemPrivate::isOpacityNull(opacity); const bool itemHasChildren = !item->d_ptr->children.isEmpty(); if (itemIsFullyTransparent && (!itemHasChildren || item->d_ptr->childrenCombineOpacity())) return; @@ -554,7 +554,7 @@ QList<QGraphicsItem *> QGraphicsSceneIndex::estimateTopLevelItems(const QRectF & /*! \fn QList<QGraphicsItem *> QGraphicsSceneIndex::items(Qt::SortOrder order = Qt::DescendingOrder) const - + This pure virtual function all items in the index and sort them using \a order. */ diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp index 451f183..96b9373 100644 --- a/src/gui/graphicsview/qgraphicsview.cpp +++ b/src/gui/graphicsview/qgraphicsview.cpp @@ -2748,7 +2748,6 @@ bool QGraphicsView::viewportEvent(QEvent *event) } } } - d->scene->d_func()->updateAll = false; } break; case QEvent::TouchBegin: diff --git a/src/gui/image/qimagepixmapcleanuphooks.cpp b/src/gui/image/qimagepixmapcleanuphooks.cpp index 61d538f..ace4bb6 100644 --- a/src/gui/image/qimagepixmapcleanuphooks.cpp +++ b/src/gui/image/qimagepixmapcleanuphooks.cpp @@ -62,12 +62,12 @@ QImagePixmapCleanupHooks *QImagePixmapCleanupHooks::instance() return qt_image_and_pixmap_cleanup_hooks(); } -void QImagePixmapCleanupHooks::addPixmapModificationHook(_qt_pixmap_cleanup_hook_pm hook) +void QImagePixmapCleanupHooks::addPixmapDataModificationHook(_qt_pixmap_cleanup_hook_pmd hook) { pixmapModificationHooks.append(hook); } -void QImagePixmapCleanupHooks::addPixmapDestructionHook(_qt_pixmap_cleanup_hook_pm hook) +void QImagePixmapCleanupHooks::addPixmapDataDestructionHook(_qt_pixmap_cleanup_hook_pmd hook) { pixmapDestructionHooks.append(hook); } @@ -78,12 +78,12 @@ void QImagePixmapCleanupHooks::addImageHook(_qt_image_cleanup_hook_64 hook) imageHooks.append(hook); } -void QImagePixmapCleanupHooks::removePixmapModificationHook(_qt_pixmap_cleanup_hook_pm hook) +void QImagePixmapCleanupHooks::removePixmapDataModificationHook(_qt_pixmap_cleanup_hook_pmd hook) { pixmapModificationHooks.removeAll(hook); } -void QImagePixmapCleanupHooks::removePixmapDestructionHook(_qt_pixmap_cleanup_hook_pm hook) +void QImagePixmapCleanupHooks::removePixmapDataDestructionHook(_qt_pixmap_cleanup_hook_pmd hook) { pixmapDestructionHooks.removeAll(hook); } @@ -93,24 +93,24 @@ void QImagePixmapCleanupHooks::removeImageHook(_qt_image_cleanup_hook_64 hook) imageHooks.removeAll(hook); } -void QImagePixmapCleanupHooks::executePixmapModificationHooks(QPixmap* pm) +void QImagePixmapCleanupHooks::executePixmapDataModificationHooks(QPixmapData* pmd) { QImagePixmapCleanupHooks *h = qt_image_and_pixmap_cleanup_hooks(); for (int i = 0; i < h->pixmapModificationHooks.count(); ++i) - h->pixmapModificationHooks[i](pm); + h->pixmapModificationHooks[i](pmd); if (qt_pixmap_cleanup_hook_64) - qt_pixmap_cleanup_hook_64(pm->cacheKey()); + qt_pixmap_cleanup_hook_64(pmd->cacheKey()); } -void QImagePixmapCleanupHooks::executePixmapDestructionHooks(QPixmap* pm) +void QImagePixmapCleanupHooks::executePixmapDataDestructionHooks(QPixmapData* pmd) { QImagePixmapCleanupHooks *h = qt_image_and_pixmap_cleanup_hooks(); for (int i = 0; i < h->pixmapDestructionHooks.count(); ++i) - h->pixmapDestructionHooks[i](pm); + h->pixmapDestructionHooks[i](pmd); if (qt_pixmap_cleanup_hook_64) - qt_pixmap_cleanup_hook_64(pm->cacheKey()); + qt_pixmap_cleanup_hook_64(pmd->cacheKey()); } void QImagePixmapCleanupHooks::executeImageHooks(qint64 key) diff --git a/src/gui/image/qimagepixmapcleanuphooks_p.h b/src/gui/image/qimagepixmapcleanuphooks_p.h index 7176044..88dd3a6 100644 --- a/src/gui/image/qimagepixmapcleanuphooks_p.h +++ b/src/gui/image/qimagepixmapcleanuphooks_p.h @@ -58,7 +58,8 @@ QT_BEGIN_NAMESPACE typedef void (*_qt_image_cleanup_hook_64)(qint64); -typedef void (*_qt_pixmap_cleanup_hook_pm)(QPixmap*); +typedef void (*_qt_pixmap_cleanup_hook_pmd)(QPixmapData*); + class QImagePixmapCleanupHooks; @@ -71,27 +72,27 @@ public: static void enableCleanupHooks(const QPixmap &pixmap); static void enableCleanupHooks(QPixmapData *pixmapData); - // Gets called when a pixmap is about to be modified: - void addPixmapModificationHook(_qt_pixmap_cleanup_hook_pm); + // Gets called when a pixmap data is about to be modified: + void addPixmapDataModificationHook(_qt_pixmap_cleanup_hook_pmd); - // Gets called when a pixmap is about to be destroyed: - void addPixmapDestructionHook(_qt_pixmap_cleanup_hook_pm); + // Gets called when a pixmap data is about to be destroyed: + void addPixmapDataDestructionHook(_qt_pixmap_cleanup_hook_pmd); // Gets called when an image is about to be modified or destroyed: void addImageHook(_qt_image_cleanup_hook_64); - void removePixmapModificationHook(_qt_pixmap_cleanup_hook_pm); - void removePixmapDestructionHook(_qt_pixmap_cleanup_hook_pm); + void removePixmapDataModificationHook(_qt_pixmap_cleanup_hook_pmd); + void removePixmapDataDestructionHook(_qt_pixmap_cleanup_hook_pmd); void removeImageHook(_qt_image_cleanup_hook_64); - static void executePixmapModificationHooks(QPixmap*); - static void executePixmapDestructionHooks(QPixmap*); + static void executePixmapDataModificationHooks(QPixmapData*); + static void executePixmapDataDestructionHooks(QPixmapData*); static void executeImageHooks(qint64 key); private: QList<_qt_image_cleanup_hook_64> imageHooks; - QList<_qt_pixmap_cleanup_hook_pm> pixmapModificationHooks; - QList<_qt_pixmap_cleanup_hook_pm> pixmapDestructionHooks; + QList<_qt_pixmap_cleanup_hook_pmd> pixmapModificationHooks; + QList<_qt_pixmap_cleanup_hook_pmd> pixmapDestructionHooks; }; QT_END_NAMESPACE diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index f823fdc..d1e5c40 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -320,8 +320,6 @@ QPixmap::QPixmap(const char * const xpm[]) QPixmap::~QPixmap() { Q_ASSERT(!data || data->ref >= 1); // Catch if ref-counting changes again - if (data && data->is_cached && data->ref == 1) // ref will be decrememnted after destructor returns - QImagePixmapCleanupHooks::executePixmapDestructionHooks(this); } /*! @@ -1025,12 +1023,8 @@ qint64 QPixmap::cacheKey() const if (isNull()) return 0; - int classKey = data->classId(); - if (classKey >= 1024) - classKey = -(classKey >> 10); - return ((((qint64) classKey) << 56) - | (((qint64) data->serialNumber()) << 32) - | ((qint64) (data->detach_no))); + Q_ASSERT(data); + return data->cacheKey(); } static void sendResizeEvents(QWidget *target) @@ -1943,7 +1937,7 @@ void QPixmap::detach() } if (data->is_cached && data->ref == 1) - QImagePixmapCleanupHooks::executePixmapModificationHooks(this); + QImagePixmapCleanupHooks::executePixmapDataModificationHooks(data.data()); #if defined(Q_WS_MAC) QMacPixmapData *macData = id == QPixmapData::MacClass ? static_cast<QMacPixmapData*>(data.data()) : 0; diff --git a/src/gui/image/qpixmap_x11.cpp b/src/gui/image/qpixmap_x11.cpp index 0e66e09..e1e8a0d 100644 --- a/src/gui/image/qpixmap_x11.cpp +++ b/src/gui/image/qpixmap_x11.cpp @@ -68,6 +68,7 @@ #include "qx11info_x11.h" #include <private/qdrawhelper_p.h> #include <private/qimage_p.h> +#include <private/qimagepixmapcleanuphooks_p.h> #include <stdlib.h> @@ -1228,6 +1229,12 @@ void QX11PixmapData::fill(const QColor &fillColor) QX11PixmapData::~QX11PixmapData() { + // Cleanup hooks have to be called before the handles are freed + if (is_cached) { + QImagePixmapCleanupHooks::executePixmapDataDestructionHooks(this); + is_cached = false; + } + release(); } @@ -1236,8 +1243,13 @@ void QX11PixmapData::release() delete pengine; pengine = 0; - if (!X11) + if (!X11) { +#ifndef QT_NO_DEBUG + qWarning("~QX11PixmapData(): QPixmap objects must be destroyed before the QApplication" + " object, otherwise the native pixmap object will be leaked."); +#endif return; + } if (x11_mask) { #ifndef QT_NO_XRENDER diff --git a/src/gui/image/qpixmapdata.cpp b/src/gui/image/qpixmapdata.cpp index 65032da..ea4fe6b 100644 --- a/src/gui/image/qpixmapdata.cpp +++ b/src/gui/image/qpixmapdata.cpp @@ -45,6 +45,7 @@ #include <QtGui/qimagereader.h> #include <private/qgraphicssystem_p.h> #include <private/qapplication_p.h> +#include <private/qimagepixmapcleanuphooks_p.h> QT_BEGIN_NAMESPACE @@ -80,6 +81,16 @@ QPixmapData::QPixmapData(PixelType pixelType, int objectId) QPixmapData::~QPixmapData() { + // Sometimes the pixmap cleanup hooks will be called from derrived classes, which will + // then set is_cached to false. For example, on X11 QtOpenGL needs to delete the GLXPixmap + // or EGL Pixmap Surface for a given pixmap _before_ the native X11 pixmap is deleted, + // otherwise some drivers will leak the GL surface. In this case, QX11PixmapData will + // call the cleanup hooks itself before deleting the native pixmap and set is_cached to + // false. + if (is_cached) { + QImagePixmapCleanupHooks::executePixmapDataDestructionHooks(this); + is_cached = false; + } } QPixmapData *QPixmapData::createCompatiblePixmapData() const diff --git a/src/gui/image/qpixmapdata_p.h b/src/gui/image/qpixmapdata_p.h index 1125515..827fa18 100644 --- a/src/gui/image/qpixmapdata_p.h +++ b/src/gui/image/qpixmapdata_p.h @@ -117,6 +117,14 @@ public: inline int colorCount() const { return metric(QPaintDevice::PdmNumColors); } inline int depth() const { return d; } inline bool isNull() const { return is_null; } + inline qint64 cacheKey() const { + int classKey = id; + if (classKey >= 1024) + classKey = -(classKey >> 10); + return ((((qint64) classKey) << 56) + | (((qint64) ser_no) << 32) + | ((qint64) detach_no)); + } #if defined(Q_OS_SYMBIAN) virtual void* toNativeType(NativeType type); diff --git a/src/gui/inputmethod/qcoefepinputcontext_p.h b/src/gui/inputmethod/qcoefepinputcontext_p.h index f5034fc..d5243c3 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_p.h +++ b/src/gui/inputmethod/qcoefepinputcontext_p.h @@ -96,7 +96,7 @@ protected: void timerEvent(QTimerEvent *timerEvent); private: - void commitCurrentString(bool triggeredBySymbian); + void commitCurrentString(bool cancelFepTransaction); void updateHints(bool mustUpdateInputCapabilities); void applyHints(Qt::InputMethodHints hints); void applyFormat(QList<QInputMethodEvent::Attribute> *attributes); @@ -127,7 +127,7 @@ public: private: void DoCommitFepInlineEditL(); MCoeFepAwareTextEditor_Extension1* Extension1(TBool& aSetToTrue); - void ReportAknEdStateEvent(MAknEdStateObserver::EAknEdwinStateEvent aEventType); + void ReportAknEdStateEvent(MAknEdStateObserver::EAknEdwinStateEvent aEventType); // From MCoeFepAwareTextEditor_Extension1 public: @@ -151,7 +151,6 @@ private: int m_inlinePosition; MFepInlineTextFormatRetriever *m_formatRetriever; MFepPointerEventHandlerDuringInlineEdit *m_pointerHandler; - int m_longPress; int m_cursorPos; QBasicTimer m_tempPreeditStringTimeout; bool m_hasTempPreeditString; diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index e5ab300..2b91711 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -71,7 +71,6 @@ QCoeFepInputContext::QCoeFepInputContext(QObject *parent) m_inlinePosition(0), m_formatRetriever(0), m_pointerHandler(0), - m_longPress(0), m_cursorPos(0), m_hasTempPreeditString(false) { @@ -101,7 +100,7 @@ QCoeFepInputContext::~QCoeFepInputContext() void QCoeFepInputContext::reset() { - commitCurrentString(false); + commitCurrentString(true); } void QCoeFepInputContext::ReportAknEdStateEvent(MAknEdStateObserver::EAknEdwinStateEvent aEventType) @@ -126,7 +125,7 @@ void QCoeFepInputContext::update() void QCoeFepInputContext::setFocusWidget(QWidget *w) { - commitCurrentString(false); + commitCurrentString(true); QInputContext::setFocusWidget(w); @@ -219,7 +218,7 @@ bool QCoeFepInputContext::filterEvent(const QEvent *event) break; case Qt::Key_Select: if (!m_preeditString.isEmpty()) { - commitCurrentString(false); + commitCurrentString(true); return true; } break; @@ -231,10 +230,11 @@ bool QCoeFepInputContext::filterEvent(const QEvent *event) && focusWidget()->inputMethodHints() & Qt::ImhHiddenText && !keyEvent->text().isEmpty()) { // Send some temporary preedit text in order to make text visible for a moment. + m_cursorPos = focusWidget()->inputMethodQuery(Qt::ImCursorPosition).toInt(); m_preeditString = keyEvent->text(); QList<QInputMethodEvent::Attribute> attributes; QInputMethodEvent imEvent(m_preeditString, attributes); - QApplication::sendEvent(focusWidget(), &imEvent); + sendEvent(imEvent); m_tempPreeditStringTimeout.start(1000, this); m_hasTempPreeditString = true; update(); @@ -293,7 +293,7 @@ void QCoeFepInputContext::mouseHandler( int x, QMouseEvent *event) Q_ASSERT(focusWidget()); if (event->type() == QEvent::MouseButtonPress && event->button() == Qt::LeftButton) { - commitCurrentString(false); + commitCurrentString(true); int pos = focusWidget()->inputMethodQuery(Qt::ImCursorPosition).toInt(); QList<QInputMethodEvent::Attribute> attributes; @@ -739,31 +739,33 @@ void QCoeFepInputContext::GetScreenCoordinatesForFepL(TPoint& aLeftSideOfBaseLin void QCoeFepInputContext::DoCommitFepInlineEditL() { - commitCurrentString(true); + commitCurrentString(false); } -void QCoeFepInputContext::commitCurrentString(bool triggeredBySymbian) +void QCoeFepInputContext::commitCurrentString(bool cancelFepTransaction) { + int longPress = 0; + if (m_preeditString.size() == 0) { QWidget *w = focusWidget(); - if (triggeredBySymbian && w) { + if (!cancelFepTransaction && w) { // We must replace the last character only if the input box has already accepted one if (w->inputMethodQuery(Qt::ImCursorPosition).toInt() != m_cursorPos) - m_longPress = 1; + longPress = 1; } return; } QList<QInputMethodEvent::Attribute> attributes; QInputMethodEvent event(QLatin1String(""), attributes); - event.setCommitString(m_preeditString, 0-m_longPress, m_longPress); + event.setCommitString(m_preeditString, 0-longPress, longPress); m_preeditString.clear(); sendEvent(event); m_hasTempPreeditString = false; - m_longPress = 0; + longPress = 0; - if (!triggeredBySymbian) { + if (cancelFepTransaction) { CCoeFep* fep = CCoeEnv::Static()->Fep(); if (fep) fep->CancelTransaction(); diff --git a/src/gui/kernel/qaction.cpp b/src/gui/kernel/qaction.cpp index 4b7d949..8ddd051 100644 --- a/src/gui/kernel/qaction.cpp +++ b/src/gui/kernel/qaction.cpp @@ -715,6 +715,10 @@ QActionGroup *QAction::actionGroup() const it is displayed to the left of the menu text. There is no default icon. + On Symbian the icons which are passed to softkeys, i.e. to actions with + softkey role, need to have pixmap alpha channel correctly set otherwise + drawing artifacts will appear when softkey is pressed down. + If a null icon (QIcon::isNull() is passed into this function, the icon of the action is cleared. */ diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 6e03d7c..4a137ee 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -924,8 +924,8 @@ void QSymbianControl::PositionChanged() cr.moveTopLeft(newPos); qwidget->data->crect = cr; QTLWExtra *top = qwidget->d_func()->maybeTopData(); - if (top) - top->normalGeometry = cr; + if (top && (qwidget->windowState() & (~Qt::WindowActive)) == Qt::WindowNoState) + top->normalGeometry.moveTopLeft(newPos); if (qwidget->isVisible()) { QMoveEvent e(newPos, oldPos); qt_sendSpontaneousEvent(qwidget, &e); @@ -960,15 +960,14 @@ void QSymbianControl::FocusChanged(TDrawNow /* aDrawNow */) qwidget->d_func()->setWindowIcon_sys(true); qwidget->d_func()->setWindowTitle_sys(qwidget->windowTitle()); #ifdef Q_WS_S60 - // If widget is fullscreen, hide status pane and button container - // otherwise show them. + // If widget is fullscreen/minimized, hide status pane and button container otherwise show them. CEikStatusPane* statusPane = S60->statusPane(); CEikButtonGroupContainer* buttonGroup = S60->buttonGroupContainer(); - bool isFullscreen = qwidget->windowState() & Qt::WindowFullScreen; - if (statusPane && (bool)statusPane->IsVisible() == isFullscreen) - statusPane->MakeVisible(!isFullscreen); - if (buttonGroup && (bool)buttonGroup->IsVisible() == isFullscreen) - buttonGroup->MakeVisible(!isFullscreen); + TBool visible = !(qwidget->windowState() & (Qt::WindowFullScreen | Qt::WindowMinimized)); + if (statusPane) + statusPane->MakeVisible(visible); + if (buttonGroup) + buttonGroup->MakeVisible(visible); #endif } else if (QApplication::activeWindow() == qwidget->window()) { if (CCoeEnv::Static()->AppUi()->IsDisplayingMenuOrDialog()) { diff --git a/src/gui/kernel/qsoftkeymanager_s60.cpp b/src/gui/kernel/qsoftkeymanager_s60.cpp index a72d16c..af84a8f 100644 --- a/src/gui/kernel/qsoftkeymanager_s60.cpp +++ b/src/gui/kernel/qsoftkeymanager_s60.cpp @@ -237,21 +237,18 @@ bool QSoftKeyManagerPrivateS60::setSoftkeyImage(CEikButtonGroupContainer *cba, // prepareSoftkeyPixmap creates a new pixmap with requiredIconSize and blits the 'pmWihtAspectRatio' // to correct location of it QPixmap softkeyPixmap = prepareSoftkeyPixmap(pmWihtAspectRatio, position, requiredIconSize); - QBitmap softkeyMask = softkeyPixmap.mask(); - if (softkeyMask.isNull()) { - softkeyMask = QBitmap(softkeyPixmap.size()); - softkeyMask.fill(Qt::color1); - } - // Softkey mask in > SV_S60_5_1 has to be inverted - if(QSysInfo::s60Version() > QSysInfo::SV_S60_5_1) { - QImage maskImage = softkeyMask.toImage(); - maskImage.invertPixels(); - softkeyMask = QPixmap::fromImage(maskImage); + QPixmap softkeyAlpha = softkeyPixmap.alphaChannel(); + // Alpha channel in 5.1 and older devices need to be inverted + // TODO: Switch to use toSymbianCFbsBitmap with invert when available + if(QSysInfo::s60Version() <= QSysInfo::SV_S60_5_1) { + QImage alphaImage = softkeyAlpha.toImage(); + alphaImage.invertPixels(); + softkeyAlpha = QPixmap::fromImage(alphaImage); } CFbsBitmap* nBitmap = softkeyPixmap.toSymbianCFbsBitmap(); - CFbsBitmap* nMask = softkeyMask.toSymbianCFbsBitmap(); + CFbsBitmap* nMask = softkeyAlpha.toSymbianCFbsBitmap(); CEikImage* myimage = new (ELeave) CEikImage; myimage->SetPicture( nBitmap, nMask ); // nBitmap and nMask ownership transfered diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 78a25ac..c072d9d 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -1439,6 +1439,18 @@ QWidget::~QWidget() } #endif +#ifdef Q_OS_SYMBIAN + if (d->extra && d->extra->topextra && d->extra->topextra->backingStore) { + // Okay, we are about to destroy the top-level window that owns + // the backing store. Make sure we delete the backing store right away + // before the window handle is invalid. This is important because + // the backing store will delete its window surface, which may or may + // not have a reference to this widget that will be used later to + // notify the window it no longer has a surface. + delete d->extra->topextra->backingStore; + d->extra->topextra->backingStore = 0; + } +#endif if (QWidgetBackingStore *bs = d->maybeBackingStore()) { bs->removeDirtyWidget(this); if (testAttribute(Qt::WA_StaticContents)) @@ -6427,6 +6439,8 @@ void QWidget::setTabOrder(QWidget* first, QWidget *second) first = fp; } + if (fp == second) + return; if (QWidget *sp = second->focusProxy()) second = sp; diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp index 0ce7534..a844430 100644 --- a/src/gui/kernel/qwidget_s60.cpp +++ b/src/gui/kernel/qwidget_s60.cpp @@ -1046,96 +1046,48 @@ void QWidget::setWindowState(Qt::WindowStates newstate) return; if (isWindow()) { -#ifdef Q_WS_S60 - // Change window decoration visibility if switching to or from fullsccreen - // In addition decoration visibility is changed when the initial has been - // WindowNoState. - // The window decoration visibility has to be changed before doing actual - // window state change since in that order the availableGeometry will return - // directly the right size and we will avoid unnecessarty redraws - if ((oldstate & Qt::WindowFullScreen) != (newstate & Qt::WindowFullScreen) || - oldstate == Qt::WindowNoState) { - CEikStatusPane* statusPane = S60->statusPane(); - CEikButtonGroupContainer* buttonGroup = S60->buttonGroupContainer(); - if (newstate & Qt::WindowFullScreen) { - if (statusPane) - statusPane->MakeVisible(false); - if (buttonGroup) - buttonGroup->MakeVisible(false); - } else { - if (statusPane) - statusPane->MakeVisible(true); - if (buttonGroup) - buttonGroup->MakeVisible(true); - } + QSymbianControl *window = static_cast<QSymbianControl *>(effectiveWinId()); + if (window && newstate & Qt::WindowMinimized) { + window->setFocusSafely(false); + window->MakeVisible(false); + } else if (window && oldstate & Qt::WindowMinimized) { + window->setFocusSafely(true); + window->MakeVisible(true); } + +#ifdef Q_WS_S60 + // Hide window decoration when switching to fullsccreen / minimized otherwise show decoration. + // The window decoration visibility has to be changed before doing actual window state + // change since in that order the availableGeometry will return directly the right size and + // we will avoid unnecessarty redraws + CEikStatusPane* statusPane = S60->statusPane(); + CEikButtonGroupContainer* buttonGroup = S60->buttonGroupContainer(); + TBool visible = !(newstate & (Qt::WindowFullScreen | Qt::WindowMinimized)); + if (statusPane) + statusPane->MakeVisible(visible); + if (buttonGroup) + buttonGroup->MakeVisible(visible); #endif // Q_WS_S60 createWinId(); Q_ASSERT(testAttribute(Qt::WA_WState_Created)); - QTLWExtra *top = d->topData(); - // Ensure the initial size is valid, since we store it as normalGeometry below. if (!testAttribute(Qt::WA_Resized) && !isVisible()) adjustSize(); - if ((oldstate & Qt::WindowMaximized) != (newstate & Qt::WindowMaximized)) { - if ((newstate & Qt::WindowMaximized)) { - const QRect normalGeometry = geometry(); + QTLWExtra *top = d->topData(); + const QRect normalGeometry = (top->normalGeometry.width() < 0) ? geometry() : top->normalGeometry; - const QRect r = top->normalGeometry; - setGeometry(qApp->desktop()->availableGeometry(this)); - top->normalGeometry = r; + if (newstate & Qt::WindowFullScreen) + setGeometry(qApp->desktop()->screenGeometry(this)); + else if (newstate & Qt::WindowMaximized) + setGeometry(qApp->desktop()->availableGeometry(this)); + else + setGeometry(normalGeometry); - if (top->normalGeometry.width() < 0) - top->normalGeometry = normalGeometry; - } else { - // restore original geometry - setGeometry(top->normalGeometry); - } - } - if ((oldstate & Qt::WindowFullScreen) != (newstate & Qt::WindowFullScreen)) { - if (newstate & Qt::WindowFullScreen) { - const QRect normalGeometry = geometry(); - const QRect r = top->normalGeometry; - setGeometry(qApp->desktop()->screenGeometry(this)); - - top->normalGeometry = r; - if (top->normalGeometry.width() < 0) - top->normalGeometry = normalGeometry; - } else { - if (newstate & Qt::WindowMaximized) { - const QRect r = top->normalGeometry; - setGeometry(qApp->desktop()->availableGeometry(this)); - top->normalGeometry = r; - } else { - setGeometry(top->normalGeometry); - } - } - } - if ((oldstate & Qt::WindowMinimized) != (newstate & Qt::WindowMinimized)) { - if (newstate & Qt::WindowMinimized) { - if (isVisible()) { - QSymbianControl *id = static_cast<QSymbianControl *>(effectiveWinId()); - if (id->IsFocused()) // Avoid unnecessary calls to FocusChanged() - id->setFocusSafely(false); - id->MakeVisible(false); - } - } else { - if (isVisible()) { - QSymbianControl *id = static_cast<QSymbianControl *>(effectiveWinId()); - id->MakeVisible(true); - if (!id->IsFocused()) // Avoid unnecessary calls to FocusChanged() - id->setFocusSafely(true); - } - const QRect normalGeometry = geometry(); - const QRect r = top->normalGeometry; - top->normalGeometry = r; - if (top->normalGeometry.width() < 0) - top->normalGeometry = normalGeometry; - } - } + //restore normal geometry + top->normalGeometry = normalGeometry; } data->window_state = newstate; diff --git a/src/gui/kernel/qwidget_x11.cpp b/src/gui/kernel/qwidget_x11.cpp index 4684bc1..10fb009 100644 --- a/src/gui/kernel/qwidget_x11.cpp +++ b/src/gui/kernel/qwidget_x11.cpp @@ -346,11 +346,6 @@ Q_GUI_EXPORT void qt_x11_enforce_cursor(QWidget * w) qt_x11_enforce_cursor(w, false); } -static Bool checkForConfigureAndExpose(Display *, XEvent *e, XPointer) -{ - return e->type == ConfigureNotify || e->type == Expose; -} - Q_GUI_EXPORT void qt_x11_wait_for_window_manager(QWidget* w) { if (!w || (!w->isWindow() && !w->internalWinId())) @@ -363,38 +358,60 @@ Q_GUI_EXPORT void qt_x11_wait_for_window_manager(QWidget* w) if (!w->testAttribute(Qt::WA_WState_Created)) return; - if (!(w->windowFlags() & Qt::X11BypassWindowManagerHint)) { - // if the window is not override-redirect, then the window manager - // will reparent us to the frame decoration window. - while (!XCheckTypedWindowEvent(X11->display, w->effectiveWinId(), ReparentNotify, &ev)) { - if (t.elapsed() > maximumWaitTime) - return; - qApp->syncX(); // non-busy wait - } - } + WId winid = w->internalWinId(); - while (!XCheckTypedWindowEvent(X11->display, w->effectiveWinId(), MapNotify, &ev)) { - if (t.elapsed() > maximumWaitTime) - return; - qApp->syncX(); // non-busy wait - } + // first deliver events that are already in the local queue + QApplication::sendPostedEvents(); - qApp->x11ProcessEvent(&ev); + // the normal sequence is: + // ... ConfigureNotify ... ReparentNotify ... MapNotify ... Expose + // with X11BypassWindowManagerHint: + // ConfigureNotify ... MapNotify ... Expose - // ok, seems like the window manager successfully reparented us, we'll wait - // for the first paint event to arrive, while handling ConfigureNotify in - // the arrival order - while(1) - { - if (XCheckIfEvent(X11->display, &ev, checkForConfigureAndExpose, 0)) { + enum State { + Initial, Reparented, Mapped + } state = Initial; + + do { + if (XEventsQueued(X11->display, QueuedAlready)) { + XNextEvent(X11->display, &ev); qApp->x11ProcessEvent(&ev); - if (ev.type == Expose) - return; + + if (w->windowFlags() & Qt::X11BypassWindowManagerHint) { + switch (state) { + case Initial: + case Reparented: + if (ev.type == MapNotify && ev.xany.window == winid) + state = Mapped; + break; + case Mapped: + if (ev.type == Expose && ev.xany.window == winid) + return; + break; + } + } else { + switch (state) { + case Initial: + if (ev.type == ReparentNotify && ev.xany.window == winid) + state = Reparented; + break; + case Reparented: + if (ev.type == MapNotify && ev.xany.window == winid) + state = Mapped; + break; + case Mapped: + if (ev.type == Expose && ev.xany.window == winid) + return; + break; + } + } + } else { + if (!XEventsQueued(X11->display, QueuedAfterFlush)) + qApp->syncX(); // non-busy wait } if (t.elapsed() > maximumWaitTime) return; - qApp->syncX(); // non-busy wait - } + } while(1); } void qt_change_net_wm_state(const QWidget* w, bool set, Atom one, Atom two = 0) diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index 194dda3..660a2a8 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -2408,7 +2408,11 @@ static inline int soft_light_op(int dst, int src, int da, int sa) else if (4 * dst <= da) return (dst * sa * 255 + da * (src2 - sa) * ((((16 * dst_np - 12 * 255) * dst_np + 3 * 65025) * dst_np) / 65025) + temp) / 65025; else { +# ifdef Q_CC_RVCT // needed to avoid compiler crash in RVCT 2.2 + return (dst * sa * 255 + da * (src2 - sa) * (qIntSqrtInt(dst_np * 255) - dst_np) + temp) / 65025; +# else return (dst * sa * 255 + da * (src2 - sa) * (int(sqrt(qreal(dst_np * 255))) - dst_np) + temp) / 65025; +# endif } } diff --git a/src/gui/painting/qmath_p.h b/src/gui/painting/qmath_p.h index cd9f5ea..8a5f5ab 100644 --- a/src/gui/painting/qmath_p.h +++ b/src/gui/painting/qmath_p.h @@ -54,6 +54,7 @@ // #include <math.h> +#include <qmath.h> QT_BEGIN_NAMESPACE @@ -61,6 +62,11 @@ static const qreal Q_PI = qreal(3.14159265358979323846); // pi static const qreal Q_2PI = qreal(6.28318530717958647693); // 2*pi static const qreal Q_PI2 = qreal(1.57079632679489661923); // pi/2 +inline int qIntSqrtInt(int v) +{ + return static_cast<int>(qSqrt(static_cast<qreal>(v))); +} + QT_END_NAMESPACE #endif // QMATH_P_H diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index cde6a2d..bf12c6b 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -7509,7 +7509,7 @@ QPaintDevice *QPainter::redirected(const QPaintDevice *device, QPoint *offset) return widgetPrivate->redirected(offset); } - if (*globalRedirectionAtomic() == 0) + if (!globalRedirectionAtomic() || *globalRedirectionAtomic() == 0) return 0; QMutexLocker locker(globalRedirectionsMutex()); @@ -7529,7 +7529,7 @@ QPaintDevice *QPainter::redirected(const QPaintDevice *device, QPoint *offset) void qt_painter_removePaintDevice(QPaintDevice *dev) { - if (*globalRedirectionAtomic() == 0) + if (!globalRedirectionAtomic() || *globalRedirectionAtomic() == 0) return; QMutex *mutex = 0; diff --git a/src/gui/painting/qpathclipper.cpp b/src/gui/painting/qpathclipper.cpp index 7997e77..bc81514 100644 --- a/src/gui/painting/qpathclipper.cpp +++ b/src/gui/painting/qpathclipper.cpp @@ -90,8 +90,6 @@ static QPointF normalize(const QPointF &p) return p / qSqrt(p.x() * p.x() + p.y() * p.y()); } -static bool pathToRect(const QPainterPath &path, QRectF *rect = 0); - struct QIntersection { qreal alphaA; @@ -1660,7 +1658,7 @@ static bool fuzzyCompare(qreal a, qreal b) return qFuzzyCompare(a, b); } -static bool pathToRect(const QPainterPath &path, QRectF *rect) +bool QPathClipper::pathToRect(const QPainterPath &path, QRectF *rect) { if (path.elementCount() != 5) return false; @@ -1693,7 +1691,7 @@ static bool pathToRect(const QPainterPath &path, QRectF *rect) return false; if (rect) - *rect = QRectF(QPointF(x1, y1), QPointF(x2, y2)); + rect->setCoords(x1, y1, x2, y2); return true; } diff --git a/src/gui/painting/qpathclipper_p.h b/src/gui/painting/qpathclipper_p.h index 0d2c049..b900862 100644 --- a/src/gui/painting/qpathclipper_p.h +++ b/src/gui/painting/qpathclipper_p.h @@ -86,6 +86,8 @@ public: bool intersect(); bool contains(); + static bool pathToRect(const QPainterPath &path, QRectF *rect = 0); + private: Q_DISABLE_COPY(QPathClipper) diff --git a/src/gui/styles/qcommonstyle.cpp b/src/gui/styles/qcommonstyle.cpp index 74d3ec3..b1924e7 100644 --- a/src/gui/styles/qcommonstyle.cpp +++ b/src/gui/styles/qcommonstyle.cpp @@ -1149,10 +1149,10 @@ void QCommonStylePrivate::tabLayout(const QStyleOptionTabV3 *opt, const QWidget int vpadding = proxyStyle->pixelMetric(QStyle::PM_TabBarTabVSpace, opt, widget) / 2; if (opt->shape == QTabBar::RoundedSouth || opt->shape == QTabBar::TriangularSouth) verticalShift = -verticalShift; - tr.adjust(hpadding, vpadding, horizontalShift - hpadding, verticalShift - vpadding); + tr.adjust(hpadding, verticalShift - vpadding, horizontalShift - hpadding, vpadding); bool selected = opt->state & QStyle::State_Selected; if (selected) { - tr.setBottom(tr.bottom() - verticalShift); + tr.setTop(tr.top() - verticalShift); tr.setRight(tr.right() - horizontalShift); } diff --git a/src/gui/styles/qstylesheetstyle.cpp b/src/gui/styles/qstylesheetstyle.cpp index 498313b..b36294a 100644 --- a/src/gui/styles/qstylesheetstyle.cpp +++ b/src/gui/styles/qstylesheetstyle.cpp @@ -1125,6 +1125,7 @@ void QRenderRule::fixupBorder(int nativeWidth) void QRenderRule::drawBorderImage(QPainter *p, const QRect& rect) { + setClip(p, rect); static const Qt::TileRule tileMode2TileRule[] = { Qt::StretchTile, Qt::RoundTile, Qt::StretchTile, Qt::RepeatTile, Qt::StretchTile }; @@ -1142,6 +1143,7 @@ void QRenderRule::drawBorderImage(QPainter *p, const QRect& rect) QRect(QPoint(), borderImageData->pixmap.size()), sourceMargins, QTileRules(tileMode2TileRule[borderImageData->horizStretch], tileMode2TileRule[borderImageData->vertStretch])); p->setRenderHint(QPainter::SmoothPixmapTransform, wasSmoothPixmapTransform); + unsetClip(p); } QRect QRenderRule::originRect(const QRect &rect, Origin origin) const diff --git a/src/gui/text/qfontdatabase_s60.cpp b/src/gui/text/qfontdatabase_s60.cpp index f8de08f..7e5397d 100644 --- a/src/gui/text/qfontdatabase_s60.cpp +++ b/src/gui/text/qfontdatabase_s60.cpp @@ -246,8 +246,8 @@ static void initializeDb() QSymbianFbsHeapLock lock(QSymbianFbsHeapLock::Unlock); const int numTypeFaces = QS60Data::screenDevice()->NumTypefaces(); - const QFontDatabaseS60StoreImplementation *store = dynamic_cast<const QFontDatabaseS60StoreImplementation*>(db->s60Store); - Q_ASSERT(store); + const QFontDatabaseS60StoreImplementation *store = + static_cast<const QFontDatabaseS60StoreImplementation*>(db->s60Store); bool fontAdded = false; for (int i = 0; i < numTypeFaces; i++) { TTypefaceSupport typefaceSupport; @@ -258,8 +258,7 @@ static void initializeDb() continue; if (font->TypeUid() == KCFbsFontUid) { TOpenFontFaceAttrib faceAttrib; - const CFbsFont *cfbsFont = dynamic_cast<const CFbsFont *>(font); - Q_ASSERT(cfbsFont); + const CFbsFont *cfbsFont = static_cast<const CFbsFont *>(font); cfbsFont->GetFaceAttrib(faceAttrib); QtFontStyle::Key styleKey; @@ -390,8 +389,8 @@ QFontEngine *QFontDatabase::findFont(int script, const QFontPrivate *, const QFo QFontDef request = req; request.family = fontFamily; #if defined(QT_NO_FREETYPE) - const QFontDatabaseS60StoreImplementation *store = dynamic_cast<const QFontDatabaseS60StoreImplementation*>(db->s60Store); - Q_ASSERT(store); + const QFontDatabaseS60StoreImplementation *store = + static_cast<const QFontDatabaseS60StoreImplementation*>(db->s60Store); const QFontEngineS60Extensions *extension = store->extension(fontFamily); fe = new QFontEngineS60(request, extension); #else diff --git a/src/gui/text/qzip.cpp b/src/gui/text/qzip.cpp index 2fc1940..d30c996 100644 --- a/src/gui/text/qzip.cpp +++ b/src/gui/text/qzip.cpp @@ -54,10 +54,13 @@ #include <zlib.h> #if defined(Q_OS_WIN) -#undef S_IFREG -#define S_IFREG 0100000 +# undef S_IFREG +# define S_IFREG 0100000 +# ifndef S_IFDIR +# define S_IFDIR 0040000 +# endif # ifndef S_ISDIR -# define S_ISDIR(x) ((x) & 0040000) > 0 +# define S_ISDIR(x) ((x) & S_IFDIR) > 0 # endif # ifndef S_ISREG # define S_ISREG(x) ((x) & 0170000) == S_IFREG diff --git a/src/gui/text/qzipreader_p.h b/src/gui/text/qzipreader_p.h index 1086464..67a2ace 100644 --- a/src/gui/text/qzipreader_p.h +++ b/src/gui/text/qzipreader_p.h @@ -49,7 +49,7 @@ // ------------- // // This file is not part of the Qt API. It exists for the convenience -// of the QLibrary class. This header file may change from +// of the QZipReader class. This header file may change from // version to version without notice, or even be removed. // // We mean it. diff --git a/src/gui/text/qzipwriter_p.h b/src/gui/text/qzipwriter_p.h index 7b97937..9322f4a 100644 --- a/src/gui/text/qzipwriter_p.h +++ b/src/gui/text/qzipwriter_p.h @@ -47,7 +47,7 @@ // ------------- // // This file is not part of the Qt API. It exists for the convenience -// of the QLibrary class. This header file may change from +// of the QZipWriter class. This header file may change from // version to version without notice, or even be removed. // // We mean it. diff --git a/src/gui/widgets/qabstractscrollarea.cpp b/src/gui/widgets/qabstractscrollarea.cpp index 87f6c83..1d496d5 100644 --- a/src/gui/widgets/qabstractscrollarea.cpp +++ b/src/gui/widgets/qabstractscrollarea.cpp @@ -1134,13 +1134,10 @@ void QAbstractScrollArea::mouseMoveEvent(QMouseEvent *e) void QAbstractScrollArea::wheelEvent(QWheelEvent *e) { Q_D(QAbstractScrollArea); - QScrollBar *const bars[2] = { d->hbar, d->vbar }; - int idx = (e->orientation() == Qt::Vertical) ? 1 : 0; - int other = (idx + 1) % 2; - if (!bars[idx]->isVisible() && bars[other]->isVisible()) - idx = other; // If the scrollbar of the event orientation is hidden, fallback to the other. - - QApplication::sendEvent(bars[idx], e); + if (static_cast<QWheelEvent*>(e)->orientation() == Qt::Horizontal) + QApplication::sendEvent(d->hbar, e); + else + QApplication::sendEvent(d->vbar, e); } #endif diff --git a/src/gui/widgets/qabstractslider.cpp b/src/gui/widgets/qabstractslider.cpp index 2874647..73c17db 100644 --- a/src/gui/widgets/qabstractslider.cpp +++ b/src/gui/widgets/qabstractslider.cpp @@ -214,8 +214,8 @@ QT_BEGIN_NAMESPACE */ QAbstractSliderPrivate::QAbstractSliderPrivate() - : minimum(0), maximum(99), singleStep(1), pageStep(10), - value(0), position(0), pressValue(-1), offset_accumulated(0), tracking(true), + : minimum(0), maximum(99), pageStep(10), value(0), position(0), pressValue(-1), + singleStep(1), offset_accumulated(0), tracking(true), blocktracking(false), pressed(false), invertedAppearance(false), invertedControls(false), orientation(Qt::Horizontal), repeatAction(QAbstractSlider::SliderNoAction) @@ -688,51 +688,62 @@ void QAbstractSlider::sliderChange(SliderChange) update(); } - -/*! - \reimp -*/ -#ifndef QT_NO_WHEELEVENT -void QAbstractSlider::wheelEvent(QWheelEvent * e) +bool QAbstractSliderPrivate::scrollByDelta(Qt::Orientation orientation, Qt::KeyboardModifiers modifiers, int delta) { - Q_D(QAbstractSlider); - e->ignore(); - + Q_Q(QAbstractSlider); int stepsToScroll = 0; - qreal offset = qreal(e->delta()) / 120; + // in Qt scrolling to the right gives negative values. + if (orientation == Qt::Horizontal) + delta = -delta; + qreal offset = qreal(delta) / 120; - if ((e->modifiers() & Qt::ControlModifier) || (e->modifiers() & Qt::ShiftModifier)) { + if ((modifiers & Qt::ControlModifier) || (modifiers & Qt::ShiftModifier)) { // Scroll one page regardless of delta: - stepsToScroll = qBound(-d->pageStep, int(offset * d->pageStep), d->pageStep); - d->offset_accumulated = 0; + stepsToScroll = qBound(-pageStep, int(offset * pageStep), pageStep); + offset_accumulated = 0; } else { // Calculate how many lines to scroll. Depending on what delta is (and // offset), we might end up with a fraction (e.g. scroll 1.3 lines). We can // only scroll whole lines, so we keep the reminder until next event. - qreal stepsToScrollF = offset * QApplication::wheelScrollLines() * d->effectiveSingleStep(); + qreal stepsToScrollF = offset * QApplication::wheelScrollLines() * effectiveSingleStep(); // Check if wheel changed direction since last event: - if (d->offset_accumulated != 0 && (offset / d->offset_accumulated) < 0) - d->offset_accumulated = 0; + if (offset_accumulated != 0 && (offset / offset_accumulated) < 0) + offset_accumulated = 0; - d->offset_accumulated += stepsToScrollF; - stepsToScroll = qBound(-d->pageStep, int(d->offset_accumulated), d->pageStep); - d->offset_accumulated -= int(d->offset_accumulated); + offset_accumulated += stepsToScrollF; + stepsToScroll = qBound(-pageStep, int(offset_accumulated), pageStep); + offset_accumulated -= int(offset_accumulated); if (stepsToScroll == 0) - return; + return false; } - if (d->invertedControls) + if (invertedControls) stepsToScroll = -stepsToScroll; - int prevValue = d->value; - d->position = d->overflowSafeAdd(stepsToScroll); // value will be updated by triggerAction() - triggerAction(SliderMove); + int prevValue = value; + position = overflowSafeAdd(stepsToScroll); // value will be updated by triggerAction() + q->triggerAction(QAbstractSlider::SliderMove); + + if (prevValue == value) { + offset_accumulated = 0; + return false; + } + return true; +} - if (prevValue == d->value) - d->offset_accumulated = 0; - else +/*! + \reimp +*/ +#ifndef QT_NO_WHEELEVENT +void QAbstractSlider::wheelEvent(QWheelEvent * e) +{ + Q_D(QAbstractSlider); + e->ignore(); + int delta = e->delta(); + if (d->scrollByDelta(e->orientation(), e->modifiers(), delta)) e->accept(); } + #endif #ifdef QT_KEYPAD_NAVIGATION /*! diff --git a/src/gui/widgets/qabstractslider_p.h b/src/gui/widgets/qabstractslider_p.h index 6cde468..6e6ff6e 100644 --- a/src/gui/widgets/qabstractslider_p.h +++ b/src/gui/widgets/qabstractslider_p.h @@ -138,6 +138,7 @@ public: } q->triggerAction(repeatAction); } + bool scrollByDelta(Qt::Orientation orientation, Qt::KeyboardModifiers modifiers, int delta); }; QT_END_NAMESPACE diff --git a/src/gui/widgets/qdialogbuttonbox.cpp b/src/gui/widgets/qdialogbuttonbox.cpp index 48d7022..6a0e363 100644 --- a/src/gui/widgets/qdialogbuttonbox.cpp +++ b/src/gui/widgets/qdialogbuttonbox.cpp @@ -1017,6 +1017,8 @@ void QDialogButtonBox::removeButton(QAbstractButton *button) If the button has already been added, it is removed and added again with the new role. + \note The button box takes ownership of the button. + \sa removeButton(), clear() */ void QDialogButtonBox::addButton(QAbstractButton *button, ButtonRole role) diff --git a/src/gui/widgets/qmainwindowlayout.cpp b/src/gui/widgets/qmainwindowlayout.cpp index d1e7285..fc75c92 100644 --- a/src/gui/widgets/qmainwindowlayout.cpp +++ b/src/gui/widgets/qmainwindowlayout.cpp @@ -1627,6 +1627,13 @@ void QMainWindowLayout::animationFinished(QWidget *widget) tb->d_func()->plug(currentGapRect); #endif + savedState.clear(); + currentGapPos.clear(); + pluggingWidget = 0; + //applying the state will make sure that the currentGap is updated correctly + //and all the geometries (especially the one from the central widget) is correct + layoutState.apply(false); + #ifndef QT_NO_DOCKWIDGET #ifndef QT_NO_TABBAR if (qobject_cast<QDockWidget*>(widget) != 0) { @@ -1637,13 +1644,6 @@ void QMainWindowLayout::animationFinished(QWidget *widget) } #endif #endif - - savedState.clear(); - currentGapPos.clear(); - pluggingWidget = 0; - //applying the state will make sure that the currentGap is updated correctly - //and all the geometries (especially the one from the central widget) is correct - layoutState.apply(false); } if (!widgetAnimator.animating()) { diff --git a/src/gui/widgets/qscrollbar.cpp b/src/gui/widgets/qscrollbar.cpp index 73ce122..3eed3a9 100644 --- a/src/gui/widgets/qscrollbar.cpp +++ b/src/gui/widgets/qscrollbar.cpp @@ -521,6 +521,22 @@ bool QScrollBar::event(QEvent *event) if (const QHoverEvent *he = static_cast<const QHoverEvent *>(event)) d_func()->updateHoverControl(he->pos()); break; + case QEvent::Wheel: { + // override wheel event without adding virtual function override + QWheelEvent *ev = static_cast<QWheelEvent *>(event); + int delta = ev->delta(); + // scrollbar is a special case - in vertical mode it reaches minimum + // value in the upper position, however QSlider's minimum value is on + // the bottom. So we need to invert a value, but since the scrollbar is + // inverted by default, we need to inverse the delta value for the + // horizontal orientation. + if (ev->orientation() == Qt::Horizontal) + delta = -delta; + Q_D(QScrollBar); + if (d->scrollByDelta(ev->orientation(), ev->modifiers(), delta)) + event->accept(); + return true; + } default: break; } diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index b282676..07f3159 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -558,6 +558,12 @@ void QGL2PaintEngineExPrivate::resetGLState() glStencilMask(0xff); glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); glStencilFunc(GL_ALWAYS, 0, 0xff); + glDisableVertexAttribArray(QT_TEXTURE_COORDS_ATTR); + glDisableVertexAttribArray(QT_VERTEX_COORDS_ATTR); + glDisableVertexAttribArray(QT_OPACITY_ATTR); +#ifndef QT_OPENGL_ES_2 + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // color may have been changed by glVertexAttrib() +#endif } void QGL2PaintEngineEx::endNativePainting() diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 2a60708..fce9fdb 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1590,10 +1590,8 @@ QGLTextureCache::QGLTextureCache() Q_ASSERT(qt_gl_texture_cache == 0); qt_gl_texture_cache = this; - QImagePixmapCleanupHooks::instance()->addPixmapModificationHook(cleanupTextures); -#ifdef Q_WS_X11 - QImagePixmapCleanupHooks::instance()->addPixmapDestructionHook(cleanupPixmapSurfaces); -#endif + QImagePixmapCleanupHooks::instance()->addPixmapDataModificationHook(cleanupTextures); + QImagePixmapCleanupHooks::instance()->addPixmapDataDestructionHook(cleanupBeforePixmapDestruction); QImagePixmapCleanupHooks::instance()->addImageHook(imageCleanupHook); } @@ -1601,10 +1599,8 @@ QGLTextureCache::~QGLTextureCache() { qt_gl_texture_cache = 0; - QImagePixmapCleanupHooks::instance()->removePixmapModificationHook(cleanupTextures); -#ifdef Q_WS_X11 - QImagePixmapCleanupHooks::instance()->removePixmapDestructionHook(cleanupPixmapSurfaces); -#endif + QImagePixmapCleanupHooks::instance()->removePixmapDataModificationHook(cleanupTextures); + QImagePixmapCleanupHooks::instance()->removePixmapDataDestructionHook(cleanupBeforePixmapDestruction); QImagePixmapCleanupHooks::instance()->removeImageHook(imageCleanupHook); } @@ -1672,30 +1668,29 @@ void QGLTextureCache::imageCleanupHook(qint64 cacheKey) } -void QGLTextureCache::cleanupTextures(QPixmap* pixmap) +void QGLTextureCache::cleanupTextures(QPixmapData* pmd) { // ### remove when the GL texture cache becomes thread-safe if (qApp->thread() == QThread::currentThread()) { - const qint64 cacheKey = pixmap->cacheKey(); + const qint64 cacheKey = pmd->cacheKey(); QGLTexture *texture = instance()->getTexture(cacheKey); if (texture && texture->options & QGLContext::MemoryManagedBindOption) instance()->remove(cacheKey); } } -#if defined(Q_WS_X11) -void QGLTextureCache::cleanupPixmapSurfaces(QPixmap* pixmap) +void QGLTextureCache::cleanupBeforePixmapDestruction(QPixmapData* pmd) { // Remove any bound textures first: - cleanupTextures(pixmap); + cleanupTextures(pmd); - QPixmapData *pd = pixmap->data_ptr().data(); - if (pd->classId() == QPixmapData::X11Class) { - Q_ASSERT(pd->ref == 1); // Make sure reference counting isn't broken - QGLContextPrivate::destroyGlSurfaceForPixmap(pd); +#if defined(Q_WS_X11) + if (pmd->classId() == QPixmapData::X11Class) { + Q_ASSERT(pmd->ref == 0); // Make sure reference counting isn't broken + QGLContextPrivate::destroyGlSurfaceForPixmap(pmd); } -} #endif +} void QGLTextureCache::deleteIfEmpty() { diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index 0104f07..713b067 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -522,7 +522,7 @@ public: QSize bindCompressedTexturePVR(const char *buf, int len); }; -class QGLTextureCache { +class Q_AUTOTEST_EXPORT QGLTextureCache { public: QGLTextureCache(); ~QGLTextureCache(); @@ -539,11 +539,8 @@ public: static QGLTextureCache *instance(); static void deleteIfEmpty(); static void imageCleanupHook(qint64 cacheKey); - static void cleanupTextures(QPixmap* pixmap); -#ifdef Q_WS_X11 - // X11 needs to catch pixmap data destruction to delete EGL/GLX pixmap surfaces - static void cleanupPixmapSurfaces(QPixmap* pixmap); -#endif + static void cleanupTextures(QPixmapData* pixmap); + static void cleanupBeforePixmapDestruction(QPixmapData* pixmap); private: QCache<qint64, QGLTexture> m_cache; diff --git a/src/opengl/qglpixmapfilter.cpp b/src/opengl/qglpixmapfilter.cpp index 11011ee..37bb7c0 100644 --- a/src/opengl/qglpixmapfilter.cpp +++ b/src/opengl/qglpixmapfilter.cpp @@ -319,14 +319,14 @@ public: ~QGLBlurTextureCache(); QGLBlurTextureInfo *takeBlurTextureInfo(const QPixmap &pixmap); - bool hasBlurTextureInfo(const QPixmap &pixmap) const; + bool hasBlurTextureInfo(quint64 cacheKey) const; void insertBlurTextureInfo(const QPixmap &pixmap, QGLBlurTextureInfo *info); - void clearBlurTextureInfo(const QPixmap &pixmap); + void clearBlurTextureInfo(quint64 cacheKey); void timerEvent(QTimerEvent *event); private: - static void pixmapDestroyed(QPixmap *pixmap); + static void pixmapDestroyed(QPixmapData *pixmap); QCache<quint64, QGLBlurTextureInfo > cache; @@ -379,21 +379,21 @@ QGLBlurTextureInfo *QGLBlurTextureCache::takeBlurTextureInfo(const QPixmap &pixm return cache.take(pixmap.cacheKey()); } -void QGLBlurTextureCache::clearBlurTextureInfo(const QPixmap &pixmap) +void QGLBlurTextureCache::clearBlurTextureInfo(quint64 cacheKey) { - cache.remove(pixmap.cacheKey()); + cache.remove(cacheKey); } -bool QGLBlurTextureCache::hasBlurTextureInfo(const QPixmap &pixmap) const +bool QGLBlurTextureCache::hasBlurTextureInfo(quint64 cacheKey) const { - return cache.contains(pixmap.cacheKey()); + return cache.contains(cacheKey); } void QGLBlurTextureCache::insertBlurTextureInfo(const QPixmap &pixmap, QGLBlurTextureInfo *info) { static bool hookAdded = false; if (!hookAdded) { - QImagePixmapCleanupHooks::instance()->addPixmapDestructionHook(pixmapDestroyed); + QImagePixmapCleanupHooks::instance()->addPixmapDataDestructionHook(pixmapDestroyed); hookAdded = true; } @@ -406,11 +406,11 @@ void QGLBlurTextureCache::insertBlurTextureInfo(const QPixmap &pixmap, QGLBlurTe timerId = startTimer(8000); } -void QGLBlurTextureCache::pixmapDestroyed(QPixmap *pixmap) +void QGLBlurTextureCache::pixmapDestroyed(QPixmapData *pmd) { foreach (QGLBlurTextureCache *cache, blurTextureCaches) { - if (cache->hasBlurTextureInfo(*pixmap)) - cache->clearBlurTextureInfo(*pixmap); + if (cache->hasBlurTextureInfo(pmd->cacheKey())) + cache->clearBlurTextureInfo(pmd->cacheKey()); } } diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp index cc9ba77..6813d2f 100644 --- a/src/openvg/qpaintengine_vg.cpp +++ b/src/openvg/qpaintengine_vg.cpp @@ -188,6 +188,7 @@ public: bool maskValid; // True if vgMask() contains valid data. bool maskIsSet; // True if mask would be fully set if it was valid. + bool scissorMask; // True if scissor is used in place of the mask. bool rawVG; // True if processing a raw VG escape. QRect maskRect; // Rectangle version of mask if it is simple. @@ -355,6 +356,7 @@ void QVGPaintEnginePrivate::init() maskValid = false; maskIsSet = false; + scissorMask = false; rawVG = false; scissorActive = false; @@ -1542,7 +1544,28 @@ void QVGPaintEngine::stroke(const QVectorPath &path, const QPen &pen) static inline bool clipTransformIsSimple(const QTransform& transform) { QTransform::TransformationType type = transform.type(); - return (type == QTransform::TxNone || type == QTransform::TxTranslate); + if (type == QTransform::TxNone || type == QTransform::TxTranslate) + return true; + if (type == QTransform::TxRotate) { + // Check for 0, 90, 180, and 270 degree rotations. + // (0 might happen after 4 rotations of 90 degrees). + qreal m11 = transform.m11(); + qreal m12 = transform.m12(); + qreal m21 = transform.m21(); + qreal m22 = transform.m22(); + if (m11 == 0.0f && m22 == 0.0f) { + if (m12 == 1.0f && m21 == -1.0f) + return true; // 90 degrees. + else if (m12 == -1.0f && m21 == 1.0f) + return true; // 270 degrees. + } else if (m12 == 0.0f && m21 == 0.0f) { + if (m11 == -1.0f && m22 == -1.0f) + return true; // 180 degrees. + else if (m11 == 1.0f && m22 == 1.0f) + return true; // 0 degrees. + } + } + return false; } #if defined(QVG_SCISSOR_CLIP) @@ -1664,12 +1687,12 @@ void QVGPaintEngine::clip(const QVectorPath &path, Qt::ClipOperation op) if (op == Qt::NoClip) { d->maskValid = false; d->maskIsSet = true; + d->scissorMask = false; d->maskRect = QRect(); vgSeti(VG_MASKING, VG_FALSE); return; } -#if defined(QVG_NO_RENDER_TO_MASK) // We don't have vgRenderToMask(), so handle simple QRectF's only. if (path.shape() == QVectorPath::RectangleHint && path.elementCount() == 4 && clipTransformIsSimple(d->transform)) { @@ -1679,8 +1702,10 @@ void QVGPaintEngine::clip(const QVectorPath &path, Qt::ClipOperation op) QRectF rect(points[0], points[1], points[2] - points[0], points[5] - points[1]); clip(rect.toRect(), op); + return; } -#else + +#if !defined(QVG_NO_RENDER_TO_MASK) QPaintDevice *pdev = paintDevice(); int width = pdev->width(); int height = pdev->height(); @@ -1711,6 +1736,7 @@ void QVGPaintEngine::clip(const QVectorPath &path, Qt::ClipOperation op) vgSeti(VG_MASKING, VG_TRUE); d->maskValid = true; d->maskIsSet = false; + d->scissorMask = false; #endif } @@ -1731,6 +1757,7 @@ void QVGPaintEngine::clip(const QRect &rect, Qt::ClipOperation op) { d->maskValid = false; d->maskIsSet = true; + d->scissorMask = false; d->maskRect = QRect(); vgSeti(VG_MASKING, VG_FALSE); } @@ -1746,6 +1773,7 @@ void QVGPaintEngine::clip(const QRect &rect, Qt::ClipOperation op) vgSeti(VG_MASKING, VG_FALSE); d->maskValid = false; d->maskIsSet = true; + d->scissorMask = false; d->maskRect = QRect(); } else { // Special case: if the intersection of the system @@ -1763,6 +1791,7 @@ void QVGPaintEngine::clip(const QRect &rect, Qt::ClipOperation op) if (clip.rectCount() != 1) { d->maskValid = false; d->maskIsSet = false; + d->scissorMask = false; d->maskRect = QRect(); d->modifyMask(this, VG_FILL_MASK, r); break; @@ -1771,6 +1800,7 @@ void QVGPaintEngine::clip(const QRect &rect, Qt::ClipOperation op) } d->maskValid = false; d->maskIsSet = false; + d->scissorMask = true; d->maskRect = clipRect; vgSeti(VG_MASKING, VG_FALSE); updateScissor(); @@ -1781,13 +1811,30 @@ void QVGPaintEngine::clip(const QRect &rect, Qt::ClipOperation op) case Qt::IntersectClip: { QRect r = d->transform.mapRect(rect); - if (d->maskIsSet && isDefaultClipRect(r)) { + if (!d->maskValid) { + // Mask has not been used yet, so intersect with + // the previous scissor-based region in maskRect. + if (d->scissorMask) + r = r.intersect(d->maskRect); + if (isDefaultClipRect(r)) { + // The clip is the full window, so turn off clipping. + d->maskIsSet = true; + d->maskRect = QRect(); + } else { + // Activate the scissor on a smaller maskRect. + d->maskIsSet = false; + d->maskRect = r; + } + d->scissorMask = true; + updateScissor(); + } else if (d->maskIsSet && isDefaultClipRect(r)) { // Intersecting a full-window clip with a full-window // region is the same as turning off clipping. if (d->maskValid) vgSeti(VG_MASKING, VG_FALSE); d->maskValid = false; d->maskIsSet = true; + d->scissorMask = false; d->maskRect = QRect(); } else { d->modifyMask(this, VG_INTERSECT_MASK, r); @@ -1829,6 +1876,7 @@ void QVGPaintEngine::clip(const QRegion ®ion, Qt::ClipOperation op) { d->maskValid = false; d->maskIsSet = true; + d->scissorMask = false; d->maskRect = QRect(); vgSeti(VG_MASKING, VG_FALSE); } @@ -1844,6 +1892,7 @@ void QVGPaintEngine::clip(const QRegion ®ion, Qt::ClipOperation op) vgSeti(VG_MASKING, VG_FALSE); d->maskValid = false; d->maskIsSet = true; + d->scissorMask = false; d->maskRect = QRect(); } else { // Special case: if the intersection of the system @@ -1857,12 +1906,14 @@ void QVGPaintEngine::clip(const QRegion ®ion, Qt::ClipOperation op) if (clip.rectCount() == 1) { d->maskValid = false; d->maskIsSet = false; + d->scissorMask = true; d->maskRect = clip.boundingRect(); vgSeti(VG_MASKING, VG_FALSE); updateScissor(); } else { d->maskValid = false; d->maskIsSet = false; + d->scissorMask = false; d->maskRect = QRect(); d->modifyMask(this, VG_FILL_MASK, r); } @@ -1887,6 +1938,7 @@ void QVGPaintEngine::clip(const QRegion ®ion, Qt::ClipOperation op) vgSeti(VG_MASKING, VG_FALSE); d->maskValid = false; d->maskIsSet = true; + d->scissorMask = false; d->maskRect = QRect(); } else { d->modifyMask(this, VG_INTERSECT_MASK, r); @@ -1965,6 +2017,7 @@ void QVGPaintEngine::clip(const QPainterPath &path, Qt::ClipOperation op) if (op == Qt::NoClip) { d->maskValid = false; d->maskIsSet = true; + d->scissorMask = false; d->maskRect = QRect(); vgSeti(VG_MASKING, VG_FALSE); return; @@ -2000,6 +2053,7 @@ void QVGPaintEngine::clip(const QPainterPath &path, Qt::ClipOperation op) vgSeti(VG_MASKING, VG_TRUE); d->maskValid = true; d->maskIsSet = false; + d->scissorMask = false; #else QPaintEngineEx::clip(path, op); #endif @@ -2043,6 +2097,7 @@ void QVGPaintEnginePrivate::modifyMask vgSeti(VG_MASKING, VG_TRUE); maskValid = true; maskIsSet = false; + scissorMask = false; } void QVGPaintEnginePrivate::modifyMask @@ -2064,6 +2119,7 @@ void QVGPaintEnginePrivate::modifyMask vgSeti(VG_MASKING, VG_TRUE); maskValid = true; maskIsSet = false; + scissorMask = false; } #endif // !QVG_SCISSOR_CLIP @@ -2096,7 +2152,7 @@ void QVGPaintEngine::updateScissor() { #if !defined(QVG_SCISSOR_CLIP) // Combine the system clip with the simple mask rectangle. - if (!d->maskRect.isNull()) { + if (d->scissorMask) { if (region.isEmpty()) region = d->maskRect; else @@ -2187,6 +2243,7 @@ void QVGPaintEngine::clipEnabledChanged() // Replay the entire clip stack to put the mask into the right state. d->maskValid = false; d->maskIsSet = true; + d->scissorMask = false; d->maskRect = QRect(); s->clipRegion = defaultClipRegion(); d->replayClipOperations(); @@ -2196,6 +2253,7 @@ void QVGPaintEngine::clipEnabledChanged() vgSeti(VG_MASKING, VG_FALSE); d->maskValid = false; d->maskIsSet = false; + d->scissorMask = false; d->maskRect = QRect(); } #endif @@ -2314,12 +2372,7 @@ bool QVGPaintEngine::clearRect(const QRectF &rect, const QColor &color) Q_D(QVGPaintEngine); QVGPainterState *s = state(); if (!s->clipEnabled || s->clipOperation == Qt::NoClip) { - // The transform will either be identity or a simple translation, - // so do a simpler version of "r = d->transform.map(rect).toRect()". - QRect r = QRect(qRound(rect.x() + d->transform.dx()), - qRound(rect.y() + d->transform.dy()), - qRound(rect.width()), - qRound(rect.height())); + QRect r = d->transform.mapRect(rect).toRect(); int height = paintDevice()->height(); if (d->clearColor != color || d->clearOpacity != s->opacity) { VGfloat values[4]; @@ -3398,6 +3451,7 @@ void QVGPaintEngine::restoreState(QPaintEngine::DirtyFlags dirty) QPaintEngine::DirtyClipEnabled)) != 0) { d->maskValid = false; d->maskIsSet = false; + d->scissorMask = false; d->maskRect = QRect(); clipEnabledChanged(); } diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp index 6b251c7..cd4d5c2 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp @@ -921,7 +921,7 @@ void QDirectFBScreenPrivate::setFlipFlags(const QStringList &args) qPrintable(flip)); } } else { - flipFlags = DSFLIP_BLIT; + flipFlags = DSFLIP_BLIT|DSFLIP_ONSYNC; } } diff --git a/src/plugins/imageformats/gif/qgifhandler.cpp b/src/plugins/imageformats/gif/qgifhandler.cpp index 6f049be..25d3dfa 100644 --- a/src/plugins/imageformats/gif/qgifhandler.cpp +++ b/src/plugins/imageformats/gif/qgifhandler.cpp @@ -71,7 +71,8 @@ public: ~QGIFFormat(); int decode(QImage *image, const uchar* buffer, int length, - int *nextFrameDelay, int *loopCount, QSize *nextSize); + int *nextFrameDelay, int *loopCount); + static void scan(QIODevice *device, QVector<QSize> *imageSizes, int *loopCount); bool newFrame; bool partialNewFrame; @@ -229,7 +230,7 @@ void QGIFFormat::disposePrevious(QImage *image) Returns the number of bytes consumed. */ int QGIFFormat::decode(QImage *image, const uchar *buffer, int length, - int *nextFrameDelay, int *loopCount, QSize *nextSize) + int *nextFrameDelay, int *loopCount) { // We are required to state that // "The Graphics Interchange Format(c) is the Copyright property of @@ -346,10 +347,6 @@ int QGIFFormat::decode(QImage *image, const uchar *buffer, int length, bpl = image->bytesPerLine(); bits = image->bits(); memset(bits, 0, image->byteCount()); - - // ### size of the upcoming frame, should rather - // be known before decoding it. - *nextSize = QSize(swidth, sheight); } disposePrevious(image); @@ -645,6 +642,273 @@ int QGIFFormat::decode(QImage *image, const uchar *buffer, int length, return initial-length; } +/*! + Scans through the data stream defined by \a device and returns the image + sizes found in the stream in the \a imageSizes vector. +*/ +void QGIFFormat::scan(QIODevice *device, QVector<QSize> *imageSizes, int *loopCount) +{ + if (!device) + return; + + qint64 oldPos = device->pos(); + if (!device->seek(0)) + return; + + int colorCount = 0; + int localColorCount = 0; + int globalColorCount = 0; + int colorReadCount = 0; + bool localColormap = false; + bool globalColormap = false; + int count = 0; + int blockSize = 0; + int imageWidth = 0; + int imageHeight = 0; + bool done = false; + uchar hold[16]; + State state = Header; + + const int readBufferSize = 40960; // 40k read buffer + QByteArray readBuffer(device->read(readBufferSize)); + + if (readBuffer.isEmpty()) { + device->seek(oldPos); + return; + } + + // This is a specialized version of the state machine from decode(), + // which doesn't do any image decoding or mallocing, and has an + // optimized way of skipping SkipBlocks, ImageDataBlocks and + // Global/LocalColorMaps. + + while (!readBuffer.isEmpty()) { + int length = readBuffer.size(); + const uchar *buffer = (const uchar *) readBuffer.constData(); + while (!done && length) { + length--; + uchar ch = *buffer++; + switch (state) { + case Header: + hold[count++] = ch; + if (count == 6) { + state = LogicalScreenDescriptor; + count = 0; + } + break; + case LogicalScreenDescriptor: + hold[count++] = ch; + if (count == 7) { + imageWidth = LM(hold[0], hold[1]); + imageHeight = LM(hold[2], hold[3]); + globalColormap = !!(hold[4] & 0x80); + globalColorCount = 2 << (hold[4] & 0x7); + count = 0; + colorCount = globalColorCount; + if (globalColormap) { + int colorTableSize = 3 * globalColorCount; + if (length >= colorTableSize) { + // skip the global color table in one go + length -= colorTableSize; + buffer += colorTableSize; + state = Introducer; + } else { + colorReadCount = 0; + state = GlobalColorMap; + } + } else { + state=Introducer; + } + } + break; + case GlobalColorMap: + case LocalColorMap: + hold[count++] = ch; + if (count == 3) { + if (++colorReadCount >= colorCount) { + if (state == LocalColorMap) + state = TableImageLZWSize; + else + state = Introducer; + } + count = 0; + } + break; + case Introducer: + hold[count++] = ch; + switch (ch) { + case 0x2c: + state = ImageDescriptor; + break; + case 0x21: + state = ExtensionLabel; + break; + case 0x3b: + state = Done; + break; + default: + done = true; + state = Error; + } + break; + case ImageDescriptor: + hold[count++] = ch; + if (count == 10) { + int newLeft = LM(hold[1], hold[2]); + int newTop = LM(hold[3], hold[4]); + int newWidth = LM(hold[5], hold[6]); + int newHeight = LM(hold[7], hold[8]); + + if (imageWidth/10 > qMax(newWidth,200)) + imageWidth = -1; + if (imageHeight/10 > qMax(newHeight,200)) + imageHeight = -1; + + if (imageWidth <= 0) + imageWidth = newLeft + newWidth; + if (imageHeight <= 0) + imageHeight = newTop + newHeight; + + *imageSizes << QSize(imageWidth, imageHeight); + + localColormap = !!(hold[9] & 0x80); + localColorCount = localColormap ? (2 << (hold[9] & 0x7)) : 0; + if (localColorCount) + colorCount = localColorCount; + else + colorCount = globalColorCount; + + count = 0; + if (localColormap) { + int colorTableSize = 3 * localColorCount; + if (length >= colorTableSize) { + // skip the local color table in one go + length -= colorTableSize; + buffer += colorTableSize; + state = TableImageLZWSize; + } else { + colorReadCount = 0; + state = LocalColorMap; + } + } else { + state = TableImageLZWSize; + } + } + break; + case TableImageLZWSize: + if (ch > max_lzw_bits) + state = Error; + else + state = ImageDataBlockSize; + count = 0; + break; + case ImageDataBlockSize: + blockSize = ch; + if (blockSize) { + if (length >= blockSize) { + // we can skip the block in one go + length -= blockSize; + buffer += blockSize; + count = 0; + } else { + state = ImageDataBlock; + } + } else { + state = Introducer; + } + break; + case ImageDataBlock: + ++count; + if (count == blockSize) { + count = 0; + state = ImageDataBlockSize; + } + break; + case ExtensionLabel: + switch (ch) { + case 0xf9: + state = GraphicControlExtension; + break; + case 0xff: + state = ApplicationExtension; + break; + default: + state = SkipBlockSize; + } + count = 0; + break; + case ApplicationExtension: + if (count < 11) + hold[count] = ch; + ++count; + if (count == hold[0] + 1) { + if (qstrncmp((char*)(hold+1), "NETSCAPE", 8) == 0) + state=NetscapeExtensionBlockSize; + else + state=SkipBlockSize; + count = 0; + } + break; + case GraphicControlExtension: + if (count < 5) + hold[count] = ch; + ++count; + if (count == hold[0] + 1) { + count = 0; + state = SkipBlockSize; + } + break; + case NetscapeExtensionBlockSize: + blockSize = ch; + count = 0; + if (blockSize) + state = NetscapeExtensionBlock; + else + state = Introducer; + break; + case NetscapeExtensionBlock: + if (count < 3) + hold[count] = ch; + count++; + if (count == blockSize) { + *loopCount = LM(hold[1], hold[2]); + state = SkipBlockSize; + } + break; + case SkipBlockSize: + blockSize = ch; + count = 0; + if (blockSize) { + if (length >= blockSize) { + // we can skip the block in one go + length -= blockSize; + buffer += blockSize; + } else { + state = SkipBlock; + } + } else { + state = Introducer; + } + break; + case SkipBlock: + ++count; + if (count == blockSize) + state = SkipBlockSize; + break; + case Done: + done = true; + break; + case Error: + device->seek(oldPos); + return; + } + } + readBuffer = device->read(readBufferSize); + } + device->seek(oldPos); + return; +} + void QGIFFormat::fillRect(QImage *image, int col, int row, int w, int h, QRgb color) { if (w>0) { @@ -763,9 +1027,9 @@ QGifHandler::QGifHandler() { gifFormat = new QGIFFormat; nextDelay = 0; - loopCnt = 0; + loopCnt = 1; frameNumber = -1; - nextSize = QSize(); + scanIsCached = false; } QGifHandler::~QGifHandler() @@ -787,7 +1051,7 @@ bool QGifHandler::imageIsComing() const } int decoded = gifFormat->decode(&lastImage, (const uchar *)buffer.constData(), buffer.size(), - &nextDelay, &loopCnt, &nextSize); + &nextDelay, &loopCnt); if (decoded == -1) break; buffer.remove(0, decoded); @@ -831,7 +1095,7 @@ bool QGifHandler::read(QImage *image) } int decoded = gifFormat->decode(&lastImage, (const uchar *)buffer.constData(), buffer.size(), - &nextDelay, &loopCnt, &nextSize); + &nextDelay, &loopCnt); if (decoded == -1) break; buffer.remove(0, decoded); @@ -862,8 +1126,18 @@ bool QGifHandler::supportsOption(ImageOption option) const QVariant QGifHandler::option(ImageOption option) const { if (option == Size) { - if (imageIsComing()) - return nextSize; + if (!scanIsCached) { + QGIFFormat::scan(device(), &imageSizes, &loopCnt); + scanIsCached = true; + } + // before the first frame is read, or we have an empty data stream + if (frameNumber == -1) + return (imageSizes.count() > 0) ? QVariant(imageSizes.at(0)) : QVariant(); + // after the last frame has been read, the next size is undefined + if (frameNumber >= imageSizes.count() - 1) + return QVariant(); + // and the last case: the size of the next frame + return imageSizes.at(frameNumber + 1); } else if (option == Animation) { return true; } @@ -883,11 +1157,19 @@ int QGifHandler::nextImageDelay() const int QGifHandler::imageCount() const { - return 0; // Don't know + if (!scanIsCached) { + QGIFFormat::scan(device(), &imageSizes, &loopCnt); + scanIsCached = true; + } + return imageSizes.count(); } int QGifHandler::loopCount() const { + if (!scanIsCached) { + QGIFFormat::scan(device(), &imageSizes, &loopCnt); + scanIsCached = true; + } return loopCnt-1; // In GIF, loop count is iteration count, so subtract one } diff --git a/src/plugins/imageformats/gif/qgifhandler.h b/src/plugins/imageformats/gif/qgifhandler.h index a6e520f..8e07aff 100644 --- a/src/plugins/imageformats/gif/qgifhandler.h +++ b/src/plugins/imageformats/gif/qgifhandler.h @@ -87,7 +87,8 @@ private: mutable int nextDelay; mutable int loopCnt; int frameNumber; - mutable QSize nextSize; + mutable QVector<QSize> imageSizes; + mutable bool scanIsCached; }; QT_END_NAMESPACE diff --git a/src/plugins/imageformats/ico/qicohandler.cpp b/src/plugins/imageformats/ico/qicohandler.cpp index b2351fa..4edb87a 100644 --- a/src/plugins/imageformats/ico/qicohandler.cpp +++ b/src/plugins/imageformats/ico/qicohandler.cpp @@ -53,6 +53,7 @@ #include <QtGui/QImage> #include <QtCore/QFile> #include <QtCore/QBuffer> +#include <qvariant.h> // These next two structs represent how the icon information is stored // in an ICO file. typedef struct @@ -772,6 +773,29 @@ QtIcoHandler::~QtIcoHandler() delete m_pICOReader; } +QVariant QtIcoHandler::option(ImageOption option) const +{ + if (option == Size) { + QIODevice *device = QImageIOHandler::device(); + qint64 oldPos = device->pos(); + ICONDIRENTRY iconEntry; + if (device->seek(oldPos + ICONDIR_SIZE + (m_currentIconIndex * ICONDIRENTRY_SIZE))) { + if (readIconDirEntry(device, &iconEntry)) { + device->seek(oldPos); + return QSize(iconEntry.bWidth, iconEntry.bHeight); + } + } + if (!device->isSequential()) + device->seek(oldPos); + } + return QVariant(); +} + +bool QtIcoHandler::supportsOption(ImageOption option) const +{ + return option == Size; +} + /*! * Verifies if some values (magic bytes) are set as expected in the header of the file. * If the magic bytes were found, it is assumed that the QtIcoHandler can read the file. diff --git a/src/plugins/imageformats/ico/qicohandler.h b/src/plugins/imageformats/ico/qicohandler.h index b9ef27e..394a5eb 100644 --- a/src/plugins/imageformats/ico/qicohandler.h +++ b/src/plugins/imageformats/ico/qicohandler.h @@ -62,6 +62,9 @@ public: static bool canRead(QIODevice *device); + bool supportsOption(ImageOption option) const; + QVariant option(ImageOption option) const; + private: int m_currentIconIndex; ICOReader *m_pICOReader; diff --git a/src/plugins/kbddrivers/linuxinput/main.cpp b/src/plugins/kbddrivers/linuxinput/main.cpp index 19a3145..db5167e 100644 --- a/src/plugins/kbddrivers/linuxinput/main.cpp +++ b/src/plugins/kbddrivers/linuxinput/main.cpp @@ -69,7 +69,7 @@ QWSKeyboardHandler* QLinuxInputKbdDriver::create(const QString &driver, Q_UNUSED(device); if (driver.compare(QLatin1String("LinuxInput"), Qt::CaseInsensitive)) return 0; - return new QWSLinuxInputKeyboardHandler(driver, device); + return new QWSLinuxInputKeyboardHandler(device); } Q_EXPORT_PLUGIN2(qwslinuxinputkbddriver, QLinuxInputKbdDriver) diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index 155e3e7..be7a6a0 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -2081,8 +2081,8 @@ EXPORTS ?addPixmap@QGraphicsScene@@QAEPAVQGraphicsPixmapItem@@ABVQPixmap@@@Z @ 2080 NONAME ; class QGraphicsPixmapItem * QGraphicsScene::addPixmap(class QPixmap const &) ?addPixmap@QIcon@@QAEXABVQPixmap@@W4Mode@1@W4State@1@@Z @ 2081 NONAME ; void QIcon::addPixmap(class QPixmap const &, enum QIcon::Mode, enum QIcon::State) ?addPixmap@QIconEngine@@UAEXABVQPixmap@@W4Mode@QIcon@@W4State@4@@Z @ 2082 NONAME ; void QIconEngine::addPixmap(class QPixmap const &, enum QIcon::Mode, enum QIcon::State) - ?addPixmapDestructionHook@QImagePixmapCleanupHooks@@QAEXP6AXPAVQPixmap@@@Z@Z @ 2083 NONAME ; void QImagePixmapCleanupHooks::addPixmapDestructionHook(void (*)(class QPixmap *)) - ?addPixmapModificationHook@QImagePixmapCleanupHooks@@QAEXP6AXPAVQPixmap@@@Z@Z @ 2084 NONAME ; void QImagePixmapCleanupHooks::addPixmapModificationHook(void (*)(class QPixmap *)) + ?addPixmapDestructionHook@QImagePixmapCleanupHooks@@QAEXP6AXPAVQPixmap@@@Z@Z @ 2083 NONAME ABSENT ; void QImagePixmapCleanupHooks::addPixmapDestructionHook(void (*)(class QPixmap *)) + ?addPixmapModificationHook@QImagePixmapCleanupHooks@@QAEXP6AXPAVQPixmap@@@Z@Z @ 2084 NONAME ABSENT ; void QImagePixmapCleanupHooks::addPixmapModificationHook(void (*)(class QPixmap *)) ?addPolygon@QGraphicsScene@@QAEPAVQGraphicsPolygonItem@@ABVQPolygonF@@ABVQPen@@ABVQBrush@@@Z @ 2085 NONAME ; class QGraphicsPolygonItem * QGraphicsScene::addPolygon(class QPolygonF const &, class QPen const &, class QBrush const &) ?addPolygon@QPainterPath@@QAEXABVQPolygonF@@@Z @ 2086 NONAME ; void QPainterPath::addPolygon(class QPolygonF const &) ?addRect@QGraphicsScene@@QAEPAVQGraphicsRectItem@@ABVQRectF@@ABVQPen@@ABVQBrush@@@Z @ 2087 NONAME ; class QGraphicsRectItem * QGraphicsScene::addRect(class QRectF const &, class QPen const &, class QBrush const &) @@ -4283,8 +4283,8 @@ EXPORTS ?executeDelayedItemsLayout@QAbstractItemView@@IAEXXZ @ 4282 NONAME ; void QAbstractItemView::executeDelayedItemsLayout(void) ?executeImageHooks@QImagePixmapCleanupHooks@@SAX_J@Z @ 4283 NONAME ; void QImagePixmapCleanupHooks::executeImageHooks(long long) ?executePendingSort@QTreeWidgetItem@@ABEXXZ @ 4284 NONAME ; void QTreeWidgetItem::executePendingSort(void) const - ?executePixmapDestructionHooks@QImagePixmapCleanupHooks@@SAXPAVQPixmap@@@Z @ 4285 NONAME ; void QImagePixmapCleanupHooks::executePixmapDestructionHooks(class QPixmap *) - ?executePixmapModificationHooks@QImagePixmapCleanupHooks@@SAXPAVQPixmap@@@Z @ 4286 NONAME ; void QImagePixmapCleanupHooks::executePixmapModificationHooks(class QPixmap *) + ?executePixmapDestructionHooks@QImagePixmapCleanupHooks@@SAXPAVQPixmap@@@Z @ 4285 NONAME ABSENT ; void QImagePixmapCleanupHooks::executePixmapDestructionHooks(class QPixmap *) + ?executePixmapModificationHooks@QImagePixmapCleanupHooks@@SAXPAVQPixmap@@@Z @ 4286 NONAME ABSENT ; void QImagePixmapCleanupHooks::executePixmapModificationHooks(class QPixmap *) ?expand@QTreeView@@QAEXABVQModelIndex@@@Z @ 4287 NONAME ; void QTreeView::expand(class QModelIndex const &) ?expandAll@QTreeView@@QAEXXZ @ 4288 NONAME ; void QTreeView::expandAll(void) ?expandItem@QTreeWidget@@QAEXPBVQTreeWidgetItem@@@Z @ 4289 NONAME ; void QTreeWidget::expandItem(class QTreeWidgetItem const *) @@ -7927,8 +7927,8 @@ EXPORTS ?removeItemWidget@QTreeWidget@@QAEXPAVQTreeWidgetItem@@H@Z @ 7926 NONAME ; void QTreeWidget::removeItemWidget(class QTreeWidgetItem *, int) ?removeMapping@QDataWidgetMapper@@QAEXPAVQWidget@@@Z @ 7927 NONAME ; void QDataWidgetMapper::removeMapping(class QWidget *) ?removePage@QWizard@@QAEXH@Z @ 7928 NONAME ; void QWizard::removePage(int) - ?removePixmapDestructionHook@QImagePixmapCleanupHooks@@QAEXP6AXPAVQPixmap@@@Z@Z @ 7929 NONAME ; void QImagePixmapCleanupHooks::removePixmapDestructionHook(void (*)(class QPixmap *)) - ?removePixmapModificationHook@QImagePixmapCleanupHooks@@QAEXP6AXPAVQPixmap@@@Z@Z @ 7930 NONAME ; void QImagePixmapCleanupHooks::removePixmapModificationHook(void (*)(class QPixmap *)) + ?removePixmapDestructionHook@QImagePixmapCleanupHooks@@QAEXP6AXPAVQPixmap@@@Z@Z @ 7929 NONAME ABSENT ; void QImagePixmapCleanupHooks::removePixmapDestructionHook(void (*)(class QPixmap *)) + ?removePixmapModificationHook@QImagePixmapCleanupHooks@@QAEXP6AXPAVQPixmap@@@Z@Z @ 7930 NONAME ABSENT ; void QImagePixmapCleanupHooks::removePixmapModificationHook(void (*)(class QPixmap *)) ?removeRow@QStandardItem@@QAEXH@Z @ 7931 NONAME ; void QStandardItem::removeRow(int) ?removeRow@QTableWidget@@QAEXH@Z @ 7932 NONAME ; void QTableWidget::removeRow(int) ?removeRows@QSortFilterProxyModel@@UAE_NHHABVQModelIndex@@@Z @ 7933 NONAME ; bool QSortFilterProxyModel::removeRows(int, int, class QModelIndex const &) @@ -12533,4 +12533,19 @@ EXPORTS ?symbianHandleCommand@QApplicationPrivate@@QAEHPBVQSymbianEvent@@@Z @ 12532 NONAME ; int QApplicationPrivate::symbianHandleCommand(class QSymbianEvent const *) ?symbianProcessWsEvent@QApplicationPrivate@@QAEHPBVQSymbianEvent@@@Z @ 12533 NONAME ; int QApplicationPrivate::symbianProcessWsEvent(class QSymbianEvent const *) ?symbianResourceChange@QApplicationPrivate@@QAEHPBVQSymbianEvent@@@Z @ 12534 NONAME ; int QApplicationPrivate::symbianResourceChange(class QSymbianEvent const *) + ?addPixmapDataDestructionHook@QImagePixmapCleanupHooks@@QAEXP6AXPAVQPixmapData@@@Z@Z @ 12535 NONAME ; void QImagePixmapCleanupHooks::addPixmapDataDestructionHook(void (*)(class QPixmapData *)) + ?addPixmapDataModificationHook@QImagePixmapCleanupHooks@@QAEXP6AXPAVQPixmapData@@@Z@Z @ 12536 NONAME ; void QImagePixmapCleanupHooks::addPixmapDataModificationHook(void (*)(class QPixmapData *)) + ?cacheKey@QPixmapData@@QBE_JXZ @ 12537 NONAME ; long long QPixmapData::cacheKey(void) const + ?eventFilter@QS60Style@@MAE_NPAVQObject@@PAVQEvent@@@Z @ 12538 NONAME ; bool QS60Style::eventFilter(class QObject *, class QEvent *) + ?executePixmapDataDestructionHooks@QImagePixmapCleanupHooks@@SAXPAVQPixmapData@@@Z @ 12539 NONAME ; void QImagePixmapCleanupHooks::executePixmapDataDestructionHooks(class QPixmapData *) + ?executePixmapDataModificationHooks@QImagePixmapCleanupHooks@@SAXPAVQPixmapData@@@Z @ 12540 NONAME ; void QImagePixmapCleanupHooks::executePixmapDataModificationHooks(class QPixmapData *) + ?invalidateChildGraphicsEffectsRecursively@QGraphicsItemPrivate@@QAEXW4InvalidateReason@1@@Z @ 12541 NONAME ; void QGraphicsItemPrivate::invalidateChildGraphicsEffectsRecursively(enum QGraphicsItemPrivate::InvalidateReason) + ?invalidateParentGraphicsEffectsRecursively@QGraphicsItemPrivate@@QAEXXZ @ 12542 NONAME ; void QGraphicsItemPrivate::invalidateParentGraphicsEffectsRecursively(void) + ?markParentDirty@QGraphicsItemPrivate@@QAEX_N@Z @ 12543 NONAME ; void QGraphicsItemPrivate::markParentDirty(bool) + ?removePixmapDataDestructionHook@QImagePixmapCleanupHooks@@QAEXP6AXPAVQPixmapData@@@Z@Z @ 12544 NONAME ; void QImagePixmapCleanupHooks::removePixmapDataDestructionHook(void (*)(class QPixmapData *)) + ?removePixmapDataModificationHook@QImagePixmapCleanupHooks@@QAEXP6AXPAVQPixmapData@@@Z@Z @ 12545 NONAME ; void QImagePixmapCleanupHooks::removePixmapDataModificationHook(void (*)(class QPixmapData *)) + ?setParentItemHelper@QGraphicsItemPrivate@@QAEXPAVQGraphicsItem@@PBVQVariant@@1@Z @ 12546 NONAME ; void QGraphicsItemPrivate::setParentItemHelper(class QGraphicsItem *, class QVariant const *, class QVariant const *) + ?timerEvent@QS60Style@@MAEXPAVQTimerEvent@@@Z @ 12547 NONAME ; void QS60Style::timerEvent(class QTimerEvent *) + ?updateAncestorFlags@QGraphicsItemPrivate@@QAEXXZ @ 12548 NONAME ; void QGraphicsItemPrivate::updateAncestorFlags(void) + ?updateChildWithGraphicsEffectFlagRecursively@QGraphicsItemPrivate@@QAEXXZ @ 12549 NONAME ; void QGraphicsItemPrivate::updateChildWithGraphicsEffectFlagRecursively(void) diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index a9a69aa..5cf700b 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -11648,12 +11648,12 @@ EXPORTS _ZN24QImagePixmapCleanupHooks18enableCleanupHooksEP11QPixmapData @ 11647 NONAME _ZN24QImagePixmapCleanupHooks18enableCleanupHooksERK6QImage @ 11648 NONAME _ZN24QImagePixmapCleanupHooks18enableCleanupHooksERK7QPixmap @ 11649 NONAME - _ZN24QImagePixmapCleanupHooks24addPixmapDestructionHookEPFvP7QPixmapE @ 11650 NONAME - _ZN24QImagePixmapCleanupHooks25addPixmapModificationHookEPFvP7QPixmapE @ 11651 NONAME - _ZN24QImagePixmapCleanupHooks27removePixmapDestructionHookEPFvP7QPixmapE @ 11652 NONAME - _ZN24QImagePixmapCleanupHooks28removePixmapModificationHookEPFvP7QPixmapE @ 11653 NONAME - _ZN24QImagePixmapCleanupHooks29executePixmapDestructionHooksEP7QPixmap @ 11654 NONAME - _ZN24QImagePixmapCleanupHooks30executePixmapModificationHooksEP7QPixmap @ 11655 NONAME + _ZN24QImagePixmapCleanupHooks24addPixmapDestructionHookEPFvP7QPixmapE @ 11650 NONAME ABSENT + _ZN24QImagePixmapCleanupHooks25addPixmapModificationHookEPFvP7QPixmapE @ 11651 NONAME ABSENT + _ZN24QImagePixmapCleanupHooks27removePixmapDestructionHookEPFvP7QPixmapE @ 11652 NONAME ABSENT + _ZN24QImagePixmapCleanupHooks28removePixmapModificationHookEPFvP7QPixmapE @ 11653 NONAME ABSENT + _ZN24QImagePixmapCleanupHooks29executePixmapDestructionHooksEP7QPixmap @ 11654 NONAME ABSENT + _ZN24QImagePixmapCleanupHooks30executePixmapModificationHooksEP7QPixmap @ 11655 NONAME ABSENT _ZN25QGraphicsDropShadowEffect13setBlurRadiusEf @ 11656 NONAME _ZN25QGraphicsDropShadowEffect17blurRadiusChangedEf @ 11657 NONAME _ZN25QGraphicsDropShadowEffect4drawEP8QPainter @ 11658 NONAME @@ -11792,4 +11792,17 @@ EXPORTS _ZN19QApplicationPrivate20symbianHandleCommandEPK13QSymbianEvent @ 11791 NONAME _ZN19QApplicationPrivate21symbianProcessWsEventEPK13QSymbianEvent @ 11792 NONAME _ZN19QApplicationPrivate21symbianResourceChangeEPK13QSymbianEvent @ 11793 NONAME + _ZN20QGraphicsItemPrivate19setParentItemHelperEP13QGraphicsItemPK8QVariantS4_ @ 11794 NONAME + _ZN20QGraphicsItemPrivate19updateAncestorFlagsEv @ 11795 NONAME + _ZN20QGraphicsItemPrivate41invalidateChildGraphicsEffectsRecursivelyENS_16InvalidateReasonE @ 11796 NONAME + _ZN20QGraphicsItemPrivate42invalidateParentGraphicsEffectsRecursivelyEv @ 11797 NONAME + _ZN20QGraphicsItemPrivate44updateChildWithGraphicsEffectFlagRecursivelyEv @ 11798 NONAME + _ZN24QImagePixmapCleanupHooks28addPixmapDataDestructionHookEPFvP11QPixmapDataE @ 11799 NONAME + _ZN24QImagePixmapCleanupHooks29addPixmapDataModificationHookEPFvP11QPixmapDataE @ 11800 NONAME + _ZN24QImagePixmapCleanupHooks31removePixmapDataDestructionHookEPFvP11QPixmapDataE @ 11801 NONAME + _ZN24QImagePixmapCleanupHooks32removePixmapDataModificationHookEPFvP11QPixmapDataE @ 11802 NONAME + _ZN24QImagePixmapCleanupHooks33executePixmapDataDestructionHooksEP11QPixmapData @ 11803 NONAME + _ZN24QImagePixmapCleanupHooks34executePixmapDataModificationHooksEP11QPixmapData @ 11804 NONAME + _ZN9QS60Style10timerEventEP11QTimerEvent @ 11805 NONAME + _ZN9QS60Style11eventFilterEP7QObjectP6QEvent @ 11806 NONAME diff --git a/src/s60main/s60main.pro b/src/s60main/s60main.pro index 47cf020..25fb188 100644 --- a/src/s60main/s60main.pro +++ b/src/s60main/s60main.pro @@ -22,6 +22,9 @@ symbian { # staticlib should not have any lib depencies in s60 # This seems not to work, some hard coded libs are still added as dependency LIBS = + + # Workaround for abld toolchain problem to make ARMV6 qtmain.lib link with GCCE apps + symbian-abld: QMAKE_CXXFLAGS.ARMCC += --dllimport_runtime } else { error("$$_FILE_ is intended only for Symbian!") } diff --git a/src/xml/dom/qdom.cpp b/src/xml/dom/qdom.cpp index cae959b..8d9ae4f 100644 --- a/src/xml/dom/qdom.cpp +++ b/src/xml/dom/qdom.cpp @@ -2973,7 +2973,7 @@ QDomElement QDomNode::lastChildElement(const QString &tagName) const } /*! - Returns the next sibilng element with tag name \a tagName if \a tagName + Returns the next sibling element with tag name \a tagName if \a tagName is non-empty; otherwise returns any next sibling element. Returns a null element if no such sibling exists. diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index 3198a65..022b19a 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -587,3 +587,11 @@ contains(QT_CONFIG, declarative): SUBDIRS += declarative xmlpatternsview \ xmlpatternsxqts \ xmlpatternsxslts + + +############### make check recursively for testcases ################## +check.CONFIG = recursive +check.recurse = $$SUBDIRS +check.recurse_target = check +QMAKE_EXTRA_TARGETS += check +########################################################### diff --git a/tests/auto/qabstractscrollarea/tst_qabstractscrollarea.cpp b/tests/auto/qabstractscrollarea/tst_qabstractscrollarea.cpp index 3e062b8..da83826 100644 --- a/tests/auto/qabstractscrollarea/tst_qabstractscrollarea.cpp +++ b/tests/auto/qabstractscrollarea/tst_qabstractscrollarea.cpp @@ -71,8 +71,6 @@ private slots: void viewportCrash(); void task214488_layoutDirection_data(); void task214488_layoutDirection(); - void wheelEvent_data(); - void wheelEvent(); }; tst_QAbstractScrollArea::tst_QAbstractScrollArea() @@ -298,10 +296,10 @@ public: setAttribute(Qt::WA_DropSiteRegistered, true); - startTimer(200); + startTimer(2000); } - void timerEvent(QTimerEvent *) + void timerEvent(QTimerEvent *event) { // should not crash. (void)new QScrollArea(this); @@ -387,96 +385,5 @@ void tst_QAbstractScrollArea::patternBackground() QCOMPARE(image.pixel(QPoint(20,20)) , QColor(Qt::red).rgb()); } -Q_DECLARE_METATYPE(QWheelEvent *); - -void tst_QAbstractScrollArea::wheelEvent_data() -{ - QTest::addColumn<QSize>("widgetSize"); - QTest::addColumn<QPoint>("initialOffset"); - QTest::addColumn<QWheelEvent *>("event"); - QTest::addColumn<int>("movedX"); // -1 , 0 , or 1 - QTest::addColumn<int>("movedY"); - - QPoint pos(100,100); - int delta =-120; - - QTest::newRow("1") << QSize(600,600) << QPoint(50,50) - << new QWheelEvent(pos, delta, 0, 0, Qt::Horizontal) << 1 << 0; - - QTest::newRow("2") << QSize(600,600) << QPoint(50,50) - << new QWheelEvent(pos, delta, 0, 0, Qt::Vertical) << 0 << 1; - - QTest::newRow("3") << QSize(600,600) << QPoint(50,50) - << new QWheelEvent(pos, -delta, 0, 0, Qt::Horizontal) << -1 << 0; - - QTest::newRow("4") << QSize(600,600) << QPoint(50,50) - << new QWheelEvent(pos, -delta, 0, 0, Qt::Vertical) << 0 << -1; - - QTest::newRow("5") << QSize(20,600) << QPoint(0,50) - << new QWheelEvent(pos, delta, 0, 0, Qt::Horizontal) << 0 << 1; - - QTest::newRow("6") << QSize(20,600) << QPoint(0,50) - << new QWheelEvent(pos, delta, 0, 0, Qt::Vertical) << 0 << 1; - - QTest::newRow("7") << QSize(20,600) << QPoint(0,50) - << new QWheelEvent(pos, -delta, 0, 0, Qt::Horizontal) << 0 << -1; - - QTest::newRow("8") << QSize(20,600) << QPoint(0,50) - << new QWheelEvent(pos, -delta, 0, 0, Qt::Vertical) << 0 << -1; - - QTest::newRow("9") << QSize(600,20) << QPoint(50,0) - << new QWheelEvent(pos, delta, 0, 0, Qt::Horizontal) << 1 << 0; - - QTest::newRow("a") << QSize(600,20) << QPoint(50,0) - << new QWheelEvent(pos, delta, 0, 0, Qt::Vertical) << 1 << 0; - - QTest::newRow("b") << QSize(600,20) << QPoint(50,0) - << new QWheelEvent(pos, -delta, 0, 0, Qt::Horizontal) << -1 << 0; - - QTest::newRow("c") << QSize(600,20) << QPoint(50,0) - << new QWheelEvent(pos, -delta, 0, 0, Qt::Vertical) << -1 << 0; -} - - - - -void tst_QAbstractScrollArea::wheelEvent() -{ - QFETCH(QSize, widgetSize); - QFETCH(QPoint, initialOffset); - QFETCH(QWheelEvent *, event); - QFETCH(int, movedX); - QFETCH(int, movedY); - - QScrollArea scrollArea; - scrollArea.resize(200, 200); - QLabel widget("H e l l o"); - widget.resize(widgetSize); - scrollArea.setWidget(&widget); - scrollArea.show(); - QTest::qWait(20); - - scrollArea.verticalScrollBar()->setValue(initialOffset.y()); - scrollArea.horizontalScrollBar()->setValue(initialOffset.x()); - - QCOMPARE(scrollArea.verticalScrollBar()->value(), initialOffset.y()); - QCOMPARE(scrollArea.horizontalScrollBar()->value(), initialOffset.x()); - - QApplication::sendEvent(scrollArea.viewport(), event); - - if(movedX == 0) - QCOMPARE(scrollArea.horizontalScrollBar()->value(), initialOffset.x()); - else - QVERIFY(movedX * scrollArea.horizontalScrollBar()->value() > movedX * initialOffset.x()); - - if(movedY == 0) - QCOMPARE(scrollArea.verticalScrollBar()->value(), initialOffset.y()); - else - QVERIFY(movedY * scrollArea.verticalScrollBar()->value() > movedY * initialOffset.y()); - - delete event; -} - - QTEST_MAIN(tst_QAbstractScrollArea) #include "tst_qabstractscrollarea.moc" diff --git a/tests/auto/qabstractslider/tst_qabstractslider.cpp b/tests/auto/qabstractslider/tst_qabstractslider.cpp index 40281c6..293af36 100644 --- a/tests/auto/qabstractslider/tst_qabstractslider.cpp +++ b/tests/auto/qabstractslider/tst_qabstractslider.cpp @@ -768,7 +768,7 @@ void tst_QAbstractSlider::wheelEvent_data() << true // inverted controls << 20 // wheel scroll lines << false // with modifiers - << 1 // delta + << -1 // delta << int(Qt::Horizontal) // orientation of slider << int(Qt::Horizontal) // orientation of wheel << 30 // expected position after @@ -782,7 +782,7 @@ void tst_QAbstractSlider::wheelEvent_data() << false // inverted controls << 1 // wheel scroll lines << false // with modifiers - << 2 // delta + << -2 // delta << int(Qt::Horizontal) // orientation of slider << int(Qt::Horizontal) // orientation of wheel << 100 // expected position after @@ -796,7 +796,7 @@ void tst_QAbstractSlider::wheelEvent_data() << false // inverted controls << 1 // wheel scroll lines << false // with modifiers - << -2 // delta + << 2 // delta << int(Qt::Horizontal) // orientation of slider << int(Qt::Horizontal) // orientation of wheel << 0 // expected position after @@ -810,7 +810,7 @@ void tst_QAbstractSlider::wheelEvent_data() << false // inverted controls << 20 // wheel scroll lines << true // with modifiers - << 1 // delta + << -1 // delta << int(Qt::Horizontal) // orientation of slider << int(Qt::Horizontal) // orientation of wheel << 90 // expected position after diff --git a/tests/auto/qgl/qgl.pro b/tests/auto/qgl/qgl.pro index 420c4bb..9116f39 100644 --- a/tests/auto/qgl/qgl.pro +++ b/tests/auto/qgl/qgl.pro @@ -6,6 +6,6 @@ load(qttest_p4) requires(contains(QT_CONFIG,opengl)) QT += opengl -SOURCES += tst_qgl.cpp - +SOURCES += tst_qgl.cpp +RESOURCES = qgl.qrc diff --git a/tests/auto/qgl/qgl.qrc b/tests/auto/qgl/qgl.qrc new file mode 100644 index 0000000..653794a --- /dev/null +++ b/tests/auto/qgl/qgl.qrc @@ -0,0 +1,5 @@ +<!DOCTYPE RCC><RCC version="1.0"> +<qresource> + <file alias="designer.png">../qpixmap/images/designer.png</file> +</qresource> +</RCC> diff --git a/tests/auto/qgl/tst_qgl.cpp b/tests/auto/qgl/tst_qgl.cpp index cf4616e..d37d727 100644 --- a/tests/auto/qgl/tst_qgl.cpp +++ b/tests/auto/qgl/tst_qgl.cpp @@ -56,6 +56,7 @@ #ifdef QT_BUILD_INTERNAL #include <QtOpenGL/private/qgl_p.h> +#include <QtGui/private/qpixmapdata_p.h> #endif //TESTED_CLASS= @@ -91,6 +92,8 @@ private slots: void clipTest(); void destroyFBOAfterContext(); void shareRegister(); + void qglContextDefaultBindTexture(); + void textureCleanup(); }; tst_QGL::tst_QGL() @@ -1938,5 +1941,242 @@ void tst_QGL::shareRegister() #endif } +// Tests QGLContext::bindTexture with default options +void tst_QGL::qglContextDefaultBindTexture() +{ +#ifdef QT_BUILD_INTERNAL + QGLWidget w; + w.makeCurrent(); + + QGLContext *ctx = const_cast<QGLContext*>(w.context()); + + QImage *boundImage = new QImage(256, 256, QImage::Format_RGB32); + boundImage->fill(0xFFFFFFFF); + QPixmap *boundPixmap = new QPixmap(256, 256); + boundPixmap->fill(Qt::red); + + // Check that calling QGLContext::bindTexture with default args adds textures to cache + int startCacheItemCount = QGLTextureCache::instance()->size(); + GLuint boundImageTextureId = ctx->bindTexture(*boundImage); + GLuint boundPixmapTextureId = ctx->bindTexture(*boundPixmap); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+2); + + // Make sure the texture IDs returned are valid: + QCOMPARE((bool)glIsTexture(boundImageTextureId), GL_TRUE); + QCOMPARE((bool)glIsTexture(boundPixmapTextureId), GL_TRUE); + + // Make sure the textures are still there after we delete the image/pixmap: + delete boundImage; + boundImage = 0; + delete boundPixmap; + boundPixmap = 0; + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+2); + + // Make sure the textures are deleted from the cache after calling QGLContext::deleteTexture() + ctx->deleteTexture(boundImageTextureId); + ctx->deleteTexture(boundPixmapTextureId); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount); + + // Finally, make sure QGLContext::deleteTexture also deleted the texture IDs: + QCOMPARE((bool)glIsTexture(boundImageTextureId), GL_FALSE); + QCOMPARE((bool)glIsTexture(boundPixmapTextureId), GL_FALSE); +#endif +} + +void tst_QGL::textureCleanup() +{ +#ifdef QT_BUILD_INTERNAL + QGLWidget w; + w.resize(200,200); + w.show(); + w.makeCurrent(); + + // Test pixmaps which have been loaded via QPixmapCache are removed from the texture cache + // when the pixmap cache is cleared + { + int startCacheItemCount = QGLTextureCache::instance()->size(); + QPainter p(&w); + + QPixmap boundPixmap(":designer.png"); + + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount); + + p.drawPixmap(0, 0, boundPixmap); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+1); + + // Need to call end for the GL2 paint engine to release references to pixmap if using tfp + p.end(); + + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+1); + + // Check that the texture doesn't get removed from the cache when the pixmap is cleared + // as it should still be in the cache: + boundPixmap = QPixmap(); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+1); + + QPixmapCache::clear(); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount); + } + + // Test pixmaps which have been loaded via QPixmapCache are removed from the texture cache + // when they are explicitly removed from the pixmap cache + { + int startCacheItemCount = QGLTextureCache::instance()->size(); + QPainter p(&w); + + QPixmap boundPixmap(128, 128); + QString cacheKey = QString::fromLatin1("myPixmap"); + QPixmapCache::insert(cacheKey, boundPixmap); + + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount); + + p.drawPixmap(0, 0, boundPixmap); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+1); + + // Need to call end for the GL2 paint engine to release references to pixmap if using tfp + p.end(); + + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+1); + + // Check that the texture doesn't get removed from the cache when the pixmap is cleared + // as it should still be in the cache: + boundPixmap = QPixmap(); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+1); + + // Finally, we check that the texture cache entry is removed when we remove the + // pixmap cache entry, which should hold the last reference: + QPixmapCache::remove(cacheKey); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount); + } + + // Check images & pixmaps are removed from the cache when they are deleted + { + int startCacheItemCount = QGLTextureCache::instance()->size(); + QPainter p(&w); + + QImage *boundImage = new QImage(256, 256, QImage::Format_RGB32); + boundImage->fill(0xFFFFFFFF); + QPixmap *boundPixmap = new QPixmap(256, 256); + boundPixmap->fill(Qt::red); + + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount); + + p.drawImage(0, 0, *boundImage); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+1); + + p.drawPixmap(0, 0, *boundPixmap); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+2); + + // Need to call end for the GL2 paint engine to release references to pixmap if using tfp + p.end(); + + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+2); + + delete boundImage; + boundImage = 0; + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+1); + + delete boundPixmap; + boundPixmap = 0; + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount); + } + + // Check images & pixmaps are removed from the cache when they are assigned to + { + int startCacheItemCount = QGLTextureCache::instance()->size(); + QPainter p(&w); + + QImage boundImage(256, 256, QImage::Format_RGB32); + boundImage.fill(0xFFFFFFFF); + QPixmap boundPixmap(256, 256); + boundPixmap.fill(Qt::red); + + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount); + + p.drawImage(0, 0, boundImage); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+1); + + p.drawPixmap(0, 0, boundPixmap); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+2); + + // Need to call end for the GL2 paint engine to release references to pixmap if using tfp + p.end(); + + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+2); + + boundImage = QImage(64, 64, QImage::Format_RGB32); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+1); + + boundPixmap = QPixmap(64, 64); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount); + } + + // Check images & pixmaps are removed from the cache when they are modified (detached) + { + int startCacheItemCount = QGLTextureCache::instance()->size(); + QPainter p(&w); + + QImage boundImage(256, 256, QImage::Format_RGB32); + boundImage.fill(0xFFFFFFFF); + QPixmap boundPixmap(256, 256); + boundPixmap.fill(Qt::red); + + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount); + + p.drawImage(0, 0, boundImage); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+1); + + p.drawPixmap(0, 0, boundPixmap); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+2); + + // Need to call end for the GL2 paint engine to release references to pixmap if using tfp + p.end(); + + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+2); + + boundImage.fill(0x00000000); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+1); + + boundPixmap.fill(Qt::blue); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount); + } + + // Check that images/pixmaps aren't removed from the cache if a shallow copy has been made + QImage copyOfImage; + QPixmap copyOfPixmap; + int startCacheItemCount = QGLTextureCache::instance()->size(); + { + QPainter p(&w); + + QImage boundImage(256, 256, QImage::Format_RGB32); + boundImage.fill(0xFFFFFFFF); + QPixmap boundPixmap(256, 256); + boundPixmap.fill(Qt::red); + + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount); + + p.drawImage(0, 0, boundImage); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+1); + + p.drawPixmap(0, 0, boundPixmap); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+2); + + // Need to call end for the GL2 paint engine to release references to pixmap if using tfp + p.end(); + + copyOfImage = boundImage; + copyOfPixmap = boundPixmap; + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+2); + } // boundImage & boundPixmap would have been deleted when they went out of scope + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+2); + + copyOfImage = QImage(); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount+1); + + copyOfPixmap = QPixmap(); + QCOMPARE(QGLTextureCache::instance()->size(), startCacheItemCount); +#endif +} + QTEST_MAIN(tst_QGL) #include "tst_qgl.moc" diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp index 14b9ef0..7b54a3b 100644 --- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp @@ -251,6 +251,21 @@ public: QBrush brush; }; +class MyGraphicsView : public QGraphicsView +{ +public: + int repaints; + QRegion paintedRegion; + MyGraphicsView(QGraphicsScene *scene) : QGraphicsView(scene), repaints(0) {} + void paintEvent(QPaintEvent *e) + { + paintedRegion += e->region(); + ++repaints; + QGraphicsView::paintEvent(e); + } + void reset() { repaints = 0; paintedRegion = QRegion(); } +}; + class tst_QGraphicsItem : public QObject { Q_OBJECT @@ -419,6 +434,8 @@ private slots: void QTBUG_4233_updateCachedWithSceneRect(); void QTBUG_5418_textItemSetDefaultColor(); void QTBUG_6738_missingUpdateWithSetParent(); + void QTBUG_7714_fullUpdateDiscardingOpacityUpdate2(); + void QT_2653_fullUpdateDiscardingOpacityUpdate(); private: QList<QGraphicsItem *> paintedItems; @@ -3165,7 +3182,6 @@ void tst_QGraphicsItem::childrenBoundingRect() childChild->setPos(500, 500); child->rotate(90); - scene.addPolygon(parent->mapToScene(parent->boundingRect() | parent->childrenBoundingRect()))->setPen(QPen(Qt::red));; QGraphicsView view(&scene); @@ -6252,13 +6268,6 @@ void tst_QGraphicsItem::opacity2() QGraphicsScene scene; scene.addItem(parent); - class MyGraphicsView : public QGraphicsView - { public: - int repaints; - MyGraphicsView(QGraphicsScene *scene) : QGraphicsView(scene), repaints(0) {} - void paintEvent(QPaintEvent *e) { ++repaints; QGraphicsView::paintEvent(e); } - }; - MyGraphicsView view(&scene); view.show(); QTest::qWaitForWindowShown(&view); @@ -6336,20 +6345,6 @@ void tst_QGraphicsItem::opacityZeroUpdates() QGraphicsScene scene; scene.addItem(parent); - class MyGraphicsView : public QGraphicsView - { public: - int repaints; - QRegion paintedRegion; - MyGraphicsView(QGraphicsScene *scene) : QGraphicsView(scene), repaints(0) {} - void paintEvent(QPaintEvent *e) - { - ++repaints; - paintedRegion += e->region(); - QGraphicsView::paintEvent(e); - } - void reset() { repaints = 0; paintedRegion = QRegion(); } - }; - MyGraphicsView view(&scene); view.show(); QTest::qWaitForWindowShown(&view); @@ -7076,21 +7071,6 @@ void tst_QGraphicsItem::deviceTransform() QCOMPARE(rect3->deviceTransform(deviceX).map(QPointF(50, 50)), mapResult3); } -class MyGraphicsView : public QGraphicsView -{ -public: - int repaints; - QRegion paintedRegion; - MyGraphicsView(QGraphicsScene *scene) : QGraphicsView(scene), repaints(0) {} - void paintEvent(QPaintEvent *e) - { - paintedRegion += e->region(); - ++repaints; - QGraphicsView::paintEvent(e); - } - void reset() { repaints = 0; paintedRegion = QRegion(); } -}; - void tst_QGraphicsItem::update() { QGraphicsScene scene; @@ -9835,7 +9815,7 @@ void tst_QGraphicsItem::scenePosChange() QCOMPARE(child2->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 0); } -void tst_QGraphicsItem::QTBUG_5418_textItemSetDefaultColor() +void tst_QGraphicsItem::QTBUG_5418_textItemSetDefaultColor() { struct Item : public QGraphicsTextItem { @@ -9914,20 +9894,6 @@ void tst_QGraphicsItem::QTBUG_6738_missingUpdateWithSetParent() QGraphicsScene scene; scene.addItem(parent); - class MyGraphicsView : public QGraphicsView - { public: - int repaints; - QRegion paintedRegion; - MyGraphicsView(QGraphicsScene *scene) : QGraphicsView(scene), repaints(0) {} - void paintEvent(QPaintEvent *e) - { - ++repaints; - paintedRegion += e->region(); - QGraphicsView::paintEvent(e); - } - void reset() { repaints = 0; paintedRegion = QRegion(); } - }; - MyGraphicsView view(&scene); view.show(); QTest::qWaitForWindowShown(&view); @@ -9955,5 +9921,84 @@ void tst_QGraphicsItem::QTBUG_6738_missingUpdateWithSetParent() QTRY_VERIFY(view.repaints == 1); } +void tst_QGraphicsItem::QT_2653_fullUpdateDiscardingOpacityUpdate() +{ + QGraphicsScene scene(0, 0, 200, 200); + MyGraphicsView view(&scene); + + EventTester *parentGreen = new EventTester(); + parentGreen->setGeometry(QRectF(20, 20, 100, 100)); + parentGreen->brush = Qt::green; + + EventTester *childYellow = new EventTester(parentGreen); + childYellow->setGeometry(QRectF(10, 10, 50, 50)); + childYellow->brush = Qt::yellow; + + scene.addItem(parentGreen); + + childYellow->setOpacity(0.0); + parentGreen->setOpacity(0.0); + + // set any of the flags below to trigger a fullUpdate to reproduce the bug: + // ItemIgnoresTransformations, ItemClipsChildrenToShape, ItemIsSelectable + parentGreen->setFlag(QGraphicsItem::ItemIgnoresTransformations); + + view.show(); + QTest::qWaitForWindowShown(&view); + view.reset(); + + parentGreen->setOpacity(1.0); + + QTRY_COMPARE(view.repaints, 1); + + view.reset(); + childYellow->repaints = 0; + + childYellow->setOpacity(1.0); + + QTRY_COMPARE(view.repaints, 1); + QTRY_COMPARE(childYellow->repaints, 1); +} + +void tst_QGraphicsItem::QTBUG_7714_fullUpdateDiscardingOpacityUpdate2() +{ + QGraphicsScene scene(0, 0, 200, 200); + MyGraphicsView view(&scene); + MyGraphicsView origView(&scene); + + EventTester *parentGreen = new EventTester(); + parentGreen->setGeometry(QRectF(20, 20, 100, 100)); + parentGreen->brush = Qt::green; + + EventTester *childYellow = new EventTester(parentGreen); + childYellow->setGeometry(QRectF(10, 10, 50, 50)); + childYellow->brush = Qt::yellow; + + scene.addItem(parentGreen); + + origView.show(); + QTest::qWaitForWindowShown(&origView); + origView.setGeometry(origView.width() + 20, 20, + origView.width(), origView.height()); + + parentGreen->setFlag(QGraphicsItem::ItemIgnoresTransformations); + + origView.reset(); + childYellow->setOpacity(0.0); + + QTRY_COMPARE(origView.repaints, 1); + + view.show(); + + QTest::qWaitForWindowShown(&view); + view.reset(); + origView.reset(); + + childYellow->setOpacity(1.0); + + QTRY_COMPARE(origView.repaints, 1); + QTRY_COMPARE(view.repaints, 1); +} + QTEST_MAIN(tst_QGraphicsItem) #include "tst_qgraphicsitem.moc" diff --git a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp index 6743fbe..469ded0 100644 --- a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp +++ b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp @@ -2806,14 +2806,14 @@ void tst_QGraphicsScene::contextMenuEvent_ItemIgnoresTransformations() { QPoint pos(50, 50); - QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.mapToGlobal(pos)); + QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.viewport()->mapToGlobal(pos)); event.ignore(); QApplication::sendEvent(view.viewport(), &event); QVERIFY(event.isAccepted()); } { QPoint pos(150, 150); - QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.mapToGlobal(pos)); + QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.viewport()->mapToGlobal(pos)); event.ignore(); QApplication::sendEvent(view.viewport(), &event); QVERIFY(!event.isAccepted()); @@ -2821,14 +2821,14 @@ void tst_QGraphicsScene::contextMenuEvent_ItemIgnoresTransformations() view.scale(1.5, 1.5); { QPoint pos(25, 25); - QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.mapToGlobal(pos)); + QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.viewport()->mapToGlobal(pos)); event.ignore(); QApplication::sendEvent(view.viewport(), &event); QVERIFY(event.isAccepted()); } { QPoint pos(55, 55); - QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.mapToGlobal(pos)); + QContextMenuEvent event(QContextMenuEvent::Keyboard, pos, view.viewport()->mapToGlobal(pos)); event.ignore(); QApplication::sendEvent(view.viewport(), &event); QVERIFY(!event.isAccepted()); diff --git a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp index d3132fe..00bf144 100644 --- a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp +++ b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp @@ -164,6 +164,7 @@ private slots: void polishEvent(); void polishEvent2(); void initialShow(); + void initialShow2(); // Task fixes void task236127_bspTreeIndexFails(); @@ -2881,6 +2882,48 @@ void tst_QGraphicsWidget::initialShow() QCOMPARE(widget->repaints, 1); } +void tst_QGraphicsWidget::initialShow2() +{ + class MyGraphicsWidget : public QGraphicsWidget + { public: + MyGraphicsWidget() : repaints(0) {} + int repaints; + void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget*) { ++repaints; } + void polishEvent() { update(); } + }; + + // Don't let paint events triggered by the windowing system + // influence our test case. We're only interested in knowing + // whether a QGraphicsWidget generates an additional repaint + // on the inital show. Hence create a dummy scenario to find out + // how many repaints we should expect. + QGraphicsScene dummyScene(0, 0, 200, 200); + dummyScene.addItem(new QGraphicsRectItem(0, 0, 100, 100)); + + QGraphicsView *dummyView = new QGraphicsView(&dummyScene); + dummyView->setWindowFlags(Qt::X11BypassWindowManagerHint); + EventSpy paintSpy(dummyView->viewport(), QEvent::Paint); + dummyView->show(); + QTest::qWaitForWindowShown(dummyView); + const int expectedRepaintCount = paintSpy.count(); + delete dummyView; + dummyView = 0; + QTest::qWait(200); + + MyGraphicsWidget *widget = new MyGraphicsWidget; + widget->resize(100, 100); + + QGraphicsScene scene(0, 0, 200, 200); + scene.addItem(widget); + + QGraphicsView view(&scene); + view.setWindowFlags(Qt::X11BypassWindowManagerHint); + view.show(); + QTest::qWaitForWindowShown(&view); + + QCOMPARE(widget->repaints, expectedRepaintCount); +} + void tst_QGraphicsWidget::QT_BUG_6544_tabFocusFirstUnsetWhenRemovingItems() { QGraphicsScene scene; diff --git a/tests/auto/qimagereader/images/qt-gif-anim.gif b/tests/auto/qimagereader/images/qt-gif-anim.gif Binary files differnew file mode 100644 index 0000000..8bca4a8 --- /dev/null +++ b/tests/auto/qimagereader/images/qt-gif-anim.gif diff --git a/tests/auto/qimagereader/images/qt-gif-noanim.gif b/tests/auto/qimagereader/images/qt-gif-noanim.gif Binary files differnew file mode 100644 index 0000000..b6a8540 --- /dev/null +++ b/tests/auto/qimagereader/images/qt-gif-noanim.gif diff --git a/tests/auto/qimagereader/qimagereader.qrc b/tests/auto/qimagereader/qimagereader.qrc index 58f2f74..bc48244 100644 --- a/tests/auto/qimagereader/qimagereader.qrc +++ b/tests/auto/qimagereader/qimagereader.qrc @@ -1,5 +1,5 @@ <RCC> - <qresource prefix="/" > + <qresource prefix="/"> <file>images/16bpp.bmp</file> <file>images/4bpp-rle.bmp</file> <file>images/YCbCr_cmyk.jpg</file> @@ -59,5 +59,7 @@ <file>images/qt8.gif</file> <file>images/endless-anim.gif</file> <file>images/four-frames.gif</file> + <file>images/qt-gif-anim.gif</file> + <file>images/qt-gif-noanim.gif</file> </qresource> </RCC> diff --git a/tests/auto/qimagereader/tst_qimagereader.cpp b/tests/auto/qimagereader/tst_qimagereader.cpp index e7cfe68..121a8fa 100644 --- a/tests/auto/qimagereader/tst_qimagereader.cpp +++ b/tests/auto/qimagereader/tst_qimagereader.cpp @@ -142,6 +142,7 @@ private slots: void gifHandlerBugs(); void animatedGif(); void gifImageCount(); + void gifLoopCount(); #endif void readCorruptImage_data(); @@ -765,6 +766,8 @@ void tst_QImageReader::gifImageCount() QVERIFY(io.canRead()); QImage greenFrame = io.read(); + QVERIFY(io.imageCount() == 4); + QVERIFY(io.canRead()); QImage blueFrame = io.read(); @@ -876,7 +879,25 @@ void tst_QImageReader::gifImageCount() QCOMPARE(blueFrame.size(), QSize(64,64)); QVERIFY(emptyFrame.isNull()); } + { + QImageReader io(":images/trolltech.gif"); + QVERIFY(io.imageCount() == 34); + QVERIFY(io.size() == QSize(128,64)); + } +} + +void tst_QImageReader::gifLoopCount() +{ + { + QImageReader io(":images/qt-gif-anim.gif"); + QCOMPARE(io.loopCount(), -1); // infinite loop + } + { + QImageReader io(":images/qt-gif-noanim.gif"); + QCOMPARE(io.loopCount(), 0); // no loop + } } + #endif class Server : public QObject @@ -1641,10 +1662,16 @@ void tst_QImageReader::pixelCompareWithBaseline() { QFETCH(QString, fileName); + static int enteredCount = 0; // Used for better error diagnostics if something fails. We + static int loadFailCount = 0; // don't know if the reason load() fails is that the plugin + // does not exist or because of a bug in the plugin. But if at + // least one file succeeded we know that the plugin was built. + // The other failures are then real failures. QImage icoImg; const QString inputFileName(QString::fromAscii("images/%1").arg(fileName)); QFileInfo fi(inputFileName); + ++enteredCount; // might fail if the plugin does not exist, which is ok. if (icoImg.load(inputFileName)) { icoImg = icoImg.convertToFormat(QImage::Format_ARGB32_Premultiplied); @@ -1658,6 +1685,13 @@ void tst_QImageReader::pixelCompareWithBaseline() QCOMPARE(int(baseImg.format()), int(icoImg.format())); QCOMPARE(baseImg, icoImg); #endif + } else { + ++loadFailCount; + if (enteredCount != loadFailCount) { + QFAIL("Plugin is built, but some did not load properly"); + } else { + qWarning("loading failed, check if ico plugin is built"); + } } } diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp index ea90ae3..03eddee 100644 --- a/tests/auto/qwidget/tst_qwidget.cpp +++ b/tests/auto/qwidget/tst_qwidget.cpp @@ -391,11 +391,17 @@ private slots: #ifdef Q_OS_SYMBIAN void cbaVisibility(); + void fullScreenWindowModeTransitions(); + void maximizedWindowModeTransitions(); + void minimizedWindowModeTransitions(); + void normalWindowModeTransitions(); #endif void focusProxyAndInputMethods(); void scrollWithoutBackingStore(); + void taskQTBUG_7532_tabOrderWithFocusProxy(); + private: bool ensureScreenSize(int width, int height); QWidget *testWidget; @@ -9687,6 +9693,226 @@ void tst_QWidget::cbaVisibility() CEikButtonGroupContainer* buttonGroup = CEikonEnv::Static()->AppUiFactory()->Cba(); QVERIFY(buttonGroup->IsVisible()); } + +void tst_QWidget::fullScreenWindowModeTransitions() +{ + QWidget widget; + QVBoxLayout *layout = new QVBoxLayout; + QPushButton *button = new QPushButton("test Button"); + layout->addWidget(button); + widget.setLayout(layout); + widget.show(); + + const QRect normalGeometry = widget.normalGeometry(); + const QRect fullScreenGeometry = qApp->desktop()->screenGeometry(&widget); + const QRect maximumScreenGeometry = qApp->desktop()->availableGeometry(&widget); + CEikStatusPane *statusPane = CEikonEnv::Static()->AppUiFactory()->StatusPane(); + CEikButtonGroupContainer *buttonGroup = CEikonEnv::Static()->AppUiFactory()->Cba(); + + //Enter + widget.showNormal(); + widget.showFullScreen(); + QCOMPARE(widget.geometry(), fullScreenGeometry); + QVERIFY(!buttonGroup->IsVisible()); + QVERIFY(!statusPane->IsVisible()); + + widget.showMaximized(); + widget.showFullScreen(); + QCOMPARE(widget.geometry(), fullScreenGeometry); + QVERIFY(!buttonGroup->IsVisible()); + QVERIFY(!statusPane->IsVisible()); + + widget.showMinimized(); + widget.showFullScreen(); + QCOMPARE(widget.geometry(), fullScreenGeometry); + QVERIFY(!buttonGroup->IsVisible()); + QVERIFY(!statusPane->IsVisible()); + + //Exit + widget.showFullScreen(); + widget.showNormal(); + QCOMPARE(widget.geometry(), normalGeometry); + QVERIFY(buttonGroup->IsVisible()); + QVERIFY(statusPane->IsVisible()); + + widget.showFullScreen(); + widget.showMaximized(); + QCOMPARE(widget.geometry(), maximumScreenGeometry); + QVERIFY(buttonGroup->IsVisible()); + QVERIFY(statusPane->IsVisible()); + + widget.showFullScreen(); + widget.showMinimized(); + QCOMPARE(widget.geometry(), fullScreenGeometry); + QVERIFY(!buttonGroup->IsVisible()); + QVERIFY(!statusPane->IsVisible()); +} + +void tst_QWidget::maximizedWindowModeTransitions() +{ + QWidget widget; + QVBoxLayout *layout = new QVBoxLayout; + QPushButton *button = new QPushButton("test Button"); + layout->addWidget(button); + widget.setLayout(layout); + widget.show(); + + const QRect normalGeometry = widget.normalGeometry(); + const QRect fullScreenGeometry = qApp->desktop()->screenGeometry(&widget); + const QRect maximumScreenGeometry = qApp->desktop()->availableGeometry(&widget); + CEikStatusPane *statusPane = CEikonEnv::Static()->AppUiFactory()->StatusPane(); + CEikButtonGroupContainer *buttonGroup = CEikonEnv::Static()->AppUiFactory()->Cba(); + + //Enter + widget.showNormal(); + widget.showMaximized(); + QCOMPARE(widget.geometry(), maximumScreenGeometry); + QVERIFY(buttonGroup->IsVisible()); + QVERIFY(statusPane->IsVisible()); + + widget.showFullScreen(); + widget.showMaximized(); + QCOMPARE(widget.geometry(), maximumScreenGeometry); + QVERIFY(buttonGroup->IsVisible()); + QVERIFY(statusPane->IsVisible()); + + widget.showMinimized(); + widget.showMaximized(); + QCOMPARE(widget.geometry(), maximumScreenGeometry); + QVERIFY(buttonGroup->IsVisible()); + QVERIFY(statusPane->IsVisible()); + + //Exit + widget.showMaximized(); + widget.showNormal(); + QCOMPARE(widget.geometry(), normalGeometry); + QVERIFY(buttonGroup->IsVisible()); + QVERIFY(statusPane->IsVisible()); + + widget.showMaximized(); + widget.showFullScreen(); + QCOMPARE(widget.geometry(), fullScreenGeometry); + QVERIFY(!buttonGroup->IsVisible()); + QVERIFY(!statusPane->IsVisible()); + + widget.showMaximized(); + widget.showMinimized(); + // Since showMinimized hides window decoration availableGeometry gives different value + // than with decoration visible. Altual size does not really matter since widget is invisible. + QCOMPARE(widget.geometry(), qApp->desktop()->availableGeometry(&widget)); + QVERIFY(!buttonGroup->IsVisible()); + QVERIFY(!statusPane->IsVisible()); +} + +void tst_QWidget::minimizedWindowModeTransitions() +{ + QWidget widget; + QVBoxLayout *layout = new QVBoxLayout; + QPushButton *button = new QPushButton("test Button"); + layout->addWidget(button); + widget.setLayout(layout); + widget.show(); + + const QRect normalGeometry = widget.normalGeometry(); + const QRect fullScreenGeometry = qApp->desktop()->screenGeometry(&widget); + const QRect maximumScreenGeometry = qApp->desktop()->availableGeometry(&widget); + CEikStatusPane *statusPane = CEikonEnv::Static()->AppUiFactory()->StatusPane(); + CEikButtonGroupContainer *buttonGroup = CEikonEnv::Static()->AppUiFactory()->Cba(); + + //Enter + widget.showNormal(); + widget.showMinimized(); + QCOMPARE(widget.geometry(), normalGeometry); + QVERIFY(!buttonGroup->IsVisible()); + QVERIFY(!statusPane->IsVisible()); + + widget.showFullScreen(); + widget.showMinimized(); + QCOMPARE(widget.geometry(), fullScreenGeometry); + QVERIFY(!buttonGroup->IsVisible()); + QVERIFY(!statusPane->IsVisible()); + + widget.showMaximized(); + widget.showMinimized(); + // Since showMinimized hides window decoration availableGeometry gives different value + // than with decoration visible. Altual size does not really matter since widget is invisible. + QCOMPARE(widget.geometry(), qApp->desktop()->availableGeometry(&widget)); + QVERIFY(!buttonGroup->IsVisible()); + QVERIFY(!statusPane->IsVisible()); + + //Exit + widget.showMinimized(); + widget.showNormal(); + QCOMPARE(widget.geometry(), normalGeometry); + QVERIFY(buttonGroup->IsVisible()); + QVERIFY(statusPane->IsVisible()); + + widget.showMinimized(); + widget.showFullScreen(); + QCOMPARE(widget.geometry(), fullScreenGeometry); + QVERIFY(!buttonGroup->IsVisible()); + QVERIFY(!statusPane->IsVisible()); + + widget.showMinimized(); + widget.showMaximized(); + QCOMPARE(widget.geometry(), maximumScreenGeometry); + QVERIFY(buttonGroup->IsVisible()); + QVERIFY(statusPane->IsVisible()); +} + +void tst_QWidget::normalWindowModeTransitions() +{ + QWidget widget; + QVBoxLayout *layout = new QVBoxLayout; + QPushButton *button = new QPushButton("test Button"); + layout->addWidget(button); + widget.setLayout(layout); + widget.show(); + + const QRect normalGeometry = widget.normalGeometry(); + const QRect fullScreenGeometry = qApp->desktop()->screenGeometry(&widget); + const QRect maximumScreenGeometry = qApp->desktop()->availableGeometry(&widget); + CEikStatusPane *statusPane = CEikonEnv::Static()->AppUiFactory()->StatusPane(); + CEikButtonGroupContainer *buttonGroup = CEikonEnv::Static()->AppUiFactory()->Cba(); + + //Enter + widget.showMaximized(); + widget.showNormal(); + QCOMPARE(widget.geometry(), normalGeometry); + QVERIFY(buttonGroup->IsVisible()); + QVERIFY(statusPane->IsVisible()); + + widget.showFullScreen(); + widget.showNormal(); + QCOMPARE(widget.geometry(), normalGeometry); + QVERIFY(buttonGroup->IsVisible()); + QVERIFY(statusPane->IsVisible()); + + widget.showMinimized(); + widget.showNormal(); + QCOMPARE(widget.geometry(), normalGeometry); + QVERIFY(buttonGroup->IsVisible()); + QVERIFY(statusPane->IsVisible()); + + //Exit + widget.showNormal(); + widget.showMaximized(); + QCOMPARE(widget.geometry(), maximumScreenGeometry); + QVERIFY(buttonGroup->IsVisible()); + QVERIFY(statusPane->IsVisible()); + + widget.showNormal(); + widget.showFullScreen(); + QCOMPARE(widget.geometry(), fullScreenGeometry); + QVERIFY(!buttonGroup->IsVisible()); + QVERIFY(!statusPane->IsVisible()); + + widget.showNormal(); + widget.showMinimized(); + QCOMPARE(widget.geometry(), normalGeometry); + QVERIFY(!buttonGroup->IsVisible()); + QVERIFY(!statusPane->IsVisible()); +} #endif class InputContextTester : public QInputContext @@ -9783,5 +10009,17 @@ void tst_QWidget::scrollWithoutBackingStore() QCOMPARE(child.pos(),QPoint(25,25)); } +void tst_QWidget::taskQTBUG_7532_tabOrderWithFocusProxy() +{ + QWidget w; + w.setFocusPolicy(Qt::TabFocus); + QWidget *fp = new QWidget(&w); + fp->setFocusPolicy(Qt::TabFocus); + w.setFocusProxy(fp); + QWidget::setTabOrder(&w, fp); + + // No Q_ASSERT, then it's allright. +} + QTEST_MAIN(tst_QWidget) #include "tst_qwidget.moc" diff --git a/tests/auto/uiloader/baseline/css_qtbug7737_borderimageradius.ui b/tests/auto/uiloader/baseline/css_qtbug7737_borderimageradius.ui new file mode 100644 index 0000000..089cb76 --- /dev/null +++ b/tests/auto/uiloader/baseline/css_qtbug7737_borderimageradius.ui @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Form</class> + <widget class="QWidget" name="Form"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>207</width> + <height>69</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <property name="styleSheet"> + <string notr="true">QPushButton { border-image: url("images/pushbutton.png") 5 5 5 5; border-radius:8px; }</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QPushButton" name="pushButton"> + <property name="text"> + <string>Border image and radius</string> + </property> + </widget> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/tests/benchmarks/qgraphicsview/tst_qgraphicsview.cpp b/tests/benchmarks/qgraphicsview/tst_qgraphicsview.cpp index d98a2a1..4cb07db 100644 --- a/tests/benchmarks/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/benchmarks/qgraphicsview/tst_qgraphicsview.cpp @@ -171,7 +171,7 @@ void tst_QGraphicsView::paintSingleItem() } #ifdef Q_OS_SYMBIAN -# define DEEP_STACKING_COUNT 200 +# define DEEP_STACKING_COUNT 85 #else # define DEEP_STACKING_COUNT 1000 #endif diff --git a/tools/installer/README b/tools/installer/README deleted file mode 100644 index 63abf6d..0000000 --- a/tools/installer/README +++ /dev/null @@ -1,12 +0,0 @@ -iwmake is the tool used to generate the Qt installer binaries. - -To be able to use it yourself create a config.default in the -config/ directory. You can refer to config.default.sample to see -which values need to be set within this file. - -Afterwards call "iwmake.bat mingw-opensource.conf" to create an -installer package yourself. - -Note that the binary creation takes a lot of time and is very -CPU-intensive as it recompiles the Qt source package among other -steps. diff --git a/tools/installer/batch/build.bat b/tools/installer/batch/build.bat deleted file mode 100755 index c10b7f3..0000000 --- a/tools/installer/batch/build.bat +++ /dev/null @@ -1,157 +0,0 @@ -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -:: -:: Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -:: All rights reserved. -:: Contact: Nokia Corporation (qt-info@nokia.com) -:: -:: This file is part of the tools applications of the Qt Toolkit. -:: -:: $QT_BEGIN_LICENSE:LGPL$ -:: No Commercial Usage -:: This file contains pre-release code and may not be distributed. -:: You may use this file in accordance with the terms and conditions -:: contained in the Technology Preview License Agreement accompanying -:: this package. -:: -:: GNU Lesser General Public License Usage -:: Alternatively, this file may be used under the terms of the GNU Lesser -:: General Public License version 2.1 as published by the Free Software -:: Foundation and appearing in the file LICENSE.LGPL included in the -:: packaging of this file. Please review the following information to -:: ensure the GNU Lesser General Public License version 2.1 requirements -:: will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -:: -:: In addition, as a special exception, Nokia gives you certain additional -:: rights. These rights are described in the Nokia Qt LGPL Exception -:: version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -:: -:: If you have questions regarding the use of this file, please contact -:: Nokia at qt-info@nokia.com. -:: -:: -:: -:: -:: -:: -:: -:: -:: $QT_END_LICENSE$ -:: -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -call :%1 %2 -goto END - -:begin -for /F "tokens=1*" %%m in ("%~1") do set IWMAKE_COMPILER=%%~m& set IWMAKE_TMP=%%~n - -if "%IWMAKE_TMP%"=="" set IWMAKE_TMP=build_%IWMAKE_COMPILER% -set IWMAKE_BUILD=%IWMAKE_ROOT%\%IWMAKE_TMP% -if not exist %IWMAKE_BUILD% mkdir %IWMAKE_BUILD% - -if not "%PATH%"=="" set IWMAKE_OLD_PATH=%PATH% -if not "%QMAKESPEC%"=="" set IWMAKE_OLD_QMAKESPEC=%QMAKESPEC% -if not "%QTDIR%"=="" set IWMAKE_OLD_QTDIR=%QTDIR% -if not "%INCLUDE%"=="" set IWMAKE_OLD_INCLUDE=%INCLUDE% -if not "%LIB%"=="" set IWMAKE_OLD_LIB=%LIB% - -set PATH=%IWMAKE_BUILD%\bin;%PATH% -set QTDIR=%IWMAKE_BUILD% - -if "%IWMAKE_COMPILER%"=="vs2003" goto VS2003Env -if "%IWMAKE_COMPILER%"=="vs2002" goto VS2002Env -if "%IWMAKE_COMPILER%"=="vs2005" goto VS2005Env -if "%IWMAKE_COMPILER%"=="vc60" goto VC60Env -if "%IWMAKE_COMPILER%"=="mingw" goto MinGWEnv -goto :eof - -:VS2003Env -set QMAKESPEC=win32-msvc.net -if not exist "%VS71COMNTOOLS%vsvars32.bat" echo VS2003 not found >> %IWMAKE_LOGFILE% & exit /b 1 -call "%VS71COMNTOOLS%vsvars32.bat" >> %IWMAKE_LOGFILE% -set IWMAKE_MAKE=nmake -goto :eof - -:VS2002Env -set QMAKESPEC=win32-msvc.net -if not exist "%VSCOMNTOOLS%vsvars32.bat" echo VS2002 not found >> %IWMAKE_LOGFILE% & exit /b 1 -call "%VSCOMNTOOLS%vsvars32.bat" >> %IWMAKE_LOGFILE% -set IWMAKE_MAKE=nmake -goto :eof - -:VS2005Env -set QMAKESPEC=win32-msvc2005 -if not exist "%VS80COMNTOOLS%vsvars32.bat" echo VS2005 not found >> %IWMAKE_LOGFILE% & exit /b 1 -call "%VS80COMNTOOLS%vsvars32.bat" >> %IWMAKE_LOGFILE% -set IWMAKE_MAKE=nmake -goto :eof - -:VC60Env -set QMAKESPEC=win32-msvc -if not exist "%ProgramFiles%\Microsoft Visual Studio\VC98\Bin\vcvars32.bat" echo VC60 not found >> %IWMAKE_LOGFILE% & exit /b 1 -call "%ProgramFiles%\Microsoft Visual Studio\VC98\Bin\vcvars32.bat" >> %IWMAKE_LOGFILE% -set IWMAKE_MAKE=nmake -goto :eof - -:MinGWEnv -set QMAKESPEC=win32-g++ -if not exist %IWMAKE_MINGWPATH%\bin\gcc.exe echo MinGW not found in %IWMAKE_MINGWPATH% >> %IWMAKE_LOGFILE% & exit /b 1 -set PATH=%IWMAKE_MINGWPATH%\bin;%PATH% -set IWMAKE_MAKE=mingw32-make -goto :eof - -:finish - if not "%IWMAKE_OLD_PATH%"=="" set PATH=%IWMAKE_OLD_PATH%& set IWMAKE_OLD_PATH= - if not "%IWMAKE_OLD_QMAKESPEC%"=="" set QMAKESPEC=%IWMAKE_OLD_QMAKESPEC%& set IWMAKE_OLD_QMAKESPEC= - if not "%IWMAKE_OLD_QTDIR%"=="" set QTDIR=%IWMAKE_OLD_QTDIR%& set IWMAKE_OLD_QTDIR= - if not "%IWMAKE_OLD_INCLUDE%"=="" set INCLUDE=%IWMAKE_OLD_INCLUDE%& set IWMAKE_OLD_INCLUDE= - if not "%IWMAKE_OLD_LIB%"=="" set LIB=%IWMAKE_OLD_LIB%& set IWMAKE_OLD_LIB= -goto :eof - -:configure - pushd %IWMAKE_BUILD% - configure %~1 >> %IWMAKE_LOGFILE% 2>&1 - popd -goto :eof - -:bin - pushd %IWMAKE_BUILD% - %IWMAKE_MAKE% %~1 >>%IWMAKE_LOGFILE% 2>&1 - popd -goto :eof - -:binInDir - for /F "tokens=1*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n - pushd %IWMAKE_BUILD%\%IWMAKE_TMP% - %IWMAKE_MAKE% %IWMAKE_TMP2% >> %IWMAKE_LOGFILE% 2>&1 - popd -goto :eof - -:DBPlugins - call "%IWMAKE_SCRIPTDIR%\batch\copy.bat" extsync sql - set IWMAKE_SQL_OLD_LIB=%LIB% - pushd %IWMAKE_BUILD%\src\plugins\sqldrivers\mysql - set LIB=%IWMAKE_ROOT%\sql\mysql\lib\debug;%IWMAKE_SQL_OLD_LIB% - qmake "INCLUDEPATH+=%IWMAKE_ROOT%\sql\mysql\include" "LIBS+=libmysql.lib ws2_32.lib advapi32.lib user32.lib" >> %IWMAKE_LOGFILE% 2>&1 - %IWMAKE_MAKE% debug >> %IWMAKE_LOGFILE% 2>&1 - set LIB=%IWMAKE_ROOT%\sql\mysql\lib\opt;%IWMAKE_SQL_OLD_LIB% - qmake "INCLUDEPATH+=%IWMAKE_ROOT%\sql\mysql\include" "LIBS+=libmysql.lib ws2_32.lib advapi32.lib" >> %IWMAKE_LOGFILE% 2>&1 - %IWMAKE_MAKE% release >> %IWMAKE_LOGFILE% 2>&1 - popd - - set LIB=%IWMAKE_ROOT%\sql\%IWMAKE_COMPILER%;%IWMAKE_SQL_OLD_LIB% - pushd %IWMAKE_BUILD%\src\plugins\sqldrivers\psql - qmake "INCLUDEPATH+=%IWMAKE_ROOT%\sql\include\psql" "LIBS+=libpqd.lib ws2_32.lib advapi32.lib shfolder.lib shell32.lib" >> %IWMAKE_LOGFILE% 2>&1 - %IWMAKE_MAKE% debug >> %IWMAKE_LOGFILE% 2>&1 - qmake "INCLUDEPATH+=%IWMAKE_ROOT%\sql\include\psql" "LIBS+=libpq.lib ws2_32.lib advapi32.lib shfolder.lib shell32.lib" >> %IWMAKE_LOGFILE% 2>&1 - %IWMAKE_MAKE% release >> %IWMAKE_LOGFILE% 2>&1 - popd - set LIB=%IWMAKE_SQL_OLD_LIB% - set IWMAKE_SQL_OLD_LIB= -goto :eof - -:root - set IWMAKE_BUILD=%~1 - if not exist %IWMAKE_BUILD% mkdir %IWMAKE_BUILD% -goto :eof - -:END diff --git a/tools/installer/batch/copy.bat b/tools/installer/batch/copy.bat deleted file mode 100755 index 8fabebf..0000000 --- a/tools/installer/batch/copy.bat +++ /dev/null @@ -1,121 +0,0 @@ -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -:: -:: Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -:: All rights reserved. -:: Contact: Nokia Corporation (qt-info@nokia.com) -:: -:: This file is part of the tools applications of the Qt Toolkit. -:: -:: $QT_BEGIN_LICENSE:LGPL$ -:: No Commercial Usage -:: This file contains pre-release code and may not be distributed. -:: You may use this file in accordance with the terms and conditions -:: contained in the Technology Preview License Agreement accompanying -:: this package. -:: -:: GNU Lesser General Public License Usage -:: Alternatively, this file may be used under the terms of the GNU Lesser -:: General Public License version 2.1 as published by the Free Software -:: Foundation and appearing in the file LICENSE.LGPL included in the -:: packaging of this file. Please review the following information to -:: ensure the GNU Lesser General Public License version 2.1 requirements -:: will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -:: -:: In addition, as a special exception, Nokia gives you certain additional -:: rights. These rights are described in the Nokia Qt LGPL Exception -:: version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -:: -:: If you have questions regarding the use of this file, please contact -:: Nokia at qt-info@nokia.com. -:: -:: -:: -:: -:: -:: -:: -:: -:: $QT_END_LICENSE$ -:: -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -call :%1 %2 -goto END - -:dest - set IWMAKE_OUTDIR=%IWMAKE_ROOT%\%~1 - if not exist %IWMAKE_OUTDIR% mkdir %IWMAKE_OUTDIR% -goto :eof - -:src - set IWMAKE_SRCDIR=%IWMAKE_ROOT%\%~1 - if not exist %IWMAKE_SRCDIR% mkdir %IWMAKE_SRCDIR% -goto :eof - -:destAbs - set IWMAKE_OUTDIR=%1 - if not exist %IWMAKE_OUTDIR% mkdir %IWMAKE_OUTDIR% -goto :eof - -:srcAbs - set IWMAKE_SRCDIR=%1 - if not exist %IWMAKE_SRCDIR% mkdir %IWMAKE_SRCDIR% -goto :eof - -:extsync - if exist %IWMAKE_ROOT%\%~1 rd /S /Q %IWMAKE_ROOT%\%~1 >> %IWMAKE_LOGFILE% - xcopy /H /Y /Q /I /R /E %IWMAKE_EXTERNAL%\%~1 %IWMAKE_ROOT%\%~1 >> %IWMAKE_LOGFILE% -goto :eof - -:all - xcopy /H /Y /Q /I /R /S %IWMAKE_SRCDIR%\%~1 %IWMAKE_OUTDIR%\ >> %IWMAKE_LOGFILE% -goto :eof - -:filesEx - for /F "tokens=1,2*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n& set IWMAKE_TMP3=%%~o - echo %IWMAKE_TMP3% > %IWMAKE_ROOT%\iwmake_exclude - xcopy /H /Y /Q /I /R /S /EXCLUDE:%IWMAKE_ROOT%\iwmake_exclude %IWMAKE_SRCDIR%\%IWMAKE_TMP% %IWMAKE_OUTDIR%\%IWMAKE_TMP2% >> %IWMAKE_LOGFILE% -goto :eof - -:file - set IWMAKE_TMP=%~1 - set IWMAKE_TMP2=%~nx1 - echo set IWMAKE_TMP3=%%IWMAKE_TMP:%IWMAKE_TMP2%=%%>"%IWMAKE_ROOT%\iwmake_tmp.bat" - call %IWMAKE_ROOT%\iwmake_tmp.bat - if not exist "%IWMAKE_OUTDIR%\%IWMAKE_TMP3%" mkdir "%IWMAKE_OUTDIR%\%IWMAKE_TMP3%" - xcopy /H /Y /Q /I /R %IWMAKE_SRCDIR%\%IWMAKE_TMP% %IWMAKE_OUTDIR%\%IWMAKE_TMP3% >> %IWMAKE_LOGFILE% -goto :eof - -:fileAndRename - for /F "tokens=1*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n& set IWMAKE_TMP4=%%~nxn - echo set IWMAKE_TMP3=%%IWMAKE_TMP2:%IWMAKE_TMP4%=%%>"%IWMAKE_ROOT%\iwmake_tmp.bat" - call %IWMAKE_ROOT%\iwmake_tmp.bat - if not exist "%IWMAKE_OUTDIR%\%IWMAKE_TMP3%" mkdir "%IWMAKE_OUTDIR%\%IWMAKE_TMP3%" - echo > %IWMAKE_OUTDIR%\%IWMAKE_TMP2% - xcopy /H /Y /Q /R %IWMAKE_SRCDIR%\%IWMAKE_TMP% %IWMAKE_OUTDIR%\%IWMAKE_TMP2% >> %IWMAKE_LOGFILE% - set IWMAKE_TMP4= -goto :eof - -:files - for /F "tokens=1*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n - if not exist "%IWMAKE_OUTDIR%\%IWMAKE_TMP2%" mkdir "%IWMAKE_OUTDIR%\%IWMAKE_TMP2%" - xcopy /H /Y /Q /I /R /S %IWMAKE_SRCDIR%\%IWMAKE_TMP% %IWMAKE_OUTDIR%\%IWMAKE_TMP2% >> %IWMAKE_LOGFILE% -goto :eof - -:runtime - for /F "tokens=1*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n - if "%IWMAKE_TMP2%" == "" set IWMAKE_TMP2=bin - xcopy /H /Y /Q /I /R %SystemRoot%\system32\msvcr%IWMAKE_TMP%.dll %IWMAKE_OUTDIR%\%IWMAKE_TMP2%\ >> %IWMAKE_LOGFILE% - xcopy /H /Y /Q /I /R %SystemRoot%\system32\msvcp%IWMAKE_TMP%.dll %IWMAKE_OUTDIR%\%IWMAKE_TMP2%\ >> %IWMAKE_LOGFILE% -goto :eof - -:syncqt - pushd %IWMAKE_OUTDIR% - if exist "include" rd /S /Q include - if not "%QTDIR%"=="" set IWMAKE_OLD_QTDIR=%QTDIR% - set QTDIR=%IWMAKE_OUTDIR% - "%IWMAKE_PERLPATH%\perl" %QTDIR%\bin\syncqt -copy >> %IWMAKE_LOGFILE% 2>&1 - if not "%IWMAKE_OLD_QTDIR%"=="" set QTDIR=%IWMAKE_OLD_QTDIR% - popd -goto :eof - -:END diff --git a/tools/installer/batch/delete.bat b/tools/installer/batch/delete.bat deleted file mode 100755 index a923c13..0000000 --- a/tools/installer/batch/delete.bat +++ /dev/null @@ -1,73 +0,0 @@ -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -:: -:: Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -:: All rights reserved. -:: Contact: Nokia Corporation (qt-info@nokia.com) -:: -:: This file is part of the tools applications of the Qt Toolkit. -:: -:: $QT_BEGIN_LICENSE:LGPL$ -:: No Commercial Usage -:: This file contains pre-release code and may not be distributed. -:: You may use this file in accordance with the terms and conditions -:: contained in the Technology Preview License Agreement accompanying -:: this package. -:: -:: GNU Lesser General Public License Usage -:: Alternatively, this file may be used under the terms of the GNU Lesser -:: General Public License version 2.1 as published by the Free Software -:: Foundation and appearing in the file LICENSE.LGPL included in the -:: packaging of this file. Please review the following information to -:: ensure the GNU Lesser General Public License version 2.1 requirements -:: will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -:: -:: In addition, as a special exception, Nokia gives you certain additional -:: rights. These rights are described in the Nokia Qt LGPL Exception -:: version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -:: -:: If you have questions regarding the use of this file, please contact -:: Nokia at qt-info@nokia.com. -:: -:: -:: -:: -:: -:: -:: -:: -:: $QT_END_LICENSE$ -:: -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -call :%1 %2 -goto END - -:destDir - if exist "%IWMAKE_OUTDIR%\%~1" rd /S /Q %IWMAKE_OUTDIR%\%~1 -goto :eof - -:dir - if exist "%IWMAKE_ROOT%\%~1" rd /S /Q %IWMAKE_ROOT%\%~1 -goto :eof - -:dirAbs - if exist "%~1" rd /S /Q %~1 -goto :eof - -:file - del /Q /F %IWMAKE_OUTDIR%\%~1 >> %IWMAKE_LOGFILE% 2>&1 - exit /b 0 -goto :eof - -:files - del /S /Q /F %IWMAKE_OUTDIR%\%~1 >> %IWMAKE_LOGFILE% 2>&1 - exit /b 0 -goto :eof - -:line - for /F "tokens=1*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n - if exist "%IWMAKE_ROOT%\tmp_line.txt" del /Q /F "%IWMAKE_ROOT%\tmp_line.txt" >> %IWMAKE_LOGFILE% - type "%IWMAKE_ROOT%\%IWMAKE_TMP%" | find /V "%IWMAKE_TMP2%" >> "%IWMAKE_ROOT%\tmp_line.txt" - xcopy /Y /Q /R %IWMAKE_ROOT%\tmp_line.txt %IWMAKE_ROOT%\%IWMAKE_TMP% >> %IWMAKE_LOGFILE% -goto :eof - -:END diff --git a/tools/installer/batch/env.bat b/tools/installer/batch/env.bat deleted file mode 100755 index c1faceb..0000000 --- a/tools/installer/batch/env.bat +++ /dev/null @@ -1,141 +0,0 @@ -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -:: -:: Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -:: All rights reserved. -:: Contact: Nokia Corporation (qt-info@nokia.com) -:: -:: This file is part of the tools applications of the Qt Toolkit. -:: -:: $QT_BEGIN_LICENSE:LGPL$ -:: No Commercial Usage -:: This file contains pre-release code and may not be distributed. -:: You may use this file in accordance with the terms and conditions -:: contained in the Technology Preview License Agreement accompanying -:: this package. -:: -:: GNU Lesser General Public License Usage -:: Alternatively, this file may be used under the terms of the GNU Lesser -:: General Public License version 2.1 as published by the Free Software -:: Foundation and appearing in the file LICENSE.LGPL included in the -:: packaging of this file. Please review the following information to -:: ensure the GNU Lesser General Public License version 2.1 requirements -:: will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -:: -:: In addition, as a special exception, Nokia gives you certain additional -:: rights. These rights are described in the Nokia Qt LGPL Exception -:: version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -:: -:: If you have questions regarding the use of this file, please contact -:: Nokia at qt-info@nokia.com. -:: -:: -:: -:: -:: -:: -:: -:: -:: $QT_END_LICENSE$ -:: -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -call :%1 %2 -goto END - -:setglobals -set IWMAKE_PARSESECTION=1 -set IWMAKE_MINGWPATH=c:\MinGW\bin -set IWMAKE_STARTDIR=%CD% -set IWMAKE_NSISCONF=%IWMAKE_SCRIPTDIR%\nsis\config.nsh -set IWMAKE_ROOT=c:\package -set IWMAKE_OUTDIR=%IWMAKE_ROOT% -set IWMAKE_SRCDIR=%IWMAKE_ROOT% -set IWMAKE_EXTRACTDEST=%IWMAKE_ROOT% -set IWMAKE_NSISPATH=%PROGRAMFILES%\NSIS -call %IWMAKE_SCRIPTDIR%\batch\log.bat fileAbs "%IWMAKE_STARTDIR%\log.txt" -goto :eof - -:signPath - set IWMAKE_SIGNPATH=%~1 -goto :eof - -:wgetPath - set IWMAKE_WGET=%~1 -goto :eof - -:wgetDir - set IWMAKE_WGET=%IWMAKE_ROOT%\%~1 -goto :eof - -:NSISPath - set IWMAKE_NSISPATH=%~1 -goto :eof - -:PerlPath - set IWMAKE_PERLPATH=%~1 -goto :eof - -:MinGWPath - set IWMAKE_MINGWPATH=%~1 -goto :eof - -:unzipApp - set IWMAKE_UNZIPAPP=%~1 -goto :eof - -:releaseLocation - set IWMAKE_WGETUSER= - set IWMAKE_WGETPASS= - for /F "tokens=1,2*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& if not "%%~n"=="" set IWMAKE_TMP2=%%~n& if not "%%~o"=="" set IWMAKE_TMP3=%%~o - if not "%IWMAKE_TMP2%"=="" set IWMAKE_WGETUSER=--http-user=%IWMAKE_TMP2% - if not "%IWMAKE_TMP3%"=="" set IWMAKE_WGETPASS=--http-passwd=%IWMAKE_TMP3% - set IWMAKE_RELEASELOCATION=%IWMAKE_TMP% -goto :eof - -:removeglobals -if not "%IWMAKE_OLD_PATH%"=="" call %IWMAKE_SCRIPTDIR%\batch\build.bat finish -set IWMAKE_RELEASELOCATION= -set IWMAKE_NSISPATH= -set IWMAKE_SECTION= -set IWMAKE_WGET= -set IWMAKE_WGETUSER= -set IWMAKE_WGETPASS= -set IWMAKE_UNZIPAPP= -set IWMAKE_MINGWPATH= -set IWMAKE_MAKE= -set IWMAKE_PERLPATH= -set IWMAKE_STARTDIR= -set IWMAKE_SCRIPTDIR= -set IWMAKE_NSISCONF= -set IWMAKE_RESULT= -set IWMAKE_TMP= -set IWMAKE_TMP2= -set IWMAKE_TMP3= -set IWMAKE_STATUS= -set IWMAKE_LOGFILE= -set IWMAKE_BUILD= -set IWMAKE_ROOT= -set IWMAKE_OUTDIR= -set IWMAKE_EXTERNAL= -set IWMAKE_OLD_PATH= -set IWMAKE_OLD_QMAKESPEC= -set IWMAKE_OLD_QTDIR= -set IWMAKE_OLD_INCLUDE= -set IWMAKE_OLD_LIB= -set IWMAKE_COMPILER= -set IWMAKE_SRCDIR= -set IWMAKE_EXTRACTSRC= -set IWMAKE_EXTRACTDEST= -set IWMAKE_PARSESECTION= -set IWMAKE_OUTPUT_FILE= -set IWMAKE_SIGNPATH= -goto :eof - -:root -set IWMAKE_ROOT=%~1 -goto :eof - -:extroot -set IWMAKE_EXTERNAL=%~1 -goto :eof - -:END diff --git a/tools/installer/batch/extract.bat b/tools/installer/batch/extract.bat deleted file mode 100755 index 7f14a9b..0000000 --- a/tools/installer/batch/extract.bat +++ /dev/null @@ -1,83 +0,0 @@ -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -:: -:: Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -:: All rights reserved. -:: Contact: Nokia Corporation (qt-info@nokia.com) -:: -:: This file is part of the tools applications of the Qt Toolkit. -:: -:: $QT_BEGIN_LICENSE:LGPL$ -:: No Commercial Usage -:: This file contains pre-release code and may not be distributed. -:: You may use this file in accordance with the terms and conditions -:: contained in the Technology Preview License Agreement accompanying -:: this package. -:: -:: GNU Lesser General Public License Usage -:: Alternatively, this file may be used under the terms of the GNU Lesser -:: General Public License version 2.1 as published by the Free Software -:: Foundation and appearing in the file LICENSE.LGPL included in the -:: packaging of this file. Please review the following information to -:: ensure the GNU Lesser General Public License version 2.1 requirements -:: will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -:: -:: In addition, as a special exception, Nokia gives you certain additional -:: rights. These rights are described in the Nokia Qt LGPL Exception -:: version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -:: -:: If you have questions regarding the use of this file, please contact -:: Nokia at qt-info@nokia.com. -:: -:: -:: -:: -:: -:: -:: -:: -:: $QT_END_LICENSE$ -:: -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -call :%1 %2 -goto END - -:dest - set IWMAKE_EXTRACTDEST=%IWMAKE_ROOT%\%~1 -goto :eof - -:extUnpack - set IWMAKE_EXTRACTSRC=%~n1 - pushd %IWMAKE_ROOT% - if exist "%IWMAKE_EXTRACTSRC%.zip" del /Q /F "%IWMAKE_EXTRACTSRC%.zip" - %IWMAKE_WGET%\wget %IWMAKE_WGETUSER% %IWMAKE_WGETPASS% %IWMAKE_RELEASELOCATION%/%IWMAKE_EXTRACTSRC%.zip >> %IWMAKE_LOGFILE% 2>&1 - popd - call :unpack "%~1" -goto :eof - -:unpack - set IWMAKE_EXTRACTSRC=%~n1 - pushd %IWMAKE_ROOT% - if exist "%IWMAKE_EXTRACTDEST%" rd /S /Q %IWMAKE_EXTRACTDEST% >> %IWMAKE_LOGFILE% 2>&1 - if exist "%IWMAKE_EXTRACTSRC%" rd /S /Q %IWMAKE_EXTRACTSRC% >> %IWMAKE_LOGFILE% 2>&1 - %IWMAKE_UNZIPAPP% %IWMAKE_EXTRACTSRC%.zip >> %IWMAKE_LOGFILE% - popd - move %IWMAKE_ROOT%\%IWMAKE_EXTRACTSRC% %IWMAKE_EXTRACTDEST% >> %IWMAKE_LOGFILE% -goto :eof - -:extPatch - pushd %IWMAKE_ROOT% - if exist "%~1" del /Q /F "%~1" - %IWMAKE_WGET%\wget %IWMAKE_WGETUSER% %IWMAKE_WGETPASS% %IWMAKE_RELEASELOCATION%/%~1 >> %IWMAKE_LOGFILE% 2>&1 - popd - call :patch "%~1" -goto :eof - -:patch - pushd %IWMAKE_ROOT% - %IWMAKE_UNZIPAPP% %~1 >> %IWMAKE_LOGFILE% - popd - xcopy /R /I /S /Q /Y %IWMAKE_ROOT%\%IWMAKE_EXTRACTSRC%\*.* %IWMAKE_EXTRACTDEST%\ >> %IWMAKE_LOGFILE% - rd /S /Q %IWMAKE_ROOT%\%IWMAKE_EXTRACTSRC% >> %IWMAKE_LOGFILE% -goto :eof - -:END diff --git a/tools/installer/batch/installer.bat b/tools/installer/batch/installer.bat deleted file mode 100755 index 75e8680..0000000 --- a/tools/installer/batch/installer.bat +++ /dev/null @@ -1,247 +0,0 @@ -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -:: -:: Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -:: All rights reserved. -:: Contact: Nokia Corporation (qt-info@nokia.com) -:: -:: This file is part of the tools applications of the Qt Toolkit. -:: -:: $QT_BEGIN_LICENSE:LGPL$ -:: No Commercial Usage -:: This file contains pre-release code and may not be distributed. -:: You may use this file in accordance with the terms and conditions -:: contained in the Technology Preview License Agreement accompanying -:: this package. -:: -:: GNU Lesser General Public License Usage -:: Alternatively, this file may be used under the terms of the GNU Lesser -:: General Public License version 2.1 as published by the Free Software -:: Foundation and appearing in the file LICENSE.LGPL included in the -:: packaging of this file. Please review the following information to -:: ensure the GNU Lesser General Public License version 2.1 requirements -:: will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -:: -:: In addition, as a special exception, Nokia gives you certain additional -:: rights. These rights are described in the Nokia Qt LGPL Exception -:: version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -:: -:: If you have questions regarding the use of this file, please contact -:: Nokia at qt-info@nokia.com. -:: -:: -:: -:: -:: -:: -:: -:: -:: $QT_END_LICENSE$ -:: -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -call :%1 %2 -goto END - -:begin - call :reset - echo !define PRODUCT_NAME "%~1" >> %IWMAKE_NSISCONF% - echo !define INSTALL_ROOT "%IWMAKE_ROOT%" >> %IWMAKE_NSISCONF% -goto :eof - -:output - set IWMAKE_OUTPUT_FILE=%~1 - echo !define OUTPUT_FILE "%~1" >> %IWMAKE_NSISCONF% -goto :eof - -:module - call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %~1 - echo !define MODULE_%IWMAKE_RESULT% >> %IWMAKE_NSISCONF% -goto :eof - -:enable - call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %~1 - echo !define USE_%IWMAKE_RESULT:"=% >> %IWMAKE_NSISCONF% -goto :eof - -:disable - call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %~1 - echo !undef USE_%IWMAKE_RESULT:"=% >> %IWMAKE_NSISCONF% -goto :eof - -:startmenu - echo !define DEFAULT_STARTMENU_STRING "%~1" >> %IWMAKE_NSISCONF% -goto :eof - -:reset - if exist "%IWMAKE_NSISCONF%" del /Q /F "%IWMAKE_NSISCONF%" -goto :eof - -:instdir - for /F "tokens=1,2*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n& set IWMAKE_TMP3="%%~o" - call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %IWMAKE_TMP% - echo !define INSTDIR_%IWMAKE_TMP2% %IWMAKE_RESULT:"=% >> "%IWMAKE_NSISCONF%" - echo !define INSTDIR_%IWMAKE_TMP2%_TEXT %IWMAKE_TMP3% >> "%IWMAKE_NSISCONF%" -goto :eof - -:version - echo !define PRODUCT_VERSION "%~1" >> "%IWMAKE_NSISCONF%" -goto :eof - -:readme - echo !define README_FILE "%~1" >> "%IWMAKE_NSISCONF%" -goto :eof - -:licenseFile - echo !define LICENSE_FILE "%~1" >> "%IWMAKE_NSISCONF%" -goto :eof - -:runfunction - echo !define RUN_FUNCTION "%~1" >> "%IWMAKE_NSISCONF%" -goto :eof - -:readmefunction - echo !define README_FUNCTION "%~1" >> "%IWMAKE_NSISCONF%" -goto :eof - -:welcomenote - echo !define WELCOME_NOTE "%~1" >> "%IWMAKE_NSISCONF%" -goto :eof - -:updateplugins - call "%IWMAKE_SCRIPTDIR%\batch\copy.bat" extsync INetLoad - xcopy /Q /Y /R "%IWMAKE_ROOT%\INetLoad\INetLoad.dll" "%IWMAKE_NSISPATH%\Plugins\" >> %IWMAKE_LOGFILE% -:: xcopy /Q /Y /R "%IWMAKE_SCRIPTDIR%\nsis\qtnsisext\qtnsisext.dll" "%IWMAKE_NSISPATH%\Plugins\" >> %IWMAKE_LOGFILE% -goto :eof - -:defineDir - for /F "tokens=1,2*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n& set IWMAKE_TMP3=%%~o - call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %IWMAKE_TMP% - set IWMAKE_TMP=%IWMAKE_RESULT% - call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %IWMAKE_TMP2% - set IWMAKE_TMP2=%IWMAKE_RESULT% - echo !define MODULE_%IWMAKE_TMP%_%IWMAKE_TMP2% "%IWMAKE_ROOT%\%IWMAKE_TMP3%" >> "%IWMAKE_NSISCONF%" -goto :eof - -:define - for /F "tokens=1,2*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n& set IWMAKE_TMP3="%%~o" - call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %IWMAKE_TMP% - set IWMAKE_TMP=%IWMAKE_RESULT% - call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %IWMAKE_TMP2% - set IWMAKE_TMP2=%IWMAKE_RESULT% - if %IWMAKE_TMP3%=="" set IWMAKE_TMP3= - echo !define MODULE_%IWMAKE_TMP%_%IWMAKE_TMP2% %IWMAKE_TMP3% >> "%IWMAKE_NSISCONF%" -goto :eof - -:src - for /F "tokens=1*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n - call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %IWMAKE_TMP% - set IWMAKE_TMP=%IWMAKE_RESULT% - set IWMAKE_TMP3="%IWMAKE_ROOT%\%IWMAKE_TMP2%" - echo !define MODULE_%IWMAKE_TMP%_ROOT %IWMAKE_TMP3% >> "%IWMAKE_NSISCONF%" -goto :eof - -:buildDir - for /F "tokens=1*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n - call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %IWMAKE_TMP% - set IWMAKE_TMP=%IWMAKE_RESULT% - set IWMAKE_TMP3="%IWMAKE_ROOT%\%IWMAKE_TMP2%" - echo !define MODULE_%IWMAKE_TMP%_BUILDDIR %IWMAKE_TMP3% >> "%IWMAKE_NSISCONF%" - for /F "eol=- tokens=1,2,3" %%m in ('%SystemRoot%\system32\find "QT_PACKAGEDATE_STR" %IWMAKE_ROOT%\%IWMAKE_TMP2%\src\corelib\global\qglobal.h') do echo !define MODULE_LICENSECHECK_PACKAGEDATE %%o >> "%IWMAKE_NSISCONF%" -goto :eof - -:compile - call :required - pushd %IWMAKE_SCRIPTDIR%\nsis - "%IWMAKE_NSISPATH%\makensis.exe" installer.nsi >> %IWMAKE_LOGFILE% - popd -goto :eof - -:required - call :setrequired PRODUCT_NAME - call :setrequired INSTALL_ROOT - call :setrequired PRODUCT_VERSION - call :setrequired OUTPUT_FILE - call :setrequired INSTDIR_0 - call :setrequired DEFAULT_STARTMENU_STRING -goto :eof - -:setrequired - echo !ifndef %1 >> "%IWMAKE_NSISCONF%" - echo !error "%1 must be in the .conf file..." >> "%IWMAKE_NSISCONF%" - echo !endif >> "%IWMAKE_NSISCONF%" -goto :eof - -:makeFileList - for /F "tokens=1*" %%m in ("%~1") do set IWMAKE_TMP=%%~m& set IWMAKE_TMP2=%%~n - call "%IWMAKE_SCRIPTDIR%\batch\toupper.bat" %IWMAKE_TMP% - set IWMAKE_TMP=%IWMAKE_RESULT% - set IWMAKE_TMP3="%IWMAKE_ROOT%\%IWMAKE_TMP2%" - - - echo !macro MODULE_%IWMAKE_TMP%_INSTALLFILES >> "%IWMAKE_NSISCONF%" - - pushd %IWMAKE_TMP3% - - echo set IWMAKE_TMP2=%%IWMAKE_TMP2:%CD%\=%% > "%IWMAKE_ROOT%\iwmake_tmp.bat" - - dir /AD /B /S | %SystemRoot%\system32\sort /R > "%IWMAKE_ROOT%\iwmake_tmp.txt" - for /F "tokens=1" %%m in (%IWMAKE_ROOT%\iwmake_tmp.txt) do call :addInstallDirectory "%%m" - - - dir /A-D /B /S > "%IWMAKE_ROOT%\iwmake_tmp.txt" - for /F "tokens=1" %%m in (%IWMAKE_ROOT%\iwmake_tmp.txt) do call :addInstallFile "%%m" - - popd - echo !macroend >> "%IWMAKE_NSISCONF%" - - - echo !macro MODULE_%IWMAKE_TMP%_REMOVE removepath >> "%IWMAKE_NSISCONF%" - echo strcmp ${removepath} "" MODULE_%IWMAKE_TMP%_REMOVE_SAFETYLABEL >> "%IWMAKE_NSISCONF%" - pushd %IWMAKE_TMP3% - - echo set IWMAKE_TMP2=%%IWMAKE_TMP2:%CD%\=%% > "%IWMAKE_ROOT%\iwmake_tmp.bat" - - dir /A-D /B /S > "%IWMAKE_ROOT%\iwmake_tmp.txt" - for /F "tokens=1" %%m in (%IWMAKE_ROOT%\iwmake_tmp.txt) do call :addRemoveFiles "%%m" - - dir /AD /B /S | %SystemRoot%\system32\sort /R > "%IWMAKE_ROOT%\iwmake_tmp.txt" - for /F "tokens=1" %%m in (%IWMAKE_ROOT%\iwmake_tmp.txt) do call :addRemoveDirectory "%%m" - - popd - echo MODULE_%IWMAKE_TMP%_REMOVE_SAFETYLABEL: >> "%IWMAKE_NSISCONF%" - echo !macroend >> "%IWMAKE_NSISCONF%" -goto :eof - -:addInstallFile - set IWMAKE_TMP2=%~1 - call "%IWMAKE_ROOT%\iwmake_tmp.bat" - echo File "/oname=%IWMAKE_TMP2%" "%~1" >> "%IWMAKE_NSISCONF%" -goto :eof - -:addInstallDirectory - set IWMAKE_TMP2=%~1 - call "%IWMAKE_ROOT%\iwmake_tmp.bat" - echo CreateDirectory "$OUTDIR\%IWMAKE_TMP2%" >> "%IWMAKE_NSISCONF%" -goto :eof - -:addRemoveDirectory - set IWMAKE_TMP2=%~1 - call "%IWMAKE_ROOT%\iwmake_tmp.bat" - echo RMDir ${removepath}\%IWMAKE_TMP2% >> "%IWMAKE_NSISCONF%" -goto :eof - -:addRemoveFiles - set IWMAKE_TMP2=%~1 - call "%IWMAKE_ROOT%\iwmake_tmp.bat" - echo Delete ${removepath}\%IWMAKE_TMP2% >> "%IWMAKE_NSISCONF%" -goto :eof - -:sign - echo Signing Installer ... - %IWMAKE_SIGNPATH%\signtool.exe sign /v /t http://timestamp.verisign.com/scripts/timestamp.dll /f "%IWMAKE_SIGNPATH%\keys.pfx" "%IWMAKE_OUTPUT_FILE%" >> %IWMAKE_LOGFILE% -goto :eof - -:openpackage - echo !define OPENSOURCE_BUILD >> "%IWMAKE_NSISCONF%" -goto :eof - -:END diff --git a/tools/installer/batch/log.bat b/tools/installer/batch/log.bat deleted file mode 100755 index 782dcd7..0000000 --- a/tools/installer/batch/log.bat +++ /dev/null @@ -1,58 +0,0 @@ -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -:: -:: Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -:: All rights reserved. -:: Contact: Nokia Corporation (qt-info@nokia.com) -:: -:: This file is part of the tools applications of the Qt Toolkit. -:: -:: $QT_BEGIN_LICENSE:LGPL$ -:: No Commercial Usage -:: This file contains pre-release code and may not be distributed. -:: You may use this file in accordance with the terms and conditions -:: contained in the Technology Preview License Agreement accompanying -:: this package. -:: -:: GNU Lesser General Public License Usage -:: Alternatively, this file may be used under the terms of the GNU Lesser -:: General Public License version 2.1 as published by the Free Software -:: Foundation and appearing in the file LICENSE.LGPL included in the -:: packaging of this file. Please review the following information to -:: ensure the GNU Lesser General Public License version 2.1 requirements -:: will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -:: -:: In addition, as a special exception, Nokia gives you certain additional -:: rights. These rights are described in the Nokia Qt LGPL Exception -:: version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -:: -:: If you have questions regarding the use of this file, please contact -:: Nokia at qt-info@nokia.com. -:: -:: -:: -:: -:: -:: -:: -:: -:: $QT_END_LICENSE$ -:: -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -call :%1 %2 -goto END - -:file -set IWMAKE_LOGFILE=%IWMAKE_ROOT%\%~1 -call :reset -goto :eof - -:fileAbs -set IWMAKE_LOGFILE=%1 -call :reset -goto :eof - -:reset -date /T > %IWMAKE_LOGFILE% -goto :eof - -:END diff --git a/tools/installer/batch/toupper.bat b/tools/installer/batch/toupper.bat deleted file mode 100755 index 2543207..0000000 --- a/tools/installer/batch/toupper.bat +++ /dev/null @@ -1,69 +0,0 @@ -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -:: -:: Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -:: All rights reserved. -:: Contact: Nokia Corporation (qt-info@nokia.com) -:: -:: This file is part of the tools applications of the Qt Toolkit. -:: -:: $QT_BEGIN_LICENSE:LGPL$ -:: No Commercial Usage -:: This file contains pre-release code and may not be distributed. -:: You may use this file in accordance with the terms and conditions -:: contained in the Technology Preview License Agreement accompanying -:: this package. -:: -:: GNU Lesser General Public License Usage -:: Alternatively, this file may be used under the terms of the GNU Lesser -:: General Public License version 2.1 as published by the Free Software -:: Foundation and appearing in the file LICENSE.LGPL included in the -:: packaging of this file. Please review the following information to -:: ensure the GNU Lesser General Public License version 2.1 requirements -:: will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -:: -:: In addition, as a special exception, Nokia gives you certain additional -:: rights. These rights are described in the Nokia Qt LGPL Exception -:: version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -:: -:: If you have questions regarding the use of this file, please contact -:: Nokia at qt-info@nokia.com. -:: -:: -:: -:: -:: -:: -:: -:: -:: $QT_END_LICENSE$ -:: -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -set IWMAKE_RESULT=%1 -if [%IWMAKE_RESULT%]==[] goto :eof -set IWMAKE_RESULT=%IWMAKE_RESULT:a=A% -set IWMAKE_RESULT=%IWMAKE_RESULT:b=B% -set IWMAKE_RESULT=%IWMAKE_RESULT:c=C% -set IWMAKE_RESULT=%IWMAKE_RESULT:d=D% -set IWMAKE_RESULT=%IWMAKE_RESULT:e=E% -set IWMAKE_RESULT=%IWMAKE_RESULT:f=F% -set IWMAKE_RESULT=%IWMAKE_RESULT:g=G% -set IWMAKE_RESULT=%IWMAKE_RESULT:h=H% -set IWMAKE_RESULT=%IWMAKE_RESULT:i=I% -set IWMAKE_RESULT=%IWMAKE_RESULT:j=J% -set IWMAKE_RESULT=%IWMAKE_RESULT:k=K% -set IWMAKE_RESULT=%IWMAKE_RESULT:l=L% -set IWMAKE_RESULT=%IWMAKE_RESULT:m=M% -set IWMAKE_RESULT=%IWMAKE_RESULT:n=N% -set IWMAKE_RESULT=%IWMAKE_RESULT:o=O% -set IWMAKE_RESULT=%IWMAKE_RESULT:p=P% -set IWMAKE_RESULT=%IWMAKE_RESULT:q=Q% -set IWMAKE_RESULT=%IWMAKE_RESULT:r=R% -set IWMAKE_RESULT=%IWMAKE_RESULT:s=S% -set IWMAKE_RESULT=%IWMAKE_RESULT:t=T% -set IWMAKE_RESULT=%IWMAKE_RESULT:u=U% -set IWMAKE_RESULT=%IWMAKE_RESULT:v=V% -set IWMAKE_RESULT=%IWMAKE_RESULT:w=W% -set IWMAKE_RESULT=%IWMAKE_RESULT:x=X% -set IWMAKE_RESULT=%IWMAKE_RESULT:y=Y% -set IWMAKE_RESULT=%IWMAKE_RESULT:z=Z% - diff --git a/tools/installer/config/config.default.sample b/tools/installer/config/config.default.sample deleted file mode 100644 index a05b8d7..0000000 --- a/tools/installer/config/config.default.sample +++ /dev/null @@ -1,64 +0,0 @@ -############################################################################# -## -## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -## All rights reserved. -## Contact: Nokia Corporation (qt-info@nokia.com) -## -## This file is part of the tools applications of the Qt Toolkit. -## -## $QT_BEGIN_LICENSE:LGPL$ -## No Commercial Usage -## This file contains pre-release code and may not be distributed. -## You may use this file in accordance with the terms and conditions -## contained in the Technology Preview License Agreement accompanying -## this package. -## -## GNU Lesser General Public License Usage -## Alternatively, this file may be used under the terms of the GNU Lesser -## General Public License version 2.1 as published by the Free Software -## Foundation and appearing in the file LICENSE.LGPL included in the -## packaging of this file. Please review the following information to -## ensure the GNU Lesser General Public License version 2.1 requirements -## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -## -## In addition, as a special exception, Nokia gives you certain additional -## rights. These rights are described in the Nokia Qt LGPL Exception -## version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -## -## If you have questions regarding the use of this file, please contact -## Nokia at qt-info@nokia.com. -## -## -## -## -## -## -## -## -## $QT_END_LICENSE$ -## -############################################################################# - -# root directory -# Describes the directory where temporary folder, build directory and -# package will be located at. -env root "c:\qt_packages" - -# where to find all external files -# To resolve the external dependencies specify a server, where to get -# required tools like wget, sign, etc. -env extroot "\\someshare\tools\" - -# Location of the installed MinGW to build binaries -env mingwPath "c:\mingw" - -# Location to NSIS package creator -env NSISPath "%ProgramFiles%\NSIS" - -# Location to the install path of PERL -env perlPath "c:\Perl\bin" - -# source package directory -# Describe the directory where compressed source package is located at. -# The installer script uses this one for building and creating a package. -env releaseLocation "http://your.source.server/somepath" diff --git a/tools/installer/config/mingw-opensource.conf b/tools/installer/config/mingw-opensource.conf deleted file mode 100644 index 6cba06e..0000000 --- a/tools/installer/config/mingw-opensource.conf +++ /dev/null @@ -1,136 +0,0 @@ -############################################################################# -## -## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -## All rights reserved. -## Contact: Nokia Corporation (qt-info@nokia.com) -## -## This file is part of the tools applications of the Qt Toolkit. -## -## $QT_BEGIN_LICENSE:LGPL$ -## No Commercial Usage -## This file contains pre-release code and may not be distributed. -## You may use this file in accordance with the terms and conditions -## contained in the Technology Preview License Agreement accompanying -## this package. -## -## GNU Lesser General Public License Usage -## Alternatively, this file may be used under the terms of the GNU Lesser -## General Public License version 2.1 as published by the Free Software -## Foundation and appearing in the file LICENSE.LGPL included in the -## packaging of this file. Please review the following information to -## ensure the GNU Lesser General Public License version 2.1 requirements -## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -## -## In addition, as a special exception, Nokia gives you certain additional -## rights. These rights are described in the Nokia Qt LGPL Exception -## version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -## -## If you have questions regarding the use of this file, please contact -## Nokia at qt-info@nokia.com. -## -## -## -## -## -## -## -## -## $QT_END_LICENSE$ -## -############################################################################# -#extracts the package to buildDir - -#extract dest "build_mingw_opensource" -#Section EXTRACT -#extract extUnpack "qt-win-opensource-src-%VERSION%.zip" -#SectionEnd - -#build the binaries -#build begin mingw "build_mingw_opensource" - -#Section CONFIGURE -#build configure "-confirm-license -release -plugin-sql-sqlite -qt-libpng -qt-libjpeg" -#SectionEnd - -#Section BUILD -#build bin -#SectionEnd - -#build finish - -# organize release files -#Section ORGANIZE -#delete dir "release_mingw_opensource" - -#copy dest "release_mingw_opensource" -#copy src "build_mingw_opensource" - -# extract everything once more -#extract dest "release_mingw_opensource" -#extract unpack "qt-win-opensource-src-4.4.3.zip" - -# qconfig.h -#copy file "src\corelib\global\qconfig.h" -#copy file "include\QtCore\qconfig.h" -#copy file "include\Qt\qconfig.h" - -# qconfig.pri -#copy file "mkspecs\qconfig.pri" - -# .qmake.cache -#copy file ".qmake.cache" - -# default mkspec -#copy files "mkspecs\default\*" "mkspecs\default\" - -# copy all binary files -#copy all "*.a" -#copy all "*.exe" -#copy all "*.dll" - -# .prl files -#copy files "lib\*.prl" "lib\" - -# remove unused stuff -#delete files "lib\*.dll" - -# copy InetLoad license info -#copy files "..\INetLoad\Readme.txt" "src\3rdparty\InetLoad\" - -#SectionEnd - -Section NSIS -# general installer options -installer begin "Qt OpenSource" -installer version "4.4.3" -installer output "c:\iwmake\qt-win-opensource-4.4.3-mingw.exe" -installer startmenu "Qt by Nokia v4.4.3 (OpenSource)" -installer enable component_page -installer enable directory_page -installer enable startmenu_page -installer instdir mingw 0 "Qt Installation Directory" -installer licenseFile "%IWMAKE_ROOT%\release_mingw_opensource\LICENSE.GPL" -#installer licenseFile "%IWMAKE_ROOT%\release_mingw_opensource\LICENSE.PREVIEW.OPENSOURCE" - -installer runfunction "Run Examples and Demos" -installer readmefunction "Show Documentation" - -installer module registeruiext -installer module opensource - -# mingw options -installer module mingw -installer src mingw "release_mingw_opensource" -installer makeFileList mingw "release_mingw_opensource" -installer buildDir mingw "build_mingw_opensource" -installer enable nodirlengthcheck - -# public generatable package -installer openpackage - -SectionEnd - -# compile the package -Section NSIS_COMPILE -installer compile -SectionEnd diff --git a/tools/installer/iwmake.bat b/tools/installer/iwmake.bat deleted file mode 100755 index 0fc1b08..0000000 --- a/tools/installer/iwmake.bat +++ /dev/null @@ -1,124 +0,0 @@ -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -:: -:: Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -:: All rights reserved. -:: Contact: Nokia Corporation (qt-info@nokia.com) -:: -:: This file is part of the tools applications of the Qt Toolkit. -:: -:: $QT_BEGIN_LICENSE:LGPL$ -:: No Commercial Usage -:: This file contains pre-release code and may not be distributed. -:: You may use this file in accordance with the terms and conditions -:: contained in the Technology Preview License Agreement accompanying -:: this package. -:: -:: GNU Lesser General Public License Usage -:: Alternatively, this file may be used under the terms of the GNU Lesser -:: General Public License version 2.1 as published by the Free Software -:: Foundation and appearing in the file LICENSE.LGPL included in the -:: packaging of this file. Please review the following information to -:: ensure the GNU Lesser General Public License version 2.1 requirements -:: will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -:: -:: In addition, as a special exception, Nokia gives you certain additional -:: rights. These rights are described in the Nokia Qt LGPL Exception -:: version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -:: -:: If you have questions regarding the use of this file, please contact -:: Nokia at qt-info@nokia.com. -:: -:: -:: -:: -:: -:: -:: -:: -:: $QT_END_LICENSE$ -:: -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -rem @echo off -call :init -if "%IWMAKE_STATUS%"=="failed" goto FAILED -if not exist "%IWMAKE_SCRIPTDIR%\config\%1.conf" goto FAILED -if not "%~2"=="" set IWMAKE_SECTION=%~2 -for /F "eol=# tokens=1,2*" %%i in (%IWMAKE_SCRIPTDIR%\config\config.default) do set IWMAKE_TMP=%%k& call :func_delegate %%i %%j -if "%IWMAKE_STATUS%"=="failed" goto FAILED -if exist "%IWMAKE_SCRIPTDIR%\config\config.%COMPUTERNAME%" for /F "eol=# tokens=1,2*" %%i in (%IWMAKE_SCRIPTDIR%\config\config.%COMPUTERNAME%) do set IWMAKE_TMP=%%k& call :func_delegate %%i %%j -if "%IWMAKE_STATUS%"=="failed" goto FAILED -call :checkrequirements -if "%IWMAKE_STATUS%"=="failed" goto FAILED -for /F "eol=# tokens=1,2*" %%i in (%IWMAKE_SCRIPTDIR%\config\%1.conf) do set IWMAKE_TMP=%%k& call :func_delegate %%i %%j -if "%IWMAKE_STATUS%"=="failed" goto FAILED -goto DONE - -:func_delegate -if "%IWMAKE_STATUS%"=="failed" goto :eof -set IWMAKE_TMP="%IWMAKE_TMP:"=%" - -if /i "%1"=="sectionend" echo Leaving Section& set IWMAKE_PARSESECTION=1& goto :eof -if /i not "%1"=="section" goto callScript -echo Entering Section %~2 -for %%m in (%IWMAKE_SECTION%) do call :checkSection %%m %~2 -goto :eof - -:callScript -if "%IWMAKE_PARSESECTION%"=="0" goto :eof - -call "%IWMAKE_SCRIPTDIR%\batch\%1.bat" %2 %IWMAKE_TMP% -if not "%errorlevel%"=="0" echo %1 %2 failed! >> %IWMAKE_LOGFILE%& set IWMAKE_STATUS=failed -goto :eof - -:checkSection - if /i "%1"=="%2" echo Skipping Section& set IWMAKE_PARSESECTION=0 -goto :eof - -:checkrequirements - if not exist %IWMAKE_ROOT% mkdir %IWMAKE_ROOT% - if not "%IWMAKE_SIGNPATH%"=="" goto CheckSIGNOK - call "%IWMAKE_SCRIPTDIR%\batch\copy.bat" extsync sign - call "%IWMAKE_SCRIPTDIR%\batch\env.bat" signPath "%IWMAKE_ROOT%\sign" -:CheckSIGNOK - if not "%IWMAKE_WGET%"=="" goto CheckWGETOK - call "%IWMAKE_SCRIPTDIR%\batch\copy.bat" extsync wget - call "%IWMAKE_SCRIPTDIR%\batch\env.bat" wgetDir wget -:CheckWGETOK - if exist "%IWMAKE_PERLPATH%\perl.exe" goto CheckPerlOK - set IWMAKE_STATUS=failed - echo Perl not found in %IWMAKE_PERLPATH%! (check your config file) -:CheckPerlOK - if not "%IWMAKE_UNZIPAPP%"=="" goto CheckUNZIPOK - call "%IWMAKE_SCRIPTDIR%\batch\copy.bat" extsync unzip - call "%IWMAKE_SCRIPTDIR%\batch\env.bat" unzipApp "%IWMAKE_ROOT%\unzip\unzip.exe" -:CheckUNZIPOK - if exist "%IWMAKE_NSISPATH%\makensis.exe" goto CheckNSISOK - set IWMAKE_STATUS=failed - echo NSIS not found! (check your config file) -:CheckNSISOK - call "%IWMAKE_SCRIPTDIR%\batch\installer.bat" updateplugins -goto :eof - -:init - set IWMAKE_SCRIPTDIR=%~dp0 - set IWMAKE_SCRIPTDIR=%IWMAKE_SCRIPTDIR:~0,-1% - call "%IWMAKE_SCRIPTDIR%\batch\env.bat" setglobals -goto :eof - -:cleanup - pushd "%IWMAKE_STARTDIR%" - call "%IWMAKE_SCRIPTDIR%\batch\env.bat" removeglobals - popd -goto :eof - -:FAILED - call :cleanup - echo Failed! -goto END - -:DONE - call :cleanup - echo Done! -goto END - -:END diff --git a/tools/installer/nsis/confirmpage.ini b/tools/installer/nsis/confirmpage.ini deleted file mode 100644 index b42132c..0000000 --- a/tools/installer/nsis/confirmpage.ini +++ /dev/null @@ -1,59 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -;; All rights reserved. -;; Contact: Nokia Corporation (qt-info@nokia.com) -;; -;; This file is part of the tools applications of the Qt Toolkit. -;; -;; $QT_BEGIN_LICENSE:LGPL$ -;; No Commercial Usage -;; This file contains pre-release code and may not be distributed. -;; You may use this file in accordance with the terms and conditions -;; contained in the Technology Preview License Agreement accompanying -;; this package. -;; -;; GNU Lesser General Public License Usage -;; Alternatively, this file may be used under the terms of the GNU Lesser -;; General Public License version 2.1 as published by the Free Software -;; Foundation and appearing in the file LICENSE.LGPL included in the -;; packaging of this file. Please review the following information to -;; ensure the GNU Lesser General Public License version 2.1 requirements -;; will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -;; -;; In addition, as a special exception, Nokia gives you certain additional -;; rights. These rights are described in the Nokia Qt LGPL Exception -;; version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -;; -;; If you have questions regarding the use of this file, please contact -;; Nokia at qt-info@nokia.com. -;; -;; -;; -;; -;; -;; -;; -;; -;; $QT_END_LICENSE$ -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Ini file generated by the HM NIS Edit IO designer. -[Settings] -NumFields=2 - -[Field 1] -Type=Label -Text=The following components will be uninstalled: -Left=1 -Right=298 -Top=1 -Bottom=12 - -[Field 2] -Type=Label -Left=16 -Right=298 -Top=16 -Bottom=136 - diff --git a/tools/installer/nsis/gwdownload.ini b/tools/installer/nsis/gwdownload.ini deleted file mode 100644 index c139aaf..0000000 --- a/tools/installer/nsis/gwdownload.ini +++ /dev/null @@ -1,118 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -;; All rights reserved. -;; Contact: Nokia Corporation (qt-info@nokia.com) -;; -;; This file is part of the tools applications of the Qt Toolkit. -;; -;; $QT_BEGIN_LICENSE:LGPL$ -;; No Commercial Usage -;; This file contains pre-release code and may not be distributed. -;; You may use this file in accordance with the terms and conditions -;; contained in the Technology Preview License Agreement accompanying -;; this package. -;; -;; GNU Lesser General Public License Usage -;; Alternatively, this file may be used under the terms of the GNU Lesser -;; General Public License version 2.1 as published by the Free Software -;; Foundation and appearing in the file LICENSE.LGPL included in the -;; packaging of this file. Please review the following information to -;; ensure the GNU Lesser General Public License version 2.1 requirements -;; will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -;; -;; In addition, as a special exception, Nokia gives you certain additional -;; rights. These rights are described in the Nokia Qt LGPL Exception -;; version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -;; -;; If you have questions regarding the use of this file, please contact -;; Nokia at qt-info@nokia.com. -;; -;; -;; -;; -;; -;; -;; -;; -;; $QT_END_LICENSE$ -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Ini file generated by the HM NIS Edit IO designer. -[Settings] -NumFields=9 - -[Field 1] -Type=Groupbox -Text=Find MinGW -Left=0 -Right=299 -Top=49 -Bottom=91 - -[Field 2] -Type=Label -Text=Please specify a directory where to find MinGW (for instance: C:\\MinGW). If you do not have MinGW installed, you can let the installer download and install it for you. -Left=2 -Right=298 -Top=1 -Bottom=27 - -[Field 3] -Type=DirRequest -Left=8 -Right=290 -Top=68 -Bottom=81 - -[Field 4] -Type=Groupbox -Text=Download and install MinGW -Left=0 -Right=299 -Top=94 -Bottom=137 - -[Field 5] -Type=Label -Text=Previously installed MinGW: -Left=8 -Right=286 -Top=60 -Bottom=68 - -[Field 6] -Type=DirRequest -Left=8 -Right=290 -Top=116 -Bottom=129 -Flags=DISABLED - -[Field 7] -Type=Label -Text=Installation directory: -Left=8 -Right=124 -Top=107 -Bottom=115 -Flags=DISABLED - -[Field 8] -Type=Checkbox -Text=Download and install minimal MinGW installation. -Left=8 -Right=172 -Top=28 -Bottom=40 -Flags=NOTIFY - -[Field 9] -Type=Link -Text=(http://www.mingw.org) -Left=174 -Right=260 -Top=30 -Bottom=38 -State=http://www.mingw.org - diff --git a/tools/installer/nsis/gwmirror.ini b/tools/installer/nsis/gwmirror.ini deleted file mode 100644 index e246080..0000000 --- a/tools/installer/nsis/gwmirror.ini +++ /dev/null @@ -1,67 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -;; All rights reserved. -;; Contact: Nokia Corporation (qt-info@nokia.com) -;; -;; This file is part of the tools applications of the Qt Toolkit. -;; -;; $QT_BEGIN_LICENSE:LGPL$ -;; No Commercial Usage -;; This file contains pre-release code and may not be distributed. -;; You may use this file in accordance with the terms and conditions -;; contained in the Technology Preview License Agreement accompanying -;; this package. -;; -;; GNU Lesser General Public License Usage -;; Alternatively, this file may be used under the terms of the GNU Lesser -;; General Public License version 2.1 as published by the Free Software -;; Foundation and appearing in the file LICENSE.LGPL included in the -;; packaging of this file. Please review the following information to -;; ensure the GNU Lesser General Public License version 2.1 requirements -;; will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -;; -;; In addition, as a special exception, Nokia gives you certain additional -;; rights. These rights are described in the Nokia Qt LGPL Exception -;; version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -;; -;; If you have questions regarding the use of this file, please contact -;; Nokia at qt-info@nokia.com. -;; -;; -;; -;; -;; -;; -;; -;; -;; $QT_END_LICENSE$ -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Ini file generated by the HM NIS Edit IO designer. -[Settings] -NumFields=3 - -[Field 1] -Type=Label -Text=Select a mirror where to download MinGW: -Left=0 -Right=211 -Top=0 -Bottom=8 - -[Field 2] -Type=Checkbox -Text=Download MinGW source code. (You don't need this to compile Qt) -Left=4 -Right=296 -Top=124 -Bottom=134 - -[Field 3] -Type=Listbox -Left=0 -Right=299 -Top=9 -Bottom=118 - diff --git a/tools/installer/nsis/images/install.ico b/tools/installer/nsis/images/install.ico Binary files differdeleted file mode 100644 index 080d82d..0000000 --- a/tools/installer/nsis/images/install.ico +++ /dev/null diff --git a/tools/installer/nsis/images/qt-header.bmp b/tools/installer/nsis/images/qt-header.bmp Binary files differdeleted file mode 100644 index 1333cb4..0000000 --- a/tools/installer/nsis/images/qt-header.bmp +++ /dev/null diff --git a/tools/installer/nsis/images/qt-wizard.bmp b/tools/installer/nsis/images/qt-wizard.bmp Binary files differdeleted file mode 100644 index 4aefd2d..0000000 --- a/tools/installer/nsis/images/qt-wizard.bmp +++ /dev/null diff --git a/tools/installer/nsis/includes/global.nsh b/tools/installer/nsis/includes/global.nsh deleted file mode 100644 index d91a039..0000000 --- a/tools/installer/nsis/includes/global.nsh +++ /dev/null @@ -1,143 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -;; All rights reserved. -;; Contact: Nokia Corporation (qt-info@nokia.com) -;; -;; This file is part of the tools applications of the Qt Toolkit. -;; -;; $QT_BEGIN_LICENSE:LGPL$ -;; No Commercial Usage -;; This file contains pre-release code and may not be distributed. -;; You may use this file in accordance with the terms and conditions -;; contained in the Technology Preview License Agreement accompanying -;; this package. -;; -;; GNU Lesser General Public License Usage -;; Alternatively, this file may be used under the terms of the GNU Lesser -;; General Public License version 2.1 as published by the Free Software -;; Foundation and appearing in the file LICENSE.LGPL included in the -;; packaging of this file. Please review the following information to -;; ensure the GNU Lesser General Public License version 2.1 requirements -;; will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -;; -;; In addition, as a special exception, Nokia gives you certain additional -;; rights. These rights are described in the Nokia Qt LGPL Exception -;; version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -;; -;; If you have questions regarding the use of this file, please contact -;; Nokia at qt-info@nokia.com. -;; -;; -;; -;; -;; -;; -;; -;; -;; $QT_END_LICENSE$ -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -!include "StrFunc.nsh" -!include "includes\list.nsh" - -${StrCase} -${StrTrimNewLines} -${StrStr} -${StrRep} -${UnStrRep} - -var STARTMENU_STRING -var PRODUCT_UNIQUE_KEY -var RUNNING_AS_ADMIN - -!ifndef MODULE_MINGW - !ifdef MODULE_MSVC_VC60 - !define INSTALL_COMPILER "vc60" - !else - !ifdef MODULE_MSVC_VS2002 - !define INSTALL_COMPILER "vs2002" - !else - !ifdef MODULE_MSVC_VS2005 - !define INSTALL_COMPILER "vs2005" - !else - !define INSTALL_COMPILER "vs2003" - !endif - !endif - !endif -!else - !define INSTALL_COMPILER "mingw" -!endif - -; ADDIN\INTEGRATION -var VS_VERSION -var VS_VERSION_SHORT -var ADDIN_INSTDIR -var VSIP_INSTDIR -var HELP_INSTDIR -var ECLIPSE_INSTDIR -var QTJAMBIECLIPSE_INSTDIR - -; LICENSECHECK -var LICENSE_KEY -var LICENSEE -var LICENSE_PRODUCT -var LICENSE_FILE - -; MSVC -!ifdef MODULE_MSVC - !define MSVC_ValidateDirectory - var MSVC_INSTDIR -!endif - -; MINGW -!ifdef MODULE_MINGW - !define MINGW_ValidateDirectory - var MINGW_INSTDIR -!endif - -; QSA -var QSA_INSTDIR - -; QTDIR PAGE -var QTDIR_SELECTED -var COMPILER_SELECTED - -; used by addin7x and vsip -!ifndef MODULE_VSIP_ROOT - !define MODULE_VSIP_ROOT "${INSTALL_ROOT}\vsip" -!endif - -; add to confirm path -var UninstallerConfirmProduct - -Function un.ConfirmOnDelete - exch $0 - push $1 - - push "$0" - push "$UninstallerConfirmProduct" - call un.ItemInList - pop $1 - IntCmp $1 1 ConfirmOnDeleteDone - - strcmp "$UninstallerConfirmProduct" "" 0 +3 - strcpy $UninstallerConfirmProduct "$0" - goto +2 - strcpy $UninstallerConfirmProduct "$UninstallerConfirmProduct$\r$\n$0" - - ConfirmOnDeleteDone: - pop $1 - pop $0 -FunctionEnd - -!macro ConfirmOnRemove REG_KEY PRODUCT_NAME - push $0 - ClearErrors - ReadRegDWORD $0 SHCTX "$PRODUCT_UNIQUE_KEY" "${REG_KEY}" - intcmp $0 1 0 +3 - push "${PRODUCT_NAME}" - call un.ConfirmOnDelete - ClearErrors - pop $0 -!macroend diff --git a/tools/installer/nsis/includes/instdir.nsh b/tools/installer/nsis/includes/instdir.nsh deleted file mode 100644 index a0957dd..0000000 --- a/tools/installer/nsis/includes/instdir.nsh +++ /dev/null @@ -1,254 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -;; All rights reserved. -;; Contact: Nokia Corporation (qt-info@nokia.com) -;; -;; This file is part of the tools applications of the Qt Toolkit. -;; -;; $QT_BEGIN_LICENSE:LGPL$ -;; No Commercial Usage -;; This file contains pre-release code and may not be distributed. -;; You may use this file in accordance with the terms and conditions -;; contained in the Technology Preview License Agreement accompanying -;; this package. -;; -;; GNU Lesser General Public License Usage -;; Alternatively, this file may be used under the terms of the GNU Lesser -;; General Public License version 2.1 as published by the Free Software -;; Foundation and appearing in the file LICENSE.LGPL included in the -;; packaging of this file. Please review the following information to -;; ensure the GNU Lesser General Public License version 2.1 requirements -;; will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -;; -;; In addition, as a special exception, Nokia gives you certain additional -;; rights. These rights are described in the Nokia Qt LGPL Exception -;; version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -;; -;; If you have questions regarding the use of this file, please contact -;; Nokia at qt-info@nokia.com. -;; -;; -;; -;; -;; -;; -;; -;; -;; $QT_END_LICENSE$ -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -!ifndef INSTDIR_1 - !macro INSTDIR_INITIALIZE - !define MUI_DIRECTORYPAGE_VARIABLE $${INSTDIR_0}_INSTDIR - !ifdef ${INSTDIR_0}_ValidateDirectory - !define MUI_PAGE_CUSTOMFUNCTION_LEAVE "${INSTDIR_0}_ValidateDirectoryFunc" - !endif - !insertmacro MUI_PAGE_DIRECTORY - !macroend - !macro INSTDIR_FUNCTIONS - !macroend - !macro INSTDIR_STARTUP - !macroend -!else -!macro INSTDIR_INITIALIZE - !define INSTDIR_INI_FILE "instdir.ini" - !define INSTDIR_0_DIRFIELD "Field 10" - !define INSTDIR_0_TEXTFIELD "Field 13" - !define INSTDIR_1_DIRFIELD "Field 7" - !define INSTDIR_1_TEXTFIELD "Field 11" - !define INSTDIR_2_DIRFIELD "Field 5" - !define INSTDIR_2_TEXTFIELD "Field 8" - !define INSTDIR_3_DIRFIELD "Field 3" - !define INSTDIR_3_TEXTFIELD "Field 6" - !define INSTDIR_4_DIRFIELD "Field 2" - !define INSTDIR_4_TEXTFIELD "Field 4" - !define INSTDIR_5_DIRFIELD "Field 9" - !define INSTDIR_5_TEXTFIELD "Field 12" - !define INSTDIR_DIRHEIGHT 18 - - Page custom InitInstDirs UpdateInstDirs - - LangString InstDirLicenseTitle ${LANG_ENGLISH} "Installation Directories" - LangString InstDirLicenseTitleDescription ${LANG_ENGLISH} "Select the directories where you want the software installed." -!macroend - -!macro INSTDIR_FUNCTIONS - Function InitInstDirs - push $0 - push $1 - push $2 - push $3 - - !insertmacro MUI_HEADER_TEXT "$(InstDirLicenseTitle)" "$(InstDirLicenseTitleDescription)" - strcpy $0 "129" - -!ifdef INSTDIR_0 - SectionGetFlags ${${INSTDIR_0}_SEC01} $1 -!ifdef ${INSTDIR_0}_SEC02 - SectionGetFlags ${${INSTDIR_0}_SEC02} $3 - IntOp $1 $1 | $3 -!endif - IntOp $2 $1 & 1 ;just care about the first flag - StrCpy $1 "READONLY" - StrCmp "$2" "1" +2 - StrCpy $1 "DISABLED" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_0_TEXTFIELD}" "Flags" "$1" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_0_DIRFIELD}" "Flags" "$1" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_0_TEXTFIELD}" "Text" "${INSTDIR_0_TEXT}" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_0_DIRFIELD}" "State" $${INSTDIR_0}_INSTDIR -!else - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_0_DIRFIELD}" "Type" "Unknown" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_0_TEXTFIELD}" "Type" "Unknown" - intop $0 $0 - ${INSTDIR_DIRHEIGHT} -!endif -!ifdef INSTDIR_1 - SectionGetFlags ${${INSTDIR_1}_SEC01} $1 -!ifdef ${INSTDIR_1}_SEC02 - SectionGetFlags ${${INSTDIR_1}_SEC02} $3 - IntOp $1 $1 | $3 -!endif - IntOp $2 $1 & 1 ;just care about the first flag - StrCpy $1 "READONLY" - StrCmp "$2" "1" +2 - StrCpy $1 "DISABLED" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_1_TEXTFIELD}" "Flags" "$1" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_1_DIRFIELD}" "Flags" "$1" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_1_TEXTFIELD}" "Text" "${INSTDIR_1_TEXT}" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_1_DIRFIELD}" "State" $${INSTDIR_1}_INSTDIR -!else - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_1_DIRFIELD}" "Type" "Unknown" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_1_TEXTFIELD}" "Type" "Unknown" - intop $0 $0 - ${INSTDIR_DIRHEIGHT} -!endif -!ifdef INSTDIR_2 - SectionGetFlags ${${INSTDIR_2}_SEC01} $1 -!ifdef ${INSTDIR_2}_SEC02 - SectionGetFlags ${${INSTDIR_2}_SEC02} $3 - IntOp $1 $1 | $3 -!endif - IntOp $2 $1 & 1 ;just care about the first flag - StrCpy $1 "READONLY" - StrCmp "$2" "1" +2 - StrCpy $1 "DISABLED" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_2_TEXTFIELD}" "Flags" "$1" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_2_DIRFIELD}" "Flags" "$1" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_2_TEXTFIELD}" "Text" "${INSTDIR_2_TEXT}" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_2_DIRFIELD}" "State" $${INSTDIR_2}_INSTDIR -!else - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_2_DIRFIELD}" "Type" "Unknown" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_2_TEXTFIELD}" "Type" "Unknown" - intop $0 $0 - ${INSTDIR_DIRHEIGHT} -!endif -!ifdef INSTDIR_3 - SectionGetFlags ${${INSTDIR_3}_SEC01} $1 -!ifdef ${INSTDIR_3}_SEC02 - SectionGetFlags ${${INSTDIR_3}_SEC02} $3 - IntOp $1 $1 | $3 -!endif - IntOp $2 $1 & 1 ;just care about the first flag - StrCpy $1 "READONLY" - StrCmp "$2" "1" +2 - StrCpy $1 "DISABLED" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_3_TEXTFIELD}" "Flags" "$1" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_3_DIRFIELD}" "Flags" "$1" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_3_TEXTFIELD}" "Text" "${INSTDIR_3_TEXT}" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_3_DIRFIELD}" "State" $${INSTDIR_3}_INSTDIR -!else - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_3_DIRFIELD}" "Type" "Unknown" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_3_TEXTFIELD}" "Type" "Unknown" - intop $0 $0 - ${INSTDIR_DIRHEIGHT} -!endif -!ifdef INSTDIR_4 - SectionGetFlags ${${INSTDIR_4}_SEC01} $1 -!ifdef ${INSTDIR_4}_SEC02 - SectionGetFlags ${${INSTDIR_4}_SEC02} $3 - IntOp $1 $1 | $3 -!endif - IntOp $2 $1 & 1 ;just care about the first flag - StrCpy $1 "READONLY" - StrCmp "$2" "1" +2 - StrCpy $1 "DISABLED" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_4_TEXTFIELD}" "Flags" "$1" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_4_DIRFIELD}" "Flags" "$1" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_4_TEXTFIELD}" "Text" "${INSTDIR_4_TEXT}" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_4_DIRFIELD}" "State" $${INSTDIR_4}_INSTDIR -!else - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_4_DIRFIELD}" "Type" "Unknown" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_4_TEXTFIELD}" "Type" "Unknown" - intop $0 $0 - ${INSTDIR_DIRHEIGHT} -!endif -!ifdef INSTDIR_5 - SectionGetFlags ${${INSTDIR_5}_SEC01} $1 -!ifdef ${INSTDIR_5}_SEC02 - SectionGetFlags ${${INSTDIR_5}_SEC02} $3 - IntOp $1 $1 | $3 -!endif - IntOp $2 $1 & 1 ;just care about the first flag - StrCpy $1 "READONLY" - StrCmp "$2" "1" +2 - StrCpy $1 "DISABLED" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_5_TEXTFIELD}" "Flags" "$1" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_5_DIRFIELD}" "Flags" "$1" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_5_TEXTFIELD}" "Text" "${INSTDIR_5_TEXT}" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_5_DIRFIELD}" "State" $${INSTDIR_5}_INSTDIR -!else - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_5_DIRFIELD}" "Type" "Unknown" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "${INSTDIR_5_TEXTFIELD}" "Type" "Unknown" - intop $0 $0 - ${INSTDIR_DIRHEIGHT} -!endif - - !insertmacro MUI_INSTALLOPTIONS_WRITE "${INSTDIR_INI_FILE}" "Field 1" "Bottom" "$0" - !insertmacro MUI_INSTALLOPTIONS_DISPLAY "${INSTDIR_INI_FILE}" - - pop $3 - pop $2 - pop $1 - pop $0 - FunctionEnd - - Function UpdateInstDirs -!ifdef INSTDIR_0 - !insertmacro MUI_INSTALLOPTIONS_READ $${INSTDIR_0}_INSTDIR "${INSTDIR_INI_FILE}" "${INSTDIR_0_DIRFIELD}" "State" - !ifdef ${INSTDIR_0}_ValidateDirectory - call ${INSTDIR_0}_ValidateDirectoryFunc - !endif -!endif -!ifdef INSTDIR_1 - !insertmacro MUI_INSTALLOPTIONS_READ $${INSTDIR_1}_INSTDIR "${INSTDIR_INI_FILE}" "${INSTDIR_1_DIRFIELD}" "State" - !ifdef ${INSTDIR_1}_ValidateDirectory - call ${INSTDIR_1}_ValidateDirectoryFunc - !endif -!endif -!ifdef INSTDIR_2 - !insertmacro MUI_INSTALLOPTIONS_READ $${INSTDIR_2}_INSTDIR "${INSTDIR_INI_FILE}" "${INSTDIR_2_DIRFIELD}" "State" - !ifdef ${INSTDIR_2}_ValidateDirectory - call ${INSTDIR_2}_ValidateDirectoryFunc - !endif -!endif -!ifdef INSTDIR_3 - !insertmacro MUI_INSTALLOPTIONS_READ $${INSTDIR_3}_INSTDIR "${INSTDIR_INI_FILE}" "${INSTDIR_3_DIRFIELD}" "State" - !ifdef ${INSTDIR_3}_ValidateDirectory - call ${INSTDIR_3}_ValidateDirectoryFunc - !endif -!endif -!ifdef INSTDIR_4 - !insertmacro MUI_INSTALLOPTIONS_READ $${INSTDIR_4}_INSTDIR "${INSTDIR_INI_FILE}" "${INSTDIR_4_DIRFIELD}" "State" - !ifdef ${INSTDIR_4}_ValidateDirectory - call ${INSTDIR_4}_ValidateDirectoryFunc - !endif -!endif -!ifdef INSTDIR_5 - !insertmacro MUI_INSTALLOPTIONS_READ $${INSTDIR_5}_INSTDIR "${INSTDIR_INI_FILE}" "${INSTDIR_5_DIRFIELD}" "State" - !ifdef ${INSTDIR_5}_ValidateDirectory - call ${INSTDIR_5}_ValidateDirectoryFunc - !endif -!endif - FunctionEnd -!macroend - -!macro INSTDIR_STARTUP - !insertmacro MUI_INSTALLOPTIONS_EXTRACT "${INSTDIR_INI_FILE}" -!macroend - -!endif ;ifndef INSTDIR_1 diff --git a/tools/installer/nsis/includes/list.nsh b/tools/installer/nsis/includes/list.nsh deleted file mode 100644 index 7a2fd0a..0000000 --- a/tools/installer/nsis/includes/list.nsh +++ /dev/null @@ -1,136 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -;; All rights reserved. -;; Contact: Nokia Corporation (qt-info@nokia.com) -;; -;; This file is part of the tools applications of the Qt Toolkit. -;; -;; $QT_BEGIN_LICENSE:LGPL$ -;; No Commercial Usage -;; This file contains pre-release code and may not be distributed. -;; You may use this file in accordance with the terms and conditions -;; contained in the Technology Preview License Agreement accompanying -;; this package. -;; -;; GNU Lesser General Public License Usage -;; Alternatively, this file may be used under the terms of the GNU Lesser -;; General Public License version 2.1 as published by the Free Software -;; Foundation and appearing in the file LICENSE.LGPL included in the -;; packaging of this file. Please review the following information to -;; ensure the GNU Lesser General Public License version 2.1 requirements -;; will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -;; -;; In addition, as a special exception, Nokia gives you certain additional -;; rights. These rights are described in the Nokia Qt LGPL Exception -;; version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -;; -;; If you have questions regarding the use of this file, please contact -;; Nokia at qt-info@nokia.com. -;; -;; -;; -;; -;; -;; -;; -;; -;; $QT_END_LICENSE$ -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -!ifndef LIST_INCLUDE -!define LIST_INCLUDE - -; usage: -; push item -; push list -; call ItemInList -; returns 1 or 0 -!macro ItemInList UN -Function ${UN}ItemInList - exch $0 ;list - exch - exch $1 ;item - push $2 ;counter - push $3 ;substr - push $4 ;char - - strcpy $3 "" - strcpy $2 "0" - - loop: - strcpy $4 $0 1 $2 - strcmp "$4" "" atend - intop $2 $2 + 1 - - strcmp "$4" "|" 0 +4 - strcmp "$3" "$1" found - strcpy $3 "" ;reset substr - goto +2 - strcpy $3 "$3$4" ;append char to substr - goto loop - - found: - strcpy $0 "1" - goto done - - atend: - strcmp "$3" "$1" found - strcpy $0 "0" - - done: - pop $4 - pop $3 - pop $2 - pop $1 - exch $0 -FunctionEnd -!macroend - -!insertmacro ItemInList "" -!insertmacro ItemInList "un." - -Function GetItemInList - exch $0 ;list - exch - exch $1 ;index - push $2 ;counter - push $3 ;substr - push $4 ;char - push $5 ;current index - - strcpy $3 "" - strcpy $2 "0" - strcpy $5 "1" - - loop: - strcpy $4 $0 1 $2 - strcmp "$4" "" atend - intop $2 $2 + 1 - - strcmp "$4" "|" 0 +5 - strcmp "$5" "$1" found - strcpy $3 "" ;reset substr - intop $5 $5 + 1 - goto +2 - strcpy $3 "$3$4" ;append char to substr - goto loop - - found: - strcpy $0 "$3" - goto done - - atend: - strcmp "$5" "$1" found - strcpy $0 "" - - done: - pop $5 - pop $4 - pop $3 - pop $2 - pop $1 - exch $0 -FunctionEnd - -!endif ;LIST_INCLUDE diff --git a/tools/installer/nsis/includes/qtcommon.nsh b/tools/installer/nsis/includes/qtcommon.nsh deleted file mode 100644 index a4ec01b..0000000 --- a/tools/installer/nsis/includes/qtcommon.nsh +++ /dev/null @@ -1,549 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -;; All rights reserved. -;; Contact: Nokia Corporation (qt-info@nokia.com) -;; -;; This file is part of the tools applications of the Qt Toolkit. -;; -;; $QT_BEGIN_LICENSE:LGPL$ -;; No Commercial Usage -;; This file contains pre-release code and may not be distributed. -;; You may use this file in accordance with the terms and conditions -;; contained in the Technology Preview License Agreement accompanying -;; this package. -;; -;; GNU Lesser General Public License Usage -;; Alternatively, this file may be used under the terms of the GNU Lesser -;; General Public License version 2.1 as published by the Free Software -;; Foundation and appearing in the file LICENSE.LGPL included in the -;; packaging of this file. Please review the following information to -;; ensure the GNU Lesser General Public License version 2.1 requirements -;; will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -;; -;; In addition, as a special exception, Nokia gives you certain additional -;; rights. These rights are described in the Nokia Qt LGPL Exception -;; version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -;; -;; If you have questions regarding the use of this file, please contact -;; Nokia at qt-info@nokia.com. -;; -;; -;; -;; -;; -;; -;; -;; -;; $QT_END_LICENSE$ -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -!ifndef QTCOMMON_INCLUDE -!define QTCOMMON_INCLUDE - -!macro MakeQtDirectory UN -Function ${UN}MakeQtDirectory - exch $0 - - push $0 - push " " #replace - push "-" #with - call ${UN}ReplaceString - pop $0 - - push $0 - push "(" #replace - push "" #with - call ${UN}ReplaceString - pop $0 - - push $0 - push ")" #replace - push "" #with - call ${UN}ReplaceString - pop $0 - - exch $0 -FunctionEnd -!macroend -!insertmacro MakeQtDirectory "" -!insertmacro MakeQtDirectory "un." - -Function AddStartmenuApplication - exch $0 - IfFileExists "$0\assistant.exe" 0 +2 - CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\Assistant.lnk" "$0\assistant.exe" - IfFileExists "$0\designer.exe" 0 +2 - CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\Designer.lnk" "$0\designer.exe" - IfFileExists "$0\linguist.exe" 0 +2 - CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\Linguist.lnk" "$0\linguist.exe" - IfFileExists "$0\qtdemo.exe" 0 +2 - CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\Examples and Demos.lnk" "$0\qtdemo.exe" - IfFileExists "$0\..\README" 0 ReadMeShortCutFinished - IfFileExists "$WINDIR\notepad.exe" +3 - CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\Qt Readme.lnk" "$SYSDIR\notepad.exe" "$0\..\README" - goto ReadMeShortCutFinished - CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\Qt Readme.lnk" "$WINDIR\notepad.exe" "$0\..\README" - ReadMeShortCutFinished: - pop $0 -FunctionEnd - -Function un.RemoveStartmenuApplication - Delete "$SMPROGRAMS\$STARTMENU_STRING\Assistant.lnk" - Delete "$SMPROGRAMS\$STARTMENU_STRING\Designer.lnk" - Delete "$SMPROGRAMS\$STARTMENU_STRING\Linguist.lnk" - Delete "$SMPROGRAMS\$STARTMENU_STRING\Examples and Demos.lnk" - Delete "$SMPROGRAMS\$STARTMENU_STRING\Qt Readme.lnk" -FunctionEnd - -#patch the licence information -Function PatchLicenseInformation - exch $0 - push $1 - push $2 - - DetailPrint "Patching license information..." - - IfFileExists "$0\src\corelib\global\qconfig.h" 0 +3 - strcpy $2 "$0\src\corelib\global\qconfig.h" - goto PatchLicensee - - IfFileExists "$0\include\Qt\qconfig.h" 0 PatchConfigPriFile - strcpy $2 "$0\include\Qt\qconfig.h" - - PatchLicensee: - push $2 - push '#define QT_PRODUCT_LICENSEE "' - push '#define QT_PRODUCT_LICENSEE "$LICENSEE"$\r$\n' - call PatchLine - - push $2 - push '#define QT_PRODUCT_LICENSE "' - push '#define QT_PRODUCT_LICENSE "$LICENSE_PRODUCT"$\r$\n' - call PatchLine - - push $2 - ${StrCase} $1 "$LICENSE_PRODUCT" "U" - push '# define QT_EDITION QT_EDITION_' - push '# define QT_EDITION QT_EDITION_$1$\r$\n' - call PatchLine - - PatchConfigPriFile: - IfFileExists "$0\mkspecs\qconfig.pri" 0 PatchLicenseProductDone - push "$0\mkspecs\qconfig.pri" - push "QT_EDITION = " - push "QT_EDITION = $LICENSE_PRODUCT$\r$\n" - call PatchLine - - PatchLicenseProductDone: - pop $2 - pop $1 - pop $0 -FunctionEnd - -Function PatchCommonBinaryFiles - exch $2 - push $0 - push $1 - - IfFileExists "$2\bin\qmake.exe" 0 +5 - DetailPrint "Patching paths in qmake..." - push $2 - push "$2\bin\qmake.exe" - call PatchBinaryPaths - - DetailPrint "Patching paths in core..." - FindFirst $0 $1 "$2\bin\QtCore*.dll" - StrCmp $1 "" ErrorPatching - push $2 - push "$2\bin\$1" - call PatchBinaryPaths - - FindNext $0 $1 - StrCmp $1 "" ErrorPatching - push $2 - push "$2\bin\$1" - call PatchBinaryPaths - - ErrorPatching: - - pop $1 - pop $0 - pop $2 -FunctionEnd - -Function PatchBinaryPaths - exch $0 - exch - exch $2 - push $1 - -!ifndef OPENSOURCE_BUILD - qtnsisext::PatchBinary /NOUNLOAD $0 "qt_prfxpath=" "qt_prfxpath=$2" - qtnsisext::PatchBinary /NOUNLOAD $0 "qt_docspath=" "qt_docspath=$2\doc" - qtnsisext::PatchBinary /NOUNLOAD $0 "qt_hdrspath=" "qt_hdrspath=$2\include" - qtnsisext::PatchBinary /NOUNLOAD $0 "qt_libspath=" "qt_libspath=$2\lib" - qtnsisext::PatchBinary /NOUNLOAD $0 "qt_binspath=" "qt_binspath=$2\bin" - qtnsisext::PatchBinary /NOUNLOAD $0 "qt_plugpath=" "qt_plugpath=$2\plugins" - qtnsisext::PatchBinary /NOUNLOAD $0 "qt_datapath=" "qt_datapath=$2" - qtnsisext::PatchBinary /NOUNLOAD $0 "qt_trnspath=" "qt_trnspath=$2\translations" - qtnsisext::PatchBinary /NOUNLOAD $0 "qt_xmplpath=" "qt_xmplpath=$2\examples" -!ifdef MODULE_LICENSECHECK - qtnsisext::PatchBinary /NOUNLOAD $0 "qt_lcnsuser=" "qt_lcnsuser=$LICENSEE" - qtnsisext::PatchBinary /NOUNLOAD $0 "qt_lcnsprod=" "qt_lcnsprod=$LICENSE_PRODUCT" -!endif - qtnsisext::PatchBinary $0 "qt_demopath=" "qt_demopath=$2\demos" -!endif - - pop $1 - pop $2 - pop $0 -FunctionEnd - -#patching the prl files -Function PatchPrlFiles - exch $2 - exch - exch $3 ;buildDir - push $0 - push $1 - - FindFirst $0 $1 "$2\lib\*.prl" - loop: - StrCmp $1 "" done - DetailPrint "Patching $1..." - - push "$2\lib\$1" - push $3 - push $2 - call PatchPath - - FindNext $0 $1 - Goto loop - done: - pop $1 - pop $0 - pop $3 - pop $2 -FunctionEnd - -# -# patch line in text files -# push "qtcore4.prl" #Filename -# push "#define ..." #START WITH -# push "c:\qt" #REPLACE WITH -# call PatchLine -# -Function PatchLine - exch $2 ;replacement line - exch 2 - exch $1 ;Filename - exch - exch $0 ;start with - push $3 ; tmp filename - push $4 ; handle (tmp) - push $5 ; handle (org) - push $6 ; string - - ClearErrors - GetTempFileName $3 - IfErrors done - FileOpen $4 $3 w - IfErrors done - FileOpen $5 $1 r - IfErrors done - -nextline: - FileRead $5 $6 - IfErrors renameFile - push $6 - push $0 - push $2 - call ReplaceLine - pop $6 - FileWrite $4 $6 - goto nextline - -renameFile: - FileClose $4 - FileClose $5 - SetDetailsPrint none - Delete $1 - Rename $3 $1 - SetDetailsPrint both - - done: - pop $6 - pop $5 - pop $4 - pop $3 - pop $0 - pop $1 - pop $2 -FunctionEnd - -# -# replaces a string that starts with something, with another string -# push string -# push "#define ..." #START WITH -# push "c:\qt" #REPLACE WITH -# call ReplaceLine -# pop $0 #new string -# -Function ReplaceLine - exch $2 ;new line - exch 2 - exch $1 ;string - exch - exch $0 ;start with - - push $3 ; tmp string - push $4 ; counter - push $5 ; strlen - - StrCpy $4 "-1" - StrLen $5 $1 - - loop: - IntOp $4 $4 + 1 ;increase counter - StrCpy $3 $1 $4 ;get substring - IntCmp $4 $5 copystring ; check for end - StrCmp $3 $0 done ;start with found - goto loop - - copystring: - StrCpy $2 $1 - goto done - - done: - pop $5 - pop $4 - pop $3 - pop $0 - pop $1 - exch $2 -FunctionEnd - -# -# patch paths in text files -# push "qtcore4.prl" #Filename -# push "c:\compile" #OLD_QTDIR -# push "c:\qt" #QTDIR -# call PatchPath -# -Function PatchPath - exch $2 ;NEW - exch 2 - exch $1 ;Filename - exch - exch $0 ;OLD - push $3 ;readline - push $4 ;file 1 - push $5 ;file 2 - push $6 ;tmpfilename - - push $7 ;forward slash NEW - push $8 ;forward slash OLD - - push $2 - push "\" - push "/" - call ReplaceString - pop $7 - - push $0 - push "\" - push "/" - call ReplaceString - pop $8 - - ClearErrors - GetTempFileName $6 - IfErrors done - FileOpen $5 $6 w - IfErrors done - FileOpen $4 $1 r - IfErrors done - -nextline: - FileRead $4 $3 - IfErrors renameFile - push $3 - push $0 - push $2 - call ReplaceString ;replace backward slash path - push $8 - push $7 - call ReplaceString ;replace forward slash path - pop $3 - FileWrite $5 $3 - goto nextline - -renameFile: - FileClose $5 - FileClose $4 - SetDetailsPrint none - Delete $1 - Rename $6 $1 - SetDetailsPrint both - -done: - pop $8 - pop $7 - pop $6 - pop $5 - pop $4 - pop $3 - pop $0 - pop $1 - pop $2 -FunctionEnd - -# -# replaces a string with another string -# push string -# push "c:\qt" #replace -# push "c:\compile" #with -# call ReplaceString -# pop $0 #new string -# -!macro ReplaceString UN -Function ${UN}ReplaceString - exch $2 ;NEW - exch 2 - exch $1 ;string - exch - exch $0 ;OLD - - push $3 ; tmp string - push $4 ; counter - push $5 ; result - - push $6 ; old strlen - - StrCpy $4 "-1" - StrCpy $5 "" - - StrLen $6 $0 - - loop: - IntOp $4 $4 + 1 ;increase counter - StrCpy $3 $1 $6 $4 ;get substring - StrCmp $3 "" done ; check for end - StrCmp $3 $0 replace ;replace if old - StrCpy $3 $1 "1" $4 - StrCpy $5 $5$3 ;append character to result - goto loop - - replace: - StrCpy $5 $5$2 ;insert new qtdir - IntOp $4 $4 + $6 ;increase offset - IntOp $4 $4 - 1 ;decrease offset one more - goto loop - - done: - StrCpy $2 $5 - pop $6 - pop $5 - pop $4 - pop $3 - pop $0 - pop $1 - exch $2 -FunctionEnd -!macroend -!insertmacro ReplaceString "" -!insertmacro ReplaceString "un." - -Function CommonCheckDirectory - exch $4 - exch - exch $5 - push $0 - push $1 - push $2 - push $3 - - ; check if qt is already installed - IfFileExists "$4\bin\qmake.exe" 0 +2 - IfFileExists "$4\uninst.exe" qtExistsError - - ; check if directory is empty - FindFirst $0 $1 "$4\*" - CommonCheckDirectory_FileSearchLoop: - StrCmp $1 "" CommonCheckDirectory_DirDoesNotExist - StrCmp $1 "." CommonCheckDirectory_ContinueSearchLoop - StrCmp $1 ".." CommonCheckDirectory_ContinueSearchLoop - goto CommonCheckDirectory_FoundFile - CommonCheckDirectory_ContinueSearchLoop: - FindNext $0 $1 - goto CommonCheckDirectory_FileSearchLoop - -CommonCheckDirectory_FoundFile: - FindClose $0 - MessageBox MB_YESNO|MB_ICONEXCLAMATION "This directory already has contents. Are you sure you want to use this directory?" IDYES CommonCheckDirectory_DirDoesNotExist - Goto errorInDirectory -CommonCheckDirectory_DirDoesNotExist: - FindClose $0 - - GetInstDirError $0 - IntCmp 0 $0 0 instDirError - - StrLen $0 $4 - -!ifdef USE_NODIRLENGTHCHECK - StrCpy $1 "400" -!else - StrLen $1 $5 -!endif - - IntCmp $1 $0 0 directoryToLong - - ;check for spaces - StrCpy $2 "-1" - StrCpy $3 "" - - loop: - IntOp $2 $2 + 1 ;increase counter - StrCpy $3 $4 "1" $2 ;get char - StrCmp $3 "" directoryOk ; check for end - StrCmp $3 " " spaceInDirectory ;check for space - goto loop - -qtExistsError: - MessageBox MB_OK|MB_ICONEXCLAMATION "Qt is already installed in this directory. Please uninstall the previous version and try again." - Goto errorInDirectory - -instDirError: - MessageBox MB_OK|MB_ICONEXCLAMATION "This is not a valid installation directory." - Goto errorInDirectory - -spaceInDirectory: - MessageBox MB_OK|MB_ICONEXCLAMATION "The installation path can't contain spaces." - Goto errorInDirectory - -directoryToLong: - MessageBox MB_OK|MB_ICONEXCLAMATION "The installation directory is to long." - Goto errorInDirectory - -errorInDirectory: - pop $3 - pop $2 - pop $1 - pop $0 - pop $5 - pop $4 - Abort - goto done - -directoryOk: - pop $3 - pop $2 - pop $1 - pop $0 - pop $5 - pop $4 -done: -FunctionEnd - -!endif ;QTCOMMON_INCLUDE diff --git a/tools/installer/nsis/includes/qtenv.nsh b/tools/installer/nsis/includes/qtenv.nsh deleted file mode 100644 index 8a06888..0000000 --- a/tools/installer/nsis/includes/qtenv.nsh +++ /dev/null @@ -1,303 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -;; All rights reserved. -;; Contact: Nokia Corporation (qt-info@nokia.com) -;; -;; This file is part of the tools applications of the Qt Toolkit. -;; -;; $QT_BEGIN_LICENSE:LGPL$ -;; No Commercial Usage -;; This file contains pre-release code and may not be distributed. -;; You may use this file in accordance with the terms and conditions -;; contained in the Technology Preview License Agreement accompanying -;; this package. -;; -;; GNU Lesser General Public License Usage -;; Alternatively, this file may be used under the terms of the GNU Lesser -;; General Public License version 2.1 as published by the Free Software -;; Foundation and appearing in the file LICENSE.LGPL included in the -;; packaging of this file. Please review the following information to -;; ensure the GNU Lesser General Public License version 2.1 requirements -;; will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -;; -;; In addition, as a special exception, Nokia gives you certain additional -;; rights. These rights are described in the Nokia Qt LGPL Exception -;; version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -;; -;; If you have questions regarding the use of this file, please contact -;; Nokia at qt-info@nokia.com. -;; -;; -;; -;; -;; -;; -;; -;; -;; $QT_END_LICENSE$ -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -!ifndef QTENV_INCLUDE -!define QTENV_INCLUDE -# -# creates a qtvars.bat file in $QTDIR\bin -# push "vs2003" #compiler -# push "c:\qt" #QTDIR -# call MakeQtVarsFile -# -Function MakeQtVarsFile - exch $1 ; QTDIR - exch - exch $3 ; vs version - push $0 ; file handle - push $2 - push $4 - - push $3 - call GetMkSpec - pop $2 - - ClearErrors - FileOpen $0 "$1\bin\qtvars.bat" w - IfErrors done - FileWrite $0 "@echo off$\r$\n" - FileWrite $0 "rem$\r$\n" - FileWrite $0 "rem This file is generated$\r$\n" - FileWrite $0 "rem$\r$\n" - FileWrite $0 "$\r$\n" - FileWrite $0 "echo Setting up a Qt environment...$\r$\n" - FileWrite $0 "echo -- QTDIR set to $1$\r$\n" - FileWrite $0 "echo -- Added $1\bin to PATH$\r$\n" - FileWrite $0 "echo -- QMAKESPEC set to $2$\r$\n" - FileWrite $0 "$\r$\n" - FileWrite $0 "set QTDIR=$1$\r$\n" - FileWrite $0 "set PATH=$1\bin;%PATH%$\r$\n" - FileWrite $0 "set QMAKESPEC=$2$\r$\n" - - call IsExpressVersion - pop $4 - strcmp $4 "" noExpressVersion - FileWrite $0 "$\r$\n" - FileWrite $0 'regedit /e S$$D$$K$$ "HKEY_LOCAL_MACHINE\Software\Microsoft\MicrosoftSDK"$\r$\n' - Filewrite $0 'if not exist S$$D$$K$$ goto ENDSDK\r$\n' - FileWrite $0 'find "Install Dir" < S$$D$$K$$ > D$$I$$R$$$\r$\n' - FileWrite $0 'del S$$D$$K$$$\r$\n' - FileWrite $0 'for /f "tokens=2 delims==" %%i in (D$$I$$R$$) do call %%i\setenv$\r$\n' - FileWrite $0 'del D$$I$$R$$$\r$\n' - Filewrite $0 ':ENDSDK\r$\n' - noExpressVersion: - - push $3 - call GetVSVarsFile - pop $2 - strcmp $2 "" novsvars - FileWrite $0 "$\r$\n" - FileWrite $0 'if not "%1"=="vsvars" goto END$\r$\n' - FileWrite $0 'call "$2"$\r$\n' - FileWrite $0 ":END$\r$\n" - - FileWrite $0 "$\r$\n" - FileWrite $0 'if not "%1"=="vsstart" goto ENDSTARTVS$\r$\n' - FileWrite $0 'call "$2"$\r$\n' - - strcmp $3 "vc60" vc60startup - FileWrite $0 "devenv /useenv$\r$\n" - Goto donevsstartup - vc60startup: - FileWrite $0 "msdev /useenv$\r$\n" - donevsstartup: - - FileWrite $0 ":ENDSTARTVS$\r$\n" - - novsvars: - FileWrite $0 "$\r$\n" - FileClose $0 - done: - pop $4 - pop $2 - pop $0 - pop $3 - pop $1 -FunctionEnd - -Function GetMkSpec - exch $0 - StrCmp $0 "mingw" MINGW - StrCmp $0 "vs2005" VS2005 - StrCmp $0 "vs2003" VS2003 - StrCmp $0 "vs2002" VS2002 - StrCmp $0 "vc60" VS60 - StrCmp $0 "icc" ICC - - MINGW: - pop $0 - push "win32-g++" - goto done - - VS2005: - pop $0 - push "win32-msvc2005" - goto done - - VS2003: - pop $0 - push "win32-msvc.net" - goto done - - VS2002: - pop $0 - push "win32-msvc.net" - goto done - - VS60: - pop $0 - push "win32-msvc" - goto done - - ICC: - pop $0 - push "win32-icc" - goto done - - done: -FunctionEnd - -!define AD_COMPILER_NAME_VS2005 "Visual Studio .NET 2005" -!define AD_COMPILER_NAME_VS2005_EXPRESS "Visual C++ 2005 Express Edition" -!define AD_COMPILER_NAME_VS2003 "Visual Studio .NET 2003" -!define AD_COMPILER_NAME_VS2002 "Visual Studio .NET 2002" -!define AD_COMPILER_NAME_VC60 "Visual Studio 6.0" -!define AD_COMPILER_NAME_ICC "Intel C++ Compiler" -!define AD_COMPILER_NAME_MINGW "MinGW (Must be in PATH!)" - -Function GetShortCompilerName - exch $0 - - strcmp "$0" "${AD_COMPILER_NAME_VS2005}" 0 +3 - strcpy $0 "vs2005" - goto done - - strcmp "$0" "${AD_COMPILER_NAME_VS2005_EXPRESS}" 0 +3 - strcpy $0 "vs2005" - goto done - - strcmp "$0" "${AD_COMPILER_NAME_VS2003}" 0 +3 - strcpy $0 "vs2003" - goto done - - strcmp "$0" "${AD_COMPILER_NAME_VS2002}" 0 +3 - strcpy $0 "vs2002" - goto done - - strcmp "$0" "${AD_COMPILER_NAME_VC60}" 0 +3 - strcpy $0 "vc60" - goto done - - strcmp "$0" "${AD_COMPILER_NAME_ICC}" 0 +3 - strcpy $0 "icc" - goto done - - strcmp "$0" "${AD_COMPILER_NAME_MINGW}" 0 +3 - strcpy $0 "mingw" - goto done - - strcpy $0 "" ;this is bad! - - done: - exch $0 -FunctionEnd - -Function IsExpressVersion - push $0 - ReadRegStr $0 HKLM "Software\Microsoft\VCExpress\8.0" "InstallDir" - ClearErrors - exch $0 -FunctionEnd - -Function AutoDetectCompilers - push $0 - push $1 - - strcpy $1 "" - - ReadRegStr $0 HKLM "Software\Microsoft\VisualStudio\8.0" "InstallDir" - strcmp $0 "" +2 - strcpy $1 "$1${AD_COMPILER_NAME_VS2005}|" - - ReadRegStr $0 HKLM "Software\Microsoft\VCExpress\8.0" "InstallDir" - strcmp $0 "" +2 - strcpy $1 "$1${AD_COMPILER_NAME_VS2005_EXPRESS}|" - - ReadRegStr $0 HKLM "Software\Microsoft\VisualStudio\7.1" "InstallDir" - strcmp $0 "" +2 - strcpy $1 "$1${AD_COMPILER_NAME_VS2003}|" - - ReadRegStr $0 HKLM "Software\Microsoft\VisualStudio\7.0" "InstallDir" - strcmp $0 "" +2 - strcpy $1 "$1${AD_COMPILER_NAME_VS2002}|" - - ReadRegStr $0 HKLM "Software\Microsoft\VisualStudio\6.0\Setup" "VsCommonDir" - strcmp $0 "" +2 - strcpy $1 "$1${AD_COMPILER_NAME_VC60}|" - - ReadRegStr $0 HKLM "Software\Intel\Compilers\C++\80" "Major Version" - strcmp $0 "" +2 - strcpy $1 "$1${AD_COMPILER_NAME_ICC}|" - - strcpy $1 "$1${AD_COMPILER_NAME_MINGW}" - - exch - pop $0 - exch $1 -FunctionEnd - -Function GetVSVarsFile - exch $1 - push $0 - - StrCmp $1 "vs2005" VS2005 - StrCmp $1 "vs2003" VS2003 - StrCmp $1 "vs2002" VS2002 - StrCmp $1 "vc60" VS60 - - push "" ;empty string if not found - goto done - - VS2005: - ReadRegStr $0 HKLM "Software\Microsoft\VisualStudio\8.0\Setup\VS" "ProductDir" - StrCmp $0 "" +1 foundVSDir ; found msvc.net 2005 - - ReadRegStr $0 HKLM "Software\Microsoft\VCExpress\8.0\Setup\VS" "ProductDir" - StrCmp $0 "" +1 foundVSDir ; found msvc.net 2005 epress - - VS2003: - ReadRegStr $0 HKLM "Software\Microsoft\VisualStudio\7.1\Setup\VS" "ProductDir" - StrCmp $0 "" +1 foundVSDir ; found msvc.net 2003 - - VS2002: - ReadRegStr $0 HKLM "Software\Microsoft\VisualStudio\7.0\Setup\VS" "ProductDir" - StrCmp $0 "" +1 foundVSDir ; found msvc.net 2002 - - VS60: - ReadRegStr $0 HKLM "Software\Microsoft\VisualStudio\6.0\Setup\Microsoft Visual C++" "ProductDir" - StrCmp $0 "" +1 foundVCDir ; found msvc 6.0 - - push "" ;empty string if not found - goto done - - foundVSDir: - push "$0\Common7\Tools\vsvars32.bat" - goto done - - foundVCDir: - push "$0\bin\vcvars32.bat" - - done: - exch - pop $0 - exch - pop $1 -FunctionEnd - -!endif ;QTENV_INCLUDE diff --git a/tools/installer/nsis/includes/system.nsh b/tools/installer/nsis/includes/system.nsh deleted file mode 100644 index 3bc5be2..0000000 --- a/tools/installer/nsis/includes/system.nsh +++ /dev/null @@ -1,269 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -;; All rights reserved. -;; Contact: Nokia Corporation (qt-info@nokia.com) -;; -;; This file is part of the tools applications of the Qt Toolkit. -;; -;; $QT_BEGIN_LICENSE:LGPL$ -;; No Commercial Usage -;; This file contains pre-release code and may not be distributed. -;; You may use this file in accordance with the terms and conditions -;; contained in the Technology Preview License Agreement accompanying -;; this package. -;; -;; GNU Lesser General Public License Usage -;; Alternatively, this file may be used under the terms of the GNU Lesser -;; General Public License version 2.1 as published by the Free Software -;; Foundation and appearing in the file LICENSE.LGPL included in the -;; packaging of this file. Please review the following information to -;; ensure the GNU Lesser General Public License version 2.1 requirements -;; will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -;; -;; In addition, as a special exception, Nokia gives you certain additional -;; rights. These rights are described in the Nokia Qt LGPL Exception -;; version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -;; -;; If you have questions regarding the use of this file, please contact -;; Nokia at qt-info@nokia.com. -;; -;; -;; -;; -;; -;; -;; -;; -;; $QT_END_LICENSE$ -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -!ifndef SYSTEM_INCLUDE -!define SYSTEM_INCLUDE - -!define QTVSIP2003_GUID "{789202F4-94F5-4f0a-AA00-73295FEBFD68}" -!define QTVSIP2005_GUID "{789202F4-94F5-4f0a-AA00-73295FEBFD69}" - -!define QMSNET2002_GUID "{C174ACCD-D856-4B60-9887-0FF9E841E0EC}" -!define QMSNET2003_GUID "{C174ACCE-D857-4B61-9888-0FF9E841E0ED}" -!define QMSNET2005_GUID "{14E98DB4-A232-49a4-8EC1-8CE4F6985C73}" - -!macro GetVSInstallationDir UN -; Usage: -; -; push "7.0" -; call GetVSInstallationDir -; pop $0 -; -; If the requested VS version can be found, its -; installation directory is returned. -Function ${UN}GetVSInstallationDir - Exch $0 - Push $1 - ReadRegStr $1 HKLM "Software\Microsoft\VisualStudio\$0" "InstallDir" - StrCpy $0 $1 - StrCmp $0 "" 0 +2 - SetErrors - Pop $1 - Exch $0 -FunctionEnd -!macroend - -!insertmacro GetVSInstallationDir "" -!insertmacro GetVSInstallationDir "un." - - -!macro IsDotNETInstalled UN -; Usage: -; -; push "8.0" -; call IsDotNETInstalled -; pop $0 -; -; $0 contains the path where the .NET framework is installed. -; If not installation can be found $0 is empty. -Function ${UN}IsDotNETInstalled - Exch $0 - Push $1 - Push $2 - Push $3 - Push $4 - Push $5 - - StrCpy $5 $0 - - ReadRegStr $4 HKEY_LOCAL_MACHINE "Software\Microsoft\.NETFramework" "InstallRoot" - Push $4 - Exch $EXEDIR - Exch $EXEDIR - Pop $4 - - IfFileExists $4 0 noDotNET - StrCpy $0 0 - - EnumStart: - EnumRegKey $2 HKEY_LOCAL_MACHINE "Software\Microsoft\.NETFramework\Policy" $0 - IntOp $0 $0 + 1 - StrCmp $2 "" noDotNET - StrCpy $1 0 - - EnumPolicy: - EnumRegValue $3 HKEY_LOCAL_MACHINE "Software\Microsoft\.NETFramework\Policy\$2" $1 - IntOp $1 $1 + 1 - StrCmp $3 "" EnumStart - - StrCmp $5 "8.0" 0 +2 - StrCmp $2 "v2.0" 0 EnumPolicy - - IfFileExists "$4\$2.$3" foundDotNET EnumPolicy - - noDotNET: - StrCpy $0 0 - Goto done - - foundDotNET: - StrCpy $0 "$4\$2.$3" - - done: - Pop $5 - Pop $4 - Pop $3 - Pop $2 - Pop $1 - Exch $0 -FunctionEnd -!macroend - -!insertmacro IsDotNETInstalled "" -!insertmacro IsDotNETInstalled "un." - -!macro IsQMsNetInstalled UN -; Usage: -; -; push "8.0" -; call IsQMsNetInstalled -; pop $0 -Function ${UN}IsQMsNetInstalled - Exch $0 - Push $1 - Push $2 - Push $3 - - StrCmp $0 "7.0" 0 +2 - StrCpy $2 "${QMSNET2002_GUID}" - StrCmp $0 "7.1" 0 +2 - StrCpy $2 "${QMSNET2003_GUID}" - StrCmp $0 "8.0" 0 +2 - StrCpy $2 "${QMSNET2005_GUID}" - - StrCpy $3 0 - - ReadRegStr $1 HKLM "SOFTWARE\Microsoft\VisualStudio\$0\NewProjectTemplates\TemplateDirs\$2\/2" "TemplatesDir" - StrCmp $1 "" +3 - StrCpy $3 1 - goto done - - ReadRegStr $1 HKCU "SOFTWARE\Microsoft\VisualStudio\$0\NewProjectTemplates\TemplateDirs\$2\/2" "TemplatesDir" - StrCmp $1 "" +2 - StrCpy $3 1 - -done: - StrCpy $0 $3 - - Pop $3 - Pop $2 - Pop $1 - Exch $0 -FunctionEnd -!macroend - -!insertmacro IsQMsNetInstalled "" -!insertmacro IsQMsNetInstalled "un." - -!macro IsQMsDevInstalled UN -; Usage: -; -; call IsQMsDevInstalled -; pop $0 -Function ${UN}IsQMsDevInstalled - Push $0 - Push $1 - Push $2 - - StrCpy $0 0 - - ReadRegStr $1 HKLM "SOFTWARE\Microsoft\DevStudio\6.0\AddIns\q4msdev.Q4MsDev.1" "Filename" - StrCmp $1 "" +3 - StrCpy $0 1 - goto done - - ReadRegStr $1 HKCU "SOFTWARE\Microsoft\DevStudio\6.0\AddIns\q4msdev.Q4MsDev.1" "Filename" - StrCmp $1 "" +2 - StrCpy $0 1 - -done: - Pop $2 - Pop $1 - Exch $0 -FunctionEnd -!macroend - -!insertmacro IsQMsDevInstalled "" -!insertmacro IsQMsDevInstalled "un." - -!macro IsIntegrationInstalled UN -; Usage: -; -; push "8.0" -; call IsIntegrationInstalled -; pop $0 -Function ${UN}IsIntegrationInstalled - Exch $0 - Push $1 - Push $2 - - StrCmp $0 "7.1" 0 +2 - StrCpy $2 "${QTVSIP2003_GUID}" - StrCmp $0 "8.0" 0 +2 - StrCpy $2 "${QTVSIP2005_GUID}" - - ReadRegStr $1 HKLM "SOFTWARE\Microsoft\VisualStudio\$0\Packages\$2" "ProductName" - - StrCpy $0 0 - StrCmp $1 "" done - StrCpy $0 1 - -done: - Pop $2 - Pop $1 - Exch $0 -FunctionEnd -!macroend - -!insertmacro IsIntegrationInstalled "" -!insertmacro IsIntegrationInstalled "un." - -!macro AdministratorRights UN -Function ${UN}HasAdminRights - push $0 - ClearErrors - UserInfo::GetAccountType - IfErrors Yes ;It's probably Win95 - pop $0 - StrCmp $0 "Admin" Yes - StrCmp $0 "Power" Yes - - StrCpy $0 "false" - goto Done - - Yes: - StrCpy $0 "true" - - Done: - exch $0 -FunctionEnd -!macroend -!insertmacro AdministratorRights "" -!insertmacro AdministratorRights "un." - -!endif ;SYSTEM_INCLUDE diff --git a/tools/installer/nsis/installer.nsi b/tools/installer/nsis/installer.nsi deleted file mode 100644 index af7e9a8..0000000 --- a/tools/installer/nsis/installer.nsi +++ /dev/null @@ -1,524 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -;; All rights reserved. -;; Contact: Nokia Corporation (qt-info@nokia.com) -;; -;; This file is part of the tools applications of the Qt Toolkit. -;; -;; $QT_BEGIN_LICENSE:LGPL$ -;; No Commercial Usage -;; This file contains pre-release code and may not be distributed. -;; You may use this file in accordance with the terms and conditions -;; contained in the Technology Preview License Agreement accompanying -;; this package. -;; -;; GNU Lesser General Public License Usage -;; Alternatively, this file may be used under the terms of the GNU Lesser -;; General Public License version 2.1 as published by the Free Software -;; Foundation and appearing in the file LICENSE.LGPL included in the -;; packaging of this file. Please review the following information to -;; ensure the GNU Lesser General Public License version 2.1 requirements -;; will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -;; -;; In addition, as a special exception, Nokia gives you certain additional -;; rights. These rights are described in the Nokia Qt LGPL Exception -;; version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -;; -;; If you have questions regarding the use of this file, please contact -;; Nokia at qt-info@nokia.com. -;; -;; -;; -;; -;; -;; -;; -;; -;; $QT_END_LICENSE$ -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Script generated by the HM NIS Edit Script Wizard. - -!include "config.nsh" -!include "includes\global.nsh" - -!define PRODUCT_PUBLISHER "Nokia Corporation and/or its subsidiary(-ies)" -!define PRODUCT_WEB_SITE "http://qt.nokia.com" - -!define INSTALL_ICON "images\install.ico" -!define WELCOME_PAGE_ICON "images\qt-wizard.bmp" -!define PAGE_HEADER_ICON "images\qt-header.bmp" - -!include "MUI.nsh" - -; modules -!include "modules\mingw.nsh" -!include "modules\opensource.nsh" -!include "includes\instdir.nsh" -!include "modules\environment.nsh" -!include "modules\registeruiext.nsh" -!ifndef OPENSOURCE_BUILD -!include "modules\msvc.nsh" -!include "modules\addin7x.nsh" -!include "modules\qsa.nsh" -!include "modules\addin60.nsh" -!include "modules\debugext.nsh" -!include "modules\license.nsh" -!include "modules\vsip.nsh" -!include "modules\help.nsh" -!include "modules\evaluation.nsh" -!include "modules\eclipse.nsh" -!include "modules\qtjambieclipse.nsh" -!endif - -; MUI Settings -!define MUI_ABORTWARNING -!define MUI_ICON "${INSTALL_ICON}" -!define MUI_UNICON "${INSTALL_ICON}" - -!define MUI_HEADERIMAGE -!define MUI_HEADERIMAGE_BITMAP "${PAGE_HEADER_ICON}" -!define MUI_HEADERIMAGE_UNBITMAP "${PAGE_HEADER_ICON}" - -!define MUI_WELCOMEFINISHPAGE_BITMAP "${WELCOME_PAGE_ICON}" -!define MUI_UNWELCOMEFINISHPAGE_BITMAP "${WELCOME_PAGE_ICON}" - -!ifdef WELCOME_NOTE - !define MUI_WELCOMEPAGE_TEXT "${WELCOME_NOTE}" -!endif -!insertmacro MUI_PAGE_WELCOME -!insertmacro OPENSOURCE_INITIALIZE -!ifndef OPENSOURCE_BUILD -!insertmacro EVALUATION_INITIALIZE -!insertmacro LICENSECHECK_INITIALIZE -!insertmacro MSVC_INITIALIZE -!insertmacro ADDIN7X_INITIALIZE -!insertmacro ADDIN60_INITIALIZE -!insertmacro DEBUGEXT_INITIALIZE -!insertmacro HELP_INITIALIZE -!insertmacro VSIP_INITIALIZE -!endif - -!ifdef USE_COMPONENT_PAGE - !insertmacro MUI_PAGE_COMPONENTS -!endif - -!ifdef USE_DIRECTORY_PAGE - !insertmacro INSTDIR_INITIALIZE -!endif - -!ifdef USE_STARTMENU_PAGE - !define MUI_STARTMENUPAGE_NODISABLE - !define MUI_STARTMENUPAGE_DEFAULTFOLDER "${DEFAULT_STARTMENU_STRING}" - !insertmacro MUI_PAGE_STARTMENU 1 $STARTMENU_STRING -!endif - -!insertmacro MINGW_INITIALIZE -!insertmacro ENVIRONMENT_INITIALIZE -!insertmacro REGISTERUIEXT_INITIALIZE -!ifndef OPENSOURCE_BUILD -!insertmacro QSA_INITIALIZE -!insertmacro ECLIPSE_INITIALIZE -!insertmacro QTJAMBIECLIPSE_INITIALIZE -!endif - -!define MUI_FINISHPAGE_NOAUTOCLOSE - -!insertmacro MUI_PAGE_INSTFILES -!ifdef README_FILE - !define MUI_FINISHPAGE_SHOWREADME ${README_FILE} -!else - !ifdef README_FUNCTION - !define MUI_FINISHPAGE_SHOWREADME - !define MUI_FINISHPAGE_SHOWREADME_TEXT "${README_FUNCTION}" - !define MUI_FINISHPAGE_SHOWREADME_FUNCTION "CommonReadmeFunction" - !endif -!endif -!ifdef RUN_FUNCTION - !define MUI_FINISHPAGE_RUN - !define MUI_FINISHPAGE_RUN_TEXT "${RUN_FUNCTION}" - !define MUI_FINISHPAGE_RUN_FUNCTION "CommonRunFunction" -!endif -!insertmacro MUI_PAGE_FINISH - -!insertmacro MUI_UNPAGE_WELCOME -!define UNINSTALLER_CONFIRM_PAGE "confirmpage.ini" -UninstPage custom un.UninstallerConfirmPage -!insertmacro MUI_UNPAGE_INSTFILES - -!insertmacro MUI_UNPAGE_FINISH - -!insertmacro MUI_LANGUAGE "English" - -Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" -OutFile ${OUTPUT_FILE} - -Section -PreCommonSection -!ifdef INSTDIR_0 ;the default one, must exist - strcpy $INSTDIR $${INSTDIR_0}_INSTDIR - ${StrRep} $PRODUCT_UNIQUE_KEY "${PRODUCT_NAME} ${PRODUCT_VERSION} - $INSTDIR" "\" "_" - strcpy $PRODUCT_UNIQUE_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\$PRODUCT_UNIQUE_KEY" - WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_0}_INSTDIR" "$${INSTDIR_0}_INSTDIR" -!endif -!ifdef INSTDIR_1 - WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_1}_INSTDIR" "$${INSTDIR_1}_INSTDIR" -!endif -!ifdef INSTDIR_2 - WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_2}_INSTDIR" "$${INSTDIR_2}_INSTDIR" -!endif -!ifdef INSTDIR_3 - WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_3}_INSTDIR" "$${INSTDIR_3}_INSTDIR" -!endif -!ifdef INSTDIR_4 - WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_4}_INSTDIR" "$${INSTDIR_4}_INSTDIR" -!endif -!ifdef INSTDIR_5 - WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_5}_INSTDIR" "$${INSTDIR_5}_INSTDIR" -!endif - - WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "StartMenu" "$STARTMENU_STRING" - CreateDirectory "$SMPROGRAMS\$STARTMENU_STRING" -SectionEnd - -!insertmacro OPENSOURCE_SECTIONS -!insertmacro MINGW_SECTIONS -!insertmacro ENVIRONMENT_SECTIONS -!insertmacro REGISTERUIEXT_SECTIONS -!ifndef OPENSOURCE_BUILD -!insertmacro MSVC_SECTIONS -!insertmacro ADDIN7X_SECTIONS -!insertmacro ADDIN60_SECTIONS -!insertmacro VSIP_SECTIONS -!insertmacro HELP_SECTIONS -!insertmacro DEBUGEXT_SECTIONS -!insertmacro LICENSECHECK_SECTIONS -!insertmacro QSA_SECTIONS -!insertmacro EVALUATION_SECTIONS -!insertmacro ECLIPSE_SECTIONS -!insertmacro QTJAMBIECLIPSE_SECTIONS -!endif - -!insertmacro INSTDIR_FUNCTIONS - -Section -CommonSection - WriteUninstaller "$INSTDIR\uninst.exe" - - WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "DisplayName" "$(^Name)" - WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "UninstallString" "$INSTDIR\uninst.exe" - WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "DisplayVersion" "${PRODUCT_VERSION}" - WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "URLInfoAbout" "${PRODUCT_WEB_SITE}" - WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "Publisher" "${PRODUCT_PUBLISHER}" - - WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" - CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\qt.nokia.com.lnk" "$INSTDIR\${PRODUCT_NAME}.url" - CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\Uninstall ${PRODUCT_NAME} ${PRODUCT_VERSION}.lnk" "$INSTDIR\uninst.exe" - SetOutPath "$INSTDIR" -SectionEnd - -Function CheckLocalLicenseProduct -!ifdef MODULE_LICENSECHECK - !insertmacro QSA_CHECKLICENSEPRODUCT -!endif -FunctionEnd - -Function .onInit - StrCpy $STARTMENU_STRING "${DEFAULT_STARTMENU_STRING}" - -!ifdef USE_UNINSTALL_PREVIOUS - push "${PRODUCT_NAME}" - call GetExistsPreviousInstallationOfProduct - exch $0 - StrCmp $0 true 0 +3 - MessageBox MB_OK|MB_ICONSTOP "A previous installation of ${PRODUCT_NAME} was detected.$\nPlease uninstall it before running this installer." - Abort - pop $0 -!endif - - call SetAdminVar - StrCmp "$RUNNING_AS_ADMIN" "false" 0 common_running_as_admin -!ifdef USE_ADMIN_CHECK - MessageBox MB_OK|MB_ICONSTOP "You need to have administrator rights to install this software!" - Abort -!endif - SetShellVarContext current - goto common_admin_check_done - common_running_as_admin: - SetShellVarContext all - common_admin_check_done: - - !insertmacro INSTDIR_STARTUP - - !insertmacro OPENSOURCE_STARTUP - !insertmacro ENVIRONMENT_STARTUP - !insertmacro REGISTERUIEXT_STARTUP - !insertmacro MINGW_STARTUP -!ifndef OPENSOURCE_BUILD - !insertmacro LICENSECHECK_STARTUP - !insertmacro MSVC_STARTUP - !insertmacro EVALUATION_STARTUP - !insertmacro ADDIN7X_STARTUP - !insertmacro ADDIN60_STARTUP - !insertmacro DEBUGEXT_STARTUP - !insertmacro VSIP_STARTUP - !insertmacro HELP_STARTUP - !insertmacro QSA_STARTUP - !insertmacro ECLIPSE_STARTUP - !insertmacro QTJAMBIECLIPSE_STARTUP -!endif -FunctionEnd - -Function .onInstSuccess - !insertmacro ENVIRONMENT_FINISH - !insertmacro REGISTERUIEXT_FINISH - !insertmacro OPENSOURCE_FINISH - !insertmacro MINGW_FINISH -!ifndef OPENSOURCE_BUILD - !insertmacro LICENSECHECK_FINISH - !insertmacro MSVC_FINISH - !insertmacro EVALUATION_FINISH - !insertmacro ADDIN7X_FINISH - !insertmacro ADDIN60_FINISH - !insertmacro DEBUGEXT_FINISH - !insertmacro VSIP_FINISH - !insertmacro HELP_FINISH - !insertmacro QSA_FINISH - !insertmacro ECLIPSE_FINISH - !insertmacro QTJAMBIECLIPSE_FINISH -!endif -FunctionEnd - -Function un.onUninstSuccess - !insertmacro ENVIRONMENT_UNFINISH - !insertmacro REGISTERUIEXT_UNFINISH - !insertmacro OPENSOURCE_UNFINISH - !insertmacro MINGW_UNFINISH -!ifndef OPENSOURCE_BUILD - !insertmacro LICENSECHECK_UNFINISH - !insertmacro MSVC_UNFINISH - !insertmacro EVALUATION_UNFINISH - !insertmacro ADDIN7X_UNFINISH - !insertmacro ADDIN60_UNFINISH - !insertmacro DEBUGEXT_UNFINISH - !insertmacro VSIP_UNFINISH - !insertmacro HELP_UNFINISH - !insertmacro QSA_UNFINISH - !insertmacro ECLIPSE_UNFINISH - !insertmacro QTJAMBIECLIPSE_UNFINISH -!endif -FunctionEnd - -Function un.onInit - call un.SetAdminVar - StrCmp "$RUNNING_AS_ADMIN" "false" 0 common_running_as_admin -!ifdef USE_ADMIN_CHECK - MessageBox MB_OK|MB_ICONSTOP "You do not have the required access rights to uninstall this package." - Abort -!endif - SetShellVarContext current - goto common_admin_check_done - common_running_as_admin: - SetShellVarContext all - common_admin_check_done: - - ${UnStrRep} $PRODUCT_UNIQUE_KEY "${PRODUCT_NAME} ${PRODUCT_VERSION} - $INSTDIR" "\" "_" - strcpy $PRODUCT_UNIQUE_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\$PRODUCT_UNIQUE_KEY" - - push $0 - ClearErrors - ReadRegStr $0 SHCTX "$PRODUCT_UNIQUE_KEY" "DisplayName" - IfErrors 0 +3 - MessageBox MB_OK|MB_ICONSTOP "The uninstaller was unable to find the product to uninstall." - Abort - pop $0 - - ReadRegStr $STARTMENU_STRING SHCTX "$PRODUCT_UNIQUE_KEY" "StartMenu" - StrCmp "$STARTMENU_STRING" "" 0 +2 - StrCpy $STARTMENU_STRING "${DEFAULT_STARTMENU_STRING}" - -!ifdef INSTDIR_0 ;the default one, must exist - ReadRegStr $${INSTDIR_0}_INSTDIR SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_0}_INSTDIR" -!endif -!ifdef INSTDIR_1 - ReadRegStr $${INSTDIR_1}_INSTDIR SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_1}_INSTDIR" -!endif -!ifdef INSTDIR_2 - ReadRegStr $${INSTDIR_2}_INSTDIR SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_2}_INSTDIR" -!endif -!ifdef INSTDIR_3 - ReadRegStr $${INSTDIR_3}_INSTDIR SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_3}_INSTDIR" -!endif -!ifdef INSTDIR_4 - ReadRegStr $${INSTDIR_4}_INSTDIR SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_4}_INSTDIR" -!endif -!ifdef INSTDIR_5 - ReadRegStr $${INSTDIR_5}_INSTDIR SHCTX "$PRODUCT_UNIQUE_KEY" "${INSTDIR_5}_INSTDIR" -!endif - - !insertmacro ENVIRONMENT_UNSTARTUP - !insertmacro REGISTERUIEXT_UNSTARTUP - !insertmacro OPENSOURCE_UNSTARTUP - !insertmacro MINGW_UNSTARTUP -!ifndef OPENSOURCE_BUILD - !insertmacro LICENSECHECK_UNSTARTUP - !insertmacro MSVC_UNSTARTUP - !insertmacro EVALUATION_UNSTARTUP - !insertmacro ADDIN7X_UNSTARTUP - !insertmacro ADDIN60_UNSTARTUP - !insertmacro DEBUGEXT_UNSTARTUP - !insertmacro VSIP_UNSTARTUP - !insertmacro HELP_UNSTARTUP - !insertmacro QSA_UNSTARTUP - !insertmacro ECLIPSE_UNSTARTUP - !insertmacro QTJAMBIECLIPSE_UNSTARTUP -!endif - - !insertmacro MUI_INSTALLOPTIONS_EXTRACT "${UNINSTALLER_CONFIRM_PAGE}" -FunctionEnd - -!insertmacro OPENSOURCE_UNINSTALL -!insertmacro ENVIRONMENT_UNINSTALL -!insertmacro REGISTERUIEXT_UNINSTALL -!insertmacro MINGW_UNINSTALL -!ifndef OPENSOURCE_BUILD -!insertmacro HELP_UNINSTALL -!insertmacro DEBUGEXT_UNINSTALL -!insertmacro MSVC_UNINSTALL -!insertmacro EVALUATION_UNINSTALL -!insertmacro QSA_UNINSTALL -!insertmacro ECLIPSE_UNINSTALL -!insertmacro QTJAMBIECLIPSE_UNINSTALL -!endif - -Section Uninstall - !ifndef OPENSOURCE_BUILD - !insertmacro LICENSECHECK_UNINSTALL - !insertmacro ADDIN7X_UNINSTALL - !insertmacro ADDIN60_UNINSTALL - !insertmacro VSIP_UNINSTALL - !endif - - ; COMMON - Delete "$INSTDIR\${PRODUCT_NAME}.url" - Delete "$INSTDIR\uninst.exe" - Delete "$SMPROGRAMS\$STARTMENU_STRING\Uninstall ${PRODUCT_NAME} ${PRODUCT_VERSION}.lnk" - Delete "$SMPROGRAMS\$STARTMENU_STRING\qt.nokia.com.lnk" - - RMDir "$SMPROGRAMS\$STARTMENU_STRING" - RMDir "$INSTDIR" - - DeleteRegKey SHCTX "$PRODUCT_UNIQUE_KEY" -SectionEnd - -Function CommonRunFunction - !ifndef OPENSOURCE_BUILD - !insertmacro MSVC_RUN_FUNCTION - !insertmacro QSA_RUN_FUNCTION - !endif - !insertmacro MINGW_RUN_FUNCTION - DoneRunFunction: -FunctionEnd - -Function CommonReadmeFunction - !ifndef OPENSOURCE_BUILD - !insertmacro MSVC_README_FUNCTION - !endif - !insertmacro MINGW_README_FUNCTION - DoneReadmeFunction: -FunctionEnd - -Function un.UninstallerConfirmPage - !insertmacro MUI_HEADER_TEXT "Confirm" "Confirm Uninstallation Directories" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${UNINSTALLER_CONFIRM_PAGE}" "Field 2" "Text" "$UninstallerConfirmProduct" - !insertmacro MUI_INSTALLOPTIONS_DISPLAY "${UNINSTALLER_CONFIRM_PAGE}" -FunctionEnd - -;pops product name from stack and as result pushes TRUE or FALSE on stack -Function GetExistsPreviousInstallationOfProduct - exch $0 - push $1 - push $2 - push $3 - - StrCpy $1 0 - loop: - EnumRegKey $2 HKLM Software\Microsoft\Windows\CurrentVersion\Uninstall $1 - StrCmp $2 "" no_reg_key_found - ${StrStr} $3 $2 $0 - StrCmp $3 $2 reg_key_found - IntOp $1 $1 + 1 - goto loop - - reg_key_found: - push true - goto done - - no_reg_key_found: - push false - - done: - exch - pop $3 - exch - pop $2 - exch - pop $1 - exch - pop $0 -FunctionEnd - -;pops product name from stack -Function WarnIfInstalledProductDetected - exch $0 - push $0 - call GetExistsPreviousInstallationOfProduct - exch $1 - StrCmp $1 true +1 +3 - MessageBox MB_YESNO|MB_ICONQUESTION "An existing installation of $0 was detected.$\nIt is recommended to deinstall $0 before continuing.$\nDo you want to continue this installation nevertheless?" IDYES +2 IDNO +1 - Abort - pop $1 - pop $0 -FunctionEnd - -;sets $RUNNING_AS_ADMIN to "true" if Admin or Power user -!macro SetAdminVar UN -Function ${UN}SetAdminVar - push $0 - ClearErrors - UserInfo::GetAccountType - IfErrors Admin ;It's probably Win95 - pop $0 - StrCmp $0 "Admin" Admin - StrCmp $0 "Power" Admin - - StrCpy $RUNNING_AS_ADMIN "false" - goto Done - - Admin: - StrCpy $RUNNING_AS_ADMIN "true" - - Done: - pop $0 -FunctionEnd -!macroend -!insertmacro SetAdminVar "" -!insertmacro SetAdminVar "un." - -!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN - !insertmacro OPENSOURCE_DESCRIPTION - !insertmacro ENVIRONMENT_DESCRIPTION - !insertmacro REGISTERUIEXT_DESCRIPTION - !insertmacro MINGW_DESCRIPTION - !ifndef OPENSOURCE_BUILD - !insertmacro MSVC_DESCRIPTION - !insertmacro EVALUATION_DESCRIPTION - !insertmacro ADDIN7X_DESCRIPTION - !insertmacro ADDIN60_DESCRIPTION - !insertmacro DEBUGEXT_DESCRIPTION - !insertmacro HELP_DESCRIPTION - !insertmacro VSIP_DESCRIPTION - !insertmacro QSA_DESCRIPTION - !insertmacro ECLIPSE_DESCRIPTION - !insertmacro QTJAMBIECLIPSE_DESCRIPTION - !endif -!insertmacro MUI_FUNCTION_DESCRIPTION_END diff --git a/tools/installer/nsis/modules/environment.nsh b/tools/installer/nsis/modules/environment.nsh deleted file mode 100644 index fa610a7..0000000 --- a/tools/installer/nsis/modules/environment.nsh +++ /dev/null @@ -1,216 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -;; All rights reserved. -;; Contact: Nokia Corporation (qt-info@nokia.com) -;; -;; This file is part of the tools applications of the Qt Toolkit. -;; -;; $QT_BEGIN_LICENSE:LGPL$ -;; No Commercial Usage -;; This file contains pre-release code and may not be distributed. -;; You may use this file in accordance with the terms and conditions -;; contained in the Technology Preview License Agreement accompanying -;; this package. -;; -;; GNU Lesser General Public License Usage -;; Alternatively, this file may be used under the terms of the GNU Lesser -;; General Public License version 2.1 as published by the Free Software -;; Foundation and appearing in the file LICENSE.LGPL included in the -;; packaging of this file. Please review the following information to -;; ensure the GNU Lesser General Public License version 2.1 requirements -;; will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -;; -;; In addition, as a special exception, Nokia gives you certain additional -;; rights. These rights are described in the Nokia Qt LGPL Exception -;; version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -;; -;; If you have questions regarding the use of this file, please contact -;; Nokia at qt-info@nokia.com. -;; -;; -;; -;; -;; -;; -;; -;; -;; $QT_END_LICENSE$ -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -!ifdef MODULE_ENVIRONMENT -!macro ENVIRONMENT_INITIALIZE - !include "includes\writeEnvStr.nsh" - !include "includes\writePathStr.nsh" - - !ifndef MODULE_ENVIRONMENT_QTDIR - !ifdef MODULE_MINGW - !define MODULE_ENVIRONMENT_QTDIR $MINGW_INSTDIR - !endif - - !ifdef MODULE_MSVC - !define MODULE_ENVIRONMENT_QTDIR $MSVC_INSTDIR - !endif - !endif - - !define MODULE_ENVIRONMENT_PAGE "envpage.ini" - var MODULE_ENVIRONMENT_SET - var MODULE_ENVIRONMENT_OLD - LangString ModuleEnvironmentTitle ${LANG_ENGLISH} "Configure Environment" - LangString ModuleEnvironmentDescription ${LANG_ENGLISH} "Configure Qt environment variables" - - Page custom ModuleEnvironmentPageEnter ModuleEnvironmentPageExit -!macroend -!macro ENVIRONMENT_SECTIONS - Section -ModuleEnvironmentRegister - push "${MODULE_ENVIRONMENT_QTDIR}" - call RegisterQtEnvVariables - SectionEnd - - Function ModuleEnvironmentPageEnter - push $0 - Call IsNT - pop $0 - strcmp "$0" "1" +2 - abort - pop $0 - - !insertmacro MUI_HEADER_TEXT "$(ModuleEnvironmentTitle)" "$(ModuleEnvironmentDescription)" - - strcmp $MODULE_ENVIRONMENT_SET "1" 0 envCheckNo - !insertmacro MUI_INSTALLOPTIONS_WRITE "${MODULE_ENVIRONMENT_PAGE}" "Field 2" "State" "1" - goto showEnvPage - envCheckNo: - !insertmacro MUI_INSTALLOPTIONS_WRITE "${MODULE_ENVIRONMENT_PAGE}" "Field 2" "State" "0" - - showEnvPage: - !insertmacro MUI_INSTALLOPTIONS_DISPLAY "${MODULE_ENVIRONMENT_PAGE}" - FunctionEnd - - Function ModuleEnvironmentPageExit - !insertmacro MUI_INSTALLOPTIONS_READ $MODULE_ENVIRONMENT_SET "${MODULE_ENVIRONMENT_PAGE}" "Field 2" "State" - FunctionEnd - - Function RegisterQtEnvVariables - exch $2 ; the installation path = QTDIR - push $0 ; I think WriteEnvStr mixes up $0 and $1 - push $1 - - WriteRegDWORD SHCTX "$PRODUCT_UNIQUE_KEY" "QtEnvSet" $MODULE_ENVIRONMENT_SET - - strcmp $MODULE_ENVIRONMENT_SET "1" 0 noenv - - StrCmp $MODULE_ENVIRONMENT_OLD "0" +4 - DetailPrint "Removing $MODULE_ENVIRONMENT_OLD\bin from PATH" - push "$MODULE_ENVIRONMENT_OLD\bin" - Call RemoveFromPath ; remove old qtdir - - DetailPrint "Setting QTDIR to $2" - push "QTDIR" - push $2 - Call WriteEnvStr ; set the QTDIR - - DetailPrint "Adding $2\bin to PATH" - push "$2\bin" - Call AddToPath ; set the PATH - - - push "QMAKESPEC" - push ${INSTALL_COMPILER} - Call GetMkSpec - pop $0 - DetailPrint "Setting QMAKESPEC to $0" - push $0 - Call WriteEnvStr ; set the QMAKESPEC - - noenv: - pop $1 - pop $0 - pop $2 - FunctionEnd - - Function un.RegisterQtEnvVariables - exch $0 ; QTDIR - push $1 - - ClearErrors - ReadRegDWORD $MODULE_ENVIRONMENT_SET SHCTX "$PRODUCT_UNIQUE_KEY" "QtEnvSet" - intcmp $MODULE_ENVIRONMENT_SET 0 noenv - - DetailPrint "Removing $0\bin from the PATH" - push "$0\bin" - Call un.RemoveFromPath ; removes qt from the path - - ;Check if QTDIR is equal to installdir - ExpandEnvStrings $1 "%QTDIR%" - - StrCmp "$0" "$1" removeenv - StrCmp "$0\" "$1" removeenv - StrCmp "$0" "$1\" removeenv - Goto noenv - - removeenv: - DetailPrint "Removing QTDIR" - push "QTDIR" - Call un.DeleteEnvStr ; removes QTDIR - - DetailPrint "Removing QMAKESPEC" - push "QMAKESPEC" - Call un.DeleteEnvStr ; removes QMAKESPEC - - noenv: - pop $1 - pop $0 - FunctionEnd -!macroend -!macro ENVIRONMENT_DESCRIPTION -!macroend -!macro ENVIRONMENT_STARTUP - !insertmacro MUI_INSTALLOPTIONS_EXTRACT "${MODULE_ENVIRONMENT_PAGE}" - push $0 - ExpandEnvStrings $0 "%QTDIR%" - - StrCmp $0 "%QTDIR%" +4 - strcpy $MODULE_ENVIRONMENT_SET "0" ;QTDIR exists - strcpy $MODULE_ENVIRONMENT_OLD $0 - Goto +3 - strcpy $MODULE_ENVIRONMENT_SET "1" ;no QTDIR - strcpy $MODULE_ENVIRONMENT_OLD "0" - - Call IsNT - pop $0 - strcmp "$0" "1" +2 - strcpy $MODULE_ENVIRONMENT_SET "0" - pop $0 -!macroend -!macro ENVIRONMENT_FINISH -!macroend -!macro ENVIRONMENT_UNSTARTUP -!macroend -!macro ENVIRONMENT_UNINSTALL - Section -un.ModuleEnvironmentRegister - push "${MODULE_ENVIRONMENT_QTDIR}" - call un.RegisterQtEnvVariables - SectionEnd -!macroend -!macro ENVIRONMENT_UNFINISH -!macroend -!else ;MODULE_ENVIRONMENT -!macro ENVIRONMENT_INITIALIZE -!macroend -!macro ENVIRONMENT_SECTIONS -!macroend -!macro ENVIRONMENT_DESCRIPTION -!macroend -!macro ENVIRONMENT_STARTUP -!macroend -!macro ENVIRONMENT_FINISH -!macroend -!macro ENVIRONMENT_UNSTARTUP -!macroend -!macro ENVIRONMENT_UNINSTALL -!macroend -!macro ENVIRONMENT_UNFINISH -!macroend -!endif ;MODULE_ENVIRONMENT - diff --git a/tools/installer/nsis/modules/mingw.nsh b/tools/installer/nsis/modules/mingw.nsh deleted file mode 100644 index 8694790..0000000 --- a/tools/installer/nsis/modules/mingw.nsh +++ /dev/null @@ -1,670 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -;; All rights reserved. -;; Contact: Nokia Corporation (qt-info@nokia.com) -;; -;; This file is part of the tools applications of the Qt Toolkit. -;; -;; $QT_BEGIN_LICENSE:LGPL$ -;; No Commercial Usage -;; This file contains pre-release code and may not be distributed. -;; You may use this file in accordance with the terms and conditions -;; contained in the Technology Preview License Agreement accompanying -;; this package. -;; -;; GNU Lesser General Public License Usage -;; Alternatively, this file may be used under the terms of the GNU Lesser -;; General Public License version 2.1 as published by the Free Software -;; Foundation and appearing in the file LICENSE.LGPL included in the -;; packaging of this file. Please review the following information to -;; ensure the GNU Lesser General Public License version 2.1 requirements -;; will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -;; -;; In addition, as a special exception, Nokia gives you certain additional -;; rights. These rights are described in the Nokia Qt LGPL Exception -;; version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -;; -;; If you have questions regarding the use of this file, please contact -;; Nokia at qt-info@nokia.com. -;; -;; -;; -;; -;; -;; -;; -;; -;; $QT_END_LICENSE$ -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -!ifdef MODULE_MINGW -!macro MINGW_INITIALIZE -!include "includes\qtcommon.nsh" -!ifndef MODULE_MINGW_NAME - !define MODULE_MINGW_NAME "Qt" -!endif -!ifndef MODULE_MINGW_VERSION - !define MODULE_MINGW_VERSION "${PRODUCT_VERSION}" -!endif -!ifndef MODULE_MINGW_BUILDDIR - !error "MODULE_MINGW_BUILDDIR not defined!" -!endif -!ifndef MODULE_MINGW_ROOT - !error "MODULE_MINGW_ROOT not defined!" -!endif -!ifndef MODULE_MINGW_URL - !define MODULE_MINGW_URL "ftp://ftp.qt.nokia.com/misc" -!endif -!ifndef MODULE_MINGW_COMPILERVERSION - !define MODULE_MINGW_COMPILERVERSION "3.4.2" -!endif -!ifndef MODULE_MINGW_LICENSE - !define MODULE_MINGW_LICENSE "C:\MinGW\COPYING" -!endif - -!define MODULE_MINGW_DOWNLOADPAGE "gwdownload.ini" -!define MODULE_MINGW_MIRRORPAGE "gwmirror.ini" -!define MODULE_MINGW_RUNTIME_LIB "mingw*.dll" -!define MODULE_MINGW_DOWNLOADFILE "MinGW-${MODULE_MINGW_COMPILERVERSION}" - -var MODULE_MINGW_DOWNLOAD -var MODULE_MINGW_SOURCEDOWNLOAD -var MODULE_MINGW_MIRRORS -var MODULE_MINGW_INSTOK -var MODULE_MINGW_COMPILERINSTDIR - -LangString ModuleMinGWTitle ${LANG_ENGLISH} "MinGW Installation" -LangString ModuleMinGWDescription ${LANG_ENGLISH} "You need MinGW to be able to compile Qt applications." -LangString ModuleMinGWMirrorTitle ${LANG_ENGLISH} "MinGW Download Mirror" -LangString ModuleMinGWMirrorDescription ${LANG_ENGLISH} "Select a download mirror." - -Page custom ModuleMinGWDownloadPageEnter ModuleMinGWDownloadPageExit -!define MUI_PAGE_CUSTOMFUNCTION_PRE ModuleMinGWLicensePageEnter -!define MUI_PAGE_HEADER_TEXT "MinGW License Agreement" -!define MUI_PAGE_HEADER_SUBTEXT "Please review the license terms before installing MinGW." -!define MUI_LICENSEPAGE_TEXT_TOP "MinGW License Information" -!insertmacro MUI_PAGE_LICENSE "${MODULE_MINGW_LICENSE}" -Page custom ModuleMinGWMirrorPageEnter ModuleMinGWMirrorPageExit - -!include "includes\qtenv.nsh" -!macroend - -!macro MINGW_SECTIONS -Section "${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION}" MINGW_SEC01 - strcmp "$MINGW_INSTDIR" "" 0 +5 - StrCpy $MINGW_INSTDIR "$INSTDIR\${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION}" - push $MINGW_INSTDIR - call MakeQtDirectory - pop $MINGW_INSTDIR - - WriteRegDWORD SHCTX "$PRODUCT_UNIQUE_KEY" "MINGWInstalled" 1 - - SetOutPath "$MINGW_INSTDIR" - SetOverwrite ifnewer - !insertmacro MODULE_MINGW_INSTALLFILES - - push "$MINGW_INSTDIR\bin" - call AddStartmenuApplication - - push ${MODULE_MINGW_BUILDDIR} - push "$MINGW_INSTDIR" - call PatchPrlFiles - - IfFileExists "$MINGW_INSTDIR\.qmake.cache" 0 +5 - push "$MINGW_INSTDIR\.qmake.cache" - push ${MODULE_MINGW_BUILDDIR} - push $MINGW_INSTDIR - call PatchPath - - IfFileExists "$MINGW_INSTDIR\mkspecs\default\qmake.conf" 0 +5 - push "$MINGW_INSTDIR\mkspecs\default\qmake.conf" - push ${MODULE_MINGW_BUILDDIR} - push $MINGW_INSTDIR - call PatchPath - - push $MINGW_INSTDIR - call PatchCommonBinaryFiles - - push $MINGW_INSTDIR - call PatchLicenseInformation - - WriteRegStr SHCTX "SOFTWARE\Trolltech\Common\${MODULE_MINGW_VERSION}\$LICENSE_PRODUCT" "Key" "$LICENSE_KEY" - - push $MINGW_INSTDIR - call ModuleMinGWMakeEnvFile - CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION} Command Prompt.lnk" "%COMSPEC%" '/k "$MINGW_INSTDIR\bin\qtvars.bat"' - CreateShortCut "$SMPROGRAMS\$STARTMENU_STRING\${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION} (Build Debug Libraries).lnk" "%COMSPEC%" '/k "$MINGW_INSTDIR\bin\qtvars.bat compile_debug"' - - push $0 - strcmp $MODULE_MINGW_DOWNLOAD "no" DoneMinGWInstall - DetailPrint "Installing MinGW into $MODULE_MINGW_COMPILERINSTDIR" - WriteRegStr SHCTX "$PRODUCT_UNIQUE_KEY" "MinGWInstDir" "$MODULE_MINGW_COMPILERINSTDIR" - nsExec::ExecToLog '"$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.exe" /S /D=$MODULE_MINGW_COMPILERINSTDIR' - pop $0 - strcmp $MODULE_MINGW_SOURCEDOWNLOAD "no" DoneMinGWInstall - DetailPrint "Installing MinGW sources into $MODULE_MINGW_COMPILERINSTDIR\src" - WriteRegDWORD SHCTX "$PRODUCT_UNIQUE_KEY" "MinGWSources" 1 - nsExec::ExecToLog '"$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}-src.exe" /S /D=$MODULE_MINGW_COMPILERINSTDIR\src' - pop $0 - DoneMinGWInstall: - pop $0 - - DetailPrint "Copying MinGW runtime..." - SetDetailsPrint none - CopyFiles /SILENT "$MODULE_MINGW_COMPILERINSTDIR\bin\${MODULE_MINGW_RUNTIME_LIB}" "$MINGW_INSTDIR\bin" - SetDetailsPrint both -SectionEnd - -Function EnableButtons - Push $0 - GetDlgItem $0 $HWNDPARENT 3 - EnableWindow $0 1 - GetDlgItem $0 $HWNDPARENT 1 - EnableWindow $0 1 - GetDlgItem $0 $HWNDPARENT 2 - EnableWindow $0 1 - Pop $0 -FunctionEnd - -Function DisableButtons - Push $0 - GetDlgItem $0 $HWNDPARENT 3 - EnableWindow $0 0 - GetDlgItem $0 $HWNDPARENT 1 - EnableWindow $0 0 - GetDlgItem $0 $HWNDPARENT 2 - EnableWindow $0 0 - Pop $0 -FunctionEnd - -Function ModuleMinGWDownloadPageEnter - strcmp $MODULE_MINGW_INSTOK "yes" 0 +2 - Abort - - !insertmacro MUI_HEADER_TEXT "$(ModuleMinGWTitle)" "$(ModuleMinGWTitleDescription)" - Call UpdateCtrlStates - !insertmacro MUI_INSTALLOPTIONS_DISPLAY "${MODULE_MINGW_DOWNLOADPAGE}" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${MODULE_MINGW_DOWNLOADPAGE}" "Field 8" "State" "0" -FunctionEnd - -Function ModuleMinGWMirrorPageEnter - strcmp $MODULE_MINGW_DOWNLOAD "yes" +2 - Abort - - !insertmacro MUI_HEADER_TEXT "$(ModuleMinGWMirrorTitle)" "$(ModuleMinGWMirrorDescription)" - !insertmacro MUI_INSTALLOPTIONS_DISPLAY "${MODULE_MINGW_MIRRORPAGE}" -FunctionEnd - -Function ModuleMinGWLicensePageEnter - strcmp $MODULE_MINGW_DOWNLOAD "yes" +2 - Abort -FunctionEnd - -Function UpdateCtrlStates - push $0 - push $1 - push $2 - - !insertmacro MUI_INSTALLOPTIONS_READ $0 "${MODULE_MINGW_DOWNLOADPAGE}" "Field 8" "State" - intop $0 $0 ! - FindWindow $2 "#32770" "" $HWNDPARENT - GetDlgItem $1 $2 1205 - EnableWindow $1 $0 - GetDlgItem $1 $2 1202 - EnableWindow $1 $0 - GetDlgItem $1 $2 1203 - EnableWindow $1 $0 - - intop $0 $0 ! - GetDlgItem $1 $2 1206 - EnableWindow $1 $0 - GetDlgItem $1 $2 1207 - EnableWindow $1 $0 - GetDlgItem $1 $2 1208 - EnableWindow $1 $0 - - GetDlgItem $1 $HWNDPARENT 1 - IntCmp $0 0 +3 - SendMessage $1 ${WM_SETTEXT} 0 "STR:Next >" - Goto +2 - SendMessage $1 ${WM_SETTEXT} 0 "STR:Install" - - pop $2 - pop $1 - pop $0 -FunctionEnd - -Function ModuleMinGWDownloadPageExit - push $0 - push $1 - - !insertmacro MUI_INSTALLOPTIONS_READ $0 "${MODULE_MINGW_DOWNLOADPAGE}" "Settings" "State" - strcmp "$0" "8" 0 NoNotify - Call UpdateCtrlStates - abort - NoNotify: - - !insertmacro MUI_INSTALLOPTIONS_READ $0 "${MODULE_MINGW_DOWNLOADPAGE}" "Field 8" "State" - strcmp "$0" "0" noDownload doDownload - -doDownload: - !insertmacro MUI_INSTALLOPTIONS_READ $0 "${MODULE_MINGW_DOWNLOADPAGE}" "Field 6" "State" - strcmp $0 "" 0 +3 - MessageBox MB_ICONEXCLAMATION|MB_OK "You need to specify an installation directory!" - goto tryAgain - - strcpy $MODULE_MINGW_COMPILERINSTDIR $0 - strcpy $MODULE_MINGW_DOWNLOAD "yes" - CreateDirectory "$MINGW_INSTDIR\downloads" - - Call DisableButtons - InetLoad::load /BANNER "Mirror Download" "Downloading mirrors from server..." "${MODULE_MINGW_URL}/${MODULE_MINGW_DOWNLOADFILE}.mirrors" "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.mirrors" /END - Pop $1 ;Get the return value - Call EnableButtons - - StrCmp $1 "OK" +3 - MessageBox MB_ICONEXCLAMATION|MB_RETRYCANCEL "Was not able to download mirror list ($1)." IDRETRY tryAgain 0 - Quit - - call ModuleMinGWReadMirrors - !insertmacro MUI_INSTALLOPTIONS_WRITE ${MODULE_MINGW_MIRRORPAGE} "Field 3" "ListItems" "$MODULE_MINGW_MIRRORS" - goto done - -noDownload: - strcpy $MODULE_MINGW_DOWNLOAD "no" - strcpy $MODULE_MINGW_SOURCEDOWNLOAD "no" - call ModuleMinGWChecking - strcmp $MODULE_MINGW_INSTOK "yes" done - MessageBox MB_ICONEXCLAMATION|MB_YESNO "There is a problem with your MinGW installation:$\r$\n$MODULE_MINGW_INSTOK$\r$\nDo you still want to continue? (Your installation may not work)" IDNO tryAgain - goto done - -tryAgain: - pop $1 - pop $0 - Abort - -done: - pop $1 - pop $0 -FunctionEnd - -Function ModuleMinGWMirrorPageExit - push $0 - push $2 - push $1 - - !insertmacro MUI_INSTALLOPTIONS_READ $0 "${MODULE_MINGW_MIRRORPAGE}" "Field 3" "State" - strcmp "$0" "" 0 +3 - MessageBox MB_ICONEXCLAMATION|MB_OK "You must select a mirror to download from!" - goto tryAgain - - push $0 - call ModuleMinGWGetMirror - pop $0 - - Call DisableButtons - InetLoad::load /BANNER "MinGW Download" "Downloading MinGW from server..." "$0/${MODULE_MINGW_DOWNLOADFILE}.exe" "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.exe" /END - Pop $2 ;get the return value - Call EnableButtons - - StrCmp $2 "OK" +3 - MessageBox MB_ICONEXCLAMATION|MB_OK "Was not able to download MinGW ($2). Please try another mirror." - Goto tryAgain - - !insertmacro MUI_INSTALLOPTIONS_READ $1 "${MODULE_MINGW_MIRRORPAGE}" "Field 2" "State" - strcmp "$1" "0" done - - Call DisableButtons - InetLoad::load /BANNER "MinGW Sources Download" "Downloading MinGW Sources from server..." "$0/${MODULE_MINGW_DOWNLOADFILE}-src.exe" "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}-src.exe" /END - Pop $2 - Call EnableButtons - - strcpy $MODULE_MINGW_SOURCEDOWNLOAD "yes" - - StrCmp $2 "OK" +3 - MessageBox MB_ICONEXCLAMATION|MB_RETRYCANCEL "Was not able to download MinGW sources ($2). Please try another mirror?" IDRETRY tryAgain 0 - Quit - - goto done - -tryAgain: - pop $1 - pop $2 - pop $0 - Abort - -done: - pop $1 - pop $2 - pop $0 -FunctionEnd - -Function ModuleMinGWReadMirrors - push $0 ;file handle - push $1 ;line - - ClearErrors - FileOpen $0 "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.mirrors" r - IfErrors done - - strcpy $MODULE_MINGW_MIRRORS "" - -nextline: - FileRead $0 $1 - IfErrors done - push $1 - call ModuleMinGWRemoveNewLine - pop $1 - strcpy $MODULE_MINGW_MIRRORS "$MODULE_MINGW_MIRRORS|$1" - FileRead $0 $1 ;Jump over next line - IfErrors done - goto nextline - -done: - FileClose $0 - strlen $1 $MODULE_MINGW_MIRRORS - intcmp $1 0 failed failed cleanup - -failed: - MessageBox MB_ICONSTOP|MB_OK "Unable to parse mirror list, exiting!" - Quit - -cleanup: - pop $1 - pop $0 -FunctionEnd - -#this just removes the last two chars -Function ModuleMinGWRemoveNewLine -exch $0 -push $1 -push $2 - -strlen $1 $0 -intop $1 $1 - 1 -strcpy $2 $0 1 $1 ;get last char - -strcmp "$2" "$\n" 0 +2 -intop $1 $1 - 1 - -strcpy $2 $0 1 $1 ;get last char -strcmp "$2" "$\r" 0 +2 -intop $1 $1 - 1 - -intop $1 $1 + 1 -strcpy $0 $0 $1 - -pop $2 -pop $1 -exch $0 -FunctionEnd - -#push serverid -#call GetMirror -#pop server -Function ModuleMinGWGetMirror - exch $1 ;id - push $0 ;file handle - push $2 ;line - push $3 ;tmp - - strcpy $3 "" - - ClearErrors - FileOpen $0 "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.mirrors" r - IfErrors done - -nextline: - FileRead $0 $2 - IfErrors done - push $2 - call ModuleMinGWRemoveNewLine - pop $2 - strcmp $1 $2 0 nextline - FileRead $0 $3 - IfErrors done - push $3 - call ModuleMinGWRemoveNewLine - pop $3 - -done: - strcpy $1 $3 - FileClose $0 - strlen $2 $1 - intcmp $2 0 failed failed cleanup - -failed: - MessageBox MB_ICONSTOP|MB_OK "Unable to parse mirror list, exiting!" - Quit - -cleanup: - pop $3 - pop $2 - pop $0 - exch $1 -FunctionEnd - -Function ModuleMinGWChecking - push $0 - - ### update with plugin - strcpy $MODULE_MINGW_INSTOK "yes" - strcpy $MODULE_MINGW_COMPILERINSTDIR "C:\MinGW" ;fallback dir - - !insertmacro MUI_INSTALLOPTIONS_READ $0 "${MODULE_MINGW_DOWNLOADPAGE}" "Field 3" "State" - strcmp "$0" "" +2 - strcpy $MODULE_MINGW_COMPILERINSTDIR $0 - - IfFileExists "$MODULE_MINGW_COMPILERINSTDIR\bin\g++.exe" +3 0 - strcpy $MODULE_MINGW_INSTOK "g++ not found in $MODULE_MINGW_COMPILERINSTDIR\bin\" - goto DoneChecking - -!ifndef OPENSOURCE_BUILD - ; check w32api.h - push $MODULE_MINGW_COMPILERINSTDIR - qtnsisext::HasValidWin32Library - pop $0 - strcmp "$0" "1" +3 0 - strcpy $MODULE_MINGW_INSTOK "The installer could not find a valid $MODULE_MINGW_COMPILERINSTDIR\include\w32api.h$\r$\n(The supported version is 3.2)" - goto DoneChecking - - ; check version - push $MODULE_MINGW_COMPILERINSTDIR - qtnsisext::GetMinGWVersion - pop $0 - strcmp "$0" "${MODULE_MINGW_COMPILERVERSION}" +3 0 - strcpy $MODULE_MINGW_INSTOK "g++ version found does not match ${MODULE_MINGW_COMPILERVERSION} (Found version $0)." - goto DoneChecking -!endif - -DoneChecking: - pop $0 -FunctionEnd - -# -# creates a qtvars.bat file in $QTDIR\bin -# push "c:\qt" #QTDIR -# call MakeQtVarsFile -# -Function ModuleMinGWMakeEnvFile - push $0 ; file handle - - ClearErrors - FileOpen $0 "$MINGW_INSTDIR\bin\qtvars.bat" w - IfErrors WriteMakeFile - FileWrite $0 "@echo off$\r$\n" - FileWrite $0 "rem$\r$\n" - FileWrite $0 "rem This file is generated$\r$\n" - FileWrite $0 "rem$\r$\n" - FileWrite $0 "$\r$\n" - FileWrite $0 "echo Setting up a MinGW/Qt only environment...$\r$\n" - FileWrite $0 "echo -- QTDIR set to $MINGW_INSTDIR$\r$\n" - FileWrite $0 "echo -- PATH set to $MINGW_INSTDIR\bin$\r$\n" - FileWrite $0 "echo -- Adding $MODULE_MINGW_COMPILERINSTDIR\bin to PATH$\r$\n" - FileWrite $0 "echo -- Adding %SystemRoot%\System32 to PATH$\r$\n" - FileWrite $0 "echo -- QMAKESPEC set to win32-g++$\r$\n" - FileWrite $0 "$\r$\n" - FileWrite $0 "set QTDIR=$MINGW_INSTDIR$\r$\n" - FileWrite $0 "set PATH=$MINGW_INSTDIR\bin$\r$\n" - FileWrite $0 "set PATH=%PATH%;$MODULE_MINGW_COMPILERINSTDIR\bin$\r$\n" - FileWrite $0 "set PATH=%PATH%;%SystemRoot%\System32$\r$\n" - FileWrite $0 "set QMAKESPEC=win32-g++$\r$\n" - FileWrite $0 "$\r$\n" - - FileWrite $0 'if not "%1"=="compile_debug" goto END$\r$\n' - FileWrite $0 "cd %QTDIR%$\r$\n" - FileWrite $0 "echo This will configure and compile qt in debug.$\r$\n" - FileWrite $0 "echo The release libraries will not be recompiled.$\r$\n" - FileWrite $0 "pause$\r$\n" - FileWrite $0 "configure -plugin-sql-sqlite -plugin-sql-odbc -qt-libpng -qt-libjpeg$\r$\n" - FileWrite $0 "cd %QTDIR%\src$\r$\n" - FileWrite $0 "qmake$\r$\n" - FileWrite $0 "mingw32-make debug$\r$\n" - FileWrite $0 ":END$\r$\n" - FileClose $0 - -WriteMakeFile: - ClearErrors - FileOpen $0 "$MINGW_INSTDIR\bin\make.bat" w - IfErrors done - FileWrite $0 "@echo off$\r$\n" - FileWrite $0 "mingw32-make %*$\r$\n" - FileClose $0 - -done: -; pop $1 - pop $0 -FunctionEnd - -Function MINGW_ValidateDirectoryFunc - push "${MODULE_MINGW_BUILDDIR}" - push $MINGW_INSTDIR - call CommonCheckDirectory -FunctionEnd -!macroend - -!macro MINGW_DESCRIPTION - !insertmacro MUI_DESCRIPTION_TEXT ${MINGW_SEC01} "This installs ${MODULE_MINGW_NAME} version ${MODULE_MINGW_VERSION} on your system." -!macroend - -!macro MINGW_STARTUP - !ifndef MODULE_MINGW_NODEFAULT - SectionSetFlags ${MINGW_SEC01} 17 - !endif - strcpy $MINGW_INSTDIR "C:\Qt\${MODULE_MINGW_VERSION}" - push $MINGW_INSTDIR - call MakeQtDirectory - pop $MINGW_INSTDIR - - !insertmacro MUI_INSTALLOPTIONS_EXTRACT "${MODULE_MINGW_DOWNLOADPAGE}" - !insertmacro MUI_INSTALLOPTIONS_EXTRACT "${MODULE_MINGW_MIRRORPAGE}" - - !insertmacro MUI_INSTALLOPTIONS_WRITE "${MODULE_MINGW_DOWNLOADPAGE}" "Field 3" "State" "C:\MinGW" - !insertmacro MUI_INSTALLOPTIONS_WRITE "${MODULE_MINGW_DOWNLOADPAGE}" "Field 6" "State" "C:\MinGW" - - strcpy $MODULE_MINGW_DOWNLOAD "no" - strcpy $MODULE_MINGW_SOURCEDOWNLOAD "no" -!macroend - -!macro MINGW_FINISH -!macroend - -!macro MINGW_RUN_FUNCTION - ReadRegDWORD $0 SHCTX "$PRODUCT_UNIQUE_KEY" "MINGWInstalled" - intcmp $0 1 0 DoneRunFunctionMINGW - - IfFileExists "$MINGW_INSTDIR\bin\qtdemo.exe" 0 +2 - Exec '$MINGW_INSTDIR\bin\qtdemo.exe' - goto DoneRunFunction ;don't run more applications - - DoneRunFunctionMINGW: -!macroend - -!macro MINGW_README_FUNCTION - ReadRegDWORD $0 SHCTX "$PRODUCT_UNIQUE_KEY" "MINGWInstalled" - intcmp $0 1 0 DoneReadmeFunctionMINGW - - IfFileExists "$MINGW_INSTDIR\bin\assistant.exe" 0 +2 - Exec '$MINGW_INSTDIR\bin\assistant.exe' - goto DoneReadmeFunction ;don't run more applications - - DoneReadmeFunctionMINGW: -!macroend - -!macro MINGW_UNSTARTUP - strcmp "$MINGW_INSTDIR" "" 0 +5 - StrCpy $MINGW_INSTDIR "$INSTDIR\${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION}" - push $MINGW_INSTDIR - call un.MakeQtDirectory - pop $MINGW_INSTDIR - - !insertmacro ConfirmOnRemove "MINGWInstalled" "- ${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION} in $MINGW_INSTDIR" -!macroend - -!macro MINGW_UNINSTALL -Section un.ModuleMinGW - push $0 - push $1 - - ReadRegDWORD $0 SHCTX "$PRODUCT_UNIQUE_KEY" "MINGWInstalled" - intcmp $0 1 0 DoneUnInstallMINGW - - Delete "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.mirrors" - - ReadRegDWORD $0 SHCTX "$PRODUCT_UNIQUE_KEY" "MinGWSources" - strcmp $0 "" MinGWSourcesUninstallDone ;not installed - Delete "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}-src.exe" - nsExec::ExecToLog '"$0\src\uninst.exe"' - pop $1 - MinGWSourcesUninstallDone: - - ReadRegStr $0 SHCTX "$PRODUCT_UNIQUE_KEY" "MinGWInstDir" - strcmp $0 "" MinGWUninstallDone ;not installed - Delete "$MINGW_INSTDIR\downloads\${MODULE_MINGW_DOWNLOADFILE}.exe" - nsExec::ExecToLog '"$0\uninst.exe"' - pop $1 - MinGWUninstallDone: - - DetailPrint "Removing start menu shortcuts" - call un.RemoveStartmenuApplication - Delete "$SMPROGRAMS\$STARTMENU_STRING\${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION} Command Prompt.lnk" - Delete "$SMPROGRAMS\$STARTMENU_STRING\${MODULE_MINGW_NAME} ${MODULE_MINGW_VERSION} (Build Debug Libraries).lnk" - - Delete "$MINGW_INSTDIR\bin\${MODULE_MINGW_RUNTIME_LIB}" - Delete "$MINGW_INSTDIR\bin\make.bat" - Delete "$MINGW_INSTDIR\bin\qtvars.bat" - - !insertmacro MODULE_MINGW_REMOVE "$MINGW_INSTDIR" - RMDir $MINGW_INSTDIR ;removes it if empty - - DoneUnInstallMINGW: - pop $1 - pop $0 -SectionEnd -!macroend -!macro MINGW_UNFINISH -!macroend -!else ;MODULE_MINGW -!macro MINGW_INITIALIZE -!macroend -!macro MINGW_SECTIONS -!macroend -!macro MINGW_DESCRIPTION -!macroend -!macro MINGW_STARTUP -!macroend -!macro MINGW_FINISH -!macroend -!macro MINGW_RUN_FUNCTION -!macroend -!macro MINGW_README_FUNCTION -!macroend -!macro MINGW_UNSTARTUP -!macroend -!macro MINGW_UNINSTALL -!macroend -!macro MINGW_UNFINISH -!macroend -!endif ;MODULE_MINGW - diff --git a/tools/installer/nsis/modules/opensource.nsh b/tools/installer/nsis/modules/opensource.nsh deleted file mode 100644 index fbd6ef7..0000000 --- a/tools/installer/nsis/modules/opensource.nsh +++ /dev/null @@ -1,94 +0,0 @@ -;; -;; Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -;; All rights reserved. -;; Contact: Nokia Corporation (qt-info@nokia.com) -;; -;; This file is part of the tools applications of the Qt Toolkit. -;; -;; $QT_BEGIN_LICENSE:LGPL$ -;; No Commercial Usage -;; This file contains pre-release code and may not be distributed. -;; You may use this file in accordance with the terms and conditions -;; contained in the Technology Preview License Agreement accompanying -;; this package. -;; -;; GNU Lesser General Public License Usage -;; Alternatively, this file may be used under the terms of the GNU Lesser -;; General Public License version 2.1 as published by the Free Software -;; Foundation and appearing in the file LICENSE.LGPL included in the -;; packaging of this file. Please review the following information to -;; ensure the GNU Lesser General Public License version 2.1 requirements -;; will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -;; -;; In addition, as a special exception, Nokia gives you certain additional -;; rights. These rights are described in the Nokia Qt LGPL Exception -;; version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -;; -;; If you have questions regarding the use of this file, please contact -;; Nokia at qt-info@nokia.com. -;; -;; -;; -;; -;; -;; -;; -;; -;; $QT_END_LICENSE$ -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -!ifdef MODULE_OPENSOURCE -!macro OPENSOURCE_INITIALIZE - !define MODULE_OPENSOURCE_PAGE "opensource.ini" - page custom ModuleOpenSourceShowPage -!macroend -!macro OPENSOURCE_SECTIONS - Section -ModuleOpenSourceSection - !ifdef MODULE_OPENSOURCE_ROOT - SetOutPath "$INSTDIR" - File "${MODULE_OPENSOURCE_ROOT}\OPENSOURCE-NOTICE.TXT" - !endif - SectionEnd - - Function ModuleOpenSourceShowPage - !insertmacro MUI_HEADER_TEXT "Open Source Edition" " " - !insertmacro MUI_INSTALLOPTIONS_DISPLAY "${MODULE_OPENSOURCE_PAGE}" - strcpy "$LICENSEE" "Open Source" - strcpy "$LICENSE_PRODUCT" "OpenSource" - FunctionEnd -!macroend -!macro OPENSOURCE_DESCRIPTION -!macroend -!macro OPENSOURCE_STARTUP - !insertmacro MUI_INSTALLOPTIONS_EXTRACT "${MODULE_OPENSOURCE_PAGE}" -!macroend -!macro OPENSOURCE_FINISH -!macroend -!macro OPENSOURCE_UNSTARTUP -!macroend -!macro OPENSOURCE_UNINSTALL - Section -un.ModuleOpenSourceSection - Delete "$SMPROGRAMS\$STARTMENU_STRING\OpenSource Notice.lnk" - SectionEnd -!macroend -!macro OPENSOURCE_UNFINISH -!macroend -!else ;MODULE_OPENSOURCE -!macro OPENSOURCE_INITIALIZE -!macroend -!macro OPENSOURCE_SECTIONS -!macroend -!macro OPENSOURCE_DESCRIPTION -!macroend -!macro OPENSOURCE_STARTUP -!macroend -!macro OPENSOURCE_FINISH -!macroend -!macro OPENSOURCE_UNSTARTUP -!macroend -!macro OPENSOURCE_UNINSTALL -!macroend -!macro OPENSOURCE_UNFINISH -!macroend -!endif ;MODULE_OPENSOURCE - diff --git a/tools/installer/nsis/modules/registeruiext.nsh b/tools/installer/nsis/modules/registeruiext.nsh deleted file mode 100644 index f895bde..0000000 --- a/tools/installer/nsis/modules/registeruiext.nsh +++ /dev/null @@ -1,207 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -;; All rights reserved. -;; Contact: Nokia Corporation (qt-info@nokia.com) -;; -;; This file is part of the tools applications of the Qt Toolkit. -;; -;; $QT_BEGIN_LICENSE:LGPL$ -;; No Commercial Usage -;; This file contains pre-release code and may not be distributed. -;; You may use this file in accordance with the terms and conditions -;; contained in the Technology Preview License Agreement accompanying -;; this package. -;; -;; GNU Lesser General Public License Usage -;; Alternatively, this file may be used under the terms of the GNU Lesser -;; General Public License version 2.1 as published by the Free Software -;; Foundation and appearing in the file LICENSE.LGPL included in the -;; packaging of this file. Please review the following information to -;; ensure the GNU Lesser General Public License version 2.1 requirements -;; will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -;; -;; In addition, as a special exception, Nokia gives you certain additional -;; rights. These rights are described in the Nokia Qt LGPL Exception -;; version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -;; -;; If you have questions regarding the use of this file, please contact -;; Nokia at qt-info@nokia.com. -;; -;; -;; -;; -;; -;; -;; -;; -;; $QT_END_LICENSE$ -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; UI Extension Module - -!ifdef MODULE_REGISTERUIEXT - -;------------------------------------------------------------------------------------------------ -!macro REGISTERUIEXT_INITIALIZE - !include "includes\system.nsh" - - !ifndef MODULE_REGISTERUIEXT_QTDIR - !ifdef MODULE_MINGW - !define MODULE_REGISTERUIEXT_QTDIR $MINGW_INSTDIR - !endif - - !ifdef MODULE_MSVC - !define MODULE_REGISTERUIEXT_QTDIR $MSVC_INSTDIR - !endif - !endif - - !define MODULE_REGISTERUIEXT_INTERNAL_DESC "Trolltech.DesignerForm" - !define MODULE_REGISTERUIEXT_DESC_DESIGNER "Open with Qt Designer" - !define MODULE_REGISTERUIEXT_DESC_DEVENV "Open with Visual Studio .NET" - !define MODULE_REGISTERUIEXT_FILE_DESC "Qt Designer File" -!macroend - -;------------------------------------------------------------------------------------------------ - -!macro REGISTERUIEXT_SECTIONS - -Function GetSelectedVSIP - Push $0 - Push $1 - - StrCpy $0 "" -!ifdef MODULE_VSIP -!ifdef VSIP_SEC01 - SectionGetFlags ${VSIP_SEC01} $1 - IntOp $1 $1 & 1 - IntCmp $1 0 +2 - StrCpy $0 "7.1" -!endif -!ifdef VSIP_SEC02 - SectionGetFlags ${VSIP_SEC02} $1 - IntOp $1 $1 & 1 - IntCmp $1 0 +2 - StrCpy $0 "8.0" -!endif -!endif - - Pop $1 - Exch $0 -FunctionEnd - -SectionGroup "File Associations" -Section "UI Files (*.ui)" REGISTERUIEXT_SEC01 - call ModuleRegisterUI -SectionEnd -SectionGroupEnd - -Function ModuleRegisterUI - push $0 - push $1 - - WriteRegDWORD SHCTX "$PRODUCT_UNIQUE_KEY" "UIExtRegistered" 1 - WriteRegStr HKCR "${MODULE_REGISTERUIEXT_INTERNAL_DESC}" "" "${MODULE_REGISTERUIEXT_FILE_DESC}" - WriteRegStr HKCR "${MODULE_REGISTERUIEXT_INTERNAL_DESC}\shell" "" "open" - - Call GetSelectedVSIP - Pop $1 - - StrCmp "$1" "" 0 RegisterVSIP - WriteRegStr HKCR "${MODULE_REGISTERUIEXT_INTERNAL_DESC}\shell\open" "" "${MODULE_REGISTERUIEXT_DESC_DESIGNER}" - WriteRegStr HKCR "${MODULE_REGISTERUIEXT_INTERNAL_DESC}\shell\open\command" "" "${MODULE_REGISTERUIEXT_QTDIR}\bin\designer.exe $\"%1$\"" - WriteRegStr HKCR "${MODULE_REGISTERUIEXT_INTERNAL_DESC}\DefaultIcon" "" "${MODULE_REGISTERUIEXT_QTDIR}\bin\designer.exe,0" - goto RegisterFinished - - RegisterVSIP: - Push $1 - Call GetVSInstallationDir - Pop $0 - - WriteRegStr HKCR "${MODULE_REGISTERUIEXT_INTERNAL_DESC}\shell\open" "" "${MODULE_REGISTERUIEXT_DESC_DEVENV}" - WriteRegStr HKCR "${MODULE_REGISTERUIEXT_INTERNAL_DESC}\shell\${MODULE_REGISTERUIEXT_DESC_DEVENV}\command" "" "$0\devenv.exe $\"%1$\"" - WriteRegStr HKCR "${MODULE_REGISTERUIEXT_INTERNAL_DESC}\DefaultIcon" "" "$VSIP_INSTDIR\ui.ico" - RegisterFinished: - WriteRegStr HKCR ".ui" "" "${MODULE_REGISTERUIEXT_INTERNAL_DESC}" - - pop $1 - pop $0 -FunctionEnd - -!macroend - -;------------------------------------------------------------------------------------------------ - -!macro REGISTERUIEXT_DESCRIPTION - !insertmacro MUI_DESCRIPTION_TEXT ${REGISTERUIEXT_SEC01} "This will associate the file extention .ui with the Qt GUI editor." -!macroend - -;------------------------------------------------------------------------------------------------ - -!macro REGISTERUIEXT_STARTUP - StrCmp $RUNNING_AS_ADMIN "true" +2 - SectionSetFlags ${REGISTERUIEXT_SEC01} 16 -!macroend - -;------------------------------------------------------------------------------------------------ - -!macro REGISTERUIEXT_FINISH -!macroend - -;------------------------------------------------------------------------------------------------ - -!macro REGISTERUIEXT_UNSTARTUP -!macroend - -;------------------------------------------------------------------------------------------------ - -!macro REGISTERUIEXT_UNINSTALL -Function un.ModuleRegisterUI - push $1 - ReadRegStr $1 HKCR ".ui" "" - strcmp $1 "${MODULE_REGISTERUIEXT_INTERNAL_DESC}" 0 continue - ; do not delete this key since a subkey openwithlist - ; or open withprogid may exist - WriteRegStr HKCR ".ui" "" "" - continue: - ; just delete it since nobody else is supposed to use it - DeleteRegKey HKCR "${MODULE_REGISTERUIEXT_INTERNAL_DESC}" - - pop $1 -FunctionEnd - -Section -un.ModuleRegisterUIExtSection - push $0 - ReadRegDWORD $0 SHCTX "$PRODUCT_UNIQUE_KEY" "UIExtRegistered" - intcmp $0 1 0 DoneUnRegister - call un.ModuleRegisterUI - DoneUnRegister: - pop $0 -SectionEnd -!macroend - -;------------------------------------------------------------------------------------------------ - -!macro REGISTERUIEXT_UNFINISH -!macroend - -;------------------------------------------------------------------------------------------------ - -!else -!macro REGISTERUIEXT_INITIALIZE -!macroend -!macro REGISTERUIEXT_SECTIONS -!macroend -!macro REGISTERUIEXT_DESCRIPTION -!macroend -!macro REGISTERUIEXT_STARTUP -!macroend -!macro REGISTERUIEXT_FINISH -!macroend -!macro REGISTERUIEXT_UNSTARTUP -!macroend -!macro REGISTERUIEXT_UNINSTALL -!macroend -!macro REGISTERUIEXT_UNFINISH -!macroend -!endif diff --git a/tools/installer/nsis/opensource.ini b/tools/installer/nsis/opensource.ini deleted file mode 100644 index 4ce40bf..0000000 --- a/tools/installer/nsis/opensource.ini +++ /dev/null @@ -1,78 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; -;; Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -;; All rights reserved. -;; Contact: Nokia Corporation (qt-info@nokia.com) -;; -;; This file is part of the tools applications of the Qt Toolkit. -;; -;; $QT_BEGIN_LICENSE:LGPL$ -;; No Commercial Usage -;; This file contains pre-release code and may not be distributed. -;; You may use this file in accordance with the terms and conditions -;; contained in the Technology Preview License Agreement accompanying -;; this package. -;; -;; GNU Lesser General Public License Usage -;; Alternatively, this file may be used under the terms of the GNU Lesser -;; General Public License version 2.1 as published by the Free Software -;; Foundation and appearing in the file LICENSE.LGPL included in the -;; packaging of this file. Please review the following information to -;; ensure the GNU Lesser General Public License version 2.1 requirements -;; will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -;; -;; In addition, as a special exception, Nokia gives you certain additional -;; rights. These rights are described in the Nokia Qt LGPL Exception -;; version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -;; -;; If you have questions regarding the use of this file, please contact -;; Nokia at qt-info@nokia.com. -;; -;; -;; -;; -;; -;; -;; -;; -;; $QT_END_LICENSE$ -;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Ini file generated by the HM NIS Edit IO designer. -[Settings] -NumFields=4 - -[Field 1] -Type=Label -Text=You are now installing the Open Source Edition of Qt. It is licensed under GNU LGPL version 2.1 and the GPL version 3. -Left=0 -Right=300 -Top=0 -Bottom=78 - -[Field 2] -Type=Link -Text=http://qt.nokia.com/downloads -State=http://qt.nokia.com/downloads -Left=0 -Right=278 -Top=80 -Bottom=88 - -[Field 3] -Type=Link -Text=http://qt.nokia.com/about -State=http://qt.nokia.com/about -Left=0 -Right=267 -Top=112 -Bottom=120 - -[Field 4] -Type=Label -Text=To read more about Nokia's licensing, please go to: -Left=0 -Right=278 -Top=97 -Bottom=105 - |