diff options
859 files changed, 27004 insertions, 10291 deletions
@@ -204,6 +204,7 @@ plugin_commonU.def *.qtplugin *.sis *.sisx +*.lst # Generated by abldfast.bat from devtools. .abldsteps.* diff --git a/config.tests/x11/xsync/xsync.cpp b/config.tests/x11/xsync/xsync.cpp index ed3ecf5..8eea850 100644 --- a/config.tests/x11/xsync/xsync.cpp +++ b/config.tests/x11/xsync/xsync.cpp @@ -41,7 +41,9 @@ #include <X11/Xlib.h> #include <X11/Xutil.h> +extern "C" { #include <X11/extensions/sync.h> +} int main(int, char **) { @@ -7577,6 +7577,9 @@ FNR == 1 { if ( \$3 == "moc" || \$3 ~ /^Qt/ ) { target_file = first matched_target = 1 + } else if ( \$3 == "lrelease" || \$3 == "qm_phony_target" ) { + target_file = second + matched_target = 1 } } @@ -7661,6 +7664,7 @@ for part in $CFG_BUILD_PARTS; do case "$part" in tools) PART_ROOTS="$PART_ROOTS tools" ;; libs) PART_ROOTS="$PART_ROOTS src" ;; + translations) PART_ROOTS="$PART_ROOTS tools/linguist/lrelease translations" ;; examples) PART_ROOTS="$PART_ROOTS examples demos" ;; *) ;; esac @@ -7688,7 +7692,7 @@ for file in .projects .projects.3; do *s60main/s60main.pro) continue ;; *examples/activeqt/*) continue ;; */qmake/qmake.pro) continue ;; - *tools/bootstrap*|*tools/moc*|*tools/rcc*|*tools/uic*) SPEC=$QMAKESPEC ;; + *tools/bootstrap*|*tools/moc*|*tools/rcc*|*tools/uic*|*linguist/lrelease*) SPEC=$QMAKESPEC ;; *) SPEC=$XQMAKESPEC ;; esac dir=`dirname "$a" | sed -e "s;$sepath;.;g"` diff --git a/configure.exe b/configure.exe Binary files differindex 7fe4a93..77c7863 100755 --- a/configure.exe +++ b/configure.exe diff --git a/demos/browser/browsermainwindow.cpp b/demos/browser/browsermainwindow.cpp index fba3ac5..8e3986b 100644 --- a/demos/browser/browsermainwindow.cpp +++ b/demos/browser/browsermainwindow.cpp @@ -552,47 +552,6 @@ void BrowserMainWindow::slotViewStatusbar() m_autoSaver->changeOccurred(); } -QUrl BrowserMainWindow::guessUrlFromString(const QString &string) -{ - QString urlStr = string.trimmed(); - QRegExp test(QLatin1String("^[a-zA-Z]+\\:.*")); - - // Check if it looks like a qualified URL. Try parsing it and see. - bool hasSchema = test.exactMatch(urlStr); - if (hasSchema) { - QUrl url = QUrl::fromEncoded(urlStr.toUtf8(), QUrl::TolerantMode); - if (url.isValid()) - return url; - } - - // Might be a file. - if (QFile::exists(urlStr)) { - QFileInfo info(urlStr); - return QUrl::fromLocalFile(info.absoluteFilePath()); - } - - // Might be a shorturl - try to detect the schema. - if (!hasSchema) { - int dotIndex = urlStr.indexOf(QLatin1Char('.')); - if (dotIndex != -1) { - QString prefix = urlStr.left(dotIndex).toLower(); - QByteArray schema = (prefix == QLatin1String("ftp")) ? prefix.toLatin1() : QByteArray("http"); - QUrl url = - QUrl::fromEncoded(schema + "://" + urlStr.toUtf8(), QUrl::TolerantMode); - if (url.isValid()) - return url; - } - } - - // Fall back to QUrl's own tolerant parser. - QUrl url = QUrl::fromEncoded(string.toUtf8(), QUrl::TolerantMode); - - // finally for cases where the user just types in a hostname add http - if (url.scheme().isEmpty()) - url = QUrl::fromEncoded("http://" + string.toUtf8(), QUrl::TolerantMode); - return url; -} - void BrowserMainWindow::loadUrl(const QUrl &url) { if (!currentTab() || !url.isValid()) @@ -873,7 +832,7 @@ void BrowserMainWindow::slotSwapFocus() void BrowserMainWindow::loadPage(const QString &page) { - QUrl url = guessUrlFromString(page); + QUrl url = QUrl::fromUserInput(page); loadUrl(url); } diff --git a/demos/browser/browsermainwindow.h b/demos/browser/browsermainwindow.h index f5c14ea..f0f95b1 100644 --- a/demos/browser/browsermainwindow.h +++ b/demos/browser/browsermainwindow.h @@ -68,7 +68,6 @@ public: QSize sizeHint() const; public: - static QUrl guessUrlFromString(const QString &url); TabWidget *tabWidget() const; WebView *currentTab() const; QByteArray saveState(bool withTabs = true) const; diff --git a/demos/declarative/webbrowser/webbrowser.qml b/demos/declarative/webbrowser/webbrowser.qml index 0f6ed25..345c9af 100644 --- a/demos/declarative/webbrowser/webbrowser.qml +++ b/demos/declarative/webbrowser/webbrowser.qml @@ -196,6 +196,8 @@ Item { fillColor: "white" focus: true + onAlert: print(message) + function doZoom(zoom,centerX,centerY) { if (centerX) { diff --git a/demos/demos.pro b/demos/demos.pro index 5e400ea..a943bfd 100644 --- a/demos/demos.pro +++ b/demos/demos.pro @@ -37,7 +37,7 @@ wince*: SUBDIRS += demos_sqlbrowser } } contains(QT_CONFIG, phonon):!static:SUBDIRS += demos_mediaplayer -contains(QT_CONFIG, webkit):contains(QT_CONFIG, svg):SUBDIRS += demos_browser +contains(QT_CONFIG, webkit):contains(QT_CONFIG, svg):!symbian:SUBDIRS += demos_browser # install sources.files = README *.pro diff --git a/demos/qmediaplayer/mediaplayer.cpp b/demos/qmediaplayer/mediaplayer.cpp index 624bab7..267a225 100644 --- a/demos/qmediaplayer/mediaplayer.cpp +++ b/demos/qmediaplayer/mediaplayer.cpp @@ -355,13 +355,13 @@ void MediaPlayer::stateChanged(Phonon::State newstate, Phonon::State oldstate) switch (newstate) { case Phonon::ErrorState: - QMessageBox::warning(this, "Phonon Mediaplayer", m_MediaObject.errorString(), QMessageBox::Close); if (m_MediaObject.errorType() == Phonon::FatalError) { playButton->setEnabled(false); rewindButton->setEnabled(false); } else { m_MediaObject.pause(); } + QMessageBox::warning(this, "Phonon Mediaplayer", m_MediaObject.errorString(), QMessageBox::Close); break; case Phonon::PausedState: case Phonon::StoppedState: @@ -471,6 +471,8 @@ void MediaPlayer::effectChanged() void MediaPlayer::showSettingsDialog() { + playPauseForDialog(); + if (!settingsDialog) initSettingsDialog(); @@ -516,6 +518,8 @@ void MediaPlayer::showSettingsDialog() m_videoWidget->setScaleMode(oldScale); ui->audioEffectsCombo->setCurrentIndex(currentEffect); } + + playPauseForDialog(); } void MediaPlayer::initVideoWindow() @@ -652,10 +656,25 @@ void MediaPlayer::setFile(const QString &fileName) m_MediaObject.play(); } +void MediaPlayer::playPauseForDialog() +{ + // If we're running on a small screen, we want to pause the video + // when popping up dialogs. + if (m_hasSmallScreen && + (Phonon::PlayingState == m_MediaObject.state() || + Phonon::PausedState == m_MediaObject.state())) + playPause(); +} + void MediaPlayer::openFile() { + playPauseForDialog(); + QStringList fileNames = QFileDialog::getOpenFileNames(this, QString(), QDesktopServices::storageLocation(QDesktopServices::MusicLocation)); + + playPauseForDialog(); + m_MediaObject.clearQueue(); if (fileNames.size() > 0) { QString fileName = fileNames[0]; diff --git a/demos/qmediaplayer/mediaplayer.h b/demos/qmediaplayer/mediaplayer.h index 08db0e5..a1c3d92 100644 --- a/demos/qmediaplayer/mediaplayer.h +++ b/demos/qmediaplayer/mediaplayer.h @@ -111,6 +111,8 @@ private slots: void hasVideoChanged(bool); private: + void playPauseForDialog(); + QIcon playIcon; QIcon pauseIcon; QMenu *fileMenu; diff --git a/demos/qtdemo/itemcircleanimation.cpp b/demos/qtdemo/itemcircleanimation.cpp index 8c94eb7..74c3e6a 100644 --- a/demos/qtdemo/itemcircleanimation.cpp +++ b/demos/qtdemo/itemcircleanimation.cpp @@ -302,6 +302,7 @@ void ItemCircleAnimation::setupGuides() int y = 20; this->qtGuide1 = new GuideCircle(QRectF(x, y, 260, 260), -36, 342); + this->currGuide = 0; new GuideLine(QPointF(x + 240, y + 268), this->qtGuide1); new GuideLine(QPointF(x + 265, y + 246), this->qtGuide1); new GuideLine(QPointF(x + 158, y + 134), this->qtGuide1); diff --git a/demos/sub-attaq/animationmanager.cpp b/demos/sub-attaq/animationmanager.cpp index eb5a125..b3fc8e1 100644 --- a/demos/sub-attaq/animationmanager.cpp +++ b/demos/sub-attaq/animationmanager.cpp @@ -62,11 +62,18 @@ AnimationManager *AnimationManager::self() void AnimationManager::registerAnimation(QAbstractAnimation *anim) { + QObject::connect(anim, SIGNAL(destroyed(QObject*)), this, SLOT(unregisterAnimation_helper(QObject*))); animations.append(anim); } +void AnimationManager::unregisterAnimation_helper(QObject *obj) +{ + unregisterAnimation(static_cast<QAbstractAnimation*>(obj)); +} + void AnimationManager::unregisterAnimation(QAbstractAnimation *anim) { + QObject::disconnect(anim, SIGNAL(destroyed(QObject*)), this, SLOT(unregisterAnimation_helper(QObject*))); animations.removeAll(anim); } diff --git a/demos/sub-attaq/animationmanager.h b/demos/sub-attaq/animationmanager.h index 8db13eb..48d84d1 100644 --- a/demos/sub-attaq/animationmanager.h +++ b/demos/sub-attaq/animationmanager.h @@ -62,6 +62,9 @@ public slots: void pauseAll(); void resumeAll(); +private slots: + void unregisterAnimation_helper(QObject *obj); + private: static AnimationManager *instance; QList<QAbstractAnimation *> animations; diff --git a/demos/sub-attaq/boat.cpp b/demos/sub-attaq/boat.cpp index 0ad31b1..6fed9a9 100644 --- a/demos/sub-attaq/boat.cpp +++ b/demos/sub-attaq/boat.cpp @@ -62,7 +62,7 @@ static QAbstractAnimation *setupDestroyAnimation(Boat *boat) for (int i = 1; i <= 4; i++) { PixmapItem *step = new PixmapItem(QString("explosion/boat/step%1").arg(i),GraphicsScene::Big, boat); step->setZValue(6); - step->setOpacity(0); + step->setOpacity(0); //fade-in QPropertyAnimation *anim = new QPropertyAnimation(step, "opacity"); @@ -92,10 +92,10 @@ Boat::Boat() : PixmapItem(QString("boat"), GraphicsScene::Big), //The movement animation used to animate the boat movementAnimation = new QPropertyAnimation(this, "pos"); - //The movement animation used to animate the boat + //The destroy animation used to explode the boat destroyAnimation = setupDestroyAnimation(this); - //We setup the state machien of the boat + //We setup the state machine of the boat machine = new QStateMachine(this); QState *moving = new QState(machine); StopState *stopState = new StopState(this, moving); diff --git a/demos/sub-attaq/graphicsscene.cpp b/demos/sub-attaq/graphicsscene.cpp index e29095e..71d4fe7 100644 --- a/demos/sub-attaq/graphicsscene.cpp +++ b/demos/sub-attaq/graphicsscene.cpp @@ -278,4 +278,5 @@ void GraphicsScene::clearScene() boat->stop(); boat->hide(); + boat->setEnabled(true); } diff --git a/demos/textedit/example.html b/demos/textedit/example.html index 19b5520..6327b5f 100644 --- a/demos/textedit/example.html +++ b/demos/textedit/example.html @@ -26,7 +26,7 @@ p, li { white-space: pre-wrap; } <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"></p> <p style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><span style=" font-size:16pt; font-weight:600;">Images</span></p> <p style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:16pt; font-weight:600;"><span style=" font-size:11pt; font-weight:400;">Inline images are treated like ordinary ranges of characters in the text editor, so they flow with the surrounding text. Images can also be selected in the same way as text, making it easy to cut, copy, and paste them. </span></p> -<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><img src=":/images/logo32.png" /><span style=" font-style:italic;"> Try to select this image by clicking and dragging over it with the mouse, or use the text cursor to select it by holding down Shift and using the arrow keys. You can then cut or copy it, and pasting it into different parts of this document.</span></p> +<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><img src=":/images/logo32.png" /><span style=" font-style:italic;"> Try to select this image by clicking and dragging over it with the mouse, or use the text cursor to select it by holding down Shift and using the arrow keys. You can then cut or copy it, and paste it into different parts of this document.</span></p> <p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><span style=" font-size:16pt; font-weight:600;">Tables</span></p> <p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:16pt; font-weight:600;"><span style=" font-size:11pt; font-weight:400;">QTextEdit can arrange and format tables, supporting features such as row and column spans, text formatting within cells, and size constraints for columns. </span></p> <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"></p> diff --git a/dist/README b/dist/README index 1c52eb3..529d2bd 100644 --- a/dist/README +++ b/dist/README @@ -11,16 +11,20 @@ http://qt.nokia.com/doc/latest/porting4.html. INSTALLING Qt +If you have a source package (a .tar.gz, or .zip file), follow the +instructions in the INSTALL file. + On Windows and Mac OS X, if you want to install the precompiled binary packages, simply launch the package and follow the instructions in the installation wizard. -On Mac OS X, the binary package requires Mac OS X 10.4.x (Tiger) or +For Mac OS X Carbon, the binary package requires Mac OS X 10.4 (Tiger) or later and GCC 4.0.1 to develop applications. Its applications will run -on Mac OS X 10.3.9 and above. +on Mac OS X 10.4 and above. -If you have a source package (a .tar.gz, or .zip file), follow the -instructions in the INSTALL file. +For Mac OS X Cocoa, the binary package requires Mac OS X 10.5 (Leopard) or +later and GCC 4.0.1 to develop applications. Its applications will run +on Mac OS X 10.5 and above. DEMOS AND EXAMPLES diff --git a/dist/changes-4.6.0 b/dist/changes-4.6.0 index 69a0821..3a130ca 100644 --- a/dist/changes-4.6.0 +++ b/dist/changes-4.6.0 @@ -11,26 +11,28 @@ Some of the changes listed in this file include issue tracking numbers corresponding to tasks in the Qt Bug Tracker, the (now obsolete) Task Tracker, or the Merge Request queue of the public source repository. -Each of these identifiers can be entered in the tracker to obtain more -information about a particular change. Issue numbers for the various -trackers have the following formats: - -QTBUG-1234 - Qt Bug Tracker: http://bugreports.qt.nokia.com -MR#1234 - Merge Request: http://qt.gitorious.org -123456 - Task Tracker: http://qt.nokia.com/developer/task-tracker +Qt Bug Tracker: http://bugreports.qt.nokia.com +Task Tracker: http://qt.nokia.com/developer/task-tracker +Merge Request: http://qt.gitorious.org **************************************************************************** * General * **************************************************************************** - - QtDBus - * The minimum required version of the D-Bus reference library is - now 0.93. - * Support for reading and writing of custom property types added. - * Support for getting return arguments in remote method invocation - via QMetaMethod::invokeMethod. +New features +------------ - - [MR#1742] Added new multimedia keys to the Qt::Key enum. + - QState, QStateMachine + * New classes for state machine framework added to QtCore. + + - QAbstractAnimation + * New animation framework added to QtCore + + - QTouchEvent + * New class for handling multitouch events added to QtGui + + - QGesture, QGestureRecognizer + * New gesture framework added to QtGui - QMatrix4x4, QGenericMatrix, QVector2D, QVector3D, QVector4D, QQuaternion * New classes to support 3D applications. @@ -41,7 +43,14 @@ MR#1234 - Merge Request: http://qt.gitorious.org - QGraphicsEffect * New classes for applying graphics effects to graphics items and widgets. - - Boxes demo ported to use new 3D math and shader program classes. + - QWebElement + * New class for DOM access added to QtWebKit + + - QAudioInput, QAudioOutput + * New audio input and output classes. + + - QAbstractVideoSurface, QVideoFrame + * New abstract video output classes. - OpenVG graphics system added. @@ -49,27 +58,29 @@ MR#1234 - Merge Request: http://qt.gitorious.org - Improved support for input methods in graphics view. - - QAudioInput, QAudioOutput - * New audio input and output classes. + - [MR#1742] Added new multimedia keys to the Qt::Key enum. - - QAbstractVideoSurface, QVideoFrame - * New abstract video output classes. + - Boxes demo ported to use new 3D math and shader program classes. - - New state machine framework added to QtCore. - - - QContiguousCache - * New class for efficiently caching items within a scrolling view. + - QtTest now supports outputting XUnit XML documents, for integrating + with existing continuous integration systems. This is enabled by + running the test program with the -xunitxml option. -Third party components ----------------------- + - QtDBus + * The minimum required version of the D-Bus reference library is + now 0.93. + * Support for reading and writing of custom property types added. + * Support for getting return arguments in remote method invocation + via QMetaMethod::invokeMethod. - - Updated FreeType to version 2.3.9. - - Updated harfbuzz to the latest version from fd.org. +Optimizations +------------- - - Updated sqlite to version 3.6.19. + - Optimized rendering strategy in QGraphicsView + * See list of Important Behavior Changes below - - Updated libpng to version 1.2.40 + - Improved delivery of posted events on Windows **************************************************************************** @@ -77,6 +88,7 @@ Third party components **************************************************************************** QtCore +------ - QByteArray * New overloads for QByteArray::insert() and QByteArray::prepend(). @@ -173,6 +185,7 @@ QtCore * [256468] Fixed comment indentation. QtGui +----- - Qt::escape * Now escape the double quote ("). @@ -438,6 +451,7 @@ QtGui with Qt::WA_NoSystemBackground and window opacity set. QtDBus +------ - QDBusConnection * Made sending of invalid/incomplete messages consistently fail with error @@ -450,6 +464,7 @@ QtDBus deleted or to change owners. QtNetwork +--------- - QAbstractSocket * Only disconnect from host when all bytes have been written. @@ -486,6 +501,7 @@ QtNetwork cases the connection stalled when a buffer limit was used. QtOpenGL +-------- - QGLColormap * setEntry() was inserting entries instead of replacing them. @@ -534,6 +550,7 @@ QtOpenGL - Added lots of OpenGL autotests. QtScript +-------- - Many optimizations. - Improved ECMA script compliance. @@ -541,6 +558,7 @@ QtScript to a QtScript array index. QtSql +----- - [QTBUG-3162] Views for Sql table models should not reset state on failed queries. @@ -574,6 +592,7 @@ QtSql - Add proper iODBC linking support. QtSvg +----- - QSvgHandler * [245602] [204686] Fixed gradient and solid-color referencing. @@ -585,6 +604,7 @@ QtSvg * [257052] Changed drawImage() to ignore aspect ratio. QtWebKit +-------- - Many bug fixes. @@ -611,33 +631,49 @@ QtWebKit * New functions for defining local URL schemes. - QWebSettings - * New options for text encoding, printing shrink factor and off-line web - application cache (HTML5). + * New options for text encoding and off-line web application cache (HTML5). - QWebView * Support for render hints. QtXml +----- - QDomDocument * Set the codec to UTF-8 if codec not present or unknown. QtXmlPatterns +------------- - QXmlQuery * [245219] Added QXmlQuery::setFocus(const QString &focus). Qt Plugins +---------- - Tiff plugin * [258526] Rotate the image if the tiff file contains an orientation tag. * [254317] Add support for mono and indexed format +Third party components +---------------------- + + - Updated FreeType to version 2.3.9. + + - Updated harfbuzz to the latest version from fd.org. + + - Updated sqlite to version 3.6.19. + + - Updated libpng to version 1.2.40 + **************************************************************************** * Platform Specific Changes * **************************************************************************** + - Added support for the Symbian platform with integration for the S60 + framework. + - Added community supported Qt ports for QNX and VxWorks. See platform notes in the Qt documentation for details. @@ -820,6 +856,19 @@ Qt for Embedded Linux - Compilation fixes for OpenGL/ES 1.0 and OpenGL/ES 1.1 Common Lite. + - Phonon on Windows + * Now much more reliable when reading a file through a QIODevice. + * If Video Mixing Renderer 9 is not available, falls back to software + rendering. + * Fixed a flicker issue when switching source with a transition time of 0 + + - [QTBUG-3620] Fixed bug on X11 that caused bitmap fonts to become so small + it was unreadable when printed or presented in a print preview widget. + + - [QTBUG-4445] Fixed bug on Windows that caused problems when printing + text where several characters were represented by a single glyph, e.g. + a double 't' with the Calibri font. + - EGL and OpenGL/ES * Protect the use of version-specific EGL symbols with #ifdef's. * Make sure an EGL context is current when resolving GL extensions. @@ -861,6 +910,60 @@ Qt for Embedded Linux - Add powerpc mkspec and remove "empty" ppc mkspec . +DirectFB +-------- + + - When running Qt/DirectFB the DirectFB window id of a top level QWidget can + be queried using property("_q_DirectFBWindowID") + + - Allow setting the background color of the primary layer in DirectFB with + connect options. QWS_DISPLAY=directfb:bgcolor=red or + QWS_DISPLAY=directfb:bgcolor=\#aabbccdd + + - Add support for rendering mouse cursor using a top level window when cursor + support is not working in IDirectFBDisplayLayer. Define + QT_DIRECTFB_WINDOW_AS_CURSOR to enable. + + - Add experimental support for optimized locking/unlocking of surfaces. Enable + by defining QT_DIRECTFB_SUBSURFACE. + + - Fix a bug to conceptually allow using QDirectFBScreen as a subscreen of a + proxy screen. Don't make QDirectFBScreen::instance() assume that + QScreen::instance() is a QDirectFBScreen. + + - Optimize move/resize operations with DirectFB. With a properly configured + DirectFB these operations are handled for us and we don't need to force a + repaint of the window. + + - Support top level window opacity in DirectFB + + - Fix a bug when loading RGB32 images that would lead to rendering issues. + + - Fix a bug when painting with invalid pens/brushes. + + - Fix a bug that would show up when QWidget::scroll is called. + + - Implement support for loading pixmaps using IDirectFBImageProvider. + + - Disable color table support by default. This seems to work incorrectly on + most boards and loading these images will generally require an image + conversion anyway. + + - Fix a crash when resizing windows. + + - Compile with versions < 1.0. We still recommend using newer versions. + + - Considerable code cleanup + + - Various optimizations regarding painting, loading of images and creation of + surfaces. + + - Allow forcibly falling back to raster engine for painting operations by + exporting QT_DIRECTFB_FORCE_RASTER=1 + + - Reenable support for RGB32 primary surface. + + Qt for Windows CE ----------------- @@ -930,61 +1033,6 @@ Qt for Windows CE **************************************************************************** -* DirectFB * -**************************************************************************** - - - When running Qt/DirectFB the DirectFB window id of a top level QWidget can - be queried using property("_q_DirectFBWindowID") - - - Allow setting the background color of the primary layer in DirectFB with - connect options. QWS_DISPLAY=directfb:bgcolor=red or - QWS_DISPLAY=directfb:bgcolor=\#aabbccdd - - - Add support for rendering mouse cursor using a top level window when cursor - support is not working in IDirectFBDisplayLayer. Define - QT_DIRECTFB_WINDOW_AS_CURSOR to enable. - - - Add experimental support for optimized locking/unlocking of surfaces. Enable - by defining QT_DIRECTFB_SUBSURFACE. - - - Fix a bug to conceptually allow using QDirectFBScreen as a subscreen of a - proxy screen. Don't make QDirectFBScreen::instance() assume that - QScreen::instance() is a QDirectFBScreen. - - - Optimize move/resize operations with DirectFB. With a properly configured - DirectFB these operations are handled for us and we don't need to force a - repaint of the window. - - - Support top level window opacity in DirectFB - - - Fix a bug when loading RGB32 images that would lead to rendering issues. - - - Fix a bug when painting with invalid pens/brushes. - - - Fix a bug that would show up when QWidget::scroll is called. - - - Implement support for loading pixmaps using IDirectFBImageProvider. - - - Disable color table support by default. This seems to work incorrectly on - most boards and loading these images will generally require an image - conversion anyway. - - - Fix a crash when resizing windows. - - - Compile with versions < 1.0. We still recommend using newer versions. - - - Considerable code cleanup - - - Various optimizations regarding painting, loading of images and creation of - surfaces. - - - Allow forcibly falling back to raster engine for painting operations by - exporting QT_DIRECTFB_FORCE_RASTER=1 - - - Reenable support for RGB32 primary surface. - - -**************************************************************************** * Important Behavior Changes * **************************************************************************** diff --git a/doc/src/declarative/scope.qdoc b/doc/src/declarative/scope.qdoc index 14efa59..fc678d1 100644 --- a/doc/src/declarative/scope.qdoc +++ b/doc/src/declarative/scope.qdoc @@ -215,7 +215,7 @@ Item { // Scope object for Script block 1 \endcode One notable characteristic of the scope object is its interaction with \l {Attached Properties}. -As attached properties exist on all object, an attached property reference that is not +As attached properties exist on all objects, an attached property reference that is not explicitly prefixed by an id will \e always resolve to the attached property on the scope object. diff --git a/doc/src/diagrams/webkit-domtraversal.png b/doc/src/diagrams/webkit-domtraversal.png Binary files differnew file mode 100644 index 0000000..5cd6d1f --- /dev/null +++ b/doc/src/diagrams/webkit-domtraversal.png diff --git a/doc/src/diagrams/webkit-simpleselector.png b/doc/src/diagrams/webkit-simpleselector.png Binary files differnew file mode 100644 index 0000000..e442f97 --- /dev/null +++ b/doc/src/diagrams/webkit-simpleselector.png diff --git a/doc/src/examples/domtraversal.qdoc b/doc/src/examples/domtraversal.qdoc new file mode 100644 index 0000000..57e61d0 --- /dev/null +++ b/doc/src/examples/domtraversal.qdoc @@ -0,0 +1,139 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation 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$ +** +****************************************************************************/ + +/*! + \example webkit/domtraversal + \title DOM Traversal Example + + The DOM Traversal example shows how to use the QWebElement class to access + the structure of a Web page. + + \image webkit-domtraversal.png + + The QWebElement class provides an API that can be used to examine the structure + and content of a Web page via a Document Object Model (DOM) interface. It can be + used for basic traversal of the document structure, to search for particular + elements (see the \l{Simple Selector Example}), and to modify content in-place. + + This example uses a QWebView widget to display the Web page, and a dock widget + holds the QTreeWidget that shows the document structure. These widgets are + placed in an instance of the \c Window class, which we describe below. + + \section1 Window Class Definition + + The \c Window class is derived from QMainWindow and its user interface is created + using \l{Qt Designer}. As a result, the class is also derived from the user + interface class created by \l uic: + + \snippet examples/webkit/domtraversal/window.h Window class definition + + Two important functions to note are the \c on_webView_loadFinished() slot and + the \c examineChildElements() function. The former is automatically called + when the QWebView widget finishes loading a page \mdash see the + \l{#Further Reading}{Further Reading} section for more information on this + mechanism. + + The \c examineChildElements() function is used to traverse the document structure + and add items to the QTreeWidget. + + \section1 Window Class Implementation + + In the \c Window class constructor, we call the \l{QWidget::}{setupUi()} function + to set up the user interface described in the \c{window.ui} file: + + \snippet examples/webkit/domtraversal/window.cpp Window constructor + + When the Web page is loaded, the \c on_webView_loadFinished() slot is called. Here, + we clear the tree widget and begin inspection of the document by obtaining the + document element from the page's main frame: + + \snippet examples/webkit/domtraversal/window.cpp begin document inspection + + At this point, we call the \c examineChildElements() function to traverse the + document, starting with the child elements of the document element for which we + will create top level items in the tree widget. + + The \c examineChildElements() function accepts a parent element and a parent item. + Starting with the first child element, which we obtain with the element's + \l{QWebElement::}{firstChild()} function, we examine each child element of the + parent item. For each valid (non-null) element, which we check by calling its + \l{QWebElement::}{isNull()} function, we create a new QTreeWidgetItem instance with + the element name and add it to the parent item. + + \snippet examples/webkit/domtraversal/window.cpp traverse document + + We recursively examine the child elements for each element by calling + \c examineChildElements() with the current child element and the newly-created item. + To obtain the next element at the same level in the document, we call its + \l{QWebElement::}{nextSibling()} function. + + This recursive approach to reading the document makes it easy to create a simple + representation of the document structure in a tree widget. + + For completeness, we show the \c setUrl() function, which is provided to allow the + document URL to be set from the example's \c main() function. + + \snippet examples/webkit/domtraversal/window.cpp set URL + + \section1 Starting the Example + + We set up the application, create + a \c Window instance, set its URL, and show it: + + \snippet examples/webkit/simpleselector/main.cpp main program + + When the application's event loop is run, the Qt home page will load, and the + tree widget will be updated to show the document structure. Navigating to another + page will cause the tree widget to be updated to show the document structure of + the new page. + + \section1 Further Reading + + The QWebElement documentation contains more information about DOM access for the + QtWebKit classes. + + In this example, we take advantage of Qt's + \l{Using a Designer UI File in Your Application#Automatic Connections}{auto-connection} + feature to avoid explicitly connecting signals to slots. The user interface + contains a QWebView widget called \c webView whose \l{QWebView::}{loadFinished()} + signal is automatically connected to the \c on_webView_loadFinished() slot when + we call \l{QWidget::}{setupUi()} in the \c Window constructor. +*/ diff --git a/doc/src/examples/simpleselector.qdoc b/doc/src/examples/simpleselector.qdoc new file mode 100644 index 0000000..7db6576 --- /dev/null +++ b/doc/src/examples/simpleselector.qdoc @@ -0,0 +1,128 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation 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$ +** +****************************************************************************/ + +/*! + \example webkit/simpleselector + \title Simple Selector Example + + The Simple Selector example shows how to use QWebElement to access the + Document Object Model (DOM) in a Web page. + + \image webkit-simpleselector.png + + The QWebElement class enables access to the document structure and content in a Web page, + as represented by a QWebFrame instance. It can be used for basic traversal of the document + structure (see the \l{DOM Traversal Example}), to search for particular elements, and to + modify any elements found. + + This example uses a QWebView widget to display a Web page. A QLineEdit widget and QPushButton + allow the user to enter a query and highlight the results in the page. These widgets are + contained in an instance of the \c Window class, which we described below. + + \section1 Window Class Definition + + The \c Window class describes the example's user interface and this is partially described + by the \c window.ui file, created using \l{Qt Designer}: + + \snippet examples/webkit/simpleselector/window.h Window class definition + + We use \l{Using a Designer UI File in Your Application#The Multiple Inheritance Approach} + {multiple inheritance} to include the user interface description. We define slots that + will automatically respond to signals emitted by certain user interface controls. + + \section1 Window Class Implementation + + Since the layout of the user interface is provided by the \c{window.ui} user interface file, + we only need to call the \l{QWidget::}{setupUi()} in the constructor: + + \snippet examples/webkit/simpleselector/window.cpp Window class constructor + + This adds all the controls to the window and sets up connections between their signals + and suitably-named slots in the \c Window class. The QLineEdit instance was given a name of + \c elementLineEdit in Qt Designer, so the \c{on_elementLineEdit_returnPressed()} slot is + automatically connected to its \l{QLineEdit::}{returnPressed()} signal. + + This slot performs the main work of this example. We begin by obtaining a QWebFrame + instance for the current page shown in the QWebView widget. Each QWebFrame contains + a QWebElement instance that represents the document, and we obtain this in order to + examine its contents: + + \snippet examples/webkit/simpleselector/window.cpp return pressed + + Taking the contents of the QLineEdit as the query text, we call the element's + \l{QWebElement::}{findAll()} function to obtain a list of elements that match the + query. + + For each element obtained, we modify its style by setting its \c style attribute + to give it a yellow background color. + + Since we also want the query to be performed when the user clicks the \gui Highlight + button, we also implement the \c{on_highlightButton_clicked()} slot to simply call + the \c{on_elementLineEdit_returnPressed()} slot when it is invoked: + + \snippet examples/webkit/simpleselector/window.cpp button clicked + + For completeness, we also implement a \c setUrl() function which simply passes on + a QUrl instance to the equivalent function in the QWebView widget: + + \snippet examples/webkit/simpleselector/window.cpp set URL + + \section1 Starting the Example + + The main function implementation is simple. We set up the application, create + a \c Window instance, set its URL, and show it: + + \snippet examples/webkit/simpleselector/main.cpp main program + + When the application's event loop is run, the WebKit home page will load, and the + user can then begin to start running queries against the contents of the page. + The highlighting can only be removed by reloading the page. To do this, open a + context menu over the page and select the \gui Reload menu item. + + \section1 Further Reading + + The QWebElement documentation contains more information about DOM access for the + QtWebKit classes. + + In this example, we take advantage of Qt's + \l{Using a Designer UI File in Your Application#Automatic Connections}{auto-connection} + feature to avoid explicitly connecting signals to slots. +*/ diff --git a/doc/src/external-resources.qdoc b/doc/src/external-resources.qdoc index 4e1f3b7..f965869 100644 --- a/doc/src/external-resources.qdoc +++ b/doc/src/external-resources.qdoc @@ -412,3 +412,8 @@ \externalpage http://www.directfb.org/docs/DirectFB_Reference_1_4/types.html#DFBSurfaceDescription \title DirectFB - DFBSurfaceDescription */ + +/*! + \externalpage http://www.w3.org/TR/REC-CSS2/selector.html#q1 + \title Standard CSS2 selector +*/ diff --git a/doc/src/getting-started/examples.qdoc b/doc/src/getting-started/examples.qdoc index 79cbe89..b5dc03d 100644 --- a/doc/src/getting-started/examples.qdoc +++ b/doc/src/getting-started/examples.qdoc @@ -336,13 +336,6 @@ features is the archive of the \l {Qt Quarterly}. \endtable - - \omit - In the list below, examples marked with an asterisk (*) are fully - documented. Eventually, all the examples will be fully documented, - but sometimes we include an example before we have time to write - about it. - \endomit */ /*! @@ -388,6 +381,8 @@ \o \l{widgets/wiggly}{Wiggly}\raisedaster \o \l{widgets/windowflags}{Window Flags}\raisedaster \endlist + + Examples marked with an asterisk (*) are fully documented. */ /*! @@ -416,6 +411,8 @@ \o \l{dialogs/tabdialog}{Tab Dialog}\raisedaster \o \l{dialogs/trivialwizard}{Trivial Wizard} \endlist + + Examples marked with an asterisk (*) are fully documented. */ /*! @@ -442,12 +439,14 @@ \o \l{mainwindows/recentfiles}{Recent Files} \o \l{mainwindows/sdi}{SDI} \endlist + + Examples marked with an asterisk (*) are fully documented. */ /*! \page examples-layouts.html \title Layout Examples - + \previouspage Main Window Examples \contentspage Qt Examples \nextpage Item Views Examples @@ -467,6 +466,8 @@ \o \l{layouts/dynamiclayouts}{Dynamic Layouts} \o \l{layouts/flowlayout}{Flow Layout} \endlist + + Examples marked with an asterisk (*) are fully documented. */ /*! @@ -503,6 +504,8 @@ \o \l{itemviews/spinboxdelegate}{Spin Box Delegate}\raisedaster \o \l{itemviews/stardelegate}{Star Delegate}\raisedaster \endlist + + Examples marked with an asterisk (*) are fully documented. */ /*! @@ -529,6 +532,8 @@ \o \l{graphicsview/portedasteroids}{Ported Asteroids} \o \l{graphicsview/portedcanvas}{Ported Canvas} \endlist + + Examples marked with an asterisk (*) are fully documented. */ /*! @@ -559,6 +564,8 @@ \o \l{painting/svgviewer}{SVG Viewer} \o \l{painting/transformations}{Transformations}\raisedaster \endlist + + Examples marked with an asterisk (*) are fully documented. */ /*! @@ -631,16 +638,18 @@ \o \l{draganddrop/fridgemagnets}{Fridge Magnets}\raisedaster \o \l{draganddrop/puzzle}{Drag and Drop Puzzle} \endlist + + Examples marked with an asterisk (*) are fully documented. */ /*! \page examples-threadandconcurrent.html \title Threading and Concurrent Programming Examples - + \previouspage Drag and Drop Examples \contentspage Qt Examples \nextpage Tools Examples - + \image thread-examples.png Qt 4 makes it easier than ever to write multithreaded applications. More @@ -669,6 +678,8 @@ \o \l{qtconcurrent/runfunction}{QtConcurrent Run Function} \o \l{qtconcurrent/wordcount}{QtConcurrent Word Count} \endlist + + Examples marked with an asterisk (*) are fully documented. */ /*! @@ -695,6 +706,7 @@ \o \l{tools/customtypesending}{Custom Type Sending}\raisedaster \o \l{tools/echoplugin}{Echo Plugin}\raisedaster \o \l{tools/i18n}{I18N} + \o \l{tools/inputpanel}{Input Panel}\raisedaster \o \l{tools/plugandpaint}{Plug & Paint}\raisedaster \o Plug & Paint Plugins: \l{tools/plugandpaintplugins/basictools}{Basic Tools}\raisedaster and \l{tools/plugandpaintplugins/extrafilters}{Extra Filters}\raisedaster @@ -704,6 +716,8 @@ \o \l{tools/treemodelcompleter}{Tree Model Completer}\raisedaster \o \l{tools/undoframework}{Undo Framework}\raisedaster \endlist + + Examples marked with an asterisk (*) are fully documented. */ /*! @@ -736,6 +750,8 @@ \o \l{network/torrent}{Torrent} \o \l{network/googlesuggest}{Google Suggest} \endlist + + Examples marked with an asterisk (*) are fully documented. */ /*! @@ -745,7 +761,7 @@ \previouspage Network Examples \contentspage Qt Examples \nextpage OpenGL Examples - + \image ipc-examples.png \list @@ -784,6 +800,8 @@ \o \l{opengl/samplebuffers}{Sample Buffers} \o \l{opengl/textures}{Textures} \endlist + + Examples marked with an asterisk (*) are fully documented. */ /*! @@ -829,6 +847,8 @@ \o \l{phonon/capabilities}{Capabilities}\raisedaster \o \l{phonon/qmusicplayer}{Music Player}\raisedaster \endlist + + Examples marked with an asterisk (*) are fully documented. */ /*! @@ -855,6 +875,8 @@ \o \l{sql/tablemodel}{Table Model} \o \l{sql/sqlwidgetmapper}{SQL Widget Mapper}\raisedaster \endlist + + Examples marked with an asterisk (*) are fully documented. */ @@ -890,6 +912,8 @@ \o \l{xmlpatterns/trafficinfo}{Traffic Info}\raisedaster \o \l{xmlpatterns/schema}{XML Schema Validation}\raisedaster \endlist + + Examples marked with an asterisk (*) are fully documented. */ /*! @@ -996,12 +1020,26 @@ from displaying Web pages within a Qt user interface to an implementation of a basic function Web browser. - \list - \o \l{webkit/previewer}{Previewer}\raisedaster - \o \l{webkit/formextractor}{Form Extractor} - \o \l{webkit/googlechat}{Google Chat} - \o \l{webkit/fancybrowser}{Fancy Browser} - \endlist + \table + \header \o Example \o Description + \row \o \l{webkit/domtraversal}{DOM Traversal}\raisedaster + \o Shows how to use QWebElement to inspect the document structure of a Web page. + \row \o \l{webkit/fancybrowser}{Fancy Browser} + \o A more advanced browser example, showing the use of jQuery to perform effects. + \row \o \l{webkit/formextractor}{Form Extractor} + \o How to use JavaScript and C++ together to read page content. + \row \o \l{webkit/googlechat}{Google Chat} + \o A real-world example that shows how an existing Web-based service can be accessed + using QtWebKit. + \row \o \l{webkit/previewer}{Previewer}\raisedaster + \o Shows how to make a simple Web page previewer by using Qt's text input widgets + together with a QWebView widget. + \row \o \l{webkit/simpleselector}{Simple Selector}\raisedaster + \o A basic demonstration, showing how to use QWebElement to select elements in a + Web page. + \endtable + + Examples marked with an asterisk (*) are fully documented. */ /*! @@ -1021,6 +1059,8 @@ \list \o \l{help/simpletextviewer}{Simple Text Viewer}\raisedaster \endlist + + Examples marked with an asterisk (*) are fully documented. */ /*! @@ -1060,13 +1100,15 @@ \image animation-examples.png Animation \list - \o \l{animation/animatedtiles}{Animated Tiles} - \o \l{animation/appchooser}{Application Chooser} - \o \l{animation/easing}{Easing Curves} + \o \l{animation/animatedtiles}{Animated Tiles} + \o \l{animation/appchooser}{Application Chooser} + \o \l{animation/easing}{Easing Curves} \o \l{animation/moveblocks}{Move Blocks}\raisedaster - \o \l{animation/states}{States} + \o \l{animation/states}{States} \o \l{animation/stickman}{Stick man}\raisedaster \endlist + + Examples marked with an asterisk (*) are fully documented. */ /*! @@ -1100,6 +1142,8 @@ \o \l{dbus/pingpong}{Ping Pong} \o \l{dbus/remotecontrolledcar}{Remote Controlled Car} \endlist + + Examples marked with an asterisk (*) are fully documented. */ /*! @@ -1131,7 +1175,7 @@ \previouspage Qt for Embedded Linux Examples \contentspage Qt Examples \nextpage Qt Quarterly - + \image activeqt-examples.png ActiveQt \list diff --git a/doc/src/getting-started/known-issues.qdoc b/doc/src/getting-started/known-issues.qdoc index 0b63423..5c8888d 100644 --- a/doc/src/getting-started/known-issues.qdoc +++ b/doc/src/getting-started/known-issues.qdoc @@ -59,34 +59,6 @@ \section1 Installation Issues - \section2 Building the Source Package on Windows 7 - - \list - \o When building Qt 4.5.0 with Windows 7, the build fails with an error - message regarding failing to embed manifest. This a known issue with - Windows 7, explained in the Windows 7 SDK Beta - \l{http://download.microsoft.com/download/8/8/0/8808A472-6450-4723-9C87-977069714B27/ReleaseNotes.Htm} - {release notes}. A workaround for this issue is to patch the - \bold{embed_manifest_exe.prf} file with the following: - - \code - diff --git a/mkspecs/features/win32/embed_manifest_exe.prf b/mkspecs/features/win32/embed_manifest_exe.prf - index e1747f1..05f116e 100644 - --- a/mkspecs/features/win32/embed_manifest_exe.prf - +++ b/mkspecs/features/win32/embed_manifest_exe.prf - @@ -8,4 +8,9 @@ if(win32-msvc2005|win32-msvc2008):!equals(TEMPLATE_PREFIX, "vc"):equals(TEMPLATE - QMAKE_POST_LINK = $$quote(mt.exe -nologo -manifest \"$$replace(OBJECTS_DIR,/,\\)\\$${NOPATH_TARGET}.intermediate.ma - nifest\" -outputresource:$(DESTDIR_TARGET);1$$escape_expand(\n\t)) - QMAKE_POST_LINK += $$QMAKE_PREV_POST_LINK - QMAKE_CLEAN += \"$$replace(OBJECTS_DIR,/,\\)\\$${NOPATH_TARGET}.intermediate.manifest\" - + isEmpty(RC_FILE) { - + system("echo.>$$replace(OUT_PWD,/,\\)\\$$replace(OBJECTS_DIR,/,\\)\\Windows7WorkAround.rc") - + RC_FILE = $$replace(OUT_PWD,/,\\)\\$$replace(OBJECTS_DIR,/,\\)\\Windows7WorkAround.rc - + } - + - } - \endcode - \section2 Installing the Source Package on Unix systems \o If you download a Zip source package, you will need to convert diff --git a/doc/src/images/webkit-domtraversal.png b/doc/src/images/webkit-domtraversal.png Binary files differnew file mode 100644 index 0000000..8c7b2bc --- /dev/null +++ b/doc/src/images/webkit-domtraversal.png diff --git a/doc/src/images/webkit-simpleselector.png b/doc/src/images/webkit-simpleselector.png Binary files differnew file mode 100644 index 0000000..2c888ca --- /dev/null +++ b/doc/src/images/webkit-simpleselector.png diff --git a/doc/src/modules.qdoc b/doc/src/modules.qdoc index e57b271..bc79ed3 100644 --- a/doc/src/modules.qdoc +++ b/doc/src/modules.qdoc @@ -317,6 +317,37 @@ The QtScript module is part of the \l{Qt Full Framework Edition} and the \l{Open Source Versions of Qt}. + + \section1 License Information + + Qt Commercial Edition licensees that wish to distribute applications that + use the QtScript module need to be aware of their obligations under the + GNU Library General Public License (LGPL). + + Developers using the Open Source Edition can choose to redistribute + the module under the appropriate version of the GNU LGPL. + + \legalese + QtScript is licensed under the GNU Library General Public License. + Individual contributor names and copyright dates can be found + inline in the code. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + \endlegalese + */ /*! diff --git a/doc/src/platforms/emb-fonts.qdoc b/doc/src/platforms/emb-fonts.qdoc index 4df65da..0425285 100644 --- a/doc/src/platforms/emb-fonts.qdoc +++ b/doc/src/platforms/emb-fonts.qdoc @@ -60,9 +60,9 @@ prerendered fonts and TrueType fonts. For compatibility, it will also read the legacy \c lib/fonts/fontdir file. - Support for other font formats can be added, contact - \l{mailto:qt-info@nokia.com}{qt-info@nokia.com} for more - information. + Support for other font formats can be added. To make a suggestion, + please create a task in our bug tracker at \l + {http://bugreports.qt.nokia.com}{http://bugreports.qt.nokia.com}. \tableofcontents diff --git a/doc/src/platforms/platform-notes.qdoc b/doc/src/platforms/platform-notes.qdoc index 9896b08..68015a6 100644 --- a/doc/src/platforms/platform-notes.qdoc +++ b/doc/src/platforms/platform-notes.qdoc @@ -406,17 +406,102 @@ \page platform-notes-symbian.html \title Platform Notes - Symbian \contentspage Platform Notes + \ingroup platform-specific + \brief Information about the state of support for the Symbian platform. - This page contains information about the Symbian platforms Qt is currently known - to run on. More information about the combinations of platforms and compilers - supported by Qt can be found on the \l{Supported Platforms} page. + As with any port, the maturity for Qt for Symbian has not yet reached the + same level as other established Qt ports. This page documents the current + notes for the Symbian port. + + \section1 Source Compatibility + + Qt for Symbian provides the same level of source compatibility guarantee as + given for other platforms. That is, a program which compiles against a given + version of Qt for Symbian will also compile against all future versions of the + same major release. + + \section1 Binary Compatibility + + As with every supported platform, we will strive to maintain + application behavior and binary compatibility throughout the lifetime of + the Qt 4.x series. However, due to the fact that Symbian support is newly + added in 4.6.0, there is a slight possibility that minor corrections to the + application binary interface (ABI) might be required in 4.6.1, in order to + ensure compatibility going forward. Any such change will be clearly + documented in the release notes for 4.6.1. + + \section1 Supported Devices + + Qt is designed to work on any device which runs one of the following + versions of Symbian: + + \table + \header \o Symbian Version + \row \o S60 3.1 + \row \o S60 3.2 + \row \o S60 5.0 (Symbian ^1) + \endtable + + Qt has received \l{Tier 1 Platforms}{Tier 1} testing on the following phone models: + + \table + \header \o Phone + \row \o Nokia 5800 + \row \o Nokia E71 + \row \o Nokia E72 + \row \o Nokia N78 + \row \o Nokia N95 + \row \o Nokia N97 + \row \o Samsung i8910 + \endtable + + \section1 Supported Functionality + + The following technologies and classes are not currently supported: + + \table + \header \o Technology + \o Note + \row \o QtConcurrent + \o Planned for future release. + \row \o QtDBus + \o No current plans to support this feature. + \row \o QtOpenGL ES + \o Planned for future release. + \row \o Printing support + \o No current plans to support this feature. + \row \o Qt3Support + \o No current plans to support this feature. + \endtable + + The following technologies have limited support: + + \table + \header \o Technology + \o Note + \row \o QtSql + \o The only driver supported is SQLite. + \row \o QtMultimedia + \o Although the module itself is supported, no backend for Symbian + is currently available. However, there is a backend available + for Phonon. + \endtable + + \section1 Known Issues + + Known issues can be found by visiting the + \l{http://qt.gitorious.org/qt/pages/Qt460KnownIssues}{wiki page} with an + up-to-date list of known issues, and the list of bugs can be found by + \l{http://bugreports.qt.nokia.com/browse/QTBUG/component/19171}{browsing} the + S60 component in Qt's public task tracker, located at + \l{http://bugreports.qt.nokia.com/}{http://bugreports.qt.nokia.com/}. - For information about mixing exceptions with Symbian leaves, - see \l{Exception Safety with Symbian} + For information about mixing exceptions with Symbian leaves, see + \l{Exception Safety with Symbian}. \section1 Multimedia and Phonon Support - Qt provides a backend for Qt's multimedia module, Phonon, which supports + Qt provides a backend for Qt's Phonon module, which supports video and sound playback through Symbian's Multimedia Framework, MMF. In this release the support is experimental. Video playback may have @@ -429,7 +514,11 @@ In addition, there exists a backend for the Helix framework. However, due to it not shipping with Qt, its availability depends on the Symbian - platform in use. If available, it is loaded instead of the MMF plugin. + platform in use. If available, it is loaded in preference over the MMF + plugin. The Helix plugin requires Symbian signed capabilities. If the + application does not have those capabilities, the MMF plugin, if present on + the device, will be loaded instead. The capabilities the Helix backend + requires are AllFiles, DiskAdmin and MultimediaDD. */ diff --git a/doc/src/qt4-intro.qdoc b/doc/src/qt4-intro.qdoc index 2f74451..2a1f8ff 100644 --- a/doc/src/qt4-intro.qdoc +++ b/doc/src/qt4-intro.qdoc @@ -491,6 +491,8 @@ rich end-user applications for devices running S60 3.1 and later. + See the \l{Symbian Platform - Introduction to Qt} for more information. + \section1 Animation Framework The animation framework helps build highly animated, @@ -581,11 +583,7 @@ DOM, helps reuse CSS selector knowledge, and gives little maintenance or footprint overhead. - \code - QWebElement document = frame->documentElement(); - QList<QWebElement> allSpans = document.findAll("span"); - QList<QWebElement> introSpans = document.findAll("p.intro span"); - \endcode + \snippet webkitsnippets/webelement/main.cpp FindAll See the QWebElement class documentation for more information. diff --git a/doc/src/snippets/code/src_gui_painting_qregion_unix.cpp b/doc/src/snippets/code/src_gui_painting_qregion_unix.cpp index fb1f363..ea42e70 100644 --- a/doc/src/snippets/code/src_gui_painting_qregion_unix.cpp +++ b/doc/src/snippets/code/src_gui_painting_qregion_unix.cpp @@ -41,19 +41,15 @@ //! [0] QRegion r1(10, 10, 20, 20); -r1.isNull(); // false r1.isEmpty(); // false -QRegion r2(40, 40, 20, 20); QRegion r3; -r3.isNull(); // true r3.isEmpty(); // true +QRegion r2(40, 40, 20, 20); r3 = r1.intersected(r2); // r3: intersection of r1 and r2 -r3.isNull(); // false r3.isEmpty(); // true r3 = r1.united(r2); // r3: union of r1 and r2 -r3.isNull(); // false r3.isEmpty(); // false //! [0] diff --git a/examples/declarative/webview/content/Mapping/Map.qml b/examples/declarative/webview/content/Mapping/Map.qml index 9bde031..aae6b5d 100644 --- a/examples/declarative/webview/content/Mapping/Map.qml +++ b/examples/declarative/webview/content/Mapping/Map.qml @@ -9,7 +9,7 @@ Item { id: map
anchors.fill: parent
url: "map.html"
- javaScriptWindowObjects: Object {
+ javaScriptWindowObjects: QtObject {
WebView.windowObjectName: "qml"
property real lat: page.latitude
property real lng: page.longitude
diff --git a/examples/declarative/webview/evalandattach.qml b/examples/declarative/webview/evalandattach.qml index e755819..1b211c9 100644 --- a/examples/declarative/webview/evalandattach.qml +++ b/examples/declarative/webview/evalandattach.qml @@ -37,12 +37,12 @@ Item { focus: true settings.pluginsEnabled: true javaScriptWindowObjects: [ - Object { + QtObject { id: txt WebView.windowObjectName: "statusText1" property string text: "Click me!" }, - Object { + QtObject { id: txt2 WebView.windowObjectName: "statusText2" property string text: "" diff --git a/examples/effects/blurpicker/blurpicker.cpp b/examples/effects/blurpicker/blurpicker.cpp index 1f46444..4911c73 100644 --- a/examples/effects/blurpicker/blurpicker.cpp +++ b/examples/effects/blurpicker/blurpicker.cpp @@ -49,24 +49,29 @@ #define M_PI 3.14159265358979323846 #endif -BlurPicker::BlurPicker(QWidget *parent): QGraphicsView(parent), m_index(0.0) +BlurPicker::BlurPicker(QWidget *parent): QGraphicsView(parent), m_index(0.0), m_animation(this, "index") { setBackgroundBrush(QPixmap(":/images/background.jpg")); - setScene(&m_scene); + setScene(new QGraphicsScene(this)); setupScene(); - updateIconPositions(); + setIndex(0); - connect(&m_timeLine, SIGNAL(valueChanged(qreal)), SLOT(updateIconPositions())); - m_timeLine.setDuration(400); + m_animation.setDuration(400); + m_animation.setEasingCurve(QEasingCurve::InOutSine); setRenderHint(QPainter::Antialiasing, true); setFrameStyle(QFrame::NoFrame); } -void BlurPicker::updateIconPositions() +qreal BlurPicker::index() const { - m_index = m_timeLine.currentFrame() / 1000.0; + return m_index; +} + +void BlurPicker::setIndex(qreal index) +{ + m_index = index; qreal baseline = 0; for (int i = 0; i < m_icons.count(); ++i) { @@ -82,12 +87,12 @@ void BlurPicker::updateIconPositions() static_cast<BlurEffect *>(icon->graphicsEffect())->setBaseLine(baseline); } - m_scene.update(); + scene()->update(); } void BlurPicker::setupScene() { - m_scene.setSceneRect(-200, -120, 400, 240); + scene()->setSceneRect(-200, -120, 400, 240); QStringList names; names << ":/images/accessories-calculator.png"; @@ -101,32 +106,34 @@ void BlurPicker::setupScene() for (int i = 0; i < names.count(); i++) { QPixmap pixmap(names[i]); - QGraphicsPixmapItem *icon = m_scene.addPixmap(pixmap); + QGraphicsPixmapItem *icon = scene()->addPixmap(pixmap); icon->setZValue(1); icon->setGraphicsEffect(new BlurEffect(icon)); m_icons << icon; } - QGraphicsPixmapItem *bg = m_scene.addPixmap(QPixmap(":/images/background.jpg")); + QGraphicsPixmapItem *bg = scene()->addPixmap(QPixmap(":/images/background.jpg")); bg->setZValue(0); bg->setPos(-200, -150); } void BlurPicker::keyPressEvent(QKeyEvent *event) { - if (event->key() == Qt::Key_Left) { - if (m_timeLine.state() == QTimeLine::NotRunning) { - m_timeLine.setFrameRange(m_index * 1000, m_index * 1000 - 1000); - m_timeLine.start(); - event->accept(); - } + int delta = 0; + switch (event->key()) + { + case Qt::Key_Left: + delta = -1; + break; + case Qt::Key_Right: + delta = 1; + break; + default: + break; } - - if (event->key() == Qt::Key_Right) { - if (m_timeLine.state() == QTimeLine::NotRunning) { - m_timeLine.setFrameRange(m_index * 1000, m_index * 1000 + 1000); - m_timeLine.start(); + if (m_animation.state() == QAbstractAnimation::Stopped && delta) { + m_animation.setEndValue(m_index + delta); + m_animation.start(); event->accept(); - } } } diff --git a/examples/effects/blurpicker/blurpicker.h b/examples/effects/blurpicker/blurpicker.h index b460df4..b302db4 100644 --- a/examples/effects/blurpicker/blurpicker.h +++ b/examples/effects/blurpicker/blurpicker.h @@ -44,31 +44,31 @@ #include <QGraphicsEffect> #include <QGraphicsView> -#include <QTimeLine> +#include <QPropertyAnimation> #include "blureffect.h" class BlurPicker: public QGraphicsView { Q_OBJECT + Q_PROPERTY(qreal index READ index WRITE setIndex); public: BlurPicker(QWidget *parent = 0); + qreal index() const; + void setIndex(qreal); + protected: void keyPressEvent(QKeyEvent *event); -private slots: - void updateIconPositions(); - private: void setupScene(); private: qreal m_index; - QGraphicsScene m_scene; QList<QGraphicsItem*> m_icons; - QTimeLine m_timeLine; + QPropertyAnimation m_animation; }; #endif // BLURPICKER_H diff --git a/examples/effects/customshader/blurpicker.cpp b/examples/effects/customshader/blurpicker.cpp index 6cda711..d38d99b 100644 --- a/examples/effects/customshader/blurpicker.cpp +++ b/examples/effects/customshader/blurpicker.cpp @@ -50,24 +50,29 @@ #define M_PI 3.14159265358979323846 #endif -BlurPicker::BlurPicker(QWidget *parent): QGraphicsView(parent), m_index(0.0) +BlurPicker::BlurPicker(QWidget *parent): QGraphicsView(parent), m_index(0.0), m_animation(this, "index") { setBackgroundBrush(QPixmap(":/images/background.jpg")); - setScene(&m_scene); + setScene(new QGraphicsScene(this)); setupScene(); - updateIconPositions(); + setIndex(0); - connect(&m_timeLine, SIGNAL(valueChanged(qreal)), SLOT(updateIconPositions())); - m_timeLine.setDuration(400); + m_animation.setDuration(400); + m_animation.setEasingCurve(QEasingCurve::InOutSine); setRenderHint(QPainter::Antialiasing, true); setFrameStyle(QFrame::NoFrame); } -void BlurPicker::updateIconPositions() +qreal BlurPicker::index() const { - m_index = m_timeLine.currentFrame() / 1000.0; + return m_index; +} + +void BlurPicker::setIndex(qreal index) +{ + m_index = index; qreal baseline = 0; for (int i = 0; i < m_icons.count(); ++i) { @@ -84,12 +89,12 @@ void BlurPicker::updateIconPositions() static_cast<BlurEffect *>(icon->graphicsEffect())->setBaseLine(baseline); } - m_scene.update(); + scene()->update(); } void BlurPicker::setupScene() { - m_scene.setSceneRect(-200, -120, 400, 240); + scene()->setSceneRect(-200, -120, 400, 240); QStringList names; names << ":/images/accessories-calculator.png"; @@ -103,7 +108,7 @@ void BlurPicker::setupScene() for (int i = 0; i < names.count(); i++) { QPixmap pixmap(names[i]); - QGraphicsPixmapItem *icon = m_scene.addPixmap(pixmap); + QGraphicsPixmapItem *icon = scene()->addPixmap(pixmap); icon->setZValue(1); if (i == 3) icon->setGraphicsEffect(new CustomShaderEffect()); @@ -112,26 +117,28 @@ void BlurPicker::setupScene() m_icons << icon; } - QGraphicsPixmapItem *bg = m_scene.addPixmap(QPixmap(":/images/background.jpg")); + QGraphicsPixmapItem *bg = scene()->addPixmap(QPixmap(":/images/background.jpg")); bg->setZValue(0); bg->setPos(-200, -150); } void BlurPicker::keyPressEvent(QKeyEvent *event) { - if (event->key() == Qt::Key_Left) { - if (m_timeLine.state() == QTimeLine::NotRunning) { - m_timeLine.setFrameRange(m_index * 1000, m_index * 1000 - 1000); - m_timeLine.start(); - event->accept(); - } + int delta = 0; + switch (event->key()) + { + case Qt::Key_Left: + delta = -1; + break; + case Qt::Key_Right: + delta = 1; + break; + default: + break; } - - if (event->key() == Qt::Key_Right) { - if (m_timeLine.state() == QTimeLine::NotRunning) { - m_timeLine.setFrameRange(m_index * 1000, m_index * 1000 + 1000); - m_timeLine.start(); + if (m_animation.state() == QAbstractAnimation::Stopped && delta) { + m_animation.setEndValue(m_index + delta); + m_animation.start(); event->accept(); - } } } diff --git a/examples/effects/customshader/blurpicker.h b/examples/effects/customshader/blurpicker.h index b460df4..b302db4 100644 --- a/examples/effects/customshader/blurpicker.h +++ b/examples/effects/customshader/blurpicker.h @@ -44,31 +44,31 @@ #include <QGraphicsEffect> #include <QGraphicsView> -#include <QTimeLine> +#include <QPropertyAnimation> #include "blureffect.h" class BlurPicker: public QGraphicsView { Q_OBJECT + Q_PROPERTY(qreal index READ index WRITE setIndex); public: BlurPicker(QWidget *parent = 0); + qreal index() const; + void setIndex(qreal); + protected: void keyPressEvent(QKeyEvent *event); -private slots: - void updateIconPositions(); - private: void setupScene(); private: qreal m_index; - QGraphicsScene m_scene; QList<QGraphicsItem*> m_icons; - QTimeLine m_timeLine; + QPropertyAnimation m_animation; }; #endif // BLURPICKER_H diff --git a/examples/effects/fademessage/fademessage.cpp b/examples/effects/fademessage/fademessage.cpp index 818d00f..4128a59 100644 --- a/examples/effects/fademessage/fademessage.cpp +++ b/examples/effects/fademessage/fademessage.cpp @@ -43,7 +43,7 @@ #include <QtGui> -FadeMessage::FadeMessage(QWidget *parent): QGraphicsView(parent), m_index(0.0) +FadeMessage::FadeMessage(QWidget *parent): QGraphicsView(parent) { setScene(&m_scene); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); @@ -51,9 +51,12 @@ FadeMessage::FadeMessage(QWidget *parent): QGraphicsView(parent), m_index(0.0) setupScene(); - m_timeLine = new QTimeLine(500, this); - m_timeLine->setCurveShape(QTimeLine::EaseInOutCurve); - connect(m_timeLine, SIGNAL(valueChanged(qreal)), m_effect, SLOT(setStrength(qreal))); + m_animation = new QPropertyAnimation(m_effect, "strength", this); + m_animation->setDuration(500); + m_animation->setEasingCurve(QEasingCurve::InOutSine); + m_animation->setStartValue(0); + m_animation->setEndValue(1); + setRenderHint(QPainter::Antialiasing, true); setFrameStyle(QFrame::NoFrame); @@ -63,13 +66,12 @@ void FadeMessage::togglePopup() { if (m_message->isVisible()) { m_message->setVisible(false); - m_timeLine->setDirection(QTimeLine::Backward); - m_timeLine->start(); + m_animation->setDirection(QAbstractAnimation::Backward); } else { m_message->setVisible(true); - m_timeLine->setDirection(QTimeLine::Forward); - m_timeLine->start(); + m_animation->setDirection(QAbstractAnimation::Forward); } + m_animation->start(); } void FadeMessage::setupScene() @@ -94,13 +96,17 @@ void FadeMessage::setupScene() QFont font; font.setPointSize(font.pointSize() * 2); font.setBold(true); - int fh = QFontMetrics(font).height(); + QFontMetrics fontMetrics(font); + int fh = fontMetrics.height(); + + QString sceneText = "Qt Everywhere!"; + int sceneTextWidth = fontMetrics.width(sceneText); - QGraphicsRectItem *block = m_scene.addRect(50, 300, 300, fh + 3); + QGraphicsRectItem *block = m_scene.addRect(50, 300, sceneTextWidth, fh + 3); block->setPen(Qt::NoPen); block->setBrush(QColor(102, 153, 51)); - QGraphicsTextItem *text = m_scene.addText("Qt Everywhere!", font); + QGraphicsTextItem *text = m_scene.addText(sceneText, font); text->setDefaultTextColor(Qt::white); text->setPos(50, 300); block->setZValue(2); diff --git a/examples/effects/fademessage/fademessage.h b/examples/effects/fademessage/fademessage.h index 34e2fb8..e73ef6b 100644 --- a/examples/effects/fademessage/fademessage.h +++ b/examples/effects/fademessage/fademessage.h @@ -44,7 +44,7 @@ #include <QGraphicsEffect> #include <QGraphicsView> -#include <QTimeLine> +#include <QPropertyAnimation> #include "fademessage.h" @@ -62,11 +62,10 @@ private slots: void togglePopup(); private: - qreal m_index; QGraphicsScene m_scene; QGraphicsColorizeEffect *m_effect; QGraphicsItem *m_message; - QTimeLine *m_timeLine; + QPropertyAnimation *m_animation; }; #endif // FADEMESSAGE_H diff --git a/examples/effects/fademessage/fademessage.pro b/examples/effects/fademessage/fademessage.pro index ed9e53d..cb1fda7 100644 --- a/examples/effects/fademessage/fademessage.pro +++ b/examples/effects/fademessage/fademessage.pro @@ -11,3 +11,6 @@ sources.files = $$SOURCES \ $$FORMS \ fademessage.pro sources.path = $$[QT_INSTALL_EXAMPLES]/effects/fademessage + +DEPLOYMENT_PLUGIN += qjpeg + diff --git a/examples/effects/lighting/lighting.cpp b/examples/effects/lighting/lighting.cpp index 7026b66..51fa9f8 100644 --- a/examples/effects/lighting/lighting.cpp +++ b/examples/effects/lighting/lighting.cpp @@ -94,7 +94,7 @@ void Lighting::setupScene() else item = new QGraphicsRectItem(0, 0, 50, 50); - item->setPen(QPen(Qt::black)); + item->setPen(QPen(Qt::black, 1)); item->setBrush(QBrush(Qt::white)); QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect; effect->setBlurRadius(8); diff --git a/examples/graphicsview/anchorlayout/main.cpp b/examples/graphicsview/anchorlayout/main.cpp index 3e19f18..f898d1d 100644 --- a/examples/graphicsview/anchorlayout/main.cpp +++ b/examples/graphicsview/anchorlayout/main.cpp @@ -76,8 +76,8 @@ int main(int argc, char **argv) QGraphicsProxyWidget *c = createItem(minSize, prefSize, maxSize, "C"); QGraphicsProxyWidget *d = createItem(minSize, prefSize, maxSize, "D"); QGraphicsProxyWidget *e = createItem(minSize, prefSize, maxSize, "E"); - QGraphicsProxyWidget *f = createItem(QSizeF(30, 50), QSizeF(150, 50), maxSize, "F"); - QGraphicsProxyWidget *g = createItem(QSizeF(30, 50), QSizeF(30, 100), maxSize, "G"); + QGraphicsProxyWidget *f = createItem(QSizeF(30, 50), QSizeF(150, 50), maxSize, "F (overflow)"); + QGraphicsProxyWidget *g = createItem(QSizeF(30, 50), QSizeF(30, 100), maxSize, "G (overflow)"); QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout; l->setSpacing(0); diff --git a/examples/graphicsview/weatheranchorlayout/main.cpp b/examples/graphicsview/weatheranchorlayout/main.cpp index 9002828..d835ae3 100644 --- a/examples/graphicsview/weatheranchorlayout/main.cpp +++ b/examples/graphicsview/weatheranchorlayout/main.cpp @@ -185,20 +185,12 @@ int main(int argc, char **argv) QGraphicsScene scene; scene.setSceneRect(0, 0, 800, 480); -#ifdef DEBUG_MODE - QGraphicsProxyWidget *title = createItem("Title"); - QGraphicsProxyWidget *place = createItem("Place"); - QGraphicsProxyWidget *sun = createItem("Sun"); - QGraphicsProxyWidget *details = createItem("Details"); - QGraphicsProxyWidget *tabbar = createItem("Tabbar"); -#else - // pixmaps widgets - PixmapWidget *title = new PixmapWidget(QPixmap(":/images/title.jpg")); - PlaceWidget *place = new PlaceWidget(QPixmap(":/images/place.jpg")); - PixmapWidget *details = new PixmapWidget(QPixmap(":/images/5days.jpg")); - PixmapWidget *sun = new PixmapWidget(QPixmap(":/images/weather-few-clouds.png")); - PixmapWidget *tabbar = new PixmapWidget(QPixmap(":/images/tabbar.jpg")); -#endif + // pixmaps widgets + PixmapWidget *title = new PixmapWidget(QPixmap(":/images/title.jpg")); + PlaceWidget *place = new PlaceWidget(QPixmap(":/images/place.jpg")); + PixmapWidget *details = new PixmapWidget(QPixmap(":/images/5days.jpg")); + PixmapWidget *sunnyWeather = new PixmapWidget(QPixmap(":/images/weather-few-clouds.png")); + PixmapWidget *tabbar = new PixmapWidget(QPixmap(":/images/tabbar.jpg")); // setup sizes @@ -215,9 +207,9 @@ int main(int argc, char **argv) tabbar->setPreferredSize(QSizeF(70, 24)); tabbar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); - sun->setPreferredSize(QSizeF(128, 97)); - sun->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); - sun->setZValue(9999); + sunnyWeather->setPreferredSize(QSizeF(128, 97)); + sunnyWeather->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); + sunnyWeather->setZValue(9999); // start anchor layout QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout; @@ -238,8 +230,8 @@ int main(int argc, char **argv) anchor = l->addAnchor(place, Qt::AnchorBottom, l, Qt::AnchorBottom); anchor->setSpacing(12); - anchor = l->addAnchor(sun, Qt::AnchorTop, title, Qt::AnchorTop); - anchor = l->addAnchor(sun, Qt::AnchorBottom, l, Qt::AnchorVerticalCenter); + anchor = l->addAnchor(sunnyWeather, Qt::AnchorTop, title, Qt::AnchorTop); + anchor = l->addAnchor(sunnyWeather, Qt::AnchorBottom, l, Qt::AnchorVerticalCenter); anchor = l->addAnchor(tabbar, Qt::AnchorTop, title, Qt::AnchorBottom); anchor->setSpacing(5); @@ -257,8 +249,8 @@ int main(int argc, char **argv) anchor = l->addAnchor(place, Qt::AnchorRight, details, Qt::AnchorLeft); anchor->setSpacing(35); - anchor = l->addAnchor(sun, Qt::AnchorLeft, place, Qt::AnchorHorizontalCenter); - anchor = l->addAnchor(sun, Qt::AnchorRight, l, Qt::AnchorHorizontalCenter); + anchor = l->addAnchor(sunnyWeather, Qt::AnchorLeft, place, Qt::AnchorHorizontalCenter); + anchor = l->addAnchor(sunnyWeather, Qt::AnchorRight, l, Qt::AnchorHorizontalCenter); anchor = l->addAnchor(tabbar, Qt::AnchorHorizontalCenter, details, Qt::AnchorHorizontalCenter); anchor = l->addAnchor(details, Qt::AnchorRight, l, Qt::AnchorRight); diff --git a/examples/help/contextsensitivehelp/doc/source.html b/examples/help/contextsensitivehelp/doc/source.html index 2140765..68b2f8c 100644 --- a/examples/help/contextsensitivehelp/doc/source.html +++ b/examples/help/contextsensitivehelp/doc/source.html @@ -4,8 +4,8 @@ <title>Water Source</title> </head> <body> - The current pipe system connects to four different sources. Be aware that only - a limited amount of water can be taken from some sources. + The current pipe system connects to four different sources. Be aware + that only a limited amount of water can be taken from some sources. <br> <table border=1> <tr> @@ -13,7 +13,7 @@ <td>Amount</td> </tr> <tr> - <td>Foundain</td> + <td>Fountain</td> <td>4000</td> </tr> <tr> diff --git a/examples/help/contextsensitivehelp/doc/wateringmachine.qch b/examples/help/contextsensitivehelp/doc/wateringmachine.qch Binary files differindex e74f9b8..35d29be 100644 --- a/examples/help/contextsensitivehelp/doc/wateringmachine.qch +++ b/examples/help/contextsensitivehelp/doc/wateringmachine.qch diff --git a/examples/help/contextsensitivehelp/doc/wateringmachine.qhc b/examples/help/contextsensitivehelp/doc/wateringmachine.qhc Binary files differindex 3227c3a2..b5653c3 100644 --- a/examples/help/contextsensitivehelp/doc/wateringmachine.qhc +++ b/examples/help/contextsensitivehelp/doc/wateringmachine.qhc diff --git a/examples/help/contextsensitivehelp/doc/wateringmachine.qhp b/examples/help/contextsensitivehelp/doc/wateringmachine.qhp index 745d881..6dd08e7 100644 --- a/examples/help/contextsensitivehelp/doc/wateringmachine.qhp +++ b/examples/help/contextsensitivehelp/doc/wateringmachine.qhp @@ -1,25 +1,25 @@ -<?xml version="1.0" encoding="utf-8" ?> +<?xml version="1.0" encoding="utf-8" ?> <QtHelpProject version="1.0"> - <virtualFolder>wateringmachine</virtualFolder> - <namespace>wateringcompany.com.1_0_0.premium</namespace> - <filterSection> - <keywords> - <keyword name="plants" id="plants" ref="plants.html"/> - <keyword name="temperature" id="temperature" ref="temperature.html"/> - <keyword name="rain" id="rain" ref="rain.html"/> - <keyword name="time" id="time" ref="time.html"/> - <keyword name="amount" id="amount" ref="amount.html"/> - <keyword name="source" id="source" ref="source.html"/> - <keyword name="filtering" id="filtering" ref="filter.html"/> - </keywords> - <files> - <file>plants.html</file> - <file>temperature.html</file> - <file>rain.html</file> - <file>time.html</file> - <file>amount.html</file> - <file>source.html</file> - <file>filter.html</file> - </files> - </filterSection> + <virtualFolder>wateringmachine</virtualFolder> + <namespace>wateringcompany.com.1-0-0.premium</namespace> + <filterSection> + <keywords> + <keyword name="plants" id="plants" ref="plants.html"/> + <keyword name="temperature" id="temperature" ref="temperature.html"/> + <keyword name="rain" id="rain" ref="rain.html"/> + <keyword name="time" id="time" ref="time.html"/> + <keyword name="amount" id="amount" ref="amount.html"/> + <keyword name="source" id="source" ref="source.html"/> + <keyword name="filtering" id="filtering" ref="filter.html"/> + </keywords> + <files> + <file>plants.html</file> + <file>temperature.html</file> + <file>rain.html</file> + <file>time.html</file> + <file>amount.html</file> + <file>source.html</file> + <file>filter.html</file> + </files> + </filterSection> </QtHelpProject> diff --git a/examples/help/contextsensitivehelp/wateringconfigdialog.ui b/examples/help/contextsensitivehelp/wateringconfigdialog.ui index a7f5349..d7a473a 100644 --- a/examples/help/contextsensitivehelp/wateringconfigdialog.ui +++ b/examples/help/contextsensitivehelp/wateringconfigdialog.ui @@ -258,7 +258,7 @@ <widget class="QComboBox" name="sourceComboBox" > <item> <property name="text" > - <string>Foundain</string> + <string>Fountain</string> </property> </item> <item> diff --git a/examples/network/blockingfortuneclient/blockingclient.cpp b/examples/network/blockingfortuneclient/blockingclient.cpp index b731f7a..a3d7c23 100644 --- a/examples/network/blockingfortuneclient/blockingclient.cpp +++ b/examples/network/blockingfortuneclient/blockingclient.cpp @@ -50,7 +50,22 @@ BlockingClient::BlockingClient(QWidget *parent) hostLabel = new QLabel(tr("&Server name:")); portLabel = new QLabel(tr("S&erver port:")); - hostLineEdit = new QLineEdit("Localhost"); + // find out which IP to connect to + QString ipAddress; + QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses(); + // use the first non-localhost IPv4 address + for (int i = 0; i < ipAddressesList.size(); ++i) { + if (ipAddressesList.at(i) != QHostAddress::LocalHost && + ipAddressesList.at(i).toIPv4Address()) { + ipAddress = ipAddressesList.at(i).toString(); + break; + } + } + // if we did not find one, use IPv4 localhost + if (ipAddress.isEmpty()) + ipAddress = QHostAddress(QHostAddress::LocalHost).toString(); + + hostLineEdit = new QLineEdit(ipAddress); portLineEdit = new QLineEdit; portLineEdit->setValidator(new QIntValidator(1, 65535, this)); diff --git a/examples/network/fortuneclient/client.cpp b/examples/network/fortuneclient/client.cpp index ca5d40e..e043f78 100644 --- a/examples/network/fortuneclient/client.cpp +++ b/examples/network/fortuneclient/client.cpp @@ -62,8 +62,10 @@ Client::Client(QWidget *parent) // use the first non-localhost IPv4 address for (int i = 0; i < ipAddressesList.size(); ++i) { if (ipAddressesList.at(i) != QHostAddress::LocalHost && - ipAddressesList.at(i).toIPv4Address()) + ipAddressesList.at(i).toIPv4Address()) { ipAddress = ipAddressesList.at(i).toString(); + break; + } } // if we did not find one, use IPv4 localhost if (ipAddress.isEmpty()) diff --git a/examples/network/fortuneserver/server.cpp b/examples/network/fortuneserver/server.cpp index 52b7d61..06f6eeb 100644 --- a/examples/network/fortuneserver/server.cpp +++ b/examples/network/fortuneserver/server.cpp @@ -68,8 +68,10 @@ Server::Server(QWidget *parent) // use the first non-localhost IPv4 address for (int i = 0; i < ipAddressesList.size(); ++i) { if (ipAddressesList.at(i) != QHostAddress::LocalHost && - ipAddressesList.at(i).toIPv4Address()) + ipAddressesList.at(i).toIPv4Address()) { ipAddress = ipAddressesList.at(i).toString(); + break; + } } // if we did not find one, use IPv4 localhost if (ipAddress.isEmpty()) diff --git a/examples/network/network.pro b/examples/network/network.pro index 0849271..c5a97fb 100644 --- a/examples/network/network.pro +++ b/examples/network/network.pro @@ -19,6 +19,7 @@ SUBDIRS = blockingfortuneclient \ symbian: SUBDIRS = qftp contains(QT_CONFIG, openssl):SUBDIRS += securesocketclient +contains(QT_CONFIG, openssl-linked):SUBDIRS += securesocketclient # install sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS network.pro README diff --git a/examples/network/threadedfortuneserver/dialog.cpp b/examples/network/threadedfortuneserver/dialog.cpp index b1ea395..d0d3fc0 100644 --- a/examples/network/threadedfortuneserver/dialog.cpp +++ b/examples/network/threadedfortuneserver/dialog.cpp @@ -67,8 +67,10 @@ Dialog::Dialog(QWidget *parent) // use the first non-localhost IPv4 address for (int i = 0; i < ipAddressesList.size(); ++i) { if (ipAddressesList.at(i) != QHostAddress::LocalHost && - ipAddressesList.at(i).toIPv4Address()) + ipAddressesList.at(i).toIPv4Address()) { ipAddress = ipAddressesList.at(i).toString(); + break; + } } // if we did not find one, use IPv4 localhost if (ipAddress.isEmpty()) diff --git a/examples/opengl/pbuffers/glwidget.cpp b/examples/opengl/pbuffers/glwidget.cpp index 56ba65b..d843a73 100644 --- a/examples/opengl/pbuffers/glwidget.cpp +++ b/examples/opengl/pbuffers/glwidget.cpp @@ -175,7 +175,11 @@ void GLWidget::perspectiveProjection() { glMatrixMode(GL_PROJECTION); glLoadIdentity(); +#ifdef QT_OPENGL_ES + glFrustumf(-aspect, +aspect, -1.0, +1.0, 4.0, 15.0); +#else glFrustum(-aspect, +aspect, -1.0, +1.0, 4.0, 15.0); +#endif glMatrixMode(GL_MODELVIEW); } @@ -183,7 +187,11 @@ void GLWidget::orthographicProjection() { glMatrixMode(GL_PROJECTION); glLoadIdentity(); +#ifdef QT_OPENGL_ES + glOrthof(-1.0, +1.0, -1.0, +1.0, -90.0, +90.0); +#else glOrtho(-1.0, +1.0, -1.0, +1.0, -90.0, +90.0); +#endif glMatrixMode(GL_MODELVIEW); } diff --git a/examples/webkit/domtraversal/domtraversal.pro b/examples/webkit/domtraversal/domtraversal.pro new file mode 100644 index 0000000..49400de --- /dev/null +++ b/examples/webkit/domtraversal/domtraversal.pro @@ -0,0 +1,11 @@ +QT += webkit network +FORMS = window.ui +HEADERS = window.h +SOURCES = main.cpp \ + window.cpp + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/webkit/domtraversal +sources.files = $$SOURCES $$HEADERS $$FORMS $$RESOURCES *.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/webkit/domtraversal +INSTALLS += target sources diff --git a/examples/webkit/domtraversal/main.cpp b/examples/webkit/domtraversal/main.cpp new file mode 100644 index 0000000..c8a1aec --- /dev/null +++ b/examples/webkit/domtraversal/main.cpp @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 <QApplication> +#include "window.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + Window window; + window.show(); + window.setUrl(QUrl("http://qt.nokia.com/")); + return app.exec(); +} diff --git a/examples/webkit/domtraversal/window.cpp b/examples/webkit/domtraversal/window.cpp new file mode 100644 index 0000000..704a6e1 --- /dev/null +++ b/examples/webkit/domtraversal/window.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 <QtGui> +#include <QtWebKit> + +#include "window.h" + +//! [Window constructor] +Window::Window(QWidget *parent) + : QMainWindow(parent) +{ + setupUi(this); +} +//! [Window constructor] + +//! [set URL] +void Window::setUrl(const QUrl &url) +{ + webView->setUrl(url); +} +//! [set URL] + +//! [begin document inspection] +void Window::on_webView_loadFinished() +{ + treeWidget->clear(); + + QWebFrame *frame = webView->page()->mainFrame(); + QWebElement document = frame->documentElement(); + + examineChildElements(document, treeWidget->invisibleRootItem()); +} +//! [begin document inspection] + +//! [traverse document] +void Window::examineChildElements(const QWebElement &parentElement, + QTreeWidgetItem *parentItem) +{ + QWebElement element = parentElement.firstChild(); + while (!element.isNull()) { + + QTreeWidgetItem *item = new QTreeWidgetItem(); + item->setText(0, element.tagName()); + parentItem->addChild(item); + + examineChildElements(element, item); + + element = element.nextSibling(); + } +} +//! [traverse document] diff --git a/examples/webkit/domtraversal/window.h b/examples/webkit/domtraversal/window.h new file mode 100644 index 0000000..5988df9 --- /dev/null +++ b/examples/webkit/domtraversal/window.h @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 WINDOW_H +#define WINDOW_H + +#include <QMainWindow> +#include <QUrl> +#include <QWebElement> + +class QTreeWidgetItem; + +//! [Window class definition] +#include "ui_window.h" + +class Window : public QMainWindow, private Ui::Window +{ + Q_OBJECT + +public: + Window(QWidget *parent = 0); + void setUrl(const QUrl &url); + +public slots: + void on_webView_loadFinished(); + +private: + void examineChildElements(const QWebElement &parentElement, + QTreeWidgetItem *parentItem); +}; +//! [Window class definition] + +#endif diff --git a/examples/webkit/domtraversal/window.ui b/examples/webkit/domtraversal/window.ui new file mode 100644 index 0000000..0fce035 --- /dev/null +++ b/examples/webkit/domtraversal/window.ui @@ -0,0 +1,89 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Window</class> + <widget class="QMainWindow" name="Window"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>800</width> + <height>600</height> + </rect> + </property> + <property name="windowTitle"> + <string>Web Element DOM Traversal</string> + </property> + <widget class="QWidget" name="centralwidget"> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <property name="topMargin"> + <number>4</number> + </property> + <property name="bottomMargin"> + <number>4</number> + </property> + <item> + <widget class="QWebView" name="webView"> + <property name="url"> + <url> + <string>http://qt.nokia.com/</string> + </url> + </property> + </widget> + </item> + </layout> + </widget> + <widget class="QMenuBar" name="menubar"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>800</width> + <height>27</height> + </rect> + </property> + </widget> + <widget class="QStatusBar" name="statusbar"/> + <widget class="QDockWidget" name="dockWidget"> + <property name="allowedAreas"> + <set>Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea</set> + </property> + <property name="windowTitle"> + <string>Document Structure</string> + </property> + <attribute name="dockWidgetArea"> + <number>1</number> + </attribute> + <widget class="QWidget" name="dockWidgetContents"> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="margin"> + <number>4</number> + </property> + <item> + <widget class="QTreeWidget" name="treeWidget"> + <attribute name="headerVisible"> + <bool>false</bool> + </attribute> + <attribute name="headerVisible"> + <bool>false</bool> + </attribute> + <column> + <property name="text"> + <string notr="true">1</string> + </property> + </column> + </widget> + </item> + </layout> + </widget> + </widget> + </widget> + <customwidgets> + <customwidget> + <class>QWebView</class> + <extends>QWidget</extends> + <header>QtWebKit/QWebView</header> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> diff --git a/examples/webkit/simpleselector/main.cpp b/examples/webkit/simpleselector/main.cpp new file mode 100644 index 0000000..74c5469 --- /dev/null +++ b/examples/webkit/simpleselector/main.cpp @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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$ +** +****************************************************************************/ + +//! [main program] +#include <QtGui> +#include "window.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + Window window; + window.setUrl(QUrl("http://www.webkit.org")); + window.show(); + return app.exec(); +} +//! [main program] diff --git a/examples/webkit/simpleselector/simpleselector.pro b/examples/webkit/simpleselector/simpleselector.pro new file mode 100644 index 0000000..3f3037f --- /dev/null +++ b/examples/webkit/simpleselector/simpleselector.pro @@ -0,0 +1,11 @@ +QT += webkit +FORMS = window.ui +HEADERS = window.h +SOURCES = main.cpp \ + window.cpp + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/webkit/simpleselector +sources.files = $$SOURCES $$HEADERS $$FORMS $$RESOURCES *.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/webkit/simpleselector +INSTALLS += target sources diff --git a/examples/webkit/simpleselector/window.cpp b/examples/webkit/simpleselector/window.cpp new file mode 100644 index 0000000..ad54487 --- /dev/null +++ b/examples/webkit/simpleselector/window.cpp @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 <QWebElement> +#include <QWebFrame> +#include "window.h" + +//! [Window class constructor] +Window::Window(QWidget *parent) + : QWidget(parent) +{ + setupUi(this); +} +//! [Window class constructor] + +//! [return pressed] +void Window::on_elementLineEdit_returnPressed() +{ + QWebFrame *frame = webView->page()->mainFrame(); + +//! [select elements] + QWebElement document = frame->documentElement(); + QWebElementCollection elements = document.findAll(elementLineEdit->text()); +//! [select elements] + + foreach (QWebElement element, elements) + element.setAttribute("style", "background-color: #f0f090"); +} +//! [return pressed] + +//! [button clicked] +void Window::on_highlightButton_clicked() +{ + on_elementLineEdit_returnPressed(); +} +//! [button clicked] + +//! [set URL] +void Window::setUrl(const QUrl &url) +{ + webView->setUrl(url); +} +//! [set URL] diff --git a/examples/webkit/simpleselector/window.h b/examples/webkit/simpleselector/window.h new file mode 100644 index 0000000..9f9344a --- /dev/null +++ b/examples/webkit/simpleselector/window.h @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples 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 WINDOW_H +#define WINDOW_H + +#include <QUrl> +#include <QWidget> +//! [Window class definition] +#include "ui_window.h" + +class Window : public QWidget, private Ui::Window +{ + Q_OBJECT + +public: + Window(QWidget *parent = 0); + void setUrl(const QUrl &url); + +public slots: + void on_elementLineEdit_returnPressed(); + void on_highlightButton_clicked(); +}; +//! [Window class definition] + +#endif diff --git a/examples/webkit/simpleselector/window.ui b/examples/webkit/simpleselector/window.ui new file mode 100644 index 0000000..aa824df --- /dev/null +++ b/examples/webkit/simpleselector/window.ui @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Window</class> + <widget class="QWidget" name="Window"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>640</width> + <height>480</height> + </rect> + </property> + <property name="windowTitle"> + <string>Web Element Selector</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QWebView" name="webView"> + <property name="url"> + <url> + <string>http://webkit.org/</string> + </url> + </property> + </widget> + </item> + <item> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <layout class="QFormLayout" name="formLayout"> + <property name="fieldGrowthPolicy"> + <enum>QFormLayout::ExpandingFieldsGrow</enum> + </property> + <item row="0" column="0"> + <widget class="QLabel" name="elementLabel"> + <property name="text"> + <string>&Element:</string> + </property> + <property name="buddy"> + <cstring>elementLineEdit</cstring> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="elementLineEdit"> + <property name="text"> + <string>li a</string> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QPushButton" name="highlightButton"> + <property name="text"> + <string>&Highlight</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>QWebView</class> + <extends>QWidget</extends> + <header>QtWebKit/QWebView</header> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> diff --git a/examples/webkit/webkit.pro b/examples/webkit/webkit.pro index 0a1d6bd..c985ed5 100644 --- a/examples/webkit/webkit.pro +++ b/examples/webkit/webkit.pro @@ -1,7 +1,9 @@ TEMPLATE = subdirs -SUBDIRS += formextractor \ +SUBDIRS += domtraversal \ + formextractor \ previewer \ - fancybrowser + fancybrowser \ + simpleselector contains(QT_CONFIG, openssl):SUBDIRS += googlechat diff --git a/examples/xmlpatterns/filetree/filetree.pro b/examples/xmlpatterns/filetree/filetree.pro index 1683491..4fcf7cb 100644 --- a/examples/xmlpatterns/filetree/filetree.pro +++ b/examples/xmlpatterns/filetree/filetree.pro @@ -2,7 +2,6 @@ SOURCES += main.cpp filetree.cpp mainwindow.cpp ../shared/xmlsyntaxhighlighter.c HEADERS += filetree.h mainwindow.h ../shared/xmlsyntaxhighlighter.h FORMS += forms/mainwindow.ui QT += xmlpatterns -CONFIG -= app_bundle RESOURCES += queries.qrc INCLUDEPATH += ../shared/ diff --git a/mkspecs/linux-g++-maemo/qmake.conf b/mkspecs/linux-g++-maemo/qmake.conf new file mode 100644 index 0000000..c39ba2c --- /dev/null +++ b/mkspecs/linux-g++-maemo/qmake.conf @@ -0,0 +1,32 @@ +# +# qmake configuration for Maemo 5 & 6 +# + +MAKEFILE_GENERATOR = UNIX +TEMPLATE = app +CONFIG += qt warn_on release incremental link_prl +QT += core gui +QMAKE_INCREMENTAL_STYLE = sublib + +include(../common/g++.conf) +include(../common/linux.conf) + +# Work round scratchbox not having standard paths in it's default search path +QMAKE_LFLAGS += -Wl,-rpath-link=/lib +QMAKE_LFLAGS += -Wl,-rpath-link=/usr/lib + +# Override the default lib/include directories for scratchbox: +QMAKE_INCDIR_X11 = /usr/include/X11 +QMAKE_INCDIR_OPENGL = /usr/include +QMAKE_LIBDIR_X11 = /usr/lib +QMAKE_LIBDIR_OPENGL = /usr/lib + +# We still need to generate debug symbols in release mode to put into the *-dbg packages: +QMAKE_CFLAGS_RELEASE += -g -fno-omit-frame-pointer -fno-optimize-sibling-calls +QMAKE_CXXFLAGS_RELEASE += -g -fno-omit-frame-pointer -fno-optimize-sibling-calls + +# Work round PowerVR SGX 1.3 driver bug with glScissor & FBOs: +DEFINES += QT_GL_NO_SCISSOR_TEST + + +load(qt_config) diff --git a/mkspecs/linux-g++-maemo/qplatformdefs.h b/mkspecs/linux-g++-maemo/qplatformdefs.h new file mode 100644 index 0000000..857eaf3 --- /dev/null +++ b/mkspecs/linux-g++-maemo/qplatformdefs.h @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the qmake spec 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 "../linux-g++/qplatformdefs.h" diff --git a/mkspecs/symbian-sbsv2/flm/qt/qmake_generate_temp_dirs.flm b/mkspecs/symbian-sbsv2/flm/qt/qmake_generate_temp_dirs.flm deleted file mode 100644 index ca6cca9..0000000 --- a/mkspecs/symbian-sbsv2/flm/qt/qmake_generate_temp_dirs.flm +++ /dev/null @@ -1,22 +0,0 @@ -# /**************************************************************************** -# ** -# ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -# ** Contact: Nokia Corporation (qt-info@nokia.com) -# ** -# ** This file is part of symbian-sbsv2 mkspec. -# ** -# ****************************************************************************/ - -include $(FLMHOME)/metaflm.mk - -SINGLETON:=$(call sanitise,TEMP_DIRS_$(EXTENSION_ROOT)) - -ifeq ($($(SINGLETON)),) -$(SINGLETON):=1 -$(call makepath,$(DIRS)) -$(eval $(call GenerateStandardCleanTarget,'',$(DIRS))) -endif - - - - diff --git a/mkspecs/symbian-sbsv2/flm/qt/qt.xml b/mkspecs/symbian-sbsv2/flm/qt/qt.xml index 5074e47..c99b5e2 100644 --- a/mkspecs/symbian-sbsv2/flm/qt/qt.xml +++ b/mkspecs/symbian-sbsv2/flm/qt/qt.xml @@ -35,11 +35,6 @@ <param name='LINK_TARGET' /> </interface> - <interface name="qt.qmake_generate_temp_dirs" extends="Symbian.UserFLM" - flm="qmake_generate_temp_dirs.flm"> - <param name='DIRS' /> - </interface> - <interface name="qt.qmake_store_build" extends="Symbian.UserFLM" flm="qmake_store_build.flm"> </interface> diff --git a/projects.pro b/projects.pro index aa1eb71..497acd0 100644 --- a/projects.pro +++ b/projects.pro @@ -45,7 +45,12 @@ for(PROJECT, $$list($$lower($$unique(QT_BUILD_PARTS)))) { } else:isEqual(PROJECT, docs) { contains(QT_BUILD_PARTS, tools):include(doc/doc.pri) } else:isEqual(PROJECT, translations) { - contains(QT_BUILD_PARTS, tools):include(translations/translations.pri) + contains(QT_BUILD_PARTS, tools) { + include(translations/translations.pri) # ts targets + } else { + SUBDIRS += tools/linguist/lrelease + } + SUBDIRS += translations # qm build step } else:isEqual(PROJECT, qmake) { # SUBDIRS += qmake } else { diff --git a/qmake/generators/symbian/symmake.cpp b/qmake/generators/symbian/symmake.cpp index 8ec4b3f..1326a49 100644 --- a/qmake/generators/symbian/symmake.cpp +++ b/qmake/generators/symbian/symmake.cpp @@ -610,19 +610,10 @@ void SymbianMakefileGenerator::initMmpVariables() incpaths << project->values("UI_HEADERS_DIR"); incpaths << project->values("UI_DIR"); - QString epocPath("epoc32"); for (int j = 0; j < incpaths.size(); ++j) { QString includepath = canonizePath(incpaths.at(j)); appendIfnotExist(sysincspaths, includepath); - // As a workaround for Symbian toolchain insistence to treat include - // statements as relative to source file rather than the file they appear in, - // we generate extra temporary include directories to make - // relative include paths used in various headers to work properly. - // Note that this is not a fix-all solution; it's just a stop-gap measure - // to make Qt itself build until toolchain can support relative includes in - // a way that Qt expects. - if (!includepath.contains(epocPath)) // No temp dirs for epoc includes - appendIfnotExist(sysincspaths, includepath + QString("/" QT_EXTRA_INCLUDE_DIR)); + appendAbldTempDirs(sysincspaths, includepath); } // Remove duplicate include path entries diff --git a/qmake/generators/symbian/symmake.h b/qmake/generators/symbian/symmake.h index 36f6e05..a3e2c17 100644 --- a/qmake/generators/symbian/symmake.h +++ b/qmake/generators/symbian/symmake.h @@ -147,6 +147,7 @@ protected: virtual void writeBldInfMkFilePart(QTextStream& t, bool addDeploymentExtension) = 0; virtual void writeMkFile(const QString& wrapperFileName, bool deploymentOnly) = 0; virtual void writeWrapperMakefile(QFile& wrapperFile, bool isPrimaryMakefile) = 0; + virtual void appendAbldTempDirs(QStringList& sysincspaths, QString includepath) = 0; public: diff --git a/qmake/generators/symbian/symmake_abld.cpp b/qmake/generators/symbian/symmake_abld.cpp index 4d1673b..1b5464f 100644 --- a/qmake/generators/symbian/symmake_abld.cpp +++ b/qmake/generators/symbian/symmake_abld.cpp @@ -450,3 +450,17 @@ void SymbianAbldMakefileGenerator::writeBldInfMkFilePart(QTextStream& t, bool ad t << "gnumakefile " << gnuMakefileName << endl; } } + +void SymbianAbldMakefileGenerator::appendAbldTempDirs(QStringList& sysincspaths, QString includepath) +{ + // As a workaround for Symbian toolchain insistence to treat include + // statements as relative to source file rather than the file they appear in, + // we generate extra temporary include directories to make + // relative include paths used in various headers to work properly. + // Note that this is not a fix-all solution; it's just a stop-gap measure + // to make Qt itself build until toolchain can support relative includes in + // a way that Qt expects. + QString epocPath("epoc32"); + if (!includepath.contains(epocPath)) // No temp dirs for epoc includes + appendIfnotExist(sysincspaths, includepath + QString("/" QT_EXTRA_INCLUDE_DIR)); +} diff --git a/qmake/generators/symbian/symmake_abld.h b/qmake/generators/symbian/symmake_abld.h index f844096..11b9cd1 100644 --- a/qmake/generators/symbian/symmake_abld.h +++ b/qmake/generators/symbian/symmake_abld.h @@ -55,6 +55,7 @@ protected: virtual void writeBldInfMkFilePart(QTextStream& t, bool addDeploymentExtension); virtual void writeMkFile(const QString& wrapperFileName, bool deploymentOnly); virtual void writeWrapperMakefile(QFile& wrapperFile, bool isPrimaryMakefile); + virtual void appendAbldTempDirs(QStringList& sysincspaths, QString includepath); void writeStoreBuildTarget(QTextStream &t); bool writeDeploymentTargets(QTextStream &t); diff --git a/qmake/generators/symbian/symmake_sbsv2.cpp b/qmake/generators/symbian/symmake_sbsv2.cpp index cad2736..5e624de 100644 --- a/qmake/generators/symbian/symmake_sbsv2.cpp +++ b/qmake/generators/symbian/symmake_sbsv2.cpp @@ -182,15 +182,22 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo } t << endl; + QString winscw("winscw"); // For more specific builds, targets are in this form: build-platform, e.g. release-armv5 foreach(QString item, debugPlatforms) { t << "debug-" << item << ": " << BLD_INF_FILENAME << endl; - t << "\t$(SBS) -c " << item << "_udeb" << testClause << endl; + if(QString::compare(item, winscw) == 0) + t << "\t$(SBS) -c " << item << "_udeb.mwccinc" << testClause << endl; + else + t << "\t$(SBS) -c " << item << "_udeb" << testClause << endl; } foreach(QString item, releasePlatforms) { t << "release-" << item << ": " << BLD_INF_FILENAME << endl; - t << "\t$(SBS) -c " << item << "_urel" << testClause << endl; + if(QString::compare(item, winscw) == 0) + t << "\t$(SBS) -c " << item << "_urel.mwccinc" << testClause << endl; + else + t << "\t$(SBS) -c " << item << "_urel" << testClause << endl; } t << endl; @@ -379,28 +386,6 @@ void SymbianSbsv2MakefileGenerator::writeBldInfExtensionRulesPart(QTextStream& t t << "END" << endl; } - // Generate temp dirs - QString tempDirs; - for (QMap<QString, QStringList>::iterator it = systeminclude.begin(); it != systeminclude.end(); ++it) { - QStringList values = it.value(); - for (int i = 0; i < values.size(); ++i) { - QString value = values.at(i); - if (value.endsWith("/" QT_EXTRA_INCLUDE_DIR)) { - value = fileInfo(value).absoluteFilePath(); - tempDirs.append(value); - tempDirs.append(" "); - } - } - } - - if (tempDirs.size()) - tempDirs.chop(1); // Remove final space - - t << "START EXTENSION qt/qmake_generate_temp_dirs" << endl; - t << "OPTION DIRS " << tempDirs << endl; - t << "END" << endl; - t << endl; - t << "START EXTENSION qt/qmake_store_build" << endl; t << "END" << endl; t << endl; @@ -414,3 +399,10 @@ void SymbianSbsv2MakefileGenerator::writeBldInfMkFilePart(QTextStream& t, bool a Q_UNUSED(t); Q_UNUSED(addDeploymentExtension); } + +void SymbianSbsv2MakefileGenerator::appendAbldTempDirs(QStringList& sysincspaths, QString includepath) +{ + //Do nothing + Q_UNUSED(sysincspaths); + Q_UNUSED(includepath); +} diff --git a/qmake/generators/symbian/symmake_sbsv2.h b/qmake/generators/symbian/symmake_sbsv2.h index 1cbddb3..9472b68 100644 --- a/qmake/generators/symbian/symmake_sbsv2.h +++ b/qmake/generators/symbian/symmake_sbsv2.h @@ -55,6 +55,7 @@ protected: virtual void writeBldInfMkFilePart(QTextStream& t, bool addDeploymentExtension); virtual void writeMkFile(const QString& wrapperFileName, bool deploymentOnly); virtual void writeWrapperMakefile(QFile& wrapperFile, bool isPrimaryMakefile); + virtual void appendAbldTempDirs(QStringList& sysincspaths, QString includepath); public: diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri b/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri index ea6e5ab..28328e7 100644 --- a/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri +++ b/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri @@ -52,7 +52,7 @@ win32-* { # Rules when JIT enabled (not disabled) !contains(DEFINES, ENABLE_JIT=0) { - linux-g++*:greaterThan(QT_GCC_MAJOR_VERSION,3):greaterThan(QT_GCC_MINOR_VERSION,0) { + linux*-g++*:greaterThan(QT_GCC_MAJOR_VERSION,3):greaterThan(QT_GCC_MINOR_VERSION,0) { QMAKE_CXXFLAGS += -fno-stack-protector QMAKE_CFLAGS += -fno-stack-protector } diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h index 2a407d4..188b68f 100644 --- a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h +++ b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h @@ -98,6 +98,10 @@ /* regardless of operating environment */ #if defined(_AIX) #define WTF_PLATFORM_AIX 1 +/* 64-bit mode on AIX */ +#ifdef __64BIT__ +#define WTF_PLATFORM_AIX64 1 +#endif #endif /* PLATFORM(HPUX) */ @@ -708,6 +712,8 @@ #define WTF_USE_JSVALUE64 1 #elif (PLATFORM(IA64) && !PLATFORM(IA64_32)) || PLATFORM(SPARC64) #define WTF_USE_JSVALUE64 1 +#elif PLATFORM(AIX64) +#define WTF_USE_JSVALUE64 1 #elif PLATFORM(ARM) || PLATFORM(PPC64) #define WTF_USE_JSVALUE32 1 #elif PLATFORM(WIN_OS) && COMPILER(MINGW) diff --git a/src/3rdparty/phonon/CMakeLists.txt b/src/3rdparty/phonon/CMakeLists.txt index c18c3e7..a25ec5d 100644 --- a/src/3rdparty/phonon/CMakeLists.txt +++ b/src/3rdparty/phonon/CMakeLists.txt @@ -55,7 +55,7 @@ if (CMAKE_COMPILER_IS_GNUCXX) if (CMAKE_SYSTEM_NAME MATCHES Linux) set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-long-long -std=iso9899:1990 -Wundef -Wcast-align -Werror-implicit-function-declaration -Wchar-subscripts -Wall -W -Wpointer-arith -Wwrite-strings -Wformat-security -Wmissing-format-attribute -fno-common") set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wnon-virtual-dtor -Wno-long-long -ansi -Wundef -Wcast-align -Wchar-subscripts -Wall -W -Wpointer-arith -Wformat-security -fno-exceptions -fno-check-new -fno-common") - add_definitions (-D_BSD_SOURCE) + add_definitions (-D_BSD_SOURCE -DQT_NO_EXCEPTIONS) endif (CMAKE_SYSTEM_NAME MATCHES Linux) # gcc under Windows @@ -115,7 +115,7 @@ if (CMAKE_COMPILER_IS_GNUCXX) string(REGEX MATCH "(--enable-libstdcxx-allocator=mt)" _GCC_COMPILED_WITH_BAD_ALLOCATOR "${_gcc_alloc_info}") endif (GCC_IS_NEWER_THAN_4_1) - if (__KDE_HAVE_GCC_VISIBILITY AND GCC_IS_NEWER_THAN_4_1 AND NOT _GCC_COMPILED_WITH_BAD_ALLOCATOR) + if (__KDE_HAVE_GCC_VISIBILITY AND GCC_IS_NEWER_THAN_4_1 AND NOT _GCC_COMPILED_WITH_BAD_ALLOCATOR AND NOT WIN32) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") set (KDE4_C_FLAGS "-fvisibility=hidden") # check that Qt defines Q_DECL_EXPORT as __attribute__ ((visibility("default"))) @@ -137,9 +137,9 @@ if (CMAKE_COMPILER_IS_GNUCXX) if (GCC_IS_NEWER_THAN_4_2) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden") endif (GCC_IS_NEWER_THAN_4_2) - else (__KDE_HAVE_GCC_VISIBILITY AND GCC_IS_NEWER_THAN_4_1 AND NOT _GCC_COMPILED_WITH_BAD_ALLOCATOR) + else (__KDE_HAVE_GCC_VISIBILITY AND GCC_IS_NEWER_THAN_4_1 AND NOT _GCC_COMPILED_WITH_BAD_ALLOCATOR AND NOT WIN32) set (__KDE_HAVE_GCC_VISIBILITY 0) - endif (__KDE_HAVE_GCC_VISIBILITY AND GCC_IS_NEWER_THAN_4_1 AND NOT _GCC_COMPILED_WITH_BAD_ALLOCATOR) + endif (__KDE_HAVE_GCC_VISIBILITY AND GCC_IS_NEWER_THAN_4_1 AND NOT _GCC_COMPILED_WITH_BAD_ALLOCATOR AND NOT WIN32) endif (CMAKE_COMPILER_IS_GNUCXX) @@ -149,8 +149,8 @@ set(CMAKE_COLOR_MAKEFILE ON) set(PHONON_LIB_MAJOR_VERSION "4") set(PHONON_LIB_MINOR_VERSION "3") -set(PHONON_LIB_PATCH_VERSION "1") -set(PHONON_LIB_VERSION "${PHONON_LIB_MAJOR_VERSION}.3.1") +set(PHONON_LIB_PATCH_VERSION "50") +set(PHONON_LIB_VERSION "${PHONON_LIB_MAJOR_VERSION}.4.0") set(PHONON_LIB_SOVERSION ${PHONON_LIB_MAJOR_VERSION}) add_definitions(${QT_DEFINITIONS}) @@ -177,11 +177,15 @@ endmacro(_SET_FANCY) set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)" ) -_set_fancy(EXEC_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" "Base directory for executables and libraries") -_set_fancy(SHARE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/share" "Base directory for files which go to share/") +if (WIN32) + _set_fancy(EXEC_INSTALL_PREFIX "." "Base directory for executables and libraries") +else(WIN32) + _set_fancy(EXEC_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" "Base directory for executables and libraries") +endif(WIN32) +_set_fancy(SHARE_INSTALL_PREFIX "${EXEC_INSTALL_PREFIX}/share" "Base directory for files which go to share/") +_set_fancy(INCLUDE_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/include" "The subdirectory to the header prefix") _set_fancy(BIN_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/bin" "The install dir for executables (default ${EXEC_INSTALL_PREFIX}/bin)") _set_fancy(LIB_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX}" "The subdirectory relative to the install prefix where libraries will be installed (default is ${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX})") -_set_fancy(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include" "The subdirectory to the header prefix") _set_fancy(PLUGIN_INSTALL_DIR "${LIB_INSTALL_DIR}/kde4" "The subdirectory relative to the install prefix where plugins will be installed (default is ${LIB_INSTALL_DIR}/kde4)") _set_fancy(ICON_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/icons" "The icon install dir (default ${SHARE_INSTALL_PREFIX}/share/icons/)") _set_fancy(SERVICES_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/kde4/services" "The install dir for service (desktop, protocol, ...) files") @@ -196,6 +200,8 @@ set(INSTALL_TARGETS_DEFAULT_ARGS RUNTIME DESTINATION "${BIN_INSTALL_DIR}" if(APPLE) set(INSTALL_TARGETS_DEFAULT_ARGS ${INSTALL_TARGETS_DEFAULT_ARGS} BUNDLE DESTINATION "${BUNDLE_INSTALL_DIR}" ) + set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "${CMAKE_SHARED_MODULE_CREATE_C_FLAGS} -flat_namespace -undefined dynamic_lookup") + set(CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS "${CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS} -flat_namespace -undefined dynamic_lookup") endif(APPLE) if (CMAKE_SYSTEM_NAME MATCHES Linux) @@ -249,7 +255,6 @@ if(APPLE) endif(APPLE) -add_subdirectory(cmake) add_subdirectory(phonon) add_subdirectory(includes) if (Q_WS_MAC AND BUILD_PHONON_QT7) diff --git a/src/3rdparty/phonon/ds9/CMakeLists.txt b/src/3rdparty/phonon/ds9/CMakeLists.txt index 1bb6f6f..7378b53 100644 --- a/src/3rdparty/phonon/ds9/CMakeLists.txt +++ b/src/3rdparty/phonon/ds9/CMakeLists.txt @@ -40,14 +40,15 @@ if (BUILD_PHONON_DS9) ) add_definitions(-DPHONON_MAKE_QT_ONLY_BACKEND -DUNICODE) - automoc4_add_library(phonon_ds9 SHARED ${phonon_ds9_SRCS}) + automoc4_add_library(phonon_ds9 MODULE ${phonon_ds9_SRCS}) set_target_properties(phonon_ds9 PROPERTIES PREFIX "") target_link_libraries(phonon_ds9 ${PHONON_LIBS} ${QT_QTOPENGL_LIBRARY} ${OPENGL_gl_LIBRARY} dxguid strmiids dmoguids msdmo ole32 oleaut32 uuid gdi32) + # 'MODULE' is treated as a LIBRARY install(TARGETS phonon_ds9 RUNTIME DESTINATION ${BIN_INSTALL_DIR}/phonon_backend - LIBRARY DESTINATION ${LIB_INSTALL_DIR} + LIBRARY DESTINATION ${BIN_INSTALL_DIR}/phonon_backend ARCHIVE DESTINATION ${LIB_INSTALL_DIR}) install(FILES ds9.desktop DESTINATION ${SERVICES_INSTALL_DIR}/phononbackends) endif (BUILD_PHONON_DS9) diff --git a/src/3rdparty/phonon/ds9/backend.cpp b/src/3rdparty/phonon/ds9/backend.cpp index 6ed0145..fbc4bdc 100644 --- a/src/3rdparty/phonon/ds9/backend.cpp +++ b/src/3rdparty/phonon/ds9/backend.cpp @@ -41,6 +41,8 @@ namespace Phonon { namespace DS9 { + QMutex *Backend::directShowMutex = 0; + bool Backend::AudioMoniker::operator==(const AudioMoniker &other) { return other->IsEqual(*this) == S_OK; @@ -50,6 +52,8 @@ namespace Phonon Backend::Backend(QObject *parent, const QVariantList &) : QObject(parent) { + directShowMutex = &m_directShowMutex; + ::CoInitialize(0); //registering meta types @@ -62,11 +66,8 @@ namespace Phonon m_audioOutputs.clear(); m_audioEffects.clear(); ::CoUninitialize(); - } - QMutex *Backend::directShowMutex() - { - return &qobject_cast<Backend*>(qt_plugin_instance())->m_directShowMutex; + directShowMutex = 0; } QObject *Backend::createObject(BackendInterface::Class c, QObject *parent, const QList<QVariant> &args) diff --git a/src/3rdparty/phonon/ds9/backend.h b/src/3rdparty/phonon/ds9/backend.h index 8b020c2..7c3c109 100644 --- a/src/3rdparty/phonon/ds9/backend.h +++ b/src/3rdparty/phonon/ds9/backend.h @@ -64,7 +64,7 @@ namespace Phonon Filter getAudioOutputFilter(int index) const; - static QMutex *directShowMutex(); + static QMutex *directShowMutex; Q_SIGNALS: void objectDescriptionChanged(ObjectDescriptionType); diff --git a/src/3rdparty/phonon/ds9/backendnode.cpp b/src/3rdparty/phonon/ds9/backendnode.cpp index 855357a..3afcafa 100644 --- a/src/3rdparty/phonon/ds9/backendnode.cpp +++ b/src/3rdparty/phonon/ds9/backendnode.cpp @@ -58,7 +58,24 @@ namespace Phonon BackendNode::~BackendNode() { //this will remove the filter from the graph - mediaObjectDestroyed(); + FILTER_INFO info; + for(int i = 0; i < FILTER_COUNT; ++i) { + const Filter &filter = m_filters[i]; + if (!filter) + continue; + filter->QueryFilterInfo(&info); + if (info.pGraph) { + HRESULT hr = info.pGraph->RemoveFilter(filter); + + if (hr == VFW_E_NOT_STOPPED && m_mediaObject) { + m_mediaObject->ensureStopped(); + + hr = info.pGraph->RemoveFilter(filter); + } + Q_ASSERT(SUCCEEDED(hr)); + info.pGraph->Release(); + } + } } void BackendNode::setMediaObject(MediaObject *mo) diff --git a/src/3rdparty/phonon/ds9/ds9.desktop b/src/3rdparty/phonon/ds9/ds9.desktop index ece3c9c..764390e 100644 --- a/src/3rdparty/phonon/ds9/ds9.desktop +++ b/src/3rdparty/phonon/ds9/ds9.desktop @@ -9,28 +9,69 @@ X-KDE-PhononBackendInfo-Website=http://qt.nokia.com/ InitialPreference=15 Name=DirectShow9 +Name[bg]=DirectShow9 +Name[ca]=DirectShow9 +Name[cs]=DirectShow9 +Name[da]=DirectShow9 +Name[de]=DirectShow9 +Name[el]=DirectShow9 +Name[en_GB]=DirectShow9 +Name[es]=DirectShow9 +Name[et]=DirectShow9 +Name[eu]=DirectShow9 +Name[fr]=DirectShow9 +Name[ga]=DirectShow9 +Name[gl]=DirectShow9 +Name[hsb]=DirectShow9 +Name[hu]=DirectShow9 +Name[is]=DirectShow9 +Name[it]=DirectShow9 +Name[ja]=DirectShow9 +Name[ko]=DirectShow9 +Name[ku]=DirectShow9 +Name[lt]=DirectShow9 +Name[lv]=DirectShow9 +Name[nds]=DirectShow9 +Name[nl]=DirectShow9 +Name[nn]=DirectShow9 Name[pa]=ਡਾਇਰੈਕਸ਼ੋ9 +Name[pl]=DirectShow9 +Name[pt]=DirectShow9 +Name[pt_BR]=DirectShow9 +Name[se]=DirectShow9 Name[sk]=DirectShow 9 Name[sl]=DirectShow 9 Name[sr]=Директшоу‑9 Name[sr@latin]=DirectShow‑9 Name[sv]=Directshow 9 +Name[tr]=DirectShow9 +Name[uk]=DirectShow9 Name[x-test]=xxDirectShow9xx +Name[zh_CN]=DirectShow9 +Name[zh_TW]=DirectShow9 Comment=Phonon DirectShow9 backend Comment[bg]=Phonon DirectShow9 Comment[ca]=Dorsal DirectShow9 del Phonon +Comment[cs]=Phonon DirectShow9 backend Comment[da]=DirectShow9-backend til Phonon Comment[de]=Phonon-Treiber für DirectShow9 Comment[el]=Σύστημα υποστήριξης DirectShow9 του Phonon +Comment[en_GB]=Phonon DirectShow9 backend Comment[es]=Motor DirectShow9 para Phonon Comment[et]=Phononi DirectShow9 taustaprogramm +Comment[eu]=Phonon DirectShow9 backend Comment[fr]=Système de gestion DirectShow9 pour Phonon Comment[ga]=Inneall DirectShow9 le haghaidh Phonon Comment[gl]=Infraestrutura de DirectShow9 para Phonon +Comment[hsb]=Phonon DirectShow9 backend +Comment[hu]=Phonon DirectShow9 modul +Comment[is]=Phonon DirectShow9 bakendi Comment[it]=Motore DirectShow9 di Phonon Comment[ja]=Phonon DirectShow9 バックエンド Comment[ko]=Phonon DirectShow9 백엔드 +Comment[ku]=Binesaza Phonon DirectShow9 +Comment[lt]=Phonon DirectShow9 galinė sąsaja Comment[lv]=Phonon DirectShow9 aizmugure Comment[nds]=Phonon-Hülpprogrmm DirectShow9 Comment[nl]=DirectShow9-backend (Phonon) @@ -39,6 +80,7 @@ Comment[pa]=ਫੋਨੋਨ ਡਾਇਰੈਕਟਸ਼ੋ9 ਬੈਕਐਂਡ Comment[pl]=Obsługa DirectShow9 przez Phonon Comment[pt]=Infra-estrutura do DirectShow9 para o Phonon Comment[pt_BR]=Infraestrutura Phonon DirectShow9 +Comment[se]=Phonon DirectShow9 duogášmohtor Comment[sk]=Phonon DirectShow 9 podsystém Comment[sl]=Phononova Hrbtenica DirectShow 9 Comment[sr]=Директшоу‑9 као позадина Фонона diff --git a/src/3rdparty/phonon/ds9/mediaobject.cpp b/src/3rdparty/phonon/ds9/mediaobject.cpp index 250b94a..106a4c8 100644 --- a/src/3rdparty/phonon/ds9/mediaobject.cpp +++ b/src/3rdparty/phonon/ds9/mediaobject.cpp @@ -177,7 +177,7 @@ namespace Phonon void WorkerThread::handleTask() { - QMutexLocker locker(Backend::directShowMutex()); + QMutexLocker locker(Backend::directShowMutex); { QMutexLocker locker(&m_mutex); if (m_finished || m_queue.isEmpty()) { diff --git a/src/3rdparty/phonon/gstreamer/CMakeLists.txt b/src/3rdparty/phonon/gstreamer/CMakeLists.txt index 4946f5f..08f892a 100644 --- a/src/3rdparty/phonon/gstreamer/CMakeLists.txt +++ b/src/3rdparty/phonon/gstreamer/CMakeLists.txt @@ -17,8 +17,20 @@ project(phonon-gstreamer) include(ConfigureChecks.cmake) if (BUILD_PHONON_GSTREAMER) - include_directories(${GSTREAMER_INCLUDE_DIR} ${GLIB2_INCLUDE_DIR} - ${LIBXML2_INCLUDE_DIR}) + include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ${GSTREAMER_INCLUDE_DIR} + ${GLIB2_INCLUDE_DIR} + ${LIBXML2_INCLUDE_DIR} + ${X11_X11_INCLUDE_PATH}) + add_definitions(-DPHONON_BACKEND_VERSION_4_2) + + # configure plugin api + if(USE_INSTALL_PLUGIN) + set(PLUGIN_INSTALL_API TRUE) + endif(USE_INSTALL_PLUGIN) + + configure_file(phonon-config-gstreamer.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/phonon-config-gstreamer.h ) set(phonon_gstreamer_SRCS audiooutput.cpp @@ -45,17 +57,17 @@ if (BUILD_PHONON_GSTREAMER) ) find_package(Alsa) - if(ALSA_FOUND) + macro_ensure_version("0.10.22" ${GSTREAMER_VERSION} GSTREAMER_HAS_NONBLOCKING_ALSASINK) + if(ALSA_FOUND AND NOT GSTREAMER_HAS_NONBLOCKING_ALSASINK) add_definitions(-DUSE_ALSASINK2) include_directories(${ALSA_INCLUDES}) set(phonon_gstreamer_SRCS ${phonon_gstreamer_SRCS} alsasink2.c ) - endif(ALSA_FOUND) + endif(ALSA_FOUND AND NOT GSTREAMER_HAS_NONBLOCKING_ALSASINK) - automoc4(phonon_gstreamer phonon_gstreamer_SRCS) - add_library(phonon_gstreamer SHARED ${phonon_gstreamer_SRCS}) + automoc4_add_library(phonon_gstreamer MODULE ${phonon_gstreamer_SRCS}) set_target_properties(phonon_gstreamer PROPERTIES PREFIX "") target_link_libraries(phonon_gstreamer ${QT_QTOPENGL_LIBRARY} diff --git a/src/3rdparty/phonon/gstreamer/audiooutput.cpp b/src/3rdparty/phonon/gstreamer/audiooutput.cpp index 138a7e4..641ff6b 100644 --- a/src/3rdparty/phonon/gstreamer/audiooutput.cpp +++ b/src/3rdparty/phonon/gstreamer/audiooutput.cpp @@ -42,7 +42,6 @@ AudioOutput::AudioOutput(Backend *backend, QObject *parent) static int count = 0; m_name = "AudioOutput" + QString::number(count++); if (m_backend->isValid()) { - g_set_application_name(qApp->applicationName().toUtf8()); m_audioBin = gst_bin_new (NULL); gst_object_ref (GST_OBJECT (m_audioBin)); gst_object_sink (GST_OBJECT (m_audioBin)); @@ -137,11 +136,19 @@ bool AudioOutput::setOutputDevice(int newDevice) bool success = false; const QList<AudioDevice> deviceList = m_backend->deviceManager()->audioOutputDevices(); - if (m_audioSink && newDevice >= 0 && newDevice < deviceList.size()) { + int deviceIdx = -1; + for (int i=0; i<deviceList.size(); i++) { + if (deviceList.at(i).id == newDevice) { + deviceIdx = i; + break; + } + } + + if (m_audioSink && deviceIdx >= 0) { // Save previous state GstState oldState = GST_STATE(m_audioSink); const QByteArray oldDeviceValue = GstHelper::property(m_audioSink, "device"); - const QByteArray deviceId = deviceList.at(newDevice).gstId; + const QByteArray deviceId = deviceList.at(deviceIdx).gstId; m_device = newDevice; // We test if the device can be opened by checking if it can go from NULL to READY state diff --git a/src/3rdparty/phonon/gstreamer/backend.cpp b/src/3rdparty/phonon/gstreamer/backend.cpp index e1ffd1f..dab6f35 100644 --- a/src/3rdparty/phonon/gstreamer/backend.cpp +++ b/src/3rdparty/phonon/gstreamer/backend.cpp @@ -49,6 +49,13 @@ Backend::Backend(QObject *parent, const QVariantList &) , m_debugLevel(Warning) , m_isValid(false) { + // In order to support reloading, we only set the app name once... + static bool first = true; + if (first) { + first = false; + g_set_application_name(qApp->applicationName().toUtf8()); + } + GError *err = 0; bool wasInit = gst_init_check(0, 0, &err); //init gstreamer: must be called before any gst-related functions if (err) @@ -85,7 +92,6 @@ Backend::Backend(QObject *parent, const QVariantList &) Backend::~Backend() { - gst_deinit(); } gboolean Backend::busCall(GstBus *bus, GstMessage *msg, gpointer data) @@ -208,8 +214,15 @@ QStringList Backend::availableMimeTypes() const GstPluginFeature *feature = GST_PLUGIN_FEATURE(iter->data); QString klass = gst_element_factory_get_klass(GST_ELEMENT_FACTORY(feature)); - if (klass == QLatin1String("Codec/Decoder/Audio") || - klass == QLatin1String("Codec/Decoder/Video")) { + if (klass == QLatin1String("Codec/Decoder") || + klass == QLatin1String("Codec/Decoder/Audio") || + klass == QLatin1String("Codec/Decoder/Video") || + klass == QLatin1String("Codec/Demuxer") || + klass == QLatin1String("Codec/Demuxer/Audio") || + klass == QLatin1String("Codec/Demuxer/Video") || + klass == QLatin1String("Codec/Parser") || + klass == QLatin1String("Codec/Parser/Audio") || + klass == QLatin1String("Codec/Parser/Video")) { const GList *static_templates; GstElementFactory *factory = GST_ELEMENT_FACTORY(feature); @@ -281,10 +294,13 @@ QHash<QByteArray, QVariant> Backend::objectDescriptionProperties(ObjectDescripti switch (type) { case Phonon::AudioOutputDeviceType: { QList<AudioDevice> audioDevices = deviceManager()->audioOutputDevices(); - if (index >= 0 && index < audioDevices.size()) { - ret.insert("name", audioDevices[index].gstId); - ret.insert("description", audioDevices[index].description); - ret.insert("icon", QLatin1String("audio-card")); + foreach(const AudioDevice &device, audioDevices) { + if (device.id == index) { + ret.insert("name", device.gstId); + ret.insert("description", device.description); + ret.insert("icon", QLatin1String("audio-card")); + break; + } } } break; diff --git a/src/3rdparty/phonon/gstreamer/mediaobject.cpp b/src/3rdparty/phonon/gstreamer/mediaobject.cpp index 5713263..eafaeec 100644 --- a/src/3rdparty/phonon/gstreamer/mediaobject.cpp +++ b/src/3rdparty/phonon/gstreamer/mediaobject.cpp @@ -344,7 +344,7 @@ void MediaObject::cb_pad_added(GstElement *decodebin, Q_UNUSED(decodebin); GstPad *decodepad = static_cast<GstPad*>(data); gst_pad_link (pad, decodepad); - gst_object_unref (decodepad); + //gst_object_unref (decodepad); } /** @@ -374,9 +374,21 @@ bool MediaObject::createPipefromURL(const QUrl &url) return false; // Set the device for MediaSource::Disc - QByteArray mediaDevice = QFile::encodeName(m_source.deviceName()); - if (!mediaDevice.isEmpty()) - g_object_set (m_datasource, "device", mediaDevice.constData(), (const char*)NULL); + if (m_source.type() == MediaSource::Disc) { + + if (g_object_class_find_property (G_OBJECT_GET_CLASS (m_datasource), "device")) { + QByteArray mediaDevice = QFile::encodeName(m_source.deviceName()); + if (!mediaDevice.isEmpty()) + g_object_set (G_OBJECT (m_datasource), "device", mediaDevice.constData(), (const char*)NULL); + } + + // Also Set optical disc speed to 2X for Audio CD + if (m_source.discType() == Phonon::Cd + && (g_object_class_find_property (G_OBJECT_GET_CLASS (m_datasource), "read-speed"))) { + g_object_set (G_OBJECT (m_datasource), "read-speed", 2, (const char*)NULL); + m_backend->logMessage(QString("new device speed : 2X"), Backend::Info, this); + } + } // Link data source into pipeline gst_bin_add(GST_BIN(m_pipeline), m_datasource); @@ -916,23 +928,27 @@ void MediaObject::setSource(const MediaSource &source) setError(tr("Could not open media source.")); break; - case MediaSource::Disc: // CD tracks can be specified by setting the url in the following way uri=cdda:4 + case MediaSource::Disc: { - QUrl url; + QString mediaUrl; switch (source.discType()) { - case Phonon::Cd: - url = QUrl(QLatin1String("cdda://")); - break; - case Phonon::Dvd: - url = QUrl(QLatin1String("dvd://")); - break; - case Phonon::Vcd: - url = QUrl(QLatin1String("vcd://")); - break; - default: - break; + case Phonon::NoDisc: + qWarning() << "I should never get to see a MediaSource that is a disc but doesn't specify which one"; + return; + case Phonon::Cd: // CD tracks can be specified by setting the url in the following way uri=cdda:4 + mediaUrl = QLatin1String("cdda://"); + break; + case Phonon::Dvd: + mediaUrl = QLatin1String("dvd://"); + break; + case Phonon::Vcd: + mediaUrl = QLatin1String("vcd://"); + break; + default: + qWarning() << "media " << source.discType() << " not implemented"; + return; } - if (!url.isEmpty() && createPipefromURL(url)) + if (!mediaUrl.isEmpty() && createPipefromURL(QUrl(mediaUrl))) m_loading = true; else setError(tr("Could not open media source.")); diff --git a/src/3rdparty/phonon/includes/CMakeLists.txt b/src/3rdparty/phonon/includes/CMakeLists.txt index 349acd8..dff86c3 100644 --- a/src/3rdparty/phonon/includes/CMakeLists.txt +++ b/src/3rdparty/phonon/includes/CMakeLists.txt @@ -35,7 +35,7 @@ install( FILES Phonon/VolumeFaderEffect Phonon/VolumeFaderInterface Phonon/VolumeSlider -DESTINATION ${INCLUDE_INSTALL_DIR}/KDE/Phonon) +DESTINATION ${INCLUDE_INSTALL_DIR}/KDE/Phonon COMPONENT Devel) install(FILES Phonon/Experimental/AbstractVideoDataOutput @@ -46,4 +46,4 @@ install(FILES Phonon/Experimental/VideoFrame Phonon/Experimental/VideoFrame2 Phonon/Experimental/Visualization -DESTINATION ${INCLUDE_INSTALL_DIR}/KDE/Phonon/Experimental) +DESTINATION ${INCLUDE_INSTALL_DIR}/KDE/Phonon/Experimental COMPONENT Devel) diff --git a/src/3rdparty/phonon/mmf/abstractaudioeffect.cpp b/src/3rdparty/phonon/mmf/abstractaudioeffect.cpp index a793390..a559249 100644 --- a/src/3rdparty/phonon/mmf/abstractaudioeffect.cpp +++ b/src/3rdparty/phonon/mmf/abstractaudioeffect.cpp @@ -29,6 +29,10 @@ using namespace Phonon::MMF; \internal */ +/*! \namespace Phonon::MMF + \internal +*/ + AbstractAudioEffect::AbstractAudioEffect(QObject *parent, const QList<EffectParameter> ¶ms) : MediaNode::MediaNode(parent) , m_params(params) diff --git a/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp b/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp index f2efaa0..99e96cd 100644 --- a/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp +++ b/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp @@ -109,12 +109,12 @@ void MMF::AbstractMediaPlayer::pause() case GroundState: case LoadingState: case PausedState: - case ErrorState: // Do nothing break; case StoppedState: case PlayingState: + case ErrorState: case BufferingState: doPause(); stopTickTimer(); @@ -289,10 +289,6 @@ void MMF::AbstractMediaPlayer::setNextSource(const MediaSource &source) } -//----------------------------------------------------------------------------- -// VolumeObserver -//----------------------------------------------------------------------------- - void MMF::AbstractMediaPlayer::volumeChanged(qreal volume) { TRACE_CONTEXT(AbstractMediaPlayer::volumeChanged, EAudioInternal); diff --git a/src/3rdparty/phonon/mmf/abstractmediaplayer.h b/src/3rdparty/phonon/mmf/abstractmediaplayer.h index cff7bab..cb6e437 100644 --- a/src/3rdparty/phonon/mmf/abstractmediaplayer.h +++ b/src/3rdparty/phonon/mmf/abstractmediaplayer.h @@ -56,8 +56,6 @@ public: virtual MediaSource source() const; virtual void setFileSource(const Phonon::MediaSource&, RFile&); virtual void setNextSource(const MediaSource &source); - - // VolumeObserver virtual void volumeChanged(qreal volume); protected: diff --git a/src/3rdparty/phonon/mmf/abstractplayer.cpp b/src/3rdparty/phonon/mmf/abstractplayer.cpp index de2722d..caf4092 100644 --- a/src/3rdparty/phonon/mmf/abstractplayer.cpp +++ b/src/3rdparty/phonon/mmf/abstractplayer.cpp @@ -92,11 +92,6 @@ void MMF::AbstractPlayer::setTransitionTime(qint32 time) m_transitionTime = time; } - -//----------------------------------------------------------------------------- -// VolumeObserver -//----------------------------------------------------------------------------- - void MMF::AbstractPlayer::volumeChanged(qreal volume) { m_volume = volume; @@ -134,7 +129,7 @@ void MMF::AbstractPlayer::setError(Phonon::ErrorType error, Phonon::ErrorType MMF::AbstractPlayer::errorType() const { const Phonon::ErrorType result = (ErrorState == m_state) - ? errorType() : NoError; + ? m_error : NoError; return result; } diff --git a/src/3rdparty/phonon/mmf/abstractplayer.h b/src/3rdparty/phonon/mmf/abstractplayer.h index 66496cc..2e9cfa0 100644 --- a/src/3rdparty/phonon/mmf/abstractplayer.h +++ b/src/3rdparty/phonon/mmf/abstractplayer.h @@ -24,8 +24,6 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. #include <QObject> -#include "volumeobserver.h" - #include "videooutput.h" class RFile; @@ -49,7 +47,6 @@ class VideoOutput; * - Video, in which case the implementation is VideoPlayer */ class AbstractPlayer : public QObject - , public VolumeObserver { // Required although this class has no signals or slots // Without this, qobject_cast will fail @@ -85,7 +82,6 @@ public: virtual void setFileSource(const Phonon::MediaSource&, RFile&) = 0; virtual void setNextSource(const Phonon::MediaSource &) = 0; - // VolumeObserver virtual void volumeChanged(qreal volume); void setVideoOutput(VideoOutput* videoOutput); diff --git a/src/3rdparty/phonon/mmf/ancestormovemonitor.cpp b/src/3rdparty/phonon/mmf/ancestormovemonitor.cpp index 0447d57..18ced94 100644 --- a/src/3rdparty/phonon/mmf/ancestormovemonitor.cpp +++ b/src/3rdparty/phonon/mmf/ancestormovemonitor.cpp @@ -26,7 +26,7 @@ QT_BEGIN_NAMESPACE using namespace Phonon::MMF; -/*! \class MMF::AncestorMoveMonitor +/*! \class Phonon::MMF::AncestorMoveMonitor \internal \brief Class which installs a global event filter, and listens for move events which may affect the absolute position of widgets registered with @@ -34,6 +34,11 @@ using namespace Phonon::MMF; See QTBUG-4956 */ + +/*! \class Phonon::MMF::VideoOutputObserver + \internal +*/ + //----------------------------------------------------------------------------- // Constructor / destructor //----------------------------------------------------------------------------- diff --git a/src/3rdparty/phonon/mmf/audiooutput.cpp b/src/3rdparty/phonon/mmf/audiooutput.cpp index 82af9f1..d6e0c13 100644 --- a/src/3rdparty/phonon/mmf/audiooutput.cpp +++ b/src/3rdparty/phonon/mmf/audiooutput.cpp @@ -24,7 +24,6 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. #include "defs.h" #include "mediaobject.h" #include "utils.h" -#include "volumeobserver.h" QT_BEGIN_NAMESPACE @@ -41,7 +40,6 @@ using namespace Phonon::MMF; MMF::AudioOutput::AudioOutput(Backend *, QObject *parent) : MediaNode(parent) , m_volume(InitialVolume) - , m_observer(0) { } @@ -59,12 +57,9 @@ qreal MMF::AudioOutput::volume() const void MMF::AudioOutput::setVolume(qreal volume) { TRACE_CONTEXT(AudioOutput::setVolume, EAudioApi); - TRACE_ENTRY("observer 0x%08x volume %f", m_observer, volume); + TRACE_ENTRY("volume %f", volume); if (volume != m_volume) { - if (m_observer) { - m_observer->volumeChanged(volume); - } m_volume = volume; TRACE("emit volumeChanged(%f)", volume) @@ -86,17 +81,12 @@ bool MMF::AudioOutput::setOutputDevice(int index) return true; } -void MMF::AudioOutput::setVolumeObserver(VolumeObserver* observer) -{ - m_observer = observer; - if (m_observer) { - m_observer->volumeChanged(m_volume); - } -} - bool MMF::AudioOutput::activateOnMediaObject(MediaObject *mo) { - setVolumeObserver(mo); + // Ensure that the MediaObject has the correct initial volume + mo->volumeChanged(m_volume); + // Connect MediaObject to receive future volume changes + connect(this, SIGNAL(volumeChanged(qreal)), mo, SLOT(volumeChanged(qreal))); return true; } diff --git a/src/3rdparty/phonon/mmf/audiooutput.h b/src/3rdparty/phonon/mmf/audiooutput.h index d0ba086..1e1e134 100644 --- a/src/3rdparty/phonon/mmf/audiooutput.h +++ b/src/3rdparty/phonon/mmf/audiooutput.h @@ -31,12 +31,11 @@ namespace Phonon namespace MMF { class Backend; -class VolumeObserver; /** * @short AudioOutputInterface implementation for MMF. * - * Forwards volume commands to the VolumeObserver instance, + * Forwards volume commands to the MediaObject instance, * which is provided by the backend when MediaNode objects are * connected. * @@ -82,13 +81,8 @@ Q_SIGNALS: void audioDeviceFailed(); private: - - void setVolumeObserver(VolumeObserver* observer); - qreal m_volume; - // Not owned - VolumeObserver* m_observer; }; } } diff --git a/src/3rdparty/phonon/mmf/backend.cpp b/src/3rdparty/phonon/mmf/backend.cpp index cac27e3..7e3a67f 100644 --- a/src/3rdparty/phonon/mmf/backend.cpp +++ b/src/3rdparty/phonon/mmf/backend.cpp @@ -38,10 +38,6 @@ QT_BEGIN_NAMESPACE using namespace Phonon; using namespace Phonon::MMF; -/*! \class MMF::VolumeObserver - \internal -*/ - /*! \class MMF::Backend \internal */ diff --git a/src/3rdparty/phonon/mmf/mediaobject.cpp b/src/3rdparty/phonon/mmf/mediaobject.cpp index f004fd7..e42e0fa 100644 --- a/src/3rdparty/phonon/mmf/mediaobject.cpp +++ b/src/3rdparty/phonon/mmf/mediaobject.cpp @@ -359,11 +359,6 @@ void MMF::MediaObject::setTransitionTime(qint32 time) m_player->setTransitionTime(time); } - -//----------------------------------------------------------------------------- -// VolumeObserver -//----------------------------------------------------------------------------- - void MMF::MediaObject::volumeChanged(qreal volume) { m_player->volumeChanged(volume); diff --git a/src/3rdparty/phonon/mmf/mediaobject.h b/src/3rdparty/phonon/mmf/mediaobject.h index 409918d..ee94ea2 100644 --- a/src/3rdparty/phonon/mmf/mediaobject.h +++ b/src/3rdparty/phonon/mmf/mediaobject.h @@ -30,7 +30,6 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. #include "abstractplayer.h" #include "mmf_medianode.h" #include "defs.h" -#include "volumeobserver.h" QT_BEGIN_NAMESPACE @@ -46,7 +45,6 @@ class VideoOutput; */ class MediaObject : public MediaNode , public MediaObjectInterface - , public VolumeObserver { Q_OBJECT Q_INTERFACES(Phonon::MediaObjectInterface) @@ -77,9 +75,6 @@ public: virtual qint32 transitionTime() const; virtual void setTransitionTime(qint32); - // VolumeObserver - void volumeChanged(qreal volume); - /** * This class owns the AbstractPlayer, and will delete it upon * destruction. @@ -90,6 +85,9 @@ public: virtual bool activateOnMediaObject(MediaObject *); +public Q_SLOTS: + void volumeChanged(qreal volume); + Q_SIGNALS: void totalTimeChanged(qint64 length); void hasVideoChanged(bool hasVideo); diff --git a/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp b/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp index ba7d005..2059fbe 100644 --- a/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp +++ b/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp @@ -49,7 +49,7 @@ MMF::VideoPlayer::VideoPlayer() , m_screenDevice(*CCoeEnv::Static()->ScreenDevice()) , m_window(0) , m_totalTime(0) - , m_mmfOutputChangePending(false) + , m_pendingChanges(false) { construct(); } @@ -60,7 +60,7 @@ MMF::VideoPlayer::VideoPlayer(const AbstractPlayer& player) , m_screenDevice(*CCoeEnv::Static()->ScreenDevice()) , m_window(0) , m_totalTime(0) - , m_mmfOutputChangePending(false) + , m_pendingChanges(false) { construct(); } @@ -70,24 +70,11 @@ void MMF::VideoPlayer::construct() TRACE_CONTEXT(VideoPlayer::VideoPlayer, EVideoApi); TRACE_ENTRY_0(); - if (m_videoOutput) - m_videoOutput->setObserver(this); + getVideoWindow(); const TInt priority = 0; const TMdaPriorityPreference preference = EMdaPriorityPreferenceNone; - // Ignore return value - first call must always return true - getNativeWindowSystemHandles(); - - // TODO: is this the correct way to handle errors which occur when - // creating a Symbian object in the constructor of a Qt object? - - // TODO: check whether videoOutput is visible? If not, then the - // corresponding window will not be active, meaning that the - // clipping region will be set to empty and the video will not be - // visible. If this is the case, we should set m_mmfOutputChangePending - // and respond to future showEvents from the videoOutput widget. - TRAPD(err, m_player.reset(CVideoPlayerUtility::NewL ( @@ -95,7 +82,7 @@ void MMF::VideoPlayer::construct() priority, preference, m_wsSession, m_screenDevice, *m_window, - m_rect, m_rect + m_videoRect, m_videoRect )) ); @@ -110,8 +97,8 @@ MMF::VideoPlayer::~VideoPlayer() TRACE_CONTEXT(VideoPlayer::~VideoPlayer, EVideoApi); TRACE_ENTRY_0(); - if (m_videoOutput) - m_videoOutput->setObserver(0); + // QObject destructor removes all signal-slot connections involving this + // object, so we do not need to disconnect from m_videoOutput here. TRACE_EXIT_0(); } @@ -124,11 +111,7 @@ void MMF::VideoPlayer::doPlay() { TRACE_CONTEXT(VideoPlayer::doPlay, EVideoApi); - // See comment in updateMmfOutput - if (m_mmfOutputChangePending) { - TRACE_0("MMF output change pending - pushing now"); - updateMmfOutput(); - } + applyPendingChanges(); m_player->Play(); } @@ -255,13 +238,10 @@ void MMF::VideoPlayer::MvpuoPrepareComplete(TInt aError) maxVolumeChanged(m_player->MaxVolume()); if (m_videoOutput) - m_videoOutput->setFrameSize(m_frameSize); + m_videoOutput->setVideoSize(m_videoFrameSize); - // See comment in updateMmfOutput - if (m_mmfOutputChangePending) { - TRACE_0("MMF output change pending - pushing now"); - updateMmfOutput(); - } + updateVideoRect(); + applyPendingChanges(); emit totalTimeChanged(totalTime()); changeState(StoppedState); @@ -279,7 +259,7 @@ void MMF::VideoPlayer::doPrepareCompleteL(TInt aError) // Get frame size TSize size; m_player->VideoFrameSizeL(size); - m_frameSize = QSize(size.iWidth, size.iHeight); + m_videoFrameSize = QSize(size.iWidth, size.iHeight); // Get duration m_totalTime = toMilliSeconds(m_player->DurationL()); @@ -322,27 +302,178 @@ void MMF::VideoPlayer::MvpuoEvent(const TMMFEvent &aEvent) //----------------------------------------------------------------------------- -// VideoOutputObserver +// Video window updates //----------------------------------------------------------------------------- -void MMF::VideoPlayer::videoOutputRegionChanged() +void MMF::VideoPlayer::getVideoWindow() +{ + TRACE_CONTEXT(VideoPlayer::getVideoWindow, EVideoInternal); + TRACE_ENTRY_0(); + + if(m_videoOutput) { + // Dump information to log, only in debug builds + m_videoOutput->dump(); + + initVideoOutput(); + m_window = m_videoOutput->videoWindow(); + updateVideoRect(); + } else + // Top-level window + m_window = QApplication::activeWindow()->effectiveWinId()->DrawableWindow(); + + TRACE_EXIT_0(); +} + +void MMF::VideoPlayer::videoOutputChanged() +{ + TRACE_CONTEXT(VideoPlayer::videoOutputChanged, EVideoInternal); + TRACE_ENTRY_0(); + + if (m_videoOutput) { + initVideoOutput(); + videoWindowChanged(); + } + + TRACE_EXIT_0(); +} + +void MMF::VideoPlayer::initVideoOutput() +{ + m_videoOutput->winId(); + m_videoOutput->setVideoSize(m_videoFrameSize); + + bool connected = connect( + m_videoOutput, SIGNAL(videoWindowChanged()), + this, SLOT(videoWindowChanged()) + ); + Q_ASSERT(connected); + + connected = connect( + m_videoOutput, SIGNAL(aspectRatioChanged()), + this, SLOT(aspectRatioChanged()) + ); + Q_ASSERT(connected); + + connected = connect( + m_videoOutput, SIGNAL(scaleModeChanged()), + this, SLOT(scaleModeChanged()) + ); + Q_ASSERT(connected); + + // Suppress warnings in release builds + Q_UNUSED(connected); +} + +void MMF::VideoPlayer::videoWindowChanged() { TRACE_CONTEXT(VideoPlayer::videoOutputRegionChanged, EVideoInternal); TRACE_ENTRY("state %d", state()); - const bool changed = getNativeWindowSystemHandles(); + m_window = m_videoOutput->videoWindow(); - // See comment in updateMmfOutput - if (changed) { - if (state() == LoadingState) - m_mmfOutputChangePending = true; - else - updateMmfOutput(); + updateVideoRect(); + + TRACE_EXIT_0(); +} + +// Helper function for aspect ratio / scale mode handling +QSize scaleToAspect(const QSize& srcRect, int aspectWidth, int aspectHeight) +{ + const qreal aspectRatio = qreal(aspectWidth) / aspectHeight; + + int width = srcRect.width(); + int height = srcRect.width() / aspectRatio; + if (height > srcRect.height()){ + height = srcRect.height(); + width = srcRect.height() * aspectRatio; } + return QSize(width, height); +} + +void MMF::VideoPlayer::updateVideoRect() +{ + QRect videoRect; + const QRect windowRect = m_videoOutput->videoWindowRect(); + const QSize windowSize = windowRect.size(); + + // Calculate size of smallest rect which contains video frame size + // and conforms to aspect ratio + switch (m_videoOutput->aspectRatio()) { + case Phonon::VideoWidget::AspectRatioAuto: + videoRect.setSize(m_videoFrameSize); + break; + + case Phonon::VideoWidget::AspectRatioWidget: + videoRect.setSize(windowSize); + break; + + case Phonon::VideoWidget::AspectRatio4_3: + videoRect.setSize(scaleToAspect(m_videoFrameSize, 4, 3)); + break; + + case Phonon::VideoWidget::AspectRatio16_9: + videoRect.setSize(scaleToAspect(m_videoFrameSize, 16, 9)); + break; + } + + // Scale to fill the window width + const int windowWidth = windowSize.width(); + const int windowHeight = windowSize.height(); + const qreal windowScaleFactor = qreal(windowWidth) / videoRect.width(); + int videoWidth = windowWidth; + int videoHeight = videoRect.height() * windowScaleFactor; + + const qreal windowToVideoHeightRatio = qreal(windowHeight) / videoHeight; + + switch(m_videoOutput->scaleMode()) { + case Phonon::VideoWidget::ScaleAndCrop: + if(videoHeight < windowHeight) { + videoWidth *= windowToVideoHeightRatio; + videoHeight = windowHeight; + } + break; + case Phonon::VideoWidget::FitInView: + default: + if(videoHeight > windowHeight) { + videoWidth *= windowToVideoHeightRatio; + videoHeight = windowHeight; + } + break; + } + + // Calculate scale factors + m_scaleWidth = 100.0f * videoWidth / m_videoFrameSize.width(); + m_scaleHeight = 100.0f * videoHeight / m_videoFrameSize.height(); + + m_videoRect = qt_QRect2TRect(windowRect); + + if (state() == LoadingState) + m_pendingChanges = true; + else { + applyVideoWindowChange(); + m_pendingChanges = false; + } +} + +void MMF::VideoPlayer::aspectRatioChanged() +{ + TRACE_CONTEXT(VideoPlayer::aspectRatioChanged, EVideoInternal); + TRACE_ENTRY("state %d aspectRatio %d", state()); + + updateVideoRect(); TRACE_EXIT_0(); } +void MMF::VideoPlayer::scaleModeChanged() +{ + TRACE_CONTEXT(VideoPlayer::scaleModeChanged, EVideoInternal); + TRACE_ENTRY("state %d", state()); + + updateVideoRect(); + + TRACE_EXIT_0(); +} #ifndef QT_NO_DEBUG @@ -383,113 +514,61 @@ void getDsaRegion(RWsSession &session, const RWindowBase &window) #endif // _DEBUG -void MMF::VideoPlayer::updateMmfOutput() +void MMF::VideoPlayer::applyPendingChanges() { - TRACE_CONTEXT(VideoPlayer::updateMmfOutput, EVideoInternal); - TRACE_ENTRY_0(); + if(m_pendingChanges) + applyVideoWindowChange(); - // Calling SetDisplayWindowL is a no-op unless the MMF controller has - // been loaded, so we shouldn't do it. Instead, the - // m_mmfOutputChangePending flag is used to record the fact that we - // need to call SetDisplayWindowL, and this is checked in - // MvpuoPrepareComplete, at which point the MMF controller has been - // loaded. + m_pendingChanges = false; +} + +void MMF::VideoPlayer::applyVideoWindowChange() +{ + TRACE_CONTEXT(VideoPlayer::applyVideoWindowChange, EVideoInternal); + TRACE_ENTRY_0(); #ifndef QT_NO_DEBUG getDsaRegion(m_wsSession, *m_window); #endif - TRAPD(err, - m_player->SetDisplayWindowL - ( - m_wsSession, m_screenDevice, - *m_window, - m_rect, m_rect - ) - ); + static const TBool antialias = ETrue; - if (KErrNone != err) { - TRACE("SetDisplayWindowL error %d", err); + TRAPD(err, m_player->SetScaleFactorL(m_scaleWidth, m_scaleHeight, antialias)); + if(KErrNone != err) { + TRACE("SetScaleFactorL (1) err %d", err); setError(NormalError); } - m_mmfOutputChangePending = false; + if(KErrNone == err) { + TRAP(err, + m_player->SetDisplayWindowL + ( + m_wsSession, m_screenDevice, + *m_window, + m_videoRect, m_videoRect + ) + ); + + if (KErrNone != err) { + TRACE("SetDisplayWindowL err %d", err); + setError(NormalError); + } else { + TRAP(err, m_player->SetScaleFactorL(m_scaleWidth, m_scaleHeight, antialias)); + if(KErrNone != err) { + TRACE("SetScaleFactorL (2) err %d", err); + setError(NormalError); + } + } + } TRACE_EXIT_0(); } //----------------------------------------------------------------------------- -// Private functions +// Metadata //----------------------------------------------------------------------------- -void MMF::VideoPlayer::videoOutputChanged() -{ - TRACE_CONTEXT(VideoPlayer::videoOutputChanged, EVideoInternal); - TRACE_ENTRY_0(); - - if (m_videoOutput) { - m_videoOutput->setObserver(this); - m_videoOutput->setFrameSize(m_frameSize); - } - - videoOutputRegionChanged(); - - TRACE_EXIT_0(); -} - -bool MMF::VideoPlayer::getNativeWindowSystemHandles() -{ - TRACE_CONTEXT(VideoPlayer::getNativeWindowSystemHandles, EVideoInternal); - TRACE_ENTRY_0(); - - CCoeControl *control = 0; - - if (m_videoOutput) - // Create native window - control = m_videoOutput->winId(); - else - // Get top-level window - control = QApplication::activeWindow()->effectiveWinId(); - -#ifndef QT_NO_DEBUG - if (m_videoOutput) { - QScopedPointer<ObjectDump::QDumper> dumper(new ObjectDump::QDumper); - dumper->setPrefix("Phonon::MMF"); // to aid searchability of logs - ObjectDump::addDefaultAnnotators(*dumper); - TRACE_0("Dumping VideoOutput:"); - dumper->dumpObject(*m_videoOutput); - } - else { - TRACE_0("m_videoOutput is null - dumping top-level control info:"); - TRACE("control %08x", control); - TRACE("control.parent %08x", control->Parent()); - TRACE("control.isVisible %d", control->IsVisible()); - TRACE("control.rect %d,%d %dx%d", - control->Position().iX, control->Position().iY, - control->Size().iWidth, control->Size().iHeight); - TRACE("control.ownsWindow %d", control->OwnsWindow()); - } -#endif - - RWindowBase *const window = control->DrawableWindow(); - const TRect rect(window->AbsPosition(), window->Size()); - - TRACE("rect %d %d - %d %d", - rect.iTl.iX, rect.iTl.iY, - rect.iBr.iX, rect.iBr.iY); - - bool changed = false; - - if (window != m_window || rect != m_rect) { - m_window = window; - m_rect = rect; - changed = true; - } - - TRACE_RETURN("changed %d", changed); -} - int MMF::VideoPlayer::numberOfMetaDataEntries() const { int numberOfEntries = 0; diff --git a/src/3rdparty/phonon/mmf/mmf_videoplayer.h b/src/3rdparty/phonon/mmf/mmf_videoplayer.h index fa4e59b..599bb88 100644 --- a/src/3rdparty/phonon/mmf/mmf_videoplayer.h +++ b/src/3rdparty/phonon/mmf/mmf_videoplayer.h @@ -23,7 +23,6 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. #include "abstractmediaplayer.h" #include "videooutput.h" -#include "videooutputobserver.h" QT_BEGIN_NAMESPACE @@ -40,7 +39,6 @@ namespace MMF */ class VideoPlayer : public AbstractMediaPlayer , public MVideoPlayerUtilityObserver - , public VideoOutputObserver { Q_OBJECT @@ -70,8 +68,10 @@ public: virtual void MvpuoPlayComplete(TInt aError); virtual void MvpuoEvent(const TMMFEvent &aEvent); - // VideoOutputObserver - virtual void videoOutputRegionChanged(); +public Q_SLOTS: + void videoWindowChanged(); + void aspectRatioChanged(); + void scaleModeChanged(); private: void construct(); @@ -81,10 +81,13 @@ private: // AbstractPlayer virtual void videoOutputChanged(); - // Returns true if handles have changed - bool getNativeWindowSystemHandles(); + void getVideoWindow(); + void initVideoOutput(); - void updateMmfOutput(); + void updateVideoRect(); + + void applyPendingChanges(); + void applyVideoWindowChange(); // AbstractMediaPlayer virtual int numberOfMetaDataEntries() const; @@ -97,12 +100,17 @@ private: RWsSession& m_wsSession; CWsScreenDevice& m_screenDevice; RWindowBase* m_window; - TRect m_rect; - QSize m_frameSize; + /* Extent of the video display - will be clipped to m_windowRect */ + TRect m_videoRect; + + TReal32 m_scaleWidth; + TReal32 m_scaleHeight; + + QSize m_videoFrameSize; qint64 m_totalTime; - bool m_mmfOutputChangePending; + bool m_pendingChanges; }; diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_stub.cpp b/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_stub.cpp deleted file mode 100644 index 6207dac..0000000 --- a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_stub.cpp +++ /dev/null @@ -1,40 +0,0 @@ -/* This file is part of the KDE project. - -Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). - -This library is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 2.1 or 3 of the License. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with this library. If not, see <http://www.gnu.org/licenses/>. - -*/ - -#include "objectdump.h" - -QT_BEGIN_NAMESPACE - -namespace ObjectDump -{ - -void addDefaultAnnotators_sys(QDumper& /*dumper*/) -{ - -} - -void addDefaultAnnotators_sys(QVisitor& /*visitor*/) -{ - -} - -} // namespace ObjectDump - -QT_END_NAMESPACE - - diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump.cpp b/src/3rdparty/phonon/mmf/objectdump.cpp index 9add439..6b6b71e 100644 --- a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump.cpp +++ b/src/3rdparty/phonon/mmf/objectdump.cpp @@ -16,6 +16,8 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. */ +#ifndef QT_NO_DEBUG + #include <QByteArray> #include <QDebug> #include <QHash> @@ -523,5 +525,5 @@ void dumpAncestors(const QObject& leaf, QVisitor& visitor) QT_END_NAMESPACE - +#endif diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump.h b/src/3rdparty/phonon/mmf/objectdump.h index e94b3ac..e94b3ac 100644 --- a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump.h +++ b/src/3rdparty/phonon/mmf/objectdump.h diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_global.h b/src/3rdparty/phonon/mmf/objectdump_global.h index b8987e0..b8987e0 100644 --- a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_global.h +++ b/src/3rdparty/phonon/mmf/objectdump_global.h diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_symbian.cpp b/src/3rdparty/phonon/mmf/objectdump_symbian.cpp index 03220a7..41dd240 100644 --- a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_symbian.cpp +++ b/src/3rdparty/phonon/mmf/objectdump_symbian.cpp @@ -16,6 +16,8 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. */ +#ifndef QT_NO_DEBUG + #include <QTextStream> #include <QWidget> #include <coecntrl.h> @@ -99,46 +101,39 @@ QList<QByteArray> QAnnotatorWindow::annotation(const QObject& object) if (widget) { const CCoeControl* control = widget->effectiveWinId(); - RDrawableWindow *window = 0; - - if (control && (window = control->DrawableWindow())) { - QByteArray array; - QTextStream stream(&array); + if (control) { + RDrawableWindow *const window = control->DrawableWindow(); + if(window) { + QByteArray array; + QTextStream stream(&array); - stream << "window: "; + stream << "window: "; - // ClientHandle() is available first in 5.0. -#if !defined(__SERIES60_31__) && !defined(__S60_32__) - if (QSysInfo::s60Version() > QSysInfo::SV_S60_3_2) - // Client-side window handle + // Server-side address of CWsWindow object + // This is useful for correlation with the window tree dumped by the window + // server (see RWsSession::LogCommand). // Cast to a void pointer so that log output is in hexadecimal format. - stream << "cli " << reinterpret_cast<const void*>(window->ClientHandle()) << ' '; -#endif + stream << "srv " << reinterpret_cast<const void*>(window->WsHandle()) << ' '; - // Server-side address of CWsWindow object - // This is useful for correlation with the window tree dumped by the window - // server (see RWsSession::LogCommand). - // Cast to a void pointer so that log output is in hexadecimal format. - stream << "srv " << reinterpret_cast<const void*>(window->WsHandle()) << ' '; + stream << "group " << window->WindowGroupId() << ' '; - stream << "group " << window->WindowGroupId() << ' '; - - // Client-side handle to the parent window. - // Cast to a void pointer so that log output is in hexadecimal format. - stream << "parent " << reinterpret_cast<const void*>(window->Parent()) << ' '; + // Client-side handle to the parent window. + // Cast to a void pointer so that log output is in hexadecimal format. + stream << "parent " << reinterpret_cast<const void*>(window->Parent()) << ' '; - stream << window->Position().iX << ',' << window->Position().iY << ' '; - stream << '(' << window->AbsPosition().iX << ',' << window->AbsPosition().iY << ") "; - stream << window->Size().iWidth << 'x' << window->Size().iHeight << ' '; + stream << window->Position().iX << ',' << window->Position().iY << ' '; + stream << '(' << window->AbsPosition().iX << ',' << window->AbsPosition().iY << ") "; + stream << window->Size().iWidth << 'x' << window->Size().iHeight << ' '; - const TDisplayMode displayMode = window->DisplayMode(); - stream << "mode " << displayMode << ' '; + const TDisplayMode displayMode = window->DisplayMode(); + stream << "mode " << displayMode << ' '; - stream << "ord " << window->OrdinalPosition(); + stream << "ord " << window->OrdinalPosition(); - stream.flush(); - result.append(array); + stream.flush(); + result.append(array); + } } } @@ -165,4 +160,5 @@ void addDefaultAnnotators_sys(QVisitor& visitor) QT_END_NAMESPACE +#endif diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_symbian.h b/src/3rdparty/phonon/mmf/objectdump_symbian.h index 563c862..563c862 100644 --- a/src/3rdparty/phonon/mmf/mmfphonondebug/objectdump_symbian.h +++ b/src/3rdparty/phonon/mmf/objectdump_symbian.h diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objecttree.cpp b/src/3rdparty/phonon/mmf/objecttree.cpp index bc61435..750db22 100644 --- a/src/3rdparty/phonon/mmf/mmfphonondebug/objecttree.cpp +++ b/src/3rdparty/phonon/mmf/objecttree.cpp @@ -16,6 +16,8 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. */ +#ifndef QT_NO_DEBUG + #include <QTextStream> #include <QWidget> #include "objecttree.h" @@ -98,5 +100,5 @@ AncestorConstIterator::AncestorConstIterator(const QObject& leaf) QT_END_NAMESPACE - +#endif diff --git a/src/3rdparty/phonon/mmf/mmfphonondebug/objecttree.h b/src/3rdparty/phonon/mmf/objecttree.h index 98bdf14..98bdf14 100644 --- a/src/3rdparty/phonon/mmf/mmfphonondebug/objecttree.h +++ b/src/3rdparty/phonon/mmf/objecttree.h diff --git a/src/3rdparty/phonon/mmf/utils.cpp b/src/3rdparty/phonon/mmf/utils.cpp index 58d1ece..d728fcf 100644 --- a/src/3rdparty/phonon/mmf/utils.cpp +++ b/src/3rdparty/phonon/mmf/utils.cpp @@ -24,16 +24,24 @@ QT_BEGIN_NAMESPACE using namespace Phonon; using namespace Phonon::MMF; -/*! \namespace MMF::Utils +/*! \namespace Phonon::MMF::Utils \internal */ -/*! \class MMF::TTraceContext +/*! \class Phonon::MMF::TTraceContext \internal */ -/*! \class MMF::Utils - \internal +/*! \enum Phonon::MMF::PanicCode + \internal +*/ + +/*! \enum Phonon::MMF::TTraceCategory + \internal +*/ + +/*! \enum Phonon::MMF::MediaType + \internal */ _LIT(PanicCategory, "Phonon::MMF"); diff --git a/src/3rdparty/phonon/mmf/videooutput.cpp b/src/3rdparty/phonon/mmf/videooutput.cpp index 1b338a2..ddf30de 100644 --- a/src/3rdparty/phonon/mmf/videooutput.cpp +++ b/src/3rdparty/phonon/mmf/videooutput.cpp @@ -19,7 +19,6 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. #include "ancestormovemonitor.h" #include "utils.h" #include "videooutput.h" -#include "videooutputobserver.h" #ifndef QT_NO_DEBUG #include "objectdump.h" @@ -30,8 +29,11 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. #include <QMoveEvent> #include <QResizeEvent> +#include <QtCore/private/qcore_symbian_p.h> // for qt_TRect2QRect #include <QtGui/private/qwidget_p.h> // to access QWExtra +#include <coecntrl.h> + QT_BEGIN_NAMESPACE using namespace Phonon; @@ -42,6 +44,16 @@ using namespace Phonon::MMF; */ //----------------------------------------------------------------------------- +// Constants +//----------------------------------------------------------------------------- + +static const Phonon::VideoWidget::AspectRatio DefaultAspectRatio = + Phonon::VideoWidget::AspectRatioAuto; +static const Phonon::VideoWidget::ScaleMode DefaultScaleMode = + Phonon::VideoWidget::FitInView; + + +//----------------------------------------------------------------------------- // Constructor / destructor //----------------------------------------------------------------------------- @@ -49,7 +61,8 @@ MMF::VideoOutput::VideoOutput (AncestorMoveMonitor* ancestorMoveMonitor, QWidget* parent) : QWidget(parent) , m_ancestorMoveMonitor(ancestorMoveMonitor) - , m_observer(0) + , m_aspectRatio(DefaultAspectRatio) + , m_scaleMode(DefaultScaleMode) { TRACE_CONTEXT(VideoOutput::VideoOutput, EVideoInternal); TRACE_ENTRY("parent 0x%08x", parent); @@ -66,6 +79,7 @@ MMF::VideoOutput::VideoOutput // to be invisible when running on the target device. qt_widget_private(this)->extraData()->disableBlit = true; + getVideoWindowRect(); registerForAncestorMoved(); dump(); @@ -83,33 +97,35 @@ MMF::VideoOutput::~VideoOutput() TRACE_EXIT_0(); } -void MMF::VideoOutput::setFrameSize(const QSize& frameSize) +void MMF::VideoOutput::setVideoSize(const QSize& frameSize) { - TRACE_CONTEXT(VideoOutput::setFrameSize, EVideoInternal); + TRACE_CONTEXT(VideoOutput::setVideoSize, EVideoInternal); TRACE("oldSize %d %d newSize %d %d", - m_frameSize.width(), m_frameSize.height(), + m_videoFrameSize.width(), m_videoFrameSize.height(), frameSize.width(), frameSize.height()); - if (frameSize != m_frameSize) { - m_frameSize = frameSize; + if (frameSize != m_videoFrameSize) { + m_videoFrameSize = frameSize; updateGeometry(); } } -void MMF::VideoOutput::setObserver(VideoOutputObserver* observer) -{ - TRACE_CONTEXT(VideoOutput::setObserver, EVideoInternal); - TRACE("observer 0x%08x", observer); - - m_observer = observer; -} - void MMF::VideoOutput::ancestorMoved() { TRACE_CONTEXT(VideoOutput::ancestorMoved, EVideoInternal); TRACE_ENTRY_0(); - videoOutputRegionChanged(); + RWindowBase *const window = videoWindow(); + + if(window) { + const TPoint newWindowPosSymbian = window->AbsPosition(); + const QPoint newWindowPos(newWindowPosSymbian.iX, newWindowPosSymbian.iY); + + if(newWindowPos != m_videoWindowRect.topLeft()) { + m_videoWindowRect.moveTo(newWindowPos); + emit videoWindowChanged(); + } + } TRACE_EXIT_0(); } @@ -123,9 +139,8 @@ QSize MMF::VideoOutput::sizeHint() const // TODO: replace this with a more sensible default QSize result(320, 240); - if (!m_frameSize.isNull()) { - result = m_frameSize; - } + if (!m_videoFrameSize.isNull()) + result = m_videoFrameSize; return result; } @@ -149,7 +164,10 @@ void MMF::VideoOutput::resizeEvent(QResizeEvent* event) event->oldSize().width(), event->oldSize().height(), event->size().width(), event->size().height()); - videoOutputRegionChanged(); + if(event->size() != event->oldSize()) { + m_videoWindowRect.setSize(event->size()); + emit videoWindowChanged(); + } } void MMF::VideoOutput::moveEvent(QMoveEvent* event) @@ -159,7 +177,10 @@ void MMF::VideoOutput::moveEvent(QMoveEvent* event) event->oldPos().x(), event->oldPos().y(), event->pos().x(), event->pos().y()); - videoOutputRegionChanged(); + if(event->pos() != event->oldPos()) { + m_videoWindowRect.moveTo(event->pos()); + emit videoWindowChanged(); + } } bool MMF::VideoOutput::event(QEvent* event) @@ -168,7 +189,8 @@ bool MMF::VideoOutput::event(QEvent* event) if (event->type() == QEvent::WinIdChange) { TRACE_0("WinIdChange"); - videoOutputRegionChanged(); + getVideoWindowRect(); + emit videoWindowChanged(); return true; } else if (event->type() == QEvent::ParentChange) { // Tell ancestor move monitor to update ancestor list for this widget @@ -180,14 +202,66 @@ bool MMF::VideoOutput::event(QEvent* event) //----------------------------------------------------------------------------- +// Public functions +//----------------------------------------------------------------------------- + +RWindowBase* MMF::VideoOutput::videoWindow() +{ + CCoeControl *control = internalWinId(); + if(!control) + control = effectiveWinId(); + + RWindowBase *window = 0; + if(control) + window = control->DrawableWindow(); + + return window; +} + +const QRect& MMF::VideoOutput::videoWindowRect() const +{ + return m_videoWindowRect; +} + +Phonon::VideoWidget::AspectRatio MMF::VideoOutput::aspectRatio() const +{ + return m_aspectRatio; +} + +void MMF::VideoOutput::setAspectRatio + (Phonon::VideoWidget::AspectRatio aspectRatio) +{ + if(m_aspectRatio != aspectRatio) { + m_aspectRatio = aspectRatio; + emit aspectRatioChanged(); + } +} + +Phonon::VideoWidget::ScaleMode MMF::VideoOutput::scaleMode() const +{ + return m_scaleMode; +} + +void MMF::VideoOutput::setScaleMode + (Phonon::VideoWidget::ScaleMode scaleMode) +{ + if(m_scaleMode != scaleMode) { + m_scaleMode = scaleMode; + emit scaleModeChanged(); + } +} + + +//----------------------------------------------------------------------------- // Private functions //----------------------------------------------------------------------------- -void MMF::VideoOutput::videoOutputRegionChanged() +void MMF::VideoOutput::getVideoWindowRect() { - dump(); - if (m_observer) - m_observer->videoOutputRegionChanged(); + RWindowBase *const window = videoWindow(); + if(window) + m_videoWindowRect = + qt_TRect2QRect(TRect(window->AbsPosition(), window->Size())); } void MMF::VideoOutput::registerForAncestorMoved() @@ -199,15 +273,20 @@ void MMF::VideoOutput::dump() const { #ifndef QT_NO_DEBUG TRACE_CONTEXT(VideoOutput::dump, EVideoInternal); + QScopedPointer<ObjectDump::QVisitor> visitor(new ObjectDump::QVisitor); visitor->setPrefix("Phonon::MMF"); // to aid searchability of logs ObjectDump::addDefaultAnnotators(*visitor); TRACE("Dumping tree from leaf 0x%08x:", this); - //ObjectDump::dumpAncestors(*this, *visitor); ObjectDump::dumpTreeFromLeaf(*this, *visitor); + + QScopedPointer<ObjectDump::QDumper> dumper(new ObjectDump::QDumper); + dumper->setPrefix("Phonon::MMF"); // to aid searchability of logs + ObjectDump::addDefaultAnnotators(*dumper); + TRACE_0("Dumping VideoOutput:"); + dumper->dumpObject(*this); #endif } - QT_END_NAMESPACE diff --git a/src/3rdparty/phonon/mmf/videooutput.h b/src/3rdparty/phonon/mmf/videooutput.h index db4d127..6dfe69d 100644 --- a/src/3rdparty/phonon/mmf/videooutput.h +++ b/src/3rdparty/phonon/mmf/videooutput.h @@ -24,6 +24,11 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. #include <QRect> #include "defs.h" +#include <Phonon/VideoWidget> + +#include <e32std.h> +class RWindowBase; + QT_BEGIN_NAMESPACE namespace Phonon @@ -31,7 +36,6 @@ namespace Phonon namespace MMF { class AncestorMoveMonitor; -class VideoOutputObserver; class VideoOutput : public QWidget { @@ -41,11 +45,29 @@ public: VideoOutput(AncestorMoveMonitor* ancestorMoveMonitor, QWidget* parent); ~VideoOutput(); - void setFrameSize(const QSize& size); - void setObserver(VideoOutputObserver* observer); + // Set size of video frame. Called by VideoPlayer. + void setVideoSize(const QSize& size); + + RWindowBase* videoWindow(); + const QRect& videoWindowRect() const; + Phonon::VideoWidget::AspectRatio aspectRatio() const; + void setAspectRatio(Phonon::VideoWidget::AspectRatio aspectRatio); + + Phonon::VideoWidget::ScaleMode scaleMode() const; + void setScaleMode(Phonon::VideoWidget::ScaleMode scaleMode); + + // Called by AncestorMoveMonitor void ancestorMoved(); + // Debugging output + void dump() const; + +Q_SIGNALS: + void videoWindowChanged(); + void aspectRatioChanged(); + void scaleModeChanged(); + protected: // Override QWidget functions QSize sizeHint() const; @@ -55,19 +77,18 @@ protected: bool event(QEvent* event); private: - void dump() const; - void videoOutputRegionChanged(); - + void getVideoWindowRect(); void registerForAncestorMoved(); private: // Not owned AncestorMoveMonitor* m_ancestorMoveMonitor; - // Not owned - VideoOutputObserver* m_observer; + QSize m_videoFrameSize; + QRect m_videoWindowRect; - QSize m_frameSize; + Phonon::VideoWidget::AspectRatio m_aspectRatio; + Phonon::VideoWidget::ScaleMode m_scaleMode; }; } diff --git a/src/3rdparty/phonon/mmf/videooutputobserver.h b/src/3rdparty/phonon/mmf/videooutputobserver.h deleted file mode 100644 index e3ba305..0000000 --- a/src/3rdparty/phonon/mmf/videooutputobserver.h +++ /dev/null @@ -1,44 +0,0 @@ -/* This file is part of the KDE project. - -Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). - -This library is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 2.1 or 3 of the License. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with this library. If not, see <http://www.gnu.org/licenses/>. - -*/ - -#ifndef PHONON_MMF_VIDEOOUTPUTOBSERVER_H -#define PHONON_MMF_VIDEOOUTPUTOBSERVER_H - -#include <QtGlobal> - -QT_BEGIN_NAMESPACE - -namespace Phonon -{ -namespace MMF -{ -/** - * Interface via which VideoOutput notifies VideoPlayer of changes to the - * video output screen region. - */ -class VideoOutputObserver -{ -public: - virtual void videoOutputRegionChanged() = 0; -}; -} -} - -QT_END_NAMESPACE - -#endif diff --git a/src/3rdparty/phonon/mmf/videowidget.cpp b/src/3rdparty/phonon/mmf/videowidget.cpp index 7d7abf1..bd22307 100644 --- a/src/3rdparty/phonon/mmf/videowidget.cpp +++ b/src/3rdparty/phonon/mmf/videowidget.cpp @@ -35,11 +35,7 @@ using namespace Phonon::MMF; // Constants //----------------------------------------------------------------------------- -static const Phonon::VideoWidget::AspectRatio DefaultAspectRatio = - Phonon::VideoWidget::AspectRatioAuto; static const qreal DefaultBrightness = 1.0; -static const Phonon::VideoWidget::ScaleMode DefaultScaleMode = - Phonon::VideoWidget::FitInView; static const qreal DefaultContrast = 1.0; static const qreal DefaultHue = 1.0; static const qreal DefaultSaturation = 1.0; @@ -52,10 +48,8 @@ static const qreal DefaultSaturation = 1.0; MMF::VideoWidget::VideoWidget (AncestorMoveMonitor* ancestorMoveMonitor, QWidget* parent) : MediaNode(parent) - , m_widget(new VideoOutput(ancestorMoveMonitor, parent)) - , m_aspectRatio(DefaultAspectRatio) + , m_videoOutput(new VideoOutput(ancestorMoveMonitor, parent)) , m_brightness(DefaultBrightness) - , m_scaleMode(DefaultScaleMode) , m_contrast(DefaultContrast) , m_hue(DefaultHue) , m_saturation(DefaultSaturation) @@ -81,7 +75,7 @@ MMF::VideoWidget::~VideoWidget() Phonon::VideoWidget::AspectRatio MMF::VideoWidget::aspectRatio() const { - return m_aspectRatio; + return m_videoOutput->aspectRatio(); } void MMF::VideoWidget::setAspectRatio @@ -90,7 +84,7 @@ void MMF::VideoWidget::setAspectRatio TRACE_CONTEXT(VideoWidget::setAspectRatio, EVideoApi); TRACE("aspectRatio %d", aspectRatio); - m_aspectRatio = aspectRatio; + m_videoOutput->setAspectRatio(aspectRatio); } qreal MMF::VideoWidget::brightness() const @@ -108,7 +102,7 @@ void MMF::VideoWidget::setBrightness(qreal brightness) Phonon::VideoWidget::ScaleMode MMF::VideoWidget::scaleMode() const { - return m_scaleMode; + return m_videoOutput->scaleMode(); } void MMF::VideoWidget::setScaleMode(Phonon::VideoWidget::ScaleMode scaleMode) @@ -116,7 +110,7 @@ void MMF::VideoWidget::setScaleMode(Phonon::VideoWidget::ScaleMode scaleMode) TRACE_CONTEXT(VideoWidget::setScaleMode, EVideoApi); TRACE("setScaleMode %d", setScaleMode); - m_scaleMode = scaleMode; + m_videoOutput->setScaleMode(scaleMode); } qreal MMF::VideoWidget::contrast() const @@ -160,17 +154,12 @@ void MMF::VideoWidget::setSaturation(qreal saturation) QWidget* MMF::VideoWidget::widget() { - return m_widget.data(); -} - -VideoOutput& MMF::VideoWidget::videoOutput() -{ - return *static_cast<VideoOutput*>(widget()); + return m_videoOutput.data(); } bool MMF::VideoWidget::activateOnMediaObject(MediaObject *mo) { - mo->setVideoOutput(&videoOutput()); + mo->setVideoOutput(m_videoOutput.data()); return true; } diff --git a/src/3rdparty/phonon/mmf/videowidget.h b/src/3rdparty/phonon/mmf/videowidget.h index 318dfae..2f0978b 100644 --- a/src/3rdparty/phonon/mmf/videowidget.h +++ b/src/3rdparty/phonon/mmf/videowidget.h @@ -20,6 +20,7 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. #define PHONON_MMF_VIDEOWIDGET_H #include "mmf_medianode.h" +#include "videooutput.h" #include <QtGui/QWidget> #include <Phonon/VideoWidget> @@ -59,17 +60,13 @@ public: virtual void setSaturation(qreal saturation); virtual QWidget *widget(); - VideoOutput& videoOutput(); - protected: virtual bool activateOnMediaObject(MediaObject *mo); private: - QScopedPointer<QWidget> m_widget; + QScopedPointer<VideoOutput> m_videoOutput; - Phonon::VideoWidget::AspectRatio m_aspectRatio; qreal m_brightness; - Phonon::VideoWidget::ScaleMode m_scaleMode; qreal m_contrast; qreal m_hue; qreal m_saturation; diff --git a/src/3rdparty/phonon/mmf/volumeobserver.h b/src/3rdparty/phonon/mmf/volumeobserver.h deleted file mode 100644 index bedd3de..0000000 --- a/src/3rdparty/phonon/mmf/volumeobserver.h +++ /dev/null @@ -1,44 +0,0 @@ -/* This file is part of the KDE project. - -Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). - -This library is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 2.1 or 3 of the License. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with this library. If not, see <http://www.gnu.org/licenses/>. - -*/ - -#ifndef PHONON_MMF_VOLUMEOBSERVER_H -#define PHONON_MMF_VOLUMEOBSERVER_H - -#include <QtGlobal> - -QT_BEGIN_NAMESPACE - -namespace Phonon -{ -namespace MMF -{ -/** - * Interface used by AudioOutput to pass volume control commands - * back along the audio path to the MediaObject. - */ -class VolumeObserver -{ -public: - virtual void volumeChanged(qreal volume) = 0; -}; -} -} - -QT_END_NAMESPACE - -#endif diff --git a/src/3rdparty/phonon/phonon/abstractaudiooutput.cpp b/src/3rdparty/phonon/phonon/abstractaudiooutput.cpp index 47c5a89..bce7c11 100644 --- a/src/3rdparty/phonon/phonon/abstractaudiooutput.cpp +++ b/src/3rdparty/phonon/phonon/abstractaudiooutput.cpp @@ -6,7 +6,7 @@ Copyright (C) 2005-2006 Matthias Kretz <kretz@kde.org> License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/abstractaudiooutput.h b/src/3rdparty/phonon/phonon/abstractaudiooutput.h index a466298..1045f18 100644 --- a/src/3rdparty/phonon/phonon/abstractaudiooutput.h +++ b/src/3rdparty/phonon/phonon/abstractaudiooutput.h @@ -6,7 +6,7 @@ Copyright (C) 2005-2006 Matthias Kretz <kretz@kde.org> License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/abstractaudiooutput_p.cpp b/src/3rdparty/phonon/phonon/abstractaudiooutput_p.cpp index 83ee8b0..20e0b3c 100644 --- a/src/3rdparty/phonon/phonon/abstractaudiooutput_p.cpp +++ b/src/3rdparty/phonon/phonon/abstractaudiooutput_p.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/abstractaudiooutput_p.h b/src/3rdparty/phonon/phonon/abstractaudiooutput_p.h index 831eb8d..9b3a57f 100644 --- a/src/3rdparty/phonon/phonon/abstractaudiooutput_p.h +++ b/src/3rdparty/phonon/phonon/abstractaudiooutput_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/abstractmediastream.cpp b/src/3rdparty/phonon/phonon/abstractmediastream.cpp index 5b860f3..f4a7db6 100644 --- a/src/3rdparty/phonon/phonon/abstractmediastream.cpp +++ b/src/3rdparty/phonon/phonon/abstractmediastream.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/abstractmediastream.h b/src/3rdparty/phonon/phonon/abstractmediastream.h index c4cde85..87fa140 100644 --- a/src/3rdparty/phonon/phonon/abstractmediastream.h +++ b/src/3rdparty/phonon/phonon/abstractmediastream.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/abstractmediastream_p.h b/src/3rdparty/phonon/phonon/abstractmediastream_p.h index 0e87c4d..a676716 100644 --- a/src/3rdparty/phonon/phonon/abstractmediastream_p.h +++ b/src/3rdparty/phonon/phonon/abstractmediastream_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/abstractvideooutput.cpp b/src/3rdparty/phonon/phonon/abstractvideooutput.cpp index 30dde14..1695b78 100644 --- a/src/3rdparty/phonon/phonon/abstractvideooutput.cpp +++ b/src/3rdparty/phonon/phonon/abstractvideooutput.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/abstractvideooutput.h b/src/3rdparty/phonon/phonon/abstractvideooutput.h index 04cfdf0..824f729 100644 --- a/src/3rdparty/phonon/phonon/abstractvideooutput.h +++ b/src/3rdparty/phonon/phonon/abstractvideooutput.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/abstractvideooutput_p.cpp b/src/3rdparty/phonon/phonon/abstractvideooutput_p.cpp index 83d0650..a9cfa4d 100644 --- a/src/3rdparty/phonon/phonon/abstractvideooutput_p.cpp +++ b/src/3rdparty/phonon/phonon/abstractvideooutput_p.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/abstractvideooutput_p.h b/src/3rdparty/phonon/phonon/abstractvideooutput_p.h index d0e8157..90230d4 100644 --- a/src/3rdparty/phonon/phonon/abstractvideooutput_p.h +++ b/src/3rdparty/phonon/phonon/abstractvideooutput_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/addoninterface.h b/src/3rdparty/phonon/phonon/addoninterface.h index f400523..229129b 100644 --- a/src/3rdparty/phonon/phonon/addoninterface.h +++ b/src/3rdparty/phonon/phonon/addoninterface.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/audiooutput.cpp b/src/3rdparty/phonon/phonon/audiooutput.cpp index 00b2ebd..0f6a49b 100644 --- a/src/3rdparty/phonon/phonon/audiooutput.cpp +++ b/src/3rdparty/phonon/phonon/audiooutput.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. @@ -29,7 +29,7 @@ #include "phononnamespace_p.h" #include "platform_p.h" -#include <qmath.h> +#include <QtCore/qmath.h> #define PHONON_CLASSNAME AudioOutput #define IFACES2 AudioOutputInterface42 @@ -126,7 +126,9 @@ void AudioOutput::setName(const QString &newName) d->name = newName; setVolume(Platform::loadVolume(newName)); #ifndef QT_NO_DBUS - emit d->adaptor->nameChanged(newName); + if (d->adaptor) { + emit d->adaptor->nameChanged(newName); + } #endif } @@ -257,6 +259,7 @@ void AudioOutputPrivate::setupBackendObject() // set up attributes pINTERFACE_CALL(setVolume(pow(volume, VOLTAGE_TO_LOUDNESS_EXPONENT))); +#ifndef QT_NO_PHONON_SETTINGSGROUP // if the output device is not available and the device was not explicitly set if (!callSetOutputDevice(this, device) && !outputDeviceOverridden) { // fall back in the preference list of output devices @@ -276,6 +279,7 @@ void AudioOutputPrivate::setupBackendObject() callSetOutputDevice(this, none); handleAutomaticDeviceChange(none, FallbackChange); } +#endif //QT_NO_PHONON_SETTINGSGROUP } void AudioOutputPrivate::_k_volumeChanged(qreal newVolume) @@ -305,6 +309,7 @@ void AudioOutputPrivate::_k_audioDeviceFailed() pDebug() << Q_FUNC_INFO; // outputDeviceIndex identifies a failing device // fall back in the preference list of output devices +#ifndef QT_NO_PHONON_SETTINGSGROUP const QList<int> deviceList = GlobalConfig().audioOutputDeviceListFor(category, GlobalConfig::AdvancedDevicesFromSettings | GlobalConfig::HideUnavailableDevices); for (int i = 0; i < deviceList.count(); ++i) { const int devIndex = deviceList.at(i); @@ -317,6 +322,7 @@ void AudioOutputPrivate::_k_audioDeviceFailed() } } } +#endif //QT_NO_PHONON_SETTINGSGROUP // if we get here there is no working output device. Tell the backend. const AudioOutputDevice none; callSetOutputDevice(this, none); @@ -326,6 +332,7 @@ void AudioOutputPrivate::_k_audioDeviceFailed() void AudioOutputPrivate::_k_deviceListChanged() { pDebug() << Q_FUNC_INFO; +#ifndef QT_NO_PHONON_SETTINGSGROUP // let's see if there's a usable device higher in the preference list const QList<int> deviceList = GlobalConfig().audioOutputDeviceListFor(category, GlobalConfig::AdvancedDevicesFromSettings); DeviceChangeType changeType = HigherPreferenceChange; @@ -351,6 +358,7 @@ void AudioOutputPrivate::_k_deviceListChanged() break; // found one with higher preference that works } } +#endif //QT_NO_PHONON_SETTINGSGROUP } static struct @@ -403,7 +411,9 @@ void AudioOutputPrivate::handleAutomaticDeviceChange(const AudioOutputDevice &de AudioOutputPrivate::~AudioOutputPrivate() { #ifndef QT_NO_DBUS - emit adaptor->outputDestroyed(); + if (adaptor) { + emit adaptor->outputDestroyed(); + } #endif } diff --git a/src/3rdparty/phonon/phonon/audiooutput.h b/src/3rdparty/phonon/phonon/audiooutput.h index 54bb389..4edf135 100644 --- a/src/3rdparty/phonon/phonon/audiooutput.h +++ b/src/3rdparty/phonon/phonon/audiooutput.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/audiooutput_p.h b/src/3rdparty/phonon/phonon/audiooutput_p.h index 459b491..fdee299 100644 --- a/src/3rdparty/phonon/phonon/audiooutput_p.h +++ b/src/3rdparty/phonon/phonon/audiooutput_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/audiooutputinterface.cpp b/src/3rdparty/phonon/phonon/audiooutputinterface.cpp index be2780d..1770f4c 100644 --- a/src/3rdparty/phonon/phonon/audiooutputinterface.cpp +++ b/src/3rdparty/phonon/phonon/audiooutputinterface.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/audiooutputinterface.h b/src/3rdparty/phonon/phonon/audiooutputinterface.h index 1511e02..80ba11c 100644 --- a/src/3rdparty/phonon/phonon/audiooutputinterface.h +++ b/src/3rdparty/phonon/phonon/audiooutputinterface.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/backendcapabilities.cpp b/src/3rdparty/phonon/phonon/backendcapabilities.cpp index 62c9cc9..fbeb020 100644 --- a/src/3rdparty/phonon/phonon/backendcapabilities.cpp +++ b/src/3rdparty/phonon/phonon/backendcapabilities.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. @@ -75,10 +75,12 @@ bool BackendCapabilities::isMimeTypeAvailable(const QString &mimeType) QList<AudioOutputDevice> BackendCapabilities::availableAudioOutputDevices() { QList<AudioOutputDevice> ret; +#ifndef QT_NO_PHONON_SETTINGSGROUP const QList<int> deviceIndexes = GlobalConfig().audioOutputDeviceListFor(Phonon::NoCategory); for (int i = 0; i < deviceIndexes.count(); ++i) { ret.append(AudioOutputDevice::fromIndex(deviceIndexes.at(i))); } +#endif //QT_NO_PHONON_SETTINGSGROUP return ret; } diff --git a/src/3rdparty/phonon/phonon/backendcapabilities.h b/src/3rdparty/phonon/phonon/backendcapabilities.h index 36454a3..643c8ef 100644 --- a/src/3rdparty/phonon/phonon/backendcapabilities.h +++ b/src/3rdparty/phonon/phonon/backendcapabilities.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/backendcapabilities_p.h b/src/3rdparty/phonon/phonon/backendcapabilities_p.h index c17f24f..5ef18a4 100644 --- a/src/3rdparty/phonon/phonon/backendcapabilities_p.h +++ b/src/3rdparty/phonon/phonon/backendcapabilities_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/backendinterface.h b/src/3rdparty/phonon/phonon/backendinterface.h index e1f11da..5deee75 100644 --- a/src/3rdparty/phonon/phonon/backendinterface.h +++ b/src/3rdparty/phonon/phonon/backendinterface.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/effect.cpp b/src/3rdparty/phonon/phonon/effect.cpp index 98662a5..dfcb290 100644 --- a/src/3rdparty/phonon/phonon/effect.cpp +++ b/src/3rdparty/phonon/phonon/effect.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/effect.h b/src/3rdparty/phonon/phonon/effect.h index b3a7975..e403482 100644 --- a/src/3rdparty/phonon/phonon/effect.h +++ b/src/3rdparty/phonon/phonon/effect.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/effect_p.h b/src/3rdparty/phonon/phonon/effect_p.h index 586812a..6cc42d9 100644 --- a/src/3rdparty/phonon/phonon/effect_p.h +++ b/src/3rdparty/phonon/phonon/effect_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/effectinterface.h b/src/3rdparty/phonon/phonon/effectinterface.h index f535105..59c69d9 100644 --- a/src/3rdparty/phonon/phonon/effectinterface.h +++ b/src/3rdparty/phonon/phonon/effectinterface.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/effectparameter.cpp b/src/3rdparty/phonon/phonon/effectparameter.cpp index 6030b6e..0447f5b 100644 --- a/src/3rdparty/phonon/phonon/effectparameter.cpp +++ b/src/3rdparty/phonon/phonon/effectparameter.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/effectparameter.h b/src/3rdparty/phonon/phonon/effectparameter.h index 55c7049..4471a16 100644 --- a/src/3rdparty/phonon/phonon/effectparameter.h +++ b/src/3rdparty/phonon/phonon/effectparameter.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/effectparameter_p.h b/src/3rdparty/phonon/phonon/effectparameter_p.h index 0fc387a..f3f9f88 100644 --- a/src/3rdparty/phonon/phonon/effectparameter_p.h +++ b/src/3rdparty/phonon/phonon/effectparameter_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/effectwidget.cpp b/src/3rdparty/phonon/phonon/effectwidget.cpp index fb9cf6e..2334d7f 100644 --- a/src/3rdparty/phonon/phonon/effectwidget.cpp +++ b/src/3rdparty/phonon/phonon/effectwidget.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. @@ -97,8 +97,9 @@ void EffectWidgetPrivate::autogenerateUi() Q_Q(EffectWidget); QVBoxLayout *mainLayout = new QVBoxLayout(q); mainLayout->setMargin(0); - for (int i = 0; i < effect->parameters().count(); ++i) { - const EffectParameter ¶ = effect->parameters().at(i); + const QList<Phonon::EffectParameter> parameters = effect->parameters(); + for (int i = 0; i < parameters.count(); ++i) { + const EffectParameter ¶ = parameters.at(i); QVariant value = effect->parameterValue(para); QHBoxLayout *pLayout = new QHBoxLayout; mainLayout->addLayout(pLayout); diff --git a/src/3rdparty/phonon/phonon/effectwidget.h b/src/3rdparty/phonon/phonon/effectwidget.h index 340b2e3..17a310f 100644 --- a/src/3rdparty/phonon/phonon/effectwidget.h +++ b/src/3rdparty/phonon/phonon/effectwidget.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. @@ -39,7 +39,7 @@ class Effect; class EffectWidgetPrivate; /** \class EffectWidget effectwidget.h Phonon/EffectWidget - * \brief Widget to control the parameters of an \ref Effect. + * \brief Widget to control the parameters of an Effect. * * \ingroup PhononWidgets * \ingroup PhononEffects diff --git a/src/3rdparty/phonon/phonon/effectwidget_p.h b/src/3rdparty/phonon/phonon/effectwidget_p.h index 6ce44bf..aad422a 100644 --- a/src/3rdparty/phonon/phonon/effectwidget_p.h +++ b/src/3rdparty/phonon/phonon/effectwidget_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/factory.cpp b/src/3rdparty/phonon/phonon/factory.cpp index d5010e7..ab1f44f 100644 --- a/src/3rdparty/phonon/phonon/factory.cpp +++ b/src/3rdparty/phonon/phonon/factory.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/factory_p.h b/src/3rdparty/phonon/phonon/factory_p.h index de059f8..dee2b56 100644 --- a/src/3rdparty/phonon/phonon/factory_p.h +++ b/src/3rdparty/phonon/phonon/factory_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/frontendinterface_p.h b/src/3rdparty/phonon/phonon/frontendinterface_p.h index b6c76ce..83ad780 100644 --- a/src/3rdparty/phonon/phonon/frontendinterface_p.h +++ b/src/3rdparty/phonon/phonon/frontendinterface_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/globalconfig.cpp b/src/3rdparty/phonon/phonon/globalconfig.cpp index 3718c6a..3b77a18 100644 --- a/src/3rdparty/phonon/phonon/globalconfig.cpp +++ b/src/3rdparty/phonon/phonon/globalconfig.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. @@ -178,13 +178,15 @@ QList<int> GlobalConfig::audioOutputDeviceListFor(Phonon::Category category, int return listSortedByConfig(backendConfig, category, defaultList); } -#endif //QT_NO_SETTINGSGROUPS +#endif //QT_NO_PHONON_SETTINGSGROUP int GlobalConfig::audioOutputDeviceFor(Phonon::Category category, int override) const { +#ifndef QT_NO_PHONON_SETTINGSGROUP QList<int> ret = audioOutputDeviceListFor(category, override); - if (ret.isEmpty()) - return -1; - return ret.first(); + if (!ret.isEmpty()) + return ret.first(); +#endif //QT_NO_PHONON_SETTINGSGROUP + return -1; } #ifndef QT_NO_PHONON_AUDIOCAPTURE diff --git a/src/3rdparty/phonon/phonon/globalconfig_p.h b/src/3rdparty/phonon/phonon/globalconfig_p.h index 034bce3..ec70b6f 100644 --- a/src/3rdparty/phonon/phonon/globalconfig_p.h +++ b/src/3rdparty/phonon/phonon/globalconfig_p.h @@ -6,7 +6,7 @@ Copyright (C) 2006-2008 Matthias Kretz <kretz@kde.org> License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/globalstatic_p.h b/src/3rdparty/phonon/phonon/globalstatic_p.h index 04f8395..cf80512 100644 --- a/src/3rdparty/phonon/phonon/globalstatic_p.h +++ b/src/3rdparty/phonon/phonon/globalstatic_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/iodevicestream.cpp b/src/3rdparty/phonon/phonon/iodevicestream.cpp index 5376da3..3735f75 100644 --- a/src/3rdparty/phonon/phonon/iodevicestream.cpp +++ b/src/3rdparty/phonon/phonon/iodevicestream.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/iodevicestream_p.h b/src/3rdparty/phonon/phonon/iodevicestream_p.h index 5eb90bc..cca77e3 100644 --- a/src/3rdparty/phonon/phonon/iodevicestream_p.h +++ b/src/3rdparty/phonon/phonon/iodevicestream_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/mediacontroller.cpp b/src/3rdparty/phonon/phonon/mediacontroller.cpp index d094381..59fd5c7 100644 --- a/src/3rdparty/phonon/phonon/mediacontroller.cpp +++ b/src/3rdparty/phonon/phonon/mediacontroller.cpp @@ -7,7 +7,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/mediacontroller.h b/src/3rdparty/phonon/phonon/mediacontroller.h index 19aaf13..109a79e 100644 --- a/src/3rdparty/phonon/phonon/mediacontroller.h +++ b/src/3rdparty/phonon/phonon/mediacontroller.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/medianode.cpp b/src/3rdparty/phonon/phonon/medianode.cpp index 63fa2e3..bc1caed 100644 --- a/src/3rdparty/phonon/phonon/medianode.cpp +++ b/src/3rdparty/phonon/phonon/medianode.cpp @@ -7,7 +7,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/medianode.h b/src/3rdparty/phonon/phonon/medianode.h index 86931ac..6aab189 100644 --- a/src/3rdparty/phonon/phonon/medianode.h +++ b/src/3rdparty/phonon/phonon/medianode.h @@ -7,7 +7,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/medianode_p.h b/src/3rdparty/phonon/phonon/medianode_p.h index d5424b7..e2329a9 100644 --- a/src/3rdparty/phonon/phonon/medianode_p.h +++ b/src/3rdparty/phonon/phonon/medianode_p.h @@ -6,7 +6,7 @@ Copyright (C) 2007 Matthias Kretz <kretz@kde.org> License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/medianodedestructionhandler_p.h b/src/3rdparty/phonon/phonon/medianodedestructionhandler_p.h index 38c0907..9c893f4 100644 --- a/src/3rdparty/phonon/phonon/medianodedestructionhandler_p.h +++ b/src/3rdparty/phonon/phonon/medianodedestructionhandler_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/mediaobject.cpp b/src/3rdparty/phonon/phonon/mediaobject.cpp index 10fefbd..13d303c 100644 --- a/src/3rdparty/phonon/phonon/mediaobject.cpp +++ b/src/3rdparty/phonon/phonon/mediaobject.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/mediaobject.h b/src/3rdparty/phonon/phonon/mediaobject.h index c56b6b5..ade966a 100644 --- a/src/3rdparty/phonon/phonon/mediaobject.h +++ b/src/3rdparty/phonon/phonon/mediaobject.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/mediaobject_p.h b/src/3rdparty/phonon/phonon/mediaobject_p.h index 5419341..c164490 100644 --- a/src/3rdparty/phonon/phonon/mediaobject_p.h +++ b/src/3rdparty/phonon/phonon/mediaobject_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/mediaobjectinterface.h b/src/3rdparty/phonon/phonon/mediaobjectinterface.h index a5e2c51..26c4c8e 100644 --- a/src/3rdparty/phonon/phonon/mediaobjectinterface.h +++ b/src/3rdparty/phonon/phonon/mediaobjectinterface.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/mediasource.cpp b/src/3rdparty/phonon/phonon/mediasource.cpp index c003af9..be22dc3 100644 --- a/src/3rdparty/phonon/phonon/mediasource.cpp +++ b/src/3rdparty/phonon/phonon/mediasource.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/mediasource.h b/src/3rdparty/phonon/phonon/mediasource.h index da010d9..4cddbad 100644 --- a/src/3rdparty/phonon/phonon/mediasource.h +++ b/src/3rdparty/phonon/phonon/mediasource.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/mediasource_p.h b/src/3rdparty/phonon/phonon/mediasource_p.h index bfac7ad..46caef3 100644 --- a/src/3rdparty/phonon/phonon/mediasource_p.h +++ b/src/3rdparty/phonon/phonon/mediasource_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/objectdescription.cpp b/src/3rdparty/phonon/phonon/objectdescription.cpp index 3296792..e058b89 100644 --- a/src/3rdparty/phonon/phonon/objectdescription.cpp +++ b/src/3rdparty/phonon/phonon/objectdescription.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/objectdescription.h b/src/3rdparty/phonon/phonon/objectdescription.h index 108f02c..985cdcc 100644 --- a/src/3rdparty/phonon/phonon/objectdescription.h +++ b/src/3rdparty/phonon/phonon/objectdescription.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/objectdescription_p.h b/src/3rdparty/phonon/phonon/objectdescription_p.h index 1069f11..bcf56de 100644 --- a/src/3rdparty/phonon/phonon/objectdescription_p.h +++ b/src/3rdparty/phonon/phonon/objectdescription_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/objectdescriptionmodel.cpp b/src/3rdparty/phonon/phonon/objectdescriptionmodel.cpp index b67344f..7237e91 100644 --- a/src/3rdparty/phonon/phonon/objectdescriptionmodel.cpp +++ b/src/3rdparty/phonon/phonon/objectdescriptionmodel.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/objectdescriptionmodel.h b/src/3rdparty/phonon/phonon/objectdescriptionmodel.h index a3c72b2..96187c3 100644 --- a/src/3rdparty/phonon/phonon/objectdescriptionmodel.h +++ b/src/3rdparty/phonon/phonon/objectdescriptionmodel.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/objectdescriptionmodel_p.h b/src/3rdparty/phonon/phonon/objectdescriptionmodel_p.h index f036bc8..2200c8d 100644 --- a/src/3rdparty/phonon/phonon/objectdescriptionmodel_p.h +++ b/src/3rdparty/phonon/phonon/objectdescriptionmodel_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/path.cpp b/src/3rdparty/phonon/phonon/path.cpp index ef3530c..51c33b2 100644 --- a/src/3rdparty/phonon/phonon/path.cpp +++ b/src/3rdparty/phonon/phonon/path.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. @@ -244,8 +244,8 @@ bool Path::disconnect() //lets build the disconnection list QList<QObjectPair> disco; if (list.count() >=2 ) { - QObjectList::const_iterator it = list.begin(); - for(;it+1 != list.end();++it) { + QObjectList::const_iterator it = list.constBegin(); + for(;it+1 != list.constEnd();++it) { disco << QObjectPair(*it, *(it+1)); } } diff --git a/src/3rdparty/phonon/phonon/path.h b/src/3rdparty/phonon/phonon/path.h index eeabe82..6193054 100644 --- a/src/3rdparty/phonon/phonon/path.h +++ b/src/3rdparty/phonon/phonon/path.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/path_p.h b/src/3rdparty/phonon/phonon/path_p.h index 1345ad5..51b7e83 100644 --- a/src/3rdparty/phonon/phonon/path_p.h +++ b/src/3rdparty/phonon/phonon/path_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/phonon_export.h b/src/3rdparty/phonon/phonon/phonon_export.h index 5f93ea0..96b5159 100644 --- a/src/3rdparty/phonon/phonon/phonon_export.h +++ b/src/3rdparty/phonon/phonon/phonon_export.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/phonondefs.h b/src/3rdparty/phonon/phonon/phonondefs.h index d1a114a..15a1815 100644 --- a/src/3rdparty/phonon/phonon/phonondefs.h +++ b/src/3rdparty/phonon/phonon/phonondefs.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/phonondefs_p.h b/src/3rdparty/phonon/phonon/phonondefs_p.h index 09037b5..778d7f6 100644 --- a/src/3rdparty/phonon/phonon/phonondefs_p.h +++ b/src/3rdparty/phonon/phonon/phonondefs_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/phononnamespace.cpp b/src/3rdparty/phonon/phonon/phononnamespace.cpp index f594d3c..ba20aa5 100644 --- a/src/3rdparty/phonon/phonon/phononnamespace.cpp +++ b/src/3rdparty/phonon/phonon/phononnamespace.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/phononnamespace.h b/src/3rdparty/phonon/phonon/phononnamespace.h index 2492ee6..ec42d51 100644 --- a/src/3rdparty/phonon/phonon/phononnamespace.h +++ b/src/3rdparty/phonon/phonon/phononnamespace.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/phononnamespace.h.in b/src/3rdparty/phonon/phonon/phononnamespace.h.in index 54c5578..c65c121 100644 --- a/src/3rdparty/phonon/phonon/phononnamespace.h.in +++ b/src/3rdparty/phonon/phonon/phononnamespace.h.in @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. @@ -90,7 +90,7 @@ namespace Phonon }; /** - * Provided as keys for \ref MediaObject::metaData for convenience, in addition to the strings defined in + * Provided as keys for MediaObject::metaData for convenience, in addition to the strings defined in * the Ogg Vorbis specification. */ enum MetaData { diff --git a/src/3rdparty/phonon/phonon/phononnamespace_p.h b/src/3rdparty/phonon/phonon/phononnamespace_p.h index 4dd0ee8..2fa520a 100644 --- a/src/3rdparty/phonon/phonon/phononnamespace_p.h +++ b/src/3rdparty/phonon/phonon/phononnamespace_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/platform.cpp b/src/3rdparty/phonon/phonon/platform.cpp index ed660dc..49c4561 100644 --- a/src/3rdparty/phonon/phonon/platform.cpp +++ b/src/3rdparty/phonon/phonon/platform.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/platform_p.h b/src/3rdparty/phonon/phonon/platform_p.h index 379c54b..c4edb2f 100644 --- a/src/3rdparty/phonon/phonon/platform_p.h +++ b/src/3rdparty/phonon/phonon/platform_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/platformplugin.h b/src/3rdparty/phonon/phonon/platformplugin.h index e1ab1b7..c75bc96 100644 --- a/src/3rdparty/phonon/phonon/platformplugin.h +++ b/src/3rdparty/phonon/phonon/platformplugin.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/qsettingsgroup_p.h b/src/3rdparty/phonon/phonon/qsettingsgroup_p.h index 501fe37..f28ecaa 100644 --- a/src/3rdparty/phonon/phonon/qsettingsgroup_p.h +++ b/src/3rdparty/phonon/phonon/qsettingsgroup_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/seekslider.cpp b/src/3rdparty/phonon/phonon/seekslider.cpp index e1eea54..b5b25f0 100644 --- a/src/3rdparty/phonon/phonon/seekslider.cpp +++ b/src/3rdparty/phonon/phonon/seekslider.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/seekslider.h b/src/3rdparty/phonon/phonon/seekslider.h index 540079e..0005029 100644 --- a/src/3rdparty/phonon/phonon/seekslider.h +++ b/src/3rdparty/phonon/phonon/seekslider.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/seekslider_p.h b/src/3rdparty/phonon/phonon/seekslider_p.h index f4ed616..c87a4b0 100644 --- a/src/3rdparty/phonon/phonon/seekslider_p.h +++ b/src/3rdparty/phonon/phonon/seekslider_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/streaminterface.cpp b/src/3rdparty/phonon/phonon/streaminterface.cpp index 3646fc1..666cb1e 100644 --- a/src/3rdparty/phonon/phonon/streaminterface.cpp +++ b/src/3rdparty/phonon/phonon/streaminterface.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/streaminterface.h b/src/3rdparty/phonon/phonon/streaminterface.h index 10cc061..67df05d 100644 --- a/src/3rdparty/phonon/phonon/streaminterface.h +++ b/src/3rdparty/phonon/phonon/streaminterface.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/streaminterface_p.h b/src/3rdparty/phonon/phonon/streaminterface_p.h index cc41156..426c58d 100644 --- a/src/3rdparty/phonon/phonon/streaminterface_p.h +++ b/src/3rdparty/phonon/phonon/streaminterface_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/videoplayer.cpp b/src/3rdparty/phonon/phonon/videoplayer.cpp index 8f76d4c..8851b05 100644 --- a/src/3rdparty/phonon/phonon/videoplayer.cpp +++ b/src/3rdparty/phonon/phonon/videoplayer.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/videoplayer.h b/src/3rdparty/phonon/phonon/videoplayer.h index 6da1d98..7970f04 100644 --- a/src/3rdparty/phonon/phonon/videoplayer.h +++ b/src/3rdparty/phonon/phonon/videoplayer.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/videowidget.cpp b/src/3rdparty/phonon/phonon/videowidget.cpp index 63f6899..a9e83a6 100644 --- a/src/3rdparty/phonon/phonon/videowidget.cpp +++ b/src/3rdparty/phonon/phonon/videowidget.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/videowidget.h b/src/3rdparty/phonon/phonon/videowidget.h index bde7333..1d95490 100644 --- a/src/3rdparty/phonon/phonon/videowidget.h +++ b/src/3rdparty/phonon/phonon/videowidget.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/videowidget_p.h b/src/3rdparty/phonon/phonon/videowidget_p.h index c2434f2..3335135 100644 --- a/src/3rdparty/phonon/phonon/videowidget_p.h +++ b/src/3rdparty/phonon/phonon/videowidget_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/videowidgetinterface.h b/src/3rdparty/phonon/phonon/videowidgetinterface.h index 7ed8a8a..3e6fd22 100644 --- a/src/3rdparty/phonon/phonon/videowidgetinterface.h +++ b/src/3rdparty/phonon/phonon/videowidgetinterface.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/volumefadereffect.cpp b/src/3rdparty/phonon/phonon/volumefadereffect.cpp index 066199e..15d34ee 100644 --- a/src/3rdparty/phonon/phonon/volumefadereffect.cpp +++ b/src/3rdparty/phonon/phonon/volumefadereffect.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/volumefadereffect.h b/src/3rdparty/phonon/phonon/volumefadereffect.h index 22f2137..528bffa 100644 --- a/src/3rdparty/phonon/phonon/volumefadereffect.h +++ b/src/3rdparty/phonon/phonon/volumefadereffect.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/volumefadereffect_p.h b/src/3rdparty/phonon/phonon/volumefadereffect_p.h index cdd4e00..7937e63 100644 --- a/src/3rdparty/phonon/phonon/volumefadereffect_p.h +++ b/src/3rdparty/phonon/phonon/volumefadereffect_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/volumefaderinterface.h b/src/3rdparty/phonon/phonon/volumefaderinterface.h index da4262b..8c6e3a4 100644 --- a/src/3rdparty/phonon/phonon/volumefaderinterface.h +++ b/src/3rdparty/phonon/phonon/volumefaderinterface.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/volumeslider.cpp b/src/3rdparty/phonon/phonon/volumeslider.cpp index 1888cb6..00970c1 100644 --- a/src/3rdparty/phonon/phonon/volumeslider.cpp +++ b/src/3rdparty/phonon/phonon/volumeslider.cpp @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/volumeslider.h b/src/3rdparty/phonon/phonon/volumeslider.h index 47863a8..f5ef34f 100644 --- a/src/3rdparty/phonon/phonon/volumeslider.h +++ b/src/3rdparty/phonon/phonon/volumeslider.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/phonon/phonon/volumeslider_p.h b/src/3rdparty/phonon/phonon/volumeslider_p.h index 6d8009a..3827659 100644 --- a/src/3rdparty/phonon/phonon/volumeslider_p.h +++ b/src/3rdparty/phonon/phonon/volumeslider_p.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Nokia Corporation (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. diff --git a/src/3rdparty/webkit/.gitignore b/src/3rdparty/webkit/.gitignore new file mode 100644 index 0000000..b9595b3 --- /dev/null +++ b/src/3rdparty/webkit/.gitignore @@ -0,0 +1,6 @@ +*.mode* +*.pbxuser +*.perspective* +*.pyc +build/ +/WebKitBuild/ diff --git a/src/3rdparty/webkit/ChangeLog b/src/3rdparty/webkit/ChangeLog index dc43e0e..26dbaf7 100644 --- a/src/3rdparty/webkit/ChangeLog +++ b/src/3rdparty/webkit/ChangeLog @@ -1,3 +1,17 @@ +2009-10-30 Adam Barth <abarth@webkit.org> + + Reviewed by Mark Rowe. + + Teach git to ignore some files + https://bugs.webkit.org/show_bug.cgi?id=30951 + + Ignore WebKitBuild because we never want to version that directory. + Also, ignore the xcode project files so git clean doesn't blow away + your project settings. Finally, ignore the compiled python files in + WebKitTools/Script modules because they clutter up git status. + + * .gitignore: Added. + 2009-10-26 Holger Hans Peter Freyther <zecke@selfish.org> Rubber-stamped by Darin Adler. diff --git a/src/3rdparty/webkit/JavaScriptCore/ChangeLog b/src/3rdparty/webkit/JavaScriptCore/ChangeLog index e6ab073..0cbb3a5 100644 --- a/src/3rdparty/webkit/JavaScriptCore/ChangeLog +++ b/src/3rdparty/webkit/JavaScriptCore/ChangeLog @@ -1,3 +1,76 @@ +2009-11-16 Joerg Bornemann <joerg.bornemann@trolltech.com> + + Reviewed by Simon Hausmann. + + Fix Qt build on Windows CE 6. + + * JavaScriptCore.pri: Add missing include path. + * wtf/Platform.h: Include ce_time.h for Windows CE 6. + +2009-11-12 Thiago Macieira <thiago.macieira@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Fix linking on Linux 32-bit. + + It was missing the ".text" directive at the top of the file, + indicating that code would follow. Without it, the assembler created + "NOTYPE" symbols, which would result in linker errors. + https://bugs.webkit.org/show_bug.cgi?id=30863 + + * jit/JITStubs.cpp: + +2009-11-13 İsmail Dönmez <ismail@namtrac.org> + + Reviewed by Antti Koivisto. + + Fix typo, ce_time.cpp should be ce_time.c + + * JavaScriptCore.pri: + +2009-11-12 Richard Moe Gustavsen <richard.gustavsen@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Disable pthread_setname_np. + + This allows Qt builds on Mac from 10.6 to run on earlier version + where this symbol is not present. + https://bugs.webkit.org/show_bug.cgi?id=31403 + + * wtf/Platform.h: + +2009-11-02 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + REGRESSION (r48573): JSC may incorrectly cache chain lookups with a dictionary at the head of the chain + https://bugs.webkit.org/show_bug.cgi?id=31045 + + Add guards to prevent caching of prototype chain lookups with dictionaries at the + head of the chain. Also add a few tighter assertions to cached prototype lookups + to catch this in future. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::tryCacheGetByID): + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::JITThunks::tryCacheGetByID): + +2009-10-30 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + Reviewed by NOBODY (OOPS!). + + [Qt] Use the default timeout interval for JS as the HTML tokenizer delay for setHtml() + + This ensures that long-running JavaScript (for example due to a modal alert() dialog), + will not trigger a deferred load after only 500ms (the default tokenizer delay) while + still giving a reasonable timeout (10 seconds) to prevent deadlock. + + https://bugs.webkit.org/show_bug.cgi?id=29381 + + * runtime/TimeoutChecker.h: Add getter for the timeout interval + 2009-10-29 Gabor Loki <loki@inf.u-szeged.hu> Reviewed by Gavin Barraclough. diff --git a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri index 8bd4225..bb531e5 100644 --- a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri +++ b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri @@ -54,7 +54,7 @@ win32-* { # Rules when JIT enabled (not disabled) !contains(DEFINES, ENABLE_JIT=0) { - linux-g++*:greaterThan(QT_GCC_MAJOR_VERSION,3):greaterThan(QT_GCC_MINOR_VERSION,0) { + linux*-g++*:greaterThan(QT_GCC_MAJOR_VERSION,3):greaterThan(QT_GCC_MINOR_VERSION,0) { QMAKE_CXXFLAGS += -fno-stack-protector QMAKE_CFLAGS += -fno-stack-protector } diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.cpp b/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.cpp index 5b1be71..4f78903 100644 --- a/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.cpp @@ -1,24 +1,23 @@ -/* A Bison parser, made by GNU Bison 2.3. */ -/* Skeleton implementation for Bison's Yacc-like parsers in C +/* A Bison parser, made by GNU Bison 2.4.1. */ - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -29,7 +28,7 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ @@ -47,7 +46,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.3" +#define YYBISON_VERSION "2.4.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -55,159 +54,28 @@ /* Pure parsers. */ #define YYPURE 1 +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + /* Using locations. */ #define YYLSP_NEEDED 1 /* Substitute the variable and function names. */ -#define yyparse jscyyparse -#define yylex jscyylex -#define yyerror jscyyerror -#define yylval jscyylval -#define yychar jscyychar -#define yydebug jscyydebug -#define yynerrs jscyynerrs -#define yylloc jscyylloc - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - NULLTOKEN = 258, - TRUETOKEN = 259, - FALSETOKEN = 260, - BREAK = 261, - CASE = 262, - DEFAULT = 263, - FOR = 264, - NEW = 265, - VAR = 266, - CONSTTOKEN = 267, - CONTINUE = 268, - FUNCTION = 269, - RETURN = 270, - VOIDTOKEN = 271, - DELETETOKEN = 272, - IF = 273, - THISTOKEN = 274, - DO = 275, - WHILE = 276, - INTOKEN = 277, - INSTANCEOF = 278, - TYPEOF = 279, - SWITCH = 280, - WITH = 281, - RESERVED = 282, - THROW = 283, - TRY = 284, - CATCH = 285, - FINALLY = 286, - DEBUGGER = 287, - IF_WITHOUT_ELSE = 288, - ELSE = 289, - EQEQ = 290, - NE = 291, - STREQ = 292, - STRNEQ = 293, - LE = 294, - GE = 295, - OR = 296, - AND = 297, - PLUSPLUS = 298, - MINUSMINUS = 299, - LSHIFT = 300, - RSHIFT = 301, - URSHIFT = 302, - PLUSEQUAL = 303, - MINUSEQUAL = 304, - MULTEQUAL = 305, - DIVEQUAL = 306, - LSHIFTEQUAL = 307, - RSHIFTEQUAL = 308, - URSHIFTEQUAL = 309, - ANDEQUAL = 310, - MODEQUAL = 311, - XOREQUAL = 312, - OREQUAL = 313, - OPENBRACE = 314, - CLOSEBRACE = 315, - NUMBER = 316, - IDENT = 317, - STRING = 318, - AUTOPLUSPLUS = 319, - AUTOMINUSMINUS = 320 - }; -#endif -/* Tokens. */ -#define NULLTOKEN 258 -#define TRUETOKEN 259 -#define FALSETOKEN 260 -#define BREAK 261 -#define CASE 262 -#define DEFAULT 263 -#define FOR 264 -#define NEW 265 -#define VAR 266 -#define CONSTTOKEN 267 -#define CONTINUE 268 -#define FUNCTION 269 -#define RETURN 270 -#define VOIDTOKEN 271 -#define DELETETOKEN 272 -#define IF 273 -#define THISTOKEN 274 -#define DO 275 -#define WHILE 276 -#define INTOKEN 277 -#define INSTANCEOF 278 -#define TYPEOF 279 -#define SWITCH 280 -#define WITH 281 -#define RESERVED 282 -#define THROW 283 -#define TRY 284 -#define CATCH 285 -#define FINALLY 286 -#define DEBUGGER 287 -#define IF_WITHOUT_ELSE 288 -#define ELSE 289 -#define EQEQ 290 -#define NE 291 -#define STREQ 292 -#define STRNEQ 293 -#define LE 294 -#define GE 295 -#define OR 296 -#define AND 297 -#define PLUSPLUS 298 -#define MINUSMINUS 299 -#define LSHIFT 300 -#define RSHIFT 301 -#define URSHIFT 302 -#define PLUSEQUAL 303 -#define MINUSEQUAL 304 -#define MULTEQUAL 305 -#define DIVEQUAL 306 -#define LSHIFTEQUAL 307 -#define RSHIFTEQUAL 308 -#define URSHIFTEQUAL 309 -#define ANDEQUAL 310 -#define MODEQUAL 311 -#define XOREQUAL 312 -#define OREQUAL 313 -#define OPENBRACE 314 -#define CLOSEBRACE 315 -#define NUMBER 316 -#define IDENT 317 -#define STRING 318 -#define AUTOPLUSPLUS 319 -#define AUTOMINUSMINUS 320 - - - +#define yyparse jscyyparse +#define yylex jscyylex +#define yyerror jscyyerror +#define yylval jscyylval +#define yychar jscyychar +#define yydebug jscyydebug +#define yynerrs jscyynerrs +#define yylloc jscyylloc /* Copy the first part of user declarations. */ + +/* Line 189 of yacc.c */ #line 3 "../parser/Grammar.y" @@ -352,6 +220,9 @@ static inline void appendToVarDeclarationList(JSGlobalData* globalData, ParserAr +/* Line 189 of yacc.c */ +#line 225 "JavaScriptCore/tmp/../generated/Grammar.tab.c" + /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 @@ -370,10 +241,88 @@ static inline void appendToVarDeclarationList(JSGlobalData* globalData, ParserAr # define YYTOKEN_TABLE 0 #endif + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + NULLTOKEN = 258, + TRUETOKEN = 259, + FALSETOKEN = 260, + BREAK = 261, + CASE = 262, + DEFAULT = 263, + FOR = 264, + NEW = 265, + VAR = 266, + CONSTTOKEN = 267, + CONTINUE = 268, + FUNCTION = 269, + RETURN = 270, + VOIDTOKEN = 271, + DELETETOKEN = 272, + IF = 273, + THISTOKEN = 274, + DO = 275, + WHILE = 276, + INTOKEN = 277, + INSTANCEOF = 278, + TYPEOF = 279, + SWITCH = 280, + WITH = 281, + RESERVED = 282, + THROW = 283, + TRY = 284, + CATCH = 285, + FINALLY = 286, + DEBUGGER = 287, + IF_WITHOUT_ELSE = 288, + ELSE = 289, + EQEQ = 290, + NE = 291, + STREQ = 292, + STRNEQ = 293, + LE = 294, + GE = 295, + OR = 296, + AND = 297, + PLUSPLUS = 298, + MINUSMINUS = 299, + LSHIFT = 300, + RSHIFT = 301, + URSHIFT = 302, + PLUSEQUAL = 303, + MINUSEQUAL = 304, + MULTEQUAL = 305, + DIVEQUAL = 306, + LSHIFTEQUAL = 307, + RSHIFTEQUAL = 308, + URSHIFTEQUAL = 309, + ANDEQUAL = 310, + MODEQUAL = 311, + XOREQUAL = 312, + OREQUAL = 313, + OPENBRACE = 314, + CLOSEBRACE = 315, + NUMBER = 316, + IDENT = 317, + STRING = 318, + AUTOPLUSPLUS = 319, + AUTOMINUSMINUS = 320 + }; +#endif + + + #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 146 "../parser/Grammar.y" { + +/* Line 214 of yacc.c */ +#line 146 "../parser/Grammar.y" + int intValue; double doubleValue; const Identifier* ident; @@ -403,13 +352,15 @@ typedef union YYSTYPE ParameterListInfo parameterList; Operator op; -} -/* Line 187 of yacc.c. */ -#line 409 "JavaScriptCore/tmp/../generated/Grammar.tab.c" - YYSTYPE; + + + +/* Line 214 of yacc.c */ +#line 360 "JavaScriptCore/tmp/../generated/Grammar.tab.c" +} YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 #endif #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED @@ -427,6 +378,8 @@ typedef struct YYLTYPE /* Copy the second part of user declarations. */ + +/* Line 264 of yacc.c */ #line 178 "../parser/Grammar.y" @@ -442,8 +395,8 @@ static inline void setExceptionLocation(ThrowableExpressionData* node, unsigned -/* Line 216 of yacc.c. */ -#line 447 "JavaScriptCore/tmp/../generated/Grammar.tab.c" +/* Line 264 of yacc.c */ +#line 400 "JavaScriptCore/tmp/../generated/Grammar.tab.c" #ifdef short # undef short @@ -518,14 +471,14 @@ typedef short int yytype_int16; #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int -YYID (int i) +YYID (int yyi) #else static int -YYID (i) - int i; +YYID (yyi) + int yyi; #endif { - return i; + return yyi; } #endif @@ -607,9 +560,9 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss; - YYSTYPE yyvs; - YYLTYPE yyls; + yytype_int16 yyss_alloc; + YYSTYPE yyvs_alloc; + YYLTYPE yyls_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ @@ -644,12 +597,12 @@ union yyalloc elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ -# define YYSTACK_RELOCATE(Stack) \ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ @@ -2363,17 +2316,20 @@ yy_symbol_print (yyoutput, yytype, yyvaluep, yylocationp) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) #else static void -yy_stack_print (bottom, top) - yytype_int16 *bottom; - yytype_int16 *top; +yy_stack_print (yybottom, yytop) + yytype_int16 *yybottom; + yytype_int16 *yytop; #endif { YYFPRINTF (stderr, "Stack now"); - for (; bottom <= top; ++bottom) - YYFPRINTF (stderr, " %d", *bottom); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } YYFPRINTF (stderr, "\n"); } @@ -2408,11 +2364,11 @@ yy_reduce_print (yyvsp, yylsp, yyrule) /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { - fprintf (stderr, " $%d = ", yyi + 1); + YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , &(yylsp[(yyi + 1) - (yynrhs)]) ); - fprintf (stderr, "\n"); + YYFPRINTF (stderr, "\n"); } } @@ -2694,10 +2650,8 @@ yydestruct (yymsg, yytype, yyvaluep, yylocationp) break; } } - /* Prevent warnings from -Wmissing-prototypes. */ - #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); @@ -2716,10 +2670,9 @@ int yyparse (); - -/*----------. -| yyparse. | -`----------*/ +/*-------------------------. +| yyparse or yypush_parse. | +`-------------------------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ @@ -2743,88 +2696,97 @@ yyparse () #endif #endif { - /* The look-ahead symbol. */ +/* The lookahead symbol. */ int yychar; -/* The semantic value of the look-ahead symbol. */ +/* The semantic value of the lookahead symbol. */ YYSTYPE yylval; -/* Number of syntax errors so far. */ -int yynerrs; -/* Location data for the look-ahead symbol. */ +/* Location data for the lookahead symbol. */ YYLTYPE yylloc; - int yystate; - int yyn; - int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Look-ahead token as an internal (translated) token number. */ - int yytoken = 0; -#if YYERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char yymsgbuf[128]; - char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; -#endif + /* Number of syntax errors so far. */ + int yynerrs; - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. + int yystate; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ + /* The stacks and their tools: + `yyss': related to states. + `yyvs': related to semantic values. + `yyls': related to locations. - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss = yyssa; - yytype_int16 *yyssp; + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp; + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss; + yytype_int16 *yyssp; - /* The location stack. */ - YYLTYPE yylsa[YYINITDEPTH]; - YYLTYPE *yyls = yylsa; - YYLTYPE *yylsp; - /* The locations where the error started and ended. */ - YYLTYPE yyerror_range[2]; + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs; + YYSTYPE *yyvsp; -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) + /* The location stack. */ + YYLTYPE yylsa[YYINITDEPTH]; + YYLTYPE *yyls; + YYLTYPE *yylsp; - YYSIZE_T yystacksize = YYINITDEPTH; + /* The locations where the error started and ended. */ + YYLTYPE yyerror_range[2]; + YYSIZE_T yystacksize; + + int yyn; + int yyresult; + /* Lookahead token as an internal (translated) token number. */ + int yytoken; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; YYLTYPE yyloc; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) + /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; + yytoken = 0; + yyss = yyssa; + yyvs = yyvsa; + yyls = yylsa; + yystacksize = YYINITDEPTH; + YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ + yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ - yyssp = yyss; yyvsp = yyvs; yylsp = yyls; + #if YYLTYPE_IS_TRIVIAL /* Initialize the default location before parsing starts. */ yylloc.first_line = yylloc.last_line = 1; - yylloc.first_column = yylloc.last_column = 0; + yylloc.first_column = yylloc.last_column = 1; #endif goto yysetstate; @@ -2863,6 +2825,7 @@ YYLTYPE yylloc; &yyvs1, yysize * sizeof (*yyvsp), &yyls1, yysize * sizeof (*yylsp), &yystacksize); + yyls = yyls1; yyss = yyss1; yyvs = yyvs1; @@ -2884,9 +2847,9 @@ YYLTYPE yylloc; (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); - YYSTACK_RELOCATE (yyls); + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); + YYSTACK_RELOCATE (yyls_alloc, yyls); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); @@ -2907,6 +2870,9 @@ YYLTYPE yylloc; YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + if (yystate == YYFINAL) + YYACCEPT; + goto yybackup; /*-----------. @@ -2915,16 +2881,16 @@ YYLTYPE yylloc; yybackup: /* Do appropriate processing given the current state. Read a - look-ahead token if we need one and don't already have one. */ + lookahead token if we need one and don't already have one. */ - /* First try to decide what to do without reference to look-ahead token. */ + /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; - /* Not known => get a look-ahead token if don't already have one. */ + /* Not known => get a lookahead token if don't already have one. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); @@ -2956,20 +2922,16 @@ yybackup: goto yyreduce; } - if (yyn == YYFINAL) - YYACCEPT; - /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; - /* Shift the look-ahead token. */ + /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - /* Discard the shifted token unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; + /* Discard the shifted token. */ + yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; @@ -3010,31 +2972,43 @@ yyreduce: switch (yyn) { case 2: + +/* Line 1455 of yacc.c */ #line 293 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NullNode(GLOBAL_DATA), 0, 1); ;} break; case 3: + +/* Line 1455 of yacc.c */ #line 294 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BooleanNode(GLOBAL_DATA, true), 0, 1); ;} break; case 4: + +/* Line 1455 of yacc.c */ #line 295 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BooleanNode(GLOBAL_DATA, false), 0, 1); ;} break; case 5: + +/* Line 1455 of yacc.c */ #line 296 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeNumberNode(GLOBAL_DATA, (yyvsp[(1) - (1)].doubleValue)), 0, 1); ;} break; case 6: + +/* Line 1455 of yacc.c */ #line 297 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) StringNode(GLOBAL_DATA, *(yyvsp[(1) - (1)].ident)), 0, 1); ;} break; case 7: + +/* Line 1455 of yacc.c */ #line 298 "../parser/Grammar.y" { Lexer& l = *GLOBAL_DATA->lexer; @@ -3050,6 +3024,8 @@ yyreduce: break; case 8: + +/* Line 1455 of yacc.c */ #line 309 "../parser/Grammar.y" { Lexer& l = *GLOBAL_DATA->lexer; @@ -3065,26 +3041,36 @@ yyreduce: break; case 9: + +/* Line 1455 of yacc.c */ #line 323 "../parser/Grammar.y" { (yyval.propertyNode) = createNodeInfo<PropertyNode*>(new (GLOBAL_DATA) PropertyNode(GLOBAL_DATA, *(yyvsp[(1) - (3)].ident), (yyvsp[(3) - (3)].expressionNode).m_node, PropertyNode::Constant), (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 10: + +/* Line 1455 of yacc.c */ #line 324 "../parser/Grammar.y" { (yyval.propertyNode) = createNodeInfo<PropertyNode*>(new (GLOBAL_DATA) PropertyNode(GLOBAL_DATA, *(yyvsp[(1) - (3)].ident), (yyvsp[(3) - (3)].expressionNode).m_node, PropertyNode::Constant), (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 11: + +/* Line 1455 of yacc.c */ #line 325 "../parser/Grammar.y" { (yyval.propertyNode) = createNodeInfo<PropertyNode*>(new (GLOBAL_DATA) PropertyNode(GLOBAL_DATA, (yyvsp[(1) - (3)].doubleValue), (yyvsp[(3) - (3)].expressionNode).m_node, PropertyNode::Constant), (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 12: + +/* Line 1455 of yacc.c */ #line 326 "../parser/Grammar.y" { (yyval.propertyNode) = createNodeInfo<PropertyNode*>(makeGetterOrSetterPropertyNode(GLOBAL_DATA, *(yyvsp[(1) - (7)].ident), *(yyvsp[(2) - (7)].ident), 0, (yyvsp[(6) - (7)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(5) - (7)].intValue), (yyvsp[(7) - (7)].intValue), (yylsp[(5) - (7)]).first_line)), ClosureFeature, 0); setStatementLocation((yyvsp[(6) - (7)].functionBodyNode), (yylsp[(5) - (7)]), (yylsp[(7) - (7)])); if (!(yyval.propertyNode).m_node) YYABORT; ;} break; case 13: + +/* Line 1455 of yacc.c */ #line 328 "../parser/Grammar.y" { (yyval.propertyNode) = createNodeInfo<PropertyNode*>(makeGetterOrSetterPropertyNode(GLOBAL_DATA, *(yyvsp[(1) - (8)].ident), *(yyvsp[(2) - (8)].ident), (yyvsp[(4) - (8)].parameterList).m_node.head, (yyvsp[(7) - (8)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(6) - (8)].intValue), (yyvsp[(8) - (8)].intValue), (yylsp[(6) - (8)]).first_line)), (yyvsp[(4) - (8)].parameterList).m_features | ClosureFeature, 0); @@ -3097,6 +3083,8 @@ yyreduce: break; case 14: + +/* Line 1455 of yacc.c */ #line 339 "../parser/Grammar.y" { (yyval.propertyList).m_node.head = new (GLOBAL_DATA) PropertyListNode(GLOBAL_DATA, (yyvsp[(1) - (1)].propertyNode).m_node); (yyval.propertyList).m_node.tail = (yyval.propertyList).m_node.head; @@ -3105,6 +3093,8 @@ yyreduce: break; case 15: + +/* Line 1455 of yacc.c */ #line 343 "../parser/Grammar.y" { (yyval.propertyList).m_node.head = (yyvsp[(1) - (3)].propertyList).m_node.head; (yyval.propertyList).m_node.tail = new (GLOBAL_DATA) PropertyListNode(GLOBAL_DATA, (yyvsp[(3) - (3)].propertyNode).m_node, (yyvsp[(1) - (3)].propertyList).m_node.tail); @@ -3113,51 +3103,71 @@ yyreduce: break; case 17: + +/* Line 1455 of yacc.c */ #line 351 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ObjectLiteralNode(GLOBAL_DATA), 0, 0); ;} break; case 18: + +/* Line 1455 of yacc.c */ #line 352 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ObjectLiteralNode(GLOBAL_DATA, (yyvsp[(2) - (3)].propertyList).m_node.head), (yyvsp[(2) - (3)].propertyList).m_features, (yyvsp[(2) - (3)].propertyList).m_numConstants); ;} break; case 19: + +/* Line 1455 of yacc.c */ #line 354 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ObjectLiteralNode(GLOBAL_DATA, (yyvsp[(2) - (4)].propertyList).m_node.head), (yyvsp[(2) - (4)].propertyList).m_features, (yyvsp[(2) - (4)].propertyList).m_numConstants); ;} break; case 20: + +/* Line 1455 of yacc.c */ #line 358 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ThisNode(GLOBAL_DATA), ThisFeature, 0); ;} break; case 23: + +/* Line 1455 of yacc.c */ #line 361 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ResolveNode(GLOBAL_DATA, *(yyvsp[(1) - (1)].ident), (yylsp[(1) - (1)]).first_column), (*(yyvsp[(1) - (1)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0, 0); ;} break; case 24: + +/* Line 1455 of yacc.c */ #line 362 "../parser/Grammar.y" { (yyval.expressionNode) = (yyvsp[(2) - (3)].expressionNode); ;} break; case 25: + +/* Line 1455 of yacc.c */ #line 366 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ArrayNode(GLOBAL_DATA, (yyvsp[(2) - (3)].intValue)), 0, (yyvsp[(2) - (3)].intValue) ? 1 : 0); ;} break; case 26: + +/* Line 1455 of yacc.c */ #line 367 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ArrayNode(GLOBAL_DATA, (yyvsp[(2) - (3)].elementList).m_node.head), (yyvsp[(2) - (3)].elementList).m_features, (yyvsp[(2) - (3)].elementList).m_numConstants); ;} break; case 27: + +/* Line 1455 of yacc.c */ #line 368 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ArrayNode(GLOBAL_DATA, (yyvsp[(4) - (5)].intValue), (yyvsp[(2) - (5)].elementList).m_node.head), (yyvsp[(2) - (5)].elementList).m_features, (yyvsp[(4) - (5)].intValue) ? (yyvsp[(2) - (5)].elementList).m_numConstants + 1 : (yyvsp[(2) - (5)].elementList).m_numConstants); ;} break; case 28: + +/* Line 1455 of yacc.c */ #line 372 "../parser/Grammar.y" { (yyval.elementList).m_node.head = new (GLOBAL_DATA) ElementNode(GLOBAL_DATA, (yyvsp[(1) - (2)].intValue), (yyvsp[(2) - (2)].expressionNode).m_node); (yyval.elementList).m_node.tail = (yyval.elementList).m_node.head; @@ -3166,6 +3176,8 @@ yyreduce: break; case 29: + +/* Line 1455 of yacc.c */ #line 377 "../parser/Grammar.y" { (yyval.elementList).m_node.head = (yyvsp[(1) - (4)].elementList).m_node.head; (yyval.elementList).m_node.tail = new (GLOBAL_DATA) ElementNode(GLOBAL_DATA, (yyvsp[(1) - (4)].elementList).m_node.tail, (yyvsp[(3) - (4)].intValue), (yyvsp[(4) - (4)].expressionNode).m_node); @@ -3174,26 +3186,36 @@ yyreduce: break; case 30: + +/* Line 1455 of yacc.c */ #line 384 "../parser/Grammar.y" { (yyval.intValue) = 0; ;} break; case 32: + +/* Line 1455 of yacc.c */ #line 389 "../parser/Grammar.y" { (yyval.intValue) = 1; ;} break; case 33: + +/* Line 1455 of yacc.c */ #line 390 "../parser/Grammar.y" { (yyval.intValue) = (yyvsp[(1) - (2)].intValue) + 1; ;} break; case 35: + +/* Line 1455 of yacc.c */ #line 395 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>((yyvsp[(1) - (1)].funcExprNode).m_node, (yyvsp[(1) - (1)].funcExprNode).m_features, (yyvsp[(1) - (1)].funcExprNode).m_numConstants); ;} break; case 36: + +/* Line 1455 of yacc.c */ #line 396 "../parser/Grammar.y" { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (4)]).first_column, (yylsp[(1) - (4)]).last_column, (yylsp[(4) - (4)]).last_column); @@ -3202,6 +3224,8 @@ yyreduce: break; case 37: + +/* Line 1455 of yacc.c */ #line 400 "../parser/Grammar.y" { DotAccessorNode* node = new (GLOBAL_DATA) DotAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, *(yyvsp[(3) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(1) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); @@ -3210,6 +3234,8 @@ yyreduce: break; case 38: + +/* Line 1455 of yacc.c */ #line 404 "../parser/Grammar.y" { NewExprNode* node = new (GLOBAL_DATA) NewExprNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].argumentsNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); @@ -3218,6 +3244,8 @@ yyreduce: break; case 40: + +/* Line 1455 of yacc.c */ #line 412 "../parser/Grammar.y" { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (4)]).first_column, (yylsp[(1) - (4)]).last_column, (yylsp[(4) - (4)]).last_column); @@ -3226,6 +3254,8 @@ yyreduce: break; case 41: + +/* Line 1455 of yacc.c */ #line 416 "../parser/Grammar.y" { DotAccessorNode* node = new (GLOBAL_DATA) DotAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, *(yyvsp[(3) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(1) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); @@ -3234,6 +3264,8 @@ yyreduce: break; case 42: + +/* Line 1455 of yacc.c */ #line 420 "../parser/Grammar.y" { NewExprNode* node = new (GLOBAL_DATA) NewExprNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].argumentsNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); @@ -3242,6 +3274,8 @@ yyreduce: break; case 44: + +/* Line 1455 of yacc.c */ #line 428 "../parser/Grammar.y" { NewExprNode* node = new (GLOBAL_DATA) NewExprNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); @@ -3250,6 +3284,8 @@ yyreduce: break; case 46: + +/* Line 1455 of yacc.c */ #line 436 "../parser/Grammar.y" { NewExprNode* node = new (GLOBAL_DATA) NewExprNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); @@ -3258,16 +3294,22 @@ yyreduce: break; case 47: + +/* Line 1455 of yacc.c */ #line 443 "../parser/Grammar.y" { (yyval.expressionNode) = makeFunctionCallNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode), (yyvsp[(2) - (2)].argumentsNode), (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); ;} break; case 48: + +/* Line 1455 of yacc.c */ #line 444 "../parser/Grammar.y" { (yyval.expressionNode) = makeFunctionCallNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode), (yyvsp[(2) - (2)].argumentsNode), (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); ;} break; case 49: + +/* Line 1455 of yacc.c */ #line 445 "../parser/Grammar.y" { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (4)]).first_column, (yylsp[(1) - (4)]).last_column, (yylsp[(4) - (4)]).last_column); @@ -3276,6 +3318,8 @@ yyreduce: break; case 50: + +/* Line 1455 of yacc.c */ #line 449 "../parser/Grammar.y" { DotAccessorNode* node = new (GLOBAL_DATA) DotAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, *(yyvsp[(3) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(1) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); @@ -3283,16 +3327,22 @@ yyreduce: break; case 51: + +/* Line 1455 of yacc.c */ #line 455 "../parser/Grammar.y" { (yyval.expressionNode) = makeFunctionCallNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode), (yyvsp[(2) - (2)].argumentsNode), (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); ;} break; case 52: + +/* Line 1455 of yacc.c */ #line 456 "../parser/Grammar.y" { (yyval.expressionNode) = makeFunctionCallNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode), (yyvsp[(2) - (2)].argumentsNode), (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); ;} break; case 53: + +/* Line 1455 of yacc.c */ #line 457 "../parser/Grammar.y" { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (4)]).first_column, (yylsp[(1) - (4)]).last_column, (yylsp[(4) - (4)]).last_column); @@ -3301,6 +3351,8 @@ yyreduce: break; case 54: + +/* Line 1455 of yacc.c */ #line 461 "../parser/Grammar.y" { DotAccessorNode* node = new (GLOBAL_DATA) DotAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, *(yyvsp[(3) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(1) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); @@ -3309,16 +3361,22 @@ yyreduce: break; case 55: + +/* Line 1455 of yacc.c */ #line 468 "../parser/Grammar.y" { (yyval.argumentsNode) = createNodeInfo<ArgumentsNode*>(new (GLOBAL_DATA) ArgumentsNode(GLOBAL_DATA), 0, 0); ;} break; case 56: + +/* Line 1455 of yacc.c */ #line 469 "../parser/Grammar.y" { (yyval.argumentsNode) = createNodeInfo<ArgumentsNode*>(new (GLOBAL_DATA) ArgumentsNode(GLOBAL_DATA, (yyvsp[(2) - (3)].argumentList).m_node.head), (yyvsp[(2) - (3)].argumentList).m_features, (yyvsp[(2) - (3)].argumentList).m_numConstants); ;} break; case 57: + +/* Line 1455 of yacc.c */ #line 473 "../parser/Grammar.y" { (yyval.argumentList).m_node.head = new (GLOBAL_DATA) ArgumentListNode(GLOBAL_DATA, (yyvsp[(1) - (1)].expressionNode).m_node); (yyval.argumentList).m_node.tail = (yyval.argumentList).m_node.head; @@ -3327,6 +3385,8 @@ yyreduce: break; case 58: + +/* Line 1455 of yacc.c */ #line 477 "../parser/Grammar.y" { (yyval.argumentList).m_node.head = (yyvsp[(1) - (3)].argumentList).m_node.head; (yyval.argumentList).m_node.tail = new (GLOBAL_DATA) ArgumentListNode(GLOBAL_DATA, (yyvsp[(1) - (3)].argumentList).m_node.tail, (yyvsp[(3) - (3)].expressionNode).m_node); @@ -3335,181 +3395,253 @@ yyreduce: break; case 64: + +/* Line 1455 of yacc.c */ #line 495 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePostfixNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node, OpPlusPlus, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column), (yyvsp[(1) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (2)].expressionNode).m_numConstants); ;} break; case 65: + +/* Line 1455 of yacc.c */ #line 496 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePostfixNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node, OpMinusMinus, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column), (yyvsp[(1) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (2)].expressionNode).m_numConstants); ;} break; case 67: + +/* Line 1455 of yacc.c */ #line 501 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePostfixNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node, OpPlusPlus, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column), (yyvsp[(1) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (2)].expressionNode).m_numConstants); ;} break; case 68: + +/* Line 1455 of yacc.c */ #line 502 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePostfixNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node, OpMinusMinus, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column), (yyvsp[(1) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (2)].expressionNode).m_numConstants); ;} break; case 69: + +/* Line 1455 of yacc.c */ #line 506 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeDeleteNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).last_column, (yylsp[(2) - (2)]).last_column), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 70: + +/* Line 1455 of yacc.c */ #line 507 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) VoidNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants + 1); ;} break; case 71: + +/* Line 1455 of yacc.c */ #line 508 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeTypeOfNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 72: + +/* Line 1455 of yacc.c */ #line 509 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePrefixNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node, OpPlusPlus, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column), (yyvsp[(2) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 73: + +/* Line 1455 of yacc.c */ #line 510 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePrefixNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node, OpPlusPlus, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column), (yyvsp[(2) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 74: + +/* Line 1455 of yacc.c */ #line 511 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePrefixNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node, OpMinusMinus, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column), (yyvsp[(2) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 75: + +/* Line 1455 of yacc.c */ #line 512 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePrefixNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node, OpMinusMinus, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column), (yyvsp[(2) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 76: + +/* Line 1455 of yacc.c */ #line 513 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) UnaryPlusNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 77: + +/* Line 1455 of yacc.c */ #line 514 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeNegateNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 78: + +/* Line 1455 of yacc.c */ #line 515 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeBitwiseNotNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 79: + +/* Line 1455 of yacc.c */ #line 516 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalNotNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 85: + +/* Line 1455 of yacc.c */ #line 530 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeMultNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 86: + +/* Line 1455 of yacc.c */ #line 531 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeDivNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 87: + +/* Line 1455 of yacc.c */ #line 532 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ModNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 89: + +/* Line 1455 of yacc.c */ #line 538 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeMultNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 90: + +/* Line 1455 of yacc.c */ #line 540 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeDivNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 91: + +/* Line 1455 of yacc.c */ #line 542 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ModNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 93: + +/* Line 1455 of yacc.c */ #line 547 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeAddNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 94: + +/* Line 1455 of yacc.c */ #line 548 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeSubNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 96: + +/* Line 1455 of yacc.c */ #line 554 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeAddNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 97: + +/* Line 1455 of yacc.c */ #line 556 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeSubNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 99: + +/* Line 1455 of yacc.c */ #line 561 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeLeftShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 100: + +/* Line 1455 of yacc.c */ #line 562 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeRightShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 101: + +/* Line 1455 of yacc.c */ #line 563 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) UnsignedRightShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 103: + +/* Line 1455 of yacc.c */ #line 568 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeLeftShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 104: + +/* Line 1455 of yacc.c */ #line 569 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeRightShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 105: + +/* Line 1455 of yacc.c */ #line 570 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) UnsignedRightShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 107: + +/* Line 1455 of yacc.c */ #line 575 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LessNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 108: + +/* Line 1455 of yacc.c */ #line 576 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) GreaterNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 109: + +/* Line 1455 of yacc.c */ #line 577 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LessEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 110: + +/* Line 1455 of yacc.c */ #line 578 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) GreaterEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 111: + +/* Line 1455 of yacc.c */ #line 579 "../parser/Grammar.y" { InstanceOfNode* node = new (GLOBAL_DATA) InstanceOfNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(3) - (3)]).first_column, (yylsp[(3) - (3)]).last_column); @@ -3517,6 +3649,8 @@ yyreduce: break; case 112: + +/* Line 1455 of yacc.c */ #line 582 "../parser/Grammar.y" { InNode* node = new (GLOBAL_DATA) InNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(3) - (3)]).first_column, (yylsp[(3) - (3)]).last_column); @@ -3524,26 +3658,36 @@ yyreduce: break; case 114: + +/* Line 1455 of yacc.c */ #line 589 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LessNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 115: + +/* Line 1455 of yacc.c */ #line 590 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) GreaterNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 116: + +/* Line 1455 of yacc.c */ #line 591 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LessEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 117: + +/* Line 1455 of yacc.c */ #line 592 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) GreaterEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 118: + +/* Line 1455 of yacc.c */ #line 594 "../parser/Grammar.y" { InstanceOfNode* node = new (GLOBAL_DATA) InstanceOfNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(3) - (3)]).first_column, (yylsp[(3) - (3)]).last_column); @@ -3551,26 +3695,36 @@ yyreduce: break; case 120: + +/* Line 1455 of yacc.c */ #line 601 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LessNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 121: + +/* Line 1455 of yacc.c */ #line 602 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) GreaterNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 122: + +/* Line 1455 of yacc.c */ #line 603 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LessEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 123: + +/* Line 1455 of yacc.c */ #line 604 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) GreaterEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 124: + +/* Line 1455 of yacc.c */ #line 606 "../parser/Grammar.y" { InstanceOfNode* node = new (GLOBAL_DATA) InstanceOfNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(3) - (3)]).first_column, (yylsp[(3) - (3)]).last_column); @@ -3578,6 +3732,8 @@ yyreduce: break; case 125: + +/* Line 1455 of yacc.c */ #line 610 "../parser/Grammar.y" { InNode* node = new (GLOBAL_DATA) InNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(3) - (3)]).first_column, (yylsp[(3) - (3)]).last_column); @@ -3585,156 +3741,218 @@ yyreduce: break; case 127: + +/* Line 1455 of yacc.c */ #line 617 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) EqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 128: + +/* Line 1455 of yacc.c */ #line 618 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NotEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 129: + +/* Line 1455 of yacc.c */ #line 619 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) StrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 130: + +/* Line 1455 of yacc.c */ #line 620 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NotStrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 132: + +/* Line 1455 of yacc.c */ #line 626 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) EqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 133: + +/* Line 1455 of yacc.c */ #line 628 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NotEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 134: + +/* Line 1455 of yacc.c */ #line 630 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) StrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 135: + +/* Line 1455 of yacc.c */ #line 632 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NotStrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 137: + +/* Line 1455 of yacc.c */ #line 638 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) EqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 138: + +/* Line 1455 of yacc.c */ #line 639 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NotEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 139: + +/* Line 1455 of yacc.c */ #line 641 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) StrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 140: + +/* Line 1455 of yacc.c */ #line 643 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NotStrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 142: + +/* Line 1455 of yacc.c */ #line 648 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitAndNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 144: + +/* Line 1455 of yacc.c */ #line 654 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitAndNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 146: + +/* Line 1455 of yacc.c */ #line 659 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitAndNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 148: + +/* Line 1455 of yacc.c */ #line 664 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitXOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 150: + +/* Line 1455 of yacc.c */ #line 670 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitXOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 152: + +/* Line 1455 of yacc.c */ #line 676 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitXOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 154: + +/* Line 1455 of yacc.c */ #line 681 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 156: + +/* Line 1455 of yacc.c */ #line 687 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 158: + +/* Line 1455 of yacc.c */ #line 693 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 160: + +/* Line 1455 of yacc.c */ #line 698 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalAnd), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 162: + +/* Line 1455 of yacc.c */ #line 704 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalAnd), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 164: + +/* Line 1455 of yacc.c */ #line 710 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalAnd), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 166: + +/* Line 1455 of yacc.c */ #line 715 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalOr), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 168: + +/* Line 1455 of yacc.c */ #line 721 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalOr), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 170: + +/* Line 1455 of yacc.c */ #line 726 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalOr), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 172: + +/* Line 1455 of yacc.c */ #line 732 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ConditionalNode(GLOBAL_DATA, (yyvsp[(1) - (5)].expressionNode).m_node, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].expressionNode).m_node), (yyvsp[(1) - (5)].expressionNode).m_features | (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].expressionNode).m_features, (yyvsp[(1) - (5)].expressionNode).m_numConstants + (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].expressionNode).m_numConstants); ;} break; case 174: + +/* Line 1455 of yacc.c */ #line 738 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ConditionalNode(GLOBAL_DATA, (yyvsp[(1) - (5)].expressionNode).m_node, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].expressionNode).m_node), (yyvsp[(1) - (5)].expressionNode).m_features | (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].expressionNode).m_features, (yyvsp[(1) - (5)].expressionNode).m_numConstants + (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].expressionNode).m_numConstants); ;} break; case 176: + +/* Line 1455 of yacc.c */ #line 744 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ConditionalNode(GLOBAL_DATA, (yyvsp[(1) - (5)].expressionNode).m_node, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].expressionNode).m_node), (yyvsp[(1) - (5)].expressionNode).m_features | (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].expressionNode).m_features, (yyvsp[(1) - (5)].expressionNode).m_numConstants + (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].expressionNode).m_numConstants); ;} break; case 178: + +/* Line 1455 of yacc.c */ #line 750 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeAssignNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(2) - (3)].op), (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(1) - (3)].expressionNode).m_features & AssignFeature, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).first_column + 1, (yylsp[(3) - (3)]).last_column), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); @@ -3742,6 +3960,8 @@ yyreduce: break; case 180: + +/* Line 1455 of yacc.c */ #line 758 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeAssignNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(2) - (3)].op), (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(1) - (3)].expressionNode).m_features & AssignFeature, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).first_column + 1, (yylsp[(3) - (3)]).last_column), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); @@ -3749,6 +3969,8 @@ yyreduce: break; case 182: + +/* Line 1455 of yacc.c */ #line 766 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeAssignNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(2) - (3)].op), (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(1) - (3)].expressionNode).m_features & AssignFeature, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).first_column + 1, (yylsp[(3) - (3)]).last_column), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); @@ -3756,99 +3978,137 @@ yyreduce: break; case 183: + +/* Line 1455 of yacc.c */ #line 772 "../parser/Grammar.y" { (yyval.op) = OpEqual; ;} break; case 184: + +/* Line 1455 of yacc.c */ #line 773 "../parser/Grammar.y" { (yyval.op) = OpPlusEq; ;} break; case 185: + +/* Line 1455 of yacc.c */ #line 774 "../parser/Grammar.y" { (yyval.op) = OpMinusEq; ;} break; case 186: + +/* Line 1455 of yacc.c */ #line 775 "../parser/Grammar.y" { (yyval.op) = OpMultEq; ;} break; case 187: + +/* Line 1455 of yacc.c */ #line 776 "../parser/Grammar.y" { (yyval.op) = OpDivEq; ;} break; case 188: + +/* Line 1455 of yacc.c */ #line 777 "../parser/Grammar.y" { (yyval.op) = OpLShift; ;} break; case 189: + +/* Line 1455 of yacc.c */ #line 778 "../parser/Grammar.y" { (yyval.op) = OpRShift; ;} break; case 190: + +/* Line 1455 of yacc.c */ #line 779 "../parser/Grammar.y" { (yyval.op) = OpURShift; ;} break; case 191: + +/* Line 1455 of yacc.c */ #line 780 "../parser/Grammar.y" { (yyval.op) = OpAndEq; ;} break; case 192: + +/* Line 1455 of yacc.c */ #line 781 "../parser/Grammar.y" { (yyval.op) = OpXOrEq; ;} break; case 193: + +/* Line 1455 of yacc.c */ #line 782 "../parser/Grammar.y" { (yyval.op) = OpOrEq; ;} break; case 194: + +/* Line 1455 of yacc.c */ #line 783 "../parser/Grammar.y" { (yyval.op) = OpModEq; ;} break; case 196: + +/* Line 1455 of yacc.c */ #line 788 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(combineCommaNodes(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 198: + +/* Line 1455 of yacc.c */ #line 793 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(combineCommaNodes(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 200: + +/* Line 1455 of yacc.c */ #line 798 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(combineCommaNodes(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 218: + +/* Line 1455 of yacc.c */ #line 822 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) BlockNode(GLOBAL_DATA, 0), 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(2) - (2)])); ;} break; case 219: + +/* Line 1455 of yacc.c */ #line 824 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) BlockNode(GLOBAL_DATA, (yyvsp[(2) - (3)].sourceElements).m_node), (yyvsp[(2) - (3)].sourceElements).m_varDeclarations, (yyvsp[(2) - (3)].sourceElements).m_funcDeclarations, (yyvsp[(2) - (3)].sourceElements).m_features, (yyvsp[(2) - (3)].sourceElements).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(3) - (3)])); ;} break; case 220: + +/* Line 1455 of yacc.c */ #line 829 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(makeVarStatementNode(GLOBAL_DATA, (yyvsp[(2) - (3)].varDeclList).m_node), (yyvsp[(2) - (3)].varDeclList).m_varDeclarations, (yyvsp[(2) - (3)].varDeclList).m_funcDeclarations, (yyvsp[(2) - (3)].varDeclList).m_features, (yyvsp[(2) - (3)].varDeclList).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(3) - (3)])); ;} break; case 221: + +/* Line 1455 of yacc.c */ #line 831 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(makeVarStatementNode(GLOBAL_DATA, (yyvsp[(2) - (3)].varDeclList).m_node), (yyvsp[(2) - (3)].varDeclList).m_varDeclarations, (yyvsp[(2) - (3)].varDeclList).m_funcDeclarations, (yyvsp[(2) - (3)].varDeclList).m_features, (yyvsp[(2) - (3)].varDeclList).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(2) - (3)])); @@ -3856,6 +4116,8 @@ yyreduce: break; case 222: + +/* Line 1455 of yacc.c */ #line 837 "../parser/Grammar.y" { (yyval.varDeclList).m_node = 0; (yyval.varDeclList).m_varDeclarations = new (GLOBAL_DATA) ParserArenaData<DeclarationStacks::VarStack>; @@ -3867,6 +4129,8 @@ yyreduce: break; case 223: + +/* Line 1455 of yacc.c */ #line 844 "../parser/Grammar.y" { AssignResolveNode* node = new (GLOBAL_DATA) AssignResolveNode(GLOBAL_DATA, *(yyvsp[(1) - (2)].ident), (yyvsp[(2) - (2)].expressionNode).m_node, (yyvsp[(2) - (2)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column); @@ -3880,6 +4144,8 @@ yyreduce: break; case 224: + +/* Line 1455 of yacc.c */ #line 854 "../parser/Grammar.y" { (yyval.varDeclList).m_node = (yyvsp[(1) - (3)].varDeclList).m_node; (yyval.varDeclList).m_varDeclarations = (yyvsp[(1) - (3)].varDeclList).m_varDeclarations; @@ -3891,6 +4157,8 @@ yyreduce: break; case 225: + +/* Line 1455 of yacc.c */ #line 862 "../parser/Grammar.y" { AssignResolveNode* node = new (GLOBAL_DATA) AssignResolveNode(GLOBAL_DATA, *(yyvsp[(3) - (4)].ident), (yyvsp[(4) - (4)].expressionNode).m_node, (yyvsp[(4) - (4)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(3) - (4)]).first_column, (yylsp[(4) - (4)]).first_column + 1, (yylsp[(4) - (4)]).last_column); @@ -3904,6 +4172,8 @@ yyreduce: break; case 226: + +/* Line 1455 of yacc.c */ #line 874 "../parser/Grammar.y" { (yyval.varDeclList).m_node = 0; (yyval.varDeclList).m_varDeclarations = new (GLOBAL_DATA) ParserArenaData<DeclarationStacks::VarStack>; @@ -3915,6 +4185,8 @@ yyreduce: break; case 227: + +/* Line 1455 of yacc.c */ #line 881 "../parser/Grammar.y" { AssignResolveNode* node = new (GLOBAL_DATA) AssignResolveNode(GLOBAL_DATA, *(yyvsp[(1) - (2)].ident), (yyvsp[(2) - (2)].expressionNode).m_node, (yyvsp[(2) - (2)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column); @@ -3928,6 +4200,8 @@ yyreduce: break; case 228: + +/* Line 1455 of yacc.c */ #line 891 "../parser/Grammar.y" { (yyval.varDeclList).m_node = (yyvsp[(1) - (3)].varDeclList).m_node; (yyval.varDeclList).m_varDeclarations = (yyvsp[(1) - (3)].varDeclList).m_varDeclarations; @@ -3939,6 +4213,8 @@ yyreduce: break; case 229: + +/* Line 1455 of yacc.c */ #line 899 "../parser/Grammar.y" { AssignResolveNode* node = new (GLOBAL_DATA) AssignResolveNode(GLOBAL_DATA, *(yyvsp[(3) - (4)].ident), (yyvsp[(4) - (4)].expressionNode).m_node, (yyvsp[(4) - (4)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(3) - (4)]).first_column, (yylsp[(4) - (4)]).first_column + 1, (yylsp[(4) - (4)]).last_column); @@ -3952,18 +4228,24 @@ yyreduce: break; case 230: + +/* Line 1455 of yacc.c */ #line 911 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) ConstStatementNode(GLOBAL_DATA, (yyvsp[(2) - (3)].constDeclList).m_node.head), (yyvsp[(2) - (3)].constDeclList).m_varDeclarations, (yyvsp[(2) - (3)].constDeclList).m_funcDeclarations, (yyvsp[(2) - (3)].constDeclList).m_features, (yyvsp[(2) - (3)].constDeclList).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(3) - (3)])); ;} break; case 231: + +/* Line 1455 of yacc.c */ #line 914 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) ConstStatementNode(GLOBAL_DATA, (yyvsp[(2) - (3)].constDeclList).m_node.head), (yyvsp[(2) - (3)].constDeclList).m_varDeclarations, (yyvsp[(2) - (3)].constDeclList).m_funcDeclarations, (yyvsp[(2) - (3)].constDeclList).m_features, (yyvsp[(2) - (3)].constDeclList).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(2) - (3)])); AUTO_SEMICOLON; ;} break; case 232: + +/* Line 1455 of yacc.c */ #line 919 "../parser/Grammar.y" { (yyval.constDeclList).m_node.head = (yyvsp[(1) - (1)].constDeclNode).m_node; (yyval.constDeclList).m_node.tail = (yyval.constDeclList).m_node.head; @@ -3976,6 +4258,8 @@ yyreduce: break; case 233: + +/* Line 1455 of yacc.c */ #line 928 "../parser/Grammar.y" { (yyval.constDeclList).m_node.head = (yyvsp[(1) - (3)].constDeclList).m_node.head; (yyvsp[(1) - (3)].constDeclList).m_node.tail->m_next = (yyvsp[(3) - (3)].constDeclNode).m_node; @@ -3988,49 +4272,67 @@ yyreduce: break; case 234: + +/* Line 1455 of yacc.c */ #line 939 "../parser/Grammar.y" { (yyval.constDeclNode) = createNodeInfo<ConstDeclNode*>(new (GLOBAL_DATA) ConstDeclNode(GLOBAL_DATA, *(yyvsp[(1) - (1)].ident), 0), (*(yyvsp[(1) - (1)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0, 0); ;} break; case 235: + +/* Line 1455 of yacc.c */ #line 940 "../parser/Grammar.y" { (yyval.constDeclNode) = createNodeInfo<ConstDeclNode*>(new (GLOBAL_DATA) ConstDeclNode(GLOBAL_DATA, *(yyvsp[(1) - (2)].ident), (yyvsp[(2) - (2)].expressionNode).m_node), ((*(yyvsp[(1) - (2)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0) | (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 236: + +/* Line 1455 of yacc.c */ #line 944 "../parser/Grammar.y" { (yyval.expressionNode) = (yyvsp[(2) - (2)].expressionNode); ;} break; case 237: + +/* Line 1455 of yacc.c */ #line 948 "../parser/Grammar.y" { (yyval.expressionNode) = (yyvsp[(2) - (2)].expressionNode); ;} break; case 238: + +/* Line 1455 of yacc.c */ #line 952 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) EmptyStatementNode(GLOBAL_DATA), 0, 0, 0, 0); ;} break; case 239: + +/* Line 1455 of yacc.c */ #line 956 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) ExprStatementNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node), 0, 0, (yyvsp[(1) - (2)].expressionNode).m_features, (yyvsp[(1) - (2)].expressionNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(2) - (2)])); ;} break; case 240: + +/* Line 1455 of yacc.c */ #line 958 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) ExprStatementNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node), 0, 0, (yyvsp[(1) - (2)].expressionNode).m_features, (yyvsp[(1) - (2)].expressionNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(1) - (2)])); AUTO_SEMICOLON; ;} break; case 241: + +/* Line 1455 of yacc.c */ #line 964 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) IfNode(GLOBAL_DATA, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].statementNode).m_node), (yyvsp[(5) - (5)].statementNode).m_varDeclarations, (yyvsp[(5) - (5)].statementNode).m_funcDeclarations, (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].statementNode).m_features, (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].statementNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (5)]), (yylsp[(4) - (5)])); ;} break; case 242: + +/* Line 1455 of yacc.c */ #line 967 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) IfElseNode(GLOBAL_DATA, (yyvsp[(3) - (7)].expressionNode).m_node, (yyvsp[(5) - (7)].statementNode).m_node, (yyvsp[(7) - (7)].statementNode).m_node), mergeDeclarationLists((yyvsp[(5) - (7)].statementNode).m_varDeclarations, (yyvsp[(7) - (7)].statementNode).m_varDeclarations), @@ -4041,24 +4343,32 @@ yyreduce: break; case 243: + +/* Line 1455 of yacc.c */ #line 976 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) DoWhileNode(GLOBAL_DATA, (yyvsp[(2) - (7)].statementNode).m_node, (yyvsp[(5) - (7)].expressionNode).m_node), (yyvsp[(2) - (7)].statementNode).m_varDeclarations, (yyvsp[(2) - (7)].statementNode).m_funcDeclarations, (yyvsp[(2) - (7)].statementNode).m_features | (yyvsp[(5) - (7)].expressionNode).m_features, (yyvsp[(2) - (7)].statementNode).m_numConstants + (yyvsp[(5) - (7)].expressionNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (7)]), (yylsp[(3) - (7)])); ;} break; case 244: + +/* Line 1455 of yacc.c */ #line 978 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) DoWhileNode(GLOBAL_DATA, (yyvsp[(2) - (7)].statementNode).m_node, (yyvsp[(5) - (7)].expressionNode).m_node), (yyvsp[(2) - (7)].statementNode).m_varDeclarations, (yyvsp[(2) - (7)].statementNode).m_funcDeclarations, (yyvsp[(2) - (7)].statementNode).m_features | (yyvsp[(5) - (7)].expressionNode).m_features, (yyvsp[(2) - (7)].statementNode).m_numConstants + (yyvsp[(5) - (7)].expressionNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (7)]), (yylsp[(3) - (7)])); ;} break; case 245: + +/* Line 1455 of yacc.c */ #line 980 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) WhileNode(GLOBAL_DATA, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].statementNode).m_node), (yyvsp[(5) - (5)].statementNode).m_varDeclarations, (yyvsp[(5) - (5)].statementNode).m_funcDeclarations, (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].statementNode).m_features, (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].statementNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (5)]), (yylsp[(4) - (5)])); ;} break; case 246: + +/* Line 1455 of yacc.c */ #line 983 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) ForNode(GLOBAL_DATA, (yyvsp[(3) - (9)].expressionNode).m_node, (yyvsp[(5) - (9)].expressionNode).m_node, (yyvsp[(7) - (9)].expressionNode).m_node, (yyvsp[(9) - (9)].statementNode).m_node, false), (yyvsp[(9) - (9)].statementNode).m_varDeclarations, (yyvsp[(9) - (9)].statementNode).m_funcDeclarations, (yyvsp[(3) - (9)].expressionNode).m_features | (yyvsp[(5) - (9)].expressionNode).m_features | (yyvsp[(7) - (9)].expressionNode).m_features | (yyvsp[(9) - (9)].statementNode).m_features, @@ -4068,6 +4378,8 @@ yyreduce: break; case 247: + +/* Line 1455 of yacc.c */ #line 989 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) ForNode(GLOBAL_DATA, (yyvsp[(4) - (10)].varDeclList).m_node, (yyvsp[(6) - (10)].expressionNode).m_node, (yyvsp[(8) - (10)].expressionNode).m_node, (yyvsp[(10) - (10)].statementNode).m_node, true), mergeDeclarationLists((yyvsp[(4) - (10)].varDeclList).m_varDeclarations, (yyvsp[(10) - (10)].statementNode).m_varDeclarations), @@ -4078,6 +4390,8 @@ yyreduce: break; case 248: + +/* Line 1455 of yacc.c */ #line 996 "../parser/Grammar.y" { ForInNode* node = new (GLOBAL_DATA) ForInNode(GLOBAL_DATA, (yyvsp[(3) - (7)].expressionNode).m_node, (yyvsp[(5) - (7)].expressionNode).m_node, (yyvsp[(7) - (7)].statementNode).m_node); @@ -4090,6 +4404,8 @@ yyreduce: break; case 249: + +/* Line 1455 of yacc.c */ #line 1005 "../parser/Grammar.y" { ForInNode *forIn = new (GLOBAL_DATA) ForInNode(GLOBAL_DATA, *(yyvsp[(4) - (8)].ident), 0, (yyvsp[(6) - (8)].expressionNode).m_node, (yyvsp[(8) - (8)].statementNode).m_node, (yylsp[(5) - (8)]).first_column, (yylsp[(5) - (8)]).first_column - (yylsp[(4) - (8)]).first_column, (yylsp[(6) - (8)]).last_column - (yylsp[(5) - (8)]).first_column); setExceptionLocation(forIn, (yylsp[(4) - (8)]).first_column, (yylsp[(5) - (8)]).first_column + 1, (yylsp[(6) - (8)]).last_column); @@ -4099,6 +4415,8 @@ yyreduce: break; case 250: + +/* Line 1455 of yacc.c */ #line 1011 "../parser/Grammar.y" { ForInNode *forIn = new (GLOBAL_DATA) ForInNode(GLOBAL_DATA, *(yyvsp[(4) - (9)].ident), (yyvsp[(5) - (9)].expressionNode).m_node, (yyvsp[(7) - (9)].expressionNode).m_node, (yyvsp[(9) - (9)].statementNode).m_node, (yylsp[(5) - (9)]).first_column, (yylsp[(5) - (9)]).first_column - (yylsp[(4) - (9)]).first_column, (yylsp[(5) - (9)]).last_column - (yylsp[(5) - (9)]).first_column); setExceptionLocation(forIn, (yylsp[(4) - (9)]).first_column, (yylsp[(6) - (9)]).first_column + 1, (yylsp[(7) - (9)]).last_column); @@ -4110,16 +4428,22 @@ yyreduce: break; case 251: + +/* Line 1455 of yacc.c */ #line 1021 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(0, 0, 0); ;} break; case 253: + +/* Line 1455 of yacc.c */ #line 1026 "../parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(0, 0, 0); ;} break; case 255: + +/* Line 1455 of yacc.c */ #line 1031 "../parser/Grammar.y" { ContinueNode* node = new (GLOBAL_DATA) ContinueNode(GLOBAL_DATA); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); @@ -4128,6 +4452,8 @@ yyreduce: break; case 256: + +/* Line 1455 of yacc.c */ #line 1035 "../parser/Grammar.y" { ContinueNode* node = new (GLOBAL_DATA) ContinueNode(GLOBAL_DATA); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); @@ -4136,6 +4462,8 @@ yyreduce: break; case 257: + +/* Line 1455 of yacc.c */ #line 1039 "../parser/Grammar.y" { ContinueNode* node = new (GLOBAL_DATA) ContinueNode(GLOBAL_DATA, *(yyvsp[(2) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4144,6 +4472,8 @@ yyreduce: break; case 258: + +/* Line 1455 of yacc.c */ #line 1043 "../parser/Grammar.y" { ContinueNode* node = new (GLOBAL_DATA) ContinueNode(GLOBAL_DATA, *(yyvsp[(2) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4152,6 +4482,8 @@ yyreduce: break; case 259: + +/* Line 1455 of yacc.c */ #line 1050 "../parser/Grammar.y" { BreakNode* node = new (GLOBAL_DATA) BreakNode(GLOBAL_DATA); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); @@ -4159,6 +4491,8 @@ yyreduce: break; case 260: + +/* Line 1455 of yacc.c */ #line 1053 "../parser/Grammar.y" { BreakNode* node = new (GLOBAL_DATA) BreakNode(GLOBAL_DATA); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); @@ -4166,6 +4500,8 @@ yyreduce: break; case 261: + +/* Line 1455 of yacc.c */ #line 1056 "../parser/Grammar.y" { BreakNode* node = new (GLOBAL_DATA) BreakNode(GLOBAL_DATA, *(yyvsp[(2) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4173,6 +4509,8 @@ yyreduce: break; case 262: + +/* Line 1455 of yacc.c */ #line 1059 "../parser/Grammar.y" { BreakNode* node = new (GLOBAL_DATA) BreakNode(GLOBAL_DATA, *(yyvsp[(2) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4180,6 +4518,8 @@ yyreduce: break; case 263: + +/* Line 1455 of yacc.c */ #line 1065 "../parser/Grammar.y" { ReturnNode* node = new (GLOBAL_DATA) ReturnNode(GLOBAL_DATA, 0); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); @@ -4187,6 +4527,8 @@ yyreduce: break; case 264: + +/* Line 1455 of yacc.c */ #line 1068 "../parser/Grammar.y" { ReturnNode* node = new (GLOBAL_DATA) ReturnNode(GLOBAL_DATA, 0); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); @@ -4194,6 +4536,8 @@ yyreduce: break; case 265: + +/* Line 1455 of yacc.c */ #line 1071 "../parser/Grammar.y" { ReturnNode* node = new (GLOBAL_DATA) ReturnNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4201,6 +4545,8 @@ yyreduce: break; case 266: + +/* Line 1455 of yacc.c */ #line 1074 "../parser/Grammar.y" { ReturnNode* node = new (GLOBAL_DATA) ReturnNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4208,6 +4554,8 @@ yyreduce: break; case 267: + +/* Line 1455 of yacc.c */ #line 1080 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) WithNode(GLOBAL_DATA, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].statementNode).m_node, (yylsp[(3) - (5)]).last_column, (yylsp[(3) - (5)]).last_column - (yylsp[(3) - (5)]).first_column), (yyvsp[(5) - (5)].statementNode).m_varDeclarations, (yyvsp[(5) - (5)].statementNode).m_funcDeclarations, (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].statementNode).m_features | WithFeature, (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].statementNode).m_numConstants); @@ -4215,6 +4563,8 @@ yyreduce: break; case 268: + +/* Line 1455 of yacc.c */ #line 1086 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) SwitchNode(GLOBAL_DATA, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].caseBlockNode).m_node), (yyvsp[(5) - (5)].caseBlockNode).m_varDeclarations, (yyvsp[(5) - (5)].caseBlockNode).m_funcDeclarations, (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].caseBlockNode).m_features, (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].caseBlockNode).m_numConstants); @@ -4222,11 +4572,15 @@ yyreduce: break; case 269: + +/* Line 1455 of yacc.c */ #line 1092 "../parser/Grammar.y" { (yyval.caseBlockNode) = createNodeDeclarationInfo<CaseBlockNode*>(new (GLOBAL_DATA) CaseBlockNode(GLOBAL_DATA, (yyvsp[(2) - (3)].clauseList).m_node.head, 0, 0), (yyvsp[(2) - (3)].clauseList).m_varDeclarations, (yyvsp[(2) - (3)].clauseList).m_funcDeclarations, (yyvsp[(2) - (3)].clauseList).m_features, (yyvsp[(2) - (3)].clauseList).m_numConstants); ;} break; case 270: + +/* Line 1455 of yacc.c */ #line 1094 "../parser/Grammar.y" { (yyval.caseBlockNode) = createNodeDeclarationInfo<CaseBlockNode*>(new (GLOBAL_DATA) CaseBlockNode(GLOBAL_DATA, (yyvsp[(2) - (5)].clauseList).m_node.head, (yyvsp[(3) - (5)].caseClauseNode).m_node, (yyvsp[(4) - (5)].clauseList).m_node.head), mergeDeclarationLists(mergeDeclarationLists((yyvsp[(2) - (5)].clauseList).m_varDeclarations, (yyvsp[(3) - (5)].caseClauseNode).m_varDeclarations), (yyvsp[(4) - (5)].clauseList).m_varDeclarations), @@ -4236,11 +4590,15 @@ yyreduce: break; case 271: + +/* Line 1455 of yacc.c */ #line 1102 "../parser/Grammar.y" { (yyval.clauseList).m_node.head = 0; (yyval.clauseList).m_node.tail = 0; (yyval.clauseList).m_varDeclarations = 0; (yyval.clauseList).m_funcDeclarations = 0; (yyval.clauseList).m_features = 0; (yyval.clauseList).m_numConstants = 0; ;} break; case 273: + +/* Line 1455 of yacc.c */ #line 1107 "../parser/Grammar.y" { (yyval.clauseList).m_node.head = new (GLOBAL_DATA) ClauseListNode(GLOBAL_DATA, (yyvsp[(1) - (1)].caseClauseNode).m_node); (yyval.clauseList).m_node.tail = (yyval.clauseList).m_node.head; @@ -4251,6 +4609,8 @@ yyreduce: break; case 274: + +/* Line 1455 of yacc.c */ #line 1113 "../parser/Grammar.y" { (yyval.clauseList).m_node.head = (yyvsp[(1) - (2)].clauseList).m_node.head; (yyval.clauseList).m_node.tail = new (GLOBAL_DATA) ClauseListNode(GLOBAL_DATA, (yyvsp[(1) - (2)].clauseList).m_node.tail, (yyvsp[(2) - (2)].caseClauseNode).m_node); @@ -4262,26 +4622,36 @@ yyreduce: break; case 275: + +/* Line 1455 of yacc.c */ #line 1123 "../parser/Grammar.y" { (yyval.caseClauseNode) = createNodeDeclarationInfo<CaseClauseNode*>(new (GLOBAL_DATA) CaseClauseNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node), 0, 0, (yyvsp[(2) - (3)].expressionNode).m_features, (yyvsp[(2) - (3)].expressionNode).m_numConstants); ;} break; case 276: + +/* Line 1455 of yacc.c */ #line 1124 "../parser/Grammar.y" { (yyval.caseClauseNode) = createNodeDeclarationInfo<CaseClauseNode*>(new (GLOBAL_DATA) CaseClauseNode(GLOBAL_DATA, (yyvsp[(2) - (4)].expressionNode).m_node, (yyvsp[(4) - (4)].sourceElements).m_node), (yyvsp[(4) - (4)].sourceElements).m_varDeclarations, (yyvsp[(4) - (4)].sourceElements).m_funcDeclarations, (yyvsp[(2) - (4)].expressionNode).m_features | (yyvsp[(4) - (4)].sourceElements).m_features, (yyvsp[(2) - (4)].expressionNode).m_numConstants + (yyvsp[(4) - (4)].sourceElements).m_numConstants); ;} break; case 277: + +/* Line 1455 of yacc.c */ #line 1128 "../parser/Grammar.y" { (yyval.caseClauseNode) = createNodeDeclarationInfo<CaseClauseNode*>(new (GLOBAL_DATA) CaseClauseNode(GLOBAL_DATA, 0), 0, 0, 0, 0); ;} break; case 278: + +/* Line 1455 of yacc.c */ #line 1129 "../parser/Grammar.y" { (yyval.caseClauseNode) = createNodeDeclarationInfo<CaseClauseNode*>(new (GLOBAL_DATA) CaseClauseNode(GLOBAL_DATA, 0, (yyvsp[(3) - (3)].sourceElements).m_node), (yyvsp[(3) - (3)].sourceElements).m_varDeclarations, (yyvsp[(3) - (3)].sourceElements).m_funcDeclarations, (yyvsp[(3) - (3)].sourceElements).m_features, (yyvsp[(3) - (3)].sourceElements).m_numConstants); ;} break; case 279: + +/* Line 1455 of yacc.c */ #line 1133 "../parser/Grammar.y" { LabelNode* node = new (GLOBAL_DATA) LabelNode(GLOBAL_DATA, *(yyvsp[(1) - (3)].ident), (yyvsp[(3) - (3)].statementNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4289,6 +4659,8 @@ yyreduce: break; case 280: + +/* Line 1455 of yacc.c */ #line 1139 "../parser/Grammar.y" { ThrowNode* node = new (GLOBAL_DATA) ThrowNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4297,6 +4669,8 @@ yyreduce: break; case 281: + +/* Line 1455 of yacc.c */ #line 1143 "../parser/Grammar.y" { ThrowNode* node = new (GLOBAL_DATA) ThrowNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4305,6 +4679,8 @@ yyreduce: break; case 282: + +/* Line 1455 of yacc.c */ #line 1150 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) TryNode(GLOBAL_DATA, (yyvsp[(2) - (4)].statementNode).m_node, GLOBAL_DATA->propertyNames->nullIdentifier, false, 0, (yyvsp[(4) - (4)].statementNode).m_node), mergeDeclarationLists((yyvsp[(2) - (4)].statementNode).m_varDeclarations, (yyvsp[(4) - (4)].statementNode).m_varDeclarations), @@ -4315,6 +4691,8 @@ yyreduce: break; case 283: + +/* Line 1455 of yacc.c */ #line 1156 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) TryNode(GLOBAL_DATA, (yyvsp[(2) - (7)].statementNode).m_node, *(yyvsp[(5) - (7)].ident), ((yyvsp[(7) - (7)].statementNode).m_features & EvalFeature) != 0, (yyvsp[(7) - (7)].statementNode).m_node, 0), mergeDeclarationLists((yyvsp[(2) - (7)].statementNode).m_varDeclarations, (yyvsp[(7) - (7)].statementNode).m_varDeclarations), @@ -4325,6 +4703,8 @@ yyreduce: break; case 284: + +/* Line 1455 of yacc.c */ #line 1163 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) TryNode(GLOBAL_DATA, (yyvsp[(2) - (9)].statementNode).m_node, *(yyvsp[(5) - (9)].ident), ((yyvsp[(7) - (9)].statementNode).m_features & EvalFeature) != 0, (yyvsp[(7) - (9)].statementNode).m_node, (yyvsp[(9) - (9)].statementNode).m_node), mergeDeclarationLists(mergeDeclarationLists((yyvsp[(2) - (9)].statementNode).m_varDeclarations, (yyvsp[(7) - (9)].statementNode).m_varDeclarations), (yyvsp[(9) - (9)].statementNode).m_varDeclarations), @@ -4335,23 +4715,31 @@ yyreduce: break; case 285: + +/* Line 1455 of yacc.c */ #line 1172 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) DebuggerStatementNode(GLOBAL_DATA), 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(2) - (2)])); ;} break; case 286: + +/* Line 1455 of yacc.c */ #line 1174 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) DebuggerStatementNode(GLOBAL_DATA), 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(1) - (2)])); AUTO_SEMICOLON; ;} break; case 287: + +/* Line 1455 of yacc.c */ #line 1179 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) FuncDeclNode(GLOBAL_DATA, *(yyvsp[(2) - (7)].ident), (yyvsp[(6) - (7)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(5) - (7)].intValue), (yyvsp[(7) - (7)].intValue), (yylsp[(5) - (7)]).first_line)), 0, new (GLOBAL_DATA) ParserArenaData<DeclarationStacks::FunctionStack>, ((*(yyvsp[(2) - (7)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0) | ClosureFeature, 0); setStatementLocation((yyvsp[(6) - (7)].functionBodyNode), (yylsp[(5) - (7)]), (yylsp[(7) - (7)])); (yyval.statementNode).m_funcDeclarations->data.append(static_cast<FuncDeclNode*>((yyval.statementNode).m_node)->body()); ;} break; case 288: + +/* Line 1455 of yacc.c */ #line 1181 "../parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) FuncDeclNode(GLOBAL_DATA, *(yyvsp[(2) - (8)].ident), (yyvsp[(7) - (8)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(6) - (8)].intValue), (yyvsp[(8) - (8)].intValue), (yylsp[(6) - (8)]).first_line), (yyvsp[(4) - (8)].parameterList).m_node.head), 0, new (GLOBAL_DATA) ParserArenaData<DeclarationStacks::FunctionStack>, ((*(yyvsp[(2) - (8)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0) | (yyvsp[(4) - (8)].parameterList).m_features | ClosureFeature, 0); @@ -4363,11 +4751,15 @@ yyreduce: break; case 289: + +/* Line 1455 of yacc.c */ #line 1191 "../parser/Grammar.y" { (yyval.funcExprNode) = createNodeInfo(new (GLOBAL_DATA) FuncExprNode(GLOBAL_DATA, GLOBAL_DATA->propertyNames->nullIdentifier, (yyvsp[(5) - (6)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(4) - (6)].intValue), (yyvsp[(6) - (6)].intValue), (yylsp[(4) - (6)]).first_line)), ClosureFeature, 0); setStatementLocation((yyvsp[(5) - (6)].functionBodyNode), (yylsp[(4) - (6)]), (yylsp[(6) - (6)])); ;} break; case 290: + +/* Line 1455 of yacc.c */ #line 1193 "../parser/Grammar.y" { (yyval.funcExprNode) = createNodeInfo(new (GLOBAL_DATA) FuncExprNode(GLOBAL_DATA, GLOBAL_DATA->propertyNames->nullIdentifier, (yyvsp[(6) - (7)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(5) - (7)].intValue), (yyvsp[(7) - (7)].intValue), (yylsp[(5) - (7)]).first_line), (yyvsp[(3) - (7)].parameterList).m_node.head), (yyvsp[(3) - (7)].parameterList).m_features | ClosureFeature, 0); @@ -4378,11 +4770,15 @@ yyreduce: break; case 291: + +/* Line 1455 of yacc.c */ #line 1199 "../parser/Grammar.y" { (yyval.funcExprNode) = createNodeInfo(new (GLOBAL_DATA) FuncExprNode(GLOBAL_DATA, *(yyvsp[(2) - (7)].ident), (yyvsp[(6) - (7)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(5) - (7)].intValue), (yyvsp[(7) - (7)].intValue), (yylsp[(5) - (7)]).first_line)), ClosureFeature, 0); setStatementLocation((yyvsp[(6) - (7)].functionBodyNode), (yylsp[(5) - (7)]), (yylsp[(7) - (7)])); ;} break; case 292: + +/* Line 1455 of yacc.c */ #line 1201 "../parser/Grammar.y" { (yyval.funcExprNode) = createNodeInfo(new (GLOBAL_DATA) FuncExprNode(GLOBAL_DATA, *(yyvsp[(2) - (8)].ident), (yyvsp[(7) - (8)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(6) - (8)].intValue), (yyvsp[(8) - (8)].intValue), (yylsp[(6) - (8)]).first_line), (yyvsp[(4) - (8)].parameterList).m_node.head), (yyvsp[(4) - (8)].parameterList).m_features | ClosureFeature, 0); @@ -4393,6 +4789,8 @@ yyreduce: break; case 293: + +/* Line 1455 of yacc.c */ #line 1210 "../parser/Grammar.y" { (yyval.parameterList).m_node.head = new (GLOBAL_DATA) ParameterNode(GLOBAL_DATA, *(yyvsp[(1) - (1)].ident)); (yyval.parameterList).m_features = (*(yyvsp[(1) - (1)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0; @@ -4400,6 +4798,8 @@ yyreduce: break; case 294: + +/* Line 1455 of yacc.c */ #line 1213 "../parser/Grammar.y" { (yyval.parameterList).m_node.head = (yyvsp[(1) - (3)].parameterList).m_node.head; (yyval.parameterList).m_features = (yyvsp[(1) - (3)].parameterList).m_features | ((*(yyvsp[(3) - (3)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0); @@ -4407,27 +4807,37 @@ yyreduce: break; case 295: + +/* Line 1455 of yacc.c */ #line 1219 "../parser/Grammar.y" { (yyval.functionBodyNode) = FunctionBodyNode::create(GLOBAL_DATA); ;} break; case 296: + +/* Line 1455 of yacc.c */ #line 1220 "../parser/Grammar.y" { (yyval.functionBodyNode) = FunctionBodyNode::create(GLOBAL_DATA); ;} break; case 297: + +/* Line 1455 of yacc.c */ #line 1224 "../parser/Grammar.y" { GLOBAL_DATA->parser->didFinishParsing(new (GLOBAL_DATA) SourceElements(GLOBAL_DATA), 0, 0, NoFeatures, (yylsp[(0) - (0)]).last_line, 0); ;} break; case 298: + +/* Line 1455 of yacc.c */ #line 1225 "../parser/Grammar.y" { GLOBAL_DATA->parser->didFinishParsing((yyvsp[(1) - (1)].sourceElements).m_node, (yyvsp[(1) - (1)].sourceElements).m_varDeclarations, (yyvsp[(1) - (1)].sourceElements).m_funcDeclarations, (yyvsp[(1) - (1)].sourceElements).m_features, (yylsp[(1) - (1)]).last_line, (yyvsp[(1) - (1)].sourceElements).m_numConstants); ;} break; case 299: + +/* Line 1455 of yacc.c */ #line 1230 "../parser/Grammar.y" { (yyval.sourceElements).m_node = new (GLOBAL_DATA) SourceElements(GLOBAL_DATA); (yyval.sourceElements).m_node->append((yyvsp[(1) - (1)].statementNode).m_node); @@ -4439,6 +4849,8 @@ yyreduce: break; case 300: + +/* Line 1455 of yacc.c */ #line 1237 "../parser/Grammar.y" { (yyval.sourceElements).m_node->append((yyvsp[(2) - (2)].statementNode).m_node); (yyval.sourceElements).m_varDeclarations = mergeDeclarationLists((yyvsp[(1) - (2)].sourceElements).m_varDeclarations, (yyvsp[(2) - (2)].statementNode).m_varDeclarations); @@ -4449,188 +4861,261 @@ yyreduce: break; case 304: + +/* Line 1455 of yacc.c */ #line 1251 "../parser/Grammar.y" { ;} break; case 305: + +/* Line 1455 of yacc.c */ #line 1252 "../parser/Grammar.y" { ;} break; case 306: + +/* Line 1455 of yacc.c */ #line 1253 "../parser/Grammar.y" { if (!GLOBAL_DATA->lexer->skipRegExp()) YYABORT; ;} break; case 307: + +/* Line 1455 of yacc.c */ #line 1254 "../parser/Grammar.y" { if (!GLOBAL_DATA->lexer->skipRegExp()) YYABORT; ;} break; case 308: + +/* Line 1455 of yacc.c */ #line 1258 "../parser/Grammar.y" { ;} break; case 309: + +/* Line 1455 of yacc.c */ #line 1259 "../parser/Grammar.y" { ;} break; case 310: + +/* Line 1455 of yacc.c */ #line 1260 "../parser/Grammar.y" { ;} break; case 311: + +/* Line 1455 of yacc.c */ #line 1261 "../parser/Grammar.y" { if (*(yyvsp[(1) - (7)].ident) != "get" && *(yyvsp[(1) - (7)].ident) != "set") YYABORT; ;} break; case 312: + +/* Line 1455 of yacc.c */ #line 1262 "../parser/Grammar.y" { if (*(yyvsp[(1) - (8)].ident) != "get" && *(yyvsp[(1) - (8)].ident) != "set") YYABORT; ;} break; case 316: + +/* Line 1455 of yacc.c */ #line 1272 "../parser/Grammar.y" { ;} break; case 317: + +/* Line 1455 of yacc.c */ #line 1273 "../parser/Grammar.y" { ;} break; case 318: + +/* Line 1455 of yacc.c */ #line 1275 "../parser/Grammar.y" { ;} break; case 322: + +/* Line 1455 of yacc.c */ #line 1282 "../parser/Grammar.y" { ;} break; case 517: + +/* Line 1455 of yacc.c */ #line 1650 "../parser/Grammar.y" { ;} break; case 518: + +/* Line 1455 of yacc.c */ #line 1651 "../parser/Grammar.y" { ;} break; case 520: + +/* Line 1455 of yacc.c */ #line 1656 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 521: + +/* Line 1455 of yacc.c */ #line 1660 "../parser/Grammar.y" { ;} break; case 522: + +/* Line 1455 of yacc.c */ #line 1661 "../parser/Grammar.y" { ;} break; case 525: + +/* Line 1455 of yacc.c */ #line 1667 "../parser/Grammar.y" { ;} break; case 526: + +/* Line 1455 of yacc.c */ #line 1668 "../parser/Grammar.y" { ;} break; case 530: + +/* Line 1455 of yacc.c */ #line 1675 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 533: + +/* Line 1455 of yacc.c */ #line 1684 "../parser/Grammar.y" { ;} break; case 534: + +/* Line 1455 of yacc.c */ #line 1685 "../parser/Grammar.y" { ;} break; case 539: + +/* Line 1455 of yacc.c */ #line 1702 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 555: + +/* Line 1455 of yacc.c */ #line 1733 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 557: + +/* Line 1455 of yacc.c */ #line 1735 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 559: + +/* Line 1455 of yacc.c */ #line 1740 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 561: + +/* Line 1455 of yacc.c */ #line 1742 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 563: + +/* Line 1455 of yacc.c */ #line 1747 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 565: + +/* Line 1455 of yacc.c */ #line 1749 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 568: + +/* Line 1455 of yacc.c */ #line 1761 "../parser/Grammar.y" { ;} break; case 569: + +/* Line 1455 of yacc.c */ #line 1762 "../parser/Grammar.y" { ;} break; case 578: + +/* Line 1455 of yacc.c */ #line 1786 "../parser/Grammar.y" { ;} break; case 580: + +/* Line 1455 of yacc.c */ #line 1791 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 585: + +/* Line 1455 of yacc.c */ #line 1802 "../parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 592: + +/* Line 1455 of yacc.c */ #line 1818 "../parser/Grammar.y" { ;} break; -/* Line 1267 of yacc.c. */ -#line 4634 "JavaScriptCore/tmp/../generated/Grammar.tab.c" + +/* Line 1455 of yacc.c */ +#line 5119 "JavaScriptCore/tmp/../generated/Grammar.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -4706,7 +5191,7 @@ yyerrlab: if (yyerrstatus == 3) { - /* If just tried and failed to reuse look-ahead token after an + /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) @@ -4723,7 +5208,7 @@ yyerrlab: } } - /* Else will try to reuse look-ahead token after shifting the error + /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; @@ -4781,14 +5266,11 @@ yyerrlab1: YY_STACK_PRINT (yyss, yyssp); } - if (yyn == YYFINAL) - YYACCEPT; - *++yyvsp = yylval; yyerror_range[1] = yylloc; /* Using YYLLOC is tempting, but would change the location of - the look-ahead. YYLOC is available though. */ + the lookahead. YYLOC is available though. */ YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2); *++yylsp = yyloc; @@ -4813,7 +5295,7 @@ yyabortlab: yyresult = 1; goto yyreturn; -#ifndef yyoverflow +#if !defined(yyoverflow) || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ @@ -4824,7 +5306,7 @@ yyexhaustedlab: #endif yyreturn: - if (yychar != YYEOF && yychar != YYEMPTY) + if (yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc); /* Do not reclaim the symbols of the rule which action triggered @@ -4850,6 +5332,8 @@ yyreturn: } + +/* Line 1675 of yacc.c */ #line 1834 "../parser/Grammar.y" diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.h b/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.h index 1fdb035..a485e42 100644 --- a/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.h +++ b/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.h @@ -1,24 +1,23 @@ -/* A Bison parser, made by GNU Bison 2.3. */ -/* Skeleton interface for Bison's Yacc-like parsers in C +/* A Bison parser, made by GNU Bison 2.4.1. */ - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -29,10 +28,11 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ + /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE @@ -104,78 +104,16 @@ AUTOMINUSMINUS = 320 }; #endif -/* Tokens. */ -#define NULLTOKEN 258 -#define TRUETOKEN 259 -#define FALSETOKEN 260 -#define BREAK 261 -#define CASE 262 -#define DEFAULT 263 -#define FOR 264 -#define NEW 265 -#define VAR 266 -#define CONSTTOKEN 267 -#define CONTINUE 268 -#define FUNCTION 269 -#define RETURN 270 -#define VOIDTOKEN 271 -#define DELETETOKEN 272 -#define IF 273 -#define THISTOKEN 274 -#define DO 275 -#define WHILE 276 -#define INTOKEN 277 -#define INSTANCEOF 278 -#define TYPEOF 279 -#define SWITCH 280 -#define WITH 281 -#define RESERVED 282 -#define THROW 283 -#define TRY 284 -#define CATCH 285 -#define FINALLY 286 -#define DEBUGGER 287 -#define IF_WITHOUT_ELSE 288 -#define ELSE 289 -#define EQEQ 290 -#define NE 291 -#define STREQ 292 -#define STRNEQ 293 -#define LE 294 -#define GE 295 -#define OR 296 -#define AND 297 -#define PLUSPLUS 298 -#define MINUSMINUS 299 -#define LSHIFT 300 -#define RSHIFT 301 -#define URSHIFT 302 -#define PLUSEQUAL 303 -#define MINUSEQUAL 304 -#define MULTEQUAL 305 -#define DIVEQUAL 306 -#define LSHIFTEQUAL 307 -#define RSHIFTEQUAL 308 -#define URSHIFTEQUAL 309 -#define ANDEQUAL 310 -#define MODEQUAL 311 -#define XOREQUAL 312 -#define OREQUAL 313 -#define OPENBRACE 314 -#define CLOSEBRACE 315 -#define NUMBER 316 -#define IDENT 317 -#define STRING 318 -#define AUTOPLUSPLUS 319 -#define AUTOMINUSMINUS 320 - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 146 "../parser/Grammar.y" { + +/* Line 1676 of yacc.c */ +#line 146 "../parser/Grammar.y" + int intValue; double doubleValue; const Identifier* ident; @@ -205,13 +143,15 @@ typedef union YYSTYPE ParameterListInfo parameterList; Operator op; -} -/* Line 1489 of yacc.c. */ -#line 211 "JavaScriptCore/tmp/../generated/Grammar.tab.h" - YYSTYPE; + + + +/* Line 1676 of yacc.c */ +#line 151 "JavaScriptCore/tmp/../generated/Grammar.tab.h" +} YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 #endif @@ -230,3 +170,4 @@ typedef struct YYLTYPE #endif + diff --git a/src/3rdparty/webkit/JavaScriptCore/interpreter/Interpreter.cpp b/src/3rdparty/webkit/JavaScriptCore/interpreter/Interpreter.cpp index c77a0f1..db0edc4 100644 --- a/src/3rdparty/webkit/JavaScriptCore/interpreter/Interpreter.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/interpreter/Interpreter.cpp @@ -1029,6 +1029,11 @@ NEVER_INLINE void Interpreter::tryCacheGetByID(CallFrame* callFrame, CodeBlock* return; } + if (structure->isDictionary()) { + vPC[0] = getOpcode(op_get_by_id_generic); + return; + } + if (slot.slotBase() == structure->prototypeForLookup(callFrame)) { ASSERT(slot.slotBase().isObject()); @@ -1039,6 +1044,8 @@ NEVER_INLINE void Interpreter::tryCacheGetByID(CallFrame* callFrame, CodeBlock* if (baseObject->structure()->isDictionary()) baseObject->setStructure(Structure::fromDictionaryTransition(baseObject->structure())); + ASSERT(!baseObject->structure()->isUncacheableDictionary()); + vPC[0] = getOpcode(op_get_by_id_proto); vPC[5] = baseObject->structure(); vPC[6] = slot.cachedOffset(); @@ -2134,6 +2141,7 @@ JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFi int offset = vPC[6].u.operand; ASSERT(protoObject->get(callFrame, callFrame->codeBlock()->identifier(vPC[3].u.operand)) == protoObject->getDirectOffset(offset)); + ASSERT(baseValue.get(callFrame, callFrame->codeBlock()->identifier(vPC[3].u.operand)) == protoObject->getDirectOffset(offset)); callFrame->r(dst) = JSValue(protoObject->getDirectOffset(offset)); vPC += OPCODE_LENGTH(op_get_by_id_proto); @@ -2189,6 +2197,7 @@ JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFi int offset = vPC[7].u.operand; ASSERT(baseObject->get(callFrame, callFrame->codeBlock()->identifier(vPC[3].u.operand)) == baseObject->getDirectOffset(offset)); + ASSERT(baseValue.get(callFrame, callFrame->codeBlock()->identifier(vPC[3].u.operand)) == baseObject->getDirectOffset(offset)); callFrame->r(dst) = JSValue(baseObject->getDirectOffset(offset)); vPC += OPCODE_LENGTH(op_get_by_id_chain); diff --git a/src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.cpp b/src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.cpp index 470ed0b..8385f92 100644 --- a/src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.cpp @@ -75,7 +75,7 @@ namespace JSC { #define THUMB_FUNC_PARAM(name) #endif -#if PLATFORM(LINUX) && (PLATFORM(X86_64) || PLATFORM(X86)) +#if PLATFORM(LINUX) && PLATFORM(X86_64) #define SYMBOL_STRING_RELOCATION(name) #name "@plt" #else #define SYMBOL_STRING_RELOCATION(name) SYMBOL_STRING(name) @@ -795,6 +795,11 @@ NEVER_INLINE void JITThunks::tryCacheGetByID(CallFrame* callFrame, CodeBlock* co return; } + if (structure->isDictionary()) { + ctiPatchCallByReturnAddress(codeBlock, returnAddress, FunctionPtr(cti_op_get_by_id_generic)); + return; + } + if (slot.slotBase() == structure->prototypeForLookup(callFrame)) { ASSERT(slot.slotBase().isObject()); diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/TimeoutChecker.h b/src/3rdparty/webkit/JavaScriptCore/runtime/TimeoutChecker.h index 7bfa6d0..5925641 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/TimeoutChecker.h +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/TimeoutChecker.h @@ -40,6 +40,7 @@ namespace JSC { TimeoutChecker(); void setTimeoutInterval(unsigned timeoutInterval) { m_timeoutInterval = timeoutInterval; } + unsigned timeoutInterval() const { return m_timeoutInterval; } unsigned ticksUntilNextCheck() { return m_ticksUntilNextCheck; } diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h b/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h index 7bfde5b..cb6c9b9 100644 --- a/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h +++ b/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h @@ -370,6 +370,8 @@ # if Q_BYTE_ORDER == Q_BIG_EDIAN # define WTF_PLATFORM_BIG_ENDIAN 1 # endif + +# include <ce_time.h> #endif #if PLATFORM(WINCE) && PLATFORM(QT) diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION index ae1c3b6..2653e83 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 - 363898ca378e2198b855ca2f8921c5e4f898c5e2 + ca38203fba92cf48d59328403f64036907fd3433 diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog index be07193..abb372a 100644 --- a/src/3rdparty/webkit/WebCore/ChangeLog +++ b/src/3rdparty/webkit/WebCore/ChangeLog @@ -1,3 +1,252 @@ +2009-11-14 Antonio Gomes <tonikitoo@webkit.org> + + Reviewed by Antti Koivisto. + + [Qt] Broken back/forward after using ErrorPageExtension to set error page + https://bugs.webkit.org/show_bug.cgi?id=30573 + + Make FrameLoader::checkLoadCompleteForThisFrame method + to check for any working DocumentLoader instance (through + activeDocumentLoader()) instead of only checking for + 'm_provisionalDocumentLoader' in order to decide to if + it is going to reset of not the back and forward history. + after an error page has been loaded. + + Test: LayoutTests/fast/history/back-forward-reset-after-error-handling.html + + * loader/FrameLoader.cpp: + (WebCore::FrameLoader::checkLoadCompleteForThisFrame): + +2009-11-09 Laszlo Gombos <laszlo.1.gombos@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Few classes have virtual functions but non-virtual destructor + https://bugs.webkit.org/show_bug.cgi?id=31269 + + No new tests as there is no functional change. + + * platform/qt/QWebPageClient.h: + (QWebPageClient::~QWebPageClient): Add virtual destructor. + +2009-11-09 Yael Aharon <yael.aharon@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Allow setting HTTP headers with empty value in XMLHTTPRequest + https://bugs.webkit.org/show_bug.cgi?id=31140 + + QtNetwork interprets null string as request to remove the header, not add it. + Replace null values with empty values before passing them to QtNetwork. + + Test: http/tests/xmlhttprequest/xmlhttprequest-setrequestheader-no-value.html + + * platform/network/qt/ResourceRequestQt.cpp: + (WebCore::ResourceRequest::toNetworkRequest): + +2009-11-05 Jakub Wieczorek <faw217@gmail.com> + + Reviewed by Holger Freyther. + + [Qt] The XML tokenizer reports a parse error twice if it occurs before the document element is found. + https://bugs.webkit.org/show_bug.cgi?id=31144 + + XMLTokenizer::doEnd() uses an additional logic to report a parse failure in + documents that end prematurely but are not considered invalid by QXmlStream. + This is to stay compatible with the libxml2 implementation. + However, that code path would be also hit in situations when it should not, + i.e. the error would have already been caught and handled. As a result, the + same error would be reported twice. + + No new tests, because the problem is already covered by + fast/parser/xml-declaration-missing-ending-mark.html. + + * dom/XMLTokenizerQt.cpp: + (WebCore::XMLTokenizer::doEnd): + +2009-11-05 Yuta Kitamura <yutak@chromium.org> + + Reviewed by Eric Seidel. + + Fix ASSERT(currentStyle = renderStyle()). + https://bugs.webkit.org/show_bug.cgi?id=31152 + + * dom/Element.cpp: + (WebCore::Element::pseudoStyleCacheIsInvalid): We should have used "==" instead of "=". + +2009-11-04 Yael Aharon <yael.aharon@nokia.com> + + Reviewed by Tor Arne Vestbø. + + [Qt] ASSERT failure when receiving 401 HTTP Authentication response. + https://bugs.webkit.org/show_bug.cgi?id=31077 + + Allow sending the response body under the same conditions that we + allow it to finish without reporting an error. + + * platform/network/qt/QNetworkReplyHandler.cpp: + (WebCore::QNetworkReplyHandler::sendResponseIfNeeded): + +2009-11-03 Evan Martin <evan@chromium.org> + + Reviewed by Darin Adler. + + Fix an off-by-one in the CSS lexer that causes memory corruption in + hard-to-trigger circumstances. + + https://bugs.webkit.org/show_bug.cgi?id=30827 + + Test: fast/css/end-of-buffer-crash.html + + * css/maketokenizer: Add comments, fix off-by-one. + +2009-11-02 Darin Adler <darin@apple.com> + + Reviewed by Dan Bernstein. + + Crash due to double-destroy related to CSS run-in property + https://bugs.webkit.org/show_bug.cgi?id=31034 + rdar://problem/7328458 + + Test: fast/css/run-in-crash.html + + * rendering/RenderBlock.cpp: + (WebCore::RenderBlock::destroy): Reorder destruction so the + continuation is destroyed after anonymous children. See comment + in the code for more details of why this is right. + * rendering/RenderInline.cpp: + (WebCore::RenderInline::destroy): Ditto. + +2009-10-30 Kenneth Rohde Christiansen <kenneth@webkit.org> + + Reviewed by Holger Hans Peter Freyther. + + If the owner widget of the page has a palette set, we + should use that one. This was only working when the + owner was a QWebView. This patch fixes that. + + * platform/qt/RenderThemeQt.cpp: + (WebCore::RenderThemeQt::applyTheme): + +2009-10-29 Xan Lopez <xlopez@igalia.com> + + Reviewed by Oliver Hunt. + + [GTK] Threading problems with some of the tests + https://bugs.webkit.org/show_bug.cgi?id=30814 + + Create strings shared among threads with crossThreadString + constructor method. + + * storage/Database.cpp: + (WebCore::Database::Database): + +2009-10-30 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + Reviewed by NOBODY (OOPS!). + + [Qt] Use the default timeout interval for JS as the HTML tokenizer delay for setHtml() + + This ensures that long-running JavaScript (for example due to a modal alert() dialog), + will not trigger a deferred load after only 500ms (the default tokenizer delay) while + still giving a reasonable timeout (10 seconds) to prevent deadlock. + + https://bugs.webkit.org/show_bug.cgi?id=29381 + + * html/HTMLTokenizer.cpp: Change debug output to print the actual tokenizer delay + +2009-10-30 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + Reviewed by NOBODY (OOPS!). + + Clear the initial request when loading synchronously to prevent duplicate loads + + MainResourceLoader uses the member m_initialRequest to store a request for future + deferred loads. When doing a synchronous load, in handleDataLoadNow(), we therefore + have to clear this request so that subsequent entries into the loader will not start + yet another load. + + This can for example happen in setDefersLoading() as a result of a PageGroupLoadDeferrer + going out of scope when returning from Chrome::runJavaScriptAlert(), where the alert() + came from a script executed as part of the first/original load. + + https://bugs.webkit.org/show_bug.cgi?id=30879 + + * loader/MainResourceLoader.cpp: + (WebCore::MainResourceLoader::handleDataLoadNow): clear m_initialRequest + +2009-11-04 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> + + Reviewed by Timothy Hatcher. + + WebInspector: Use a different method to identify the webkit port in + InspectorBackent::platform(). + This corrects the inspector expected behavior with Qt on Windows. + https://bugs.webkit.org/show_bug.cgi?id=31116 + + * inspector/InspectorBackend.cpp: + (WebCore::InspectorBackend::platform): + (WebCore::InspectorBackend::port): + * inspector/InspectorBackend.h: + * inspector/InspectorBackend.idl: + * inspector/front-end/InspectorControllerStub.js: + (.WebInspector.InspectorControllerStub.prototype.port): + * inspector/front-end/inspector.css: + * inspector/front-end/inspector.js: + (WebInspector.loaded): + (WebInspector.toolbarDragStart): + +2009-11-12 Benjamin Poulain <benjamin.poulain@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + Custom printing shrink factors + https://bugs.webkit.org/show_bug.cgi?id=29042 + + This reverts commit r49769. The public API for this needs to be reviewed + before its inclusion in Qt. + + * page/PrintContext.cpp: + (WebCore::PrintContext::begin): + * page/Settings.cpp: + (WebCore::Settings::Settings): + * page/Settings.h: + +2009-11-09 Norbert Leser <norbert.leser@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + Moved macro MMP_RULES (LINKEROPTION) into symbian instead of symbian-sbsv2, + since adjustment of RW-section base address will be needed for all new symbian + tool chains, specifically for arm and gcc compilation targets. + Also, change target address to 0xE00000 to be sufficient for all targets. + + * WebCore.pro: + +2009-11-11 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> + + Reviewed by Eric Seidel. + + [Qt] Make the default style background color valid. + Currently the color is transparent but invalid, this causes + list boxes in QtWebKit to be drawn with a black background + since r49242. + https://bugs.webkit.org/show_bug.cgi?id=31295 + + * rendering/style/RenderStyle.h: + (WebCore::InheritedFlags::initialBackgroundColor): + * rendering/style/StyleBackgroundData.cpp: + (WebCore::StyleBackgroundData::StyleBackgroundData): + +2009-11-11 Simon Hausmann <simon.hausmann@nokia.com> + + Reviewed by Tor Arne Vestbø. + + Introduce a function for querying the input method status + in QWebPageClient. + + * platform/qt/QWebPageClient.h: + 2009-11-09 Yael Aharon <yael.aharon@nokia.com> Reviewed by Kenneth Rohde Christiansen. diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro index 4e84a80..9239089 100644 --- a/src/3rdparty/webkit/WebCore/WebCore.pro +++ b/src/3rdparty/webkit/WebCore/WebCore.pro @@ -12,10 +12,10 @@ symbian: { DEPLOYMENT += webkitlibs TARGET.UID3 = 0x200267C2 + # RO text (code) section in qtwebkit.dll exceeds allocated space for gcce udeb target. + # Move RW-section base address to start from 0xE00000 instead of the toolchain default 0x400000. + MMP_RULES += "LINKEROPTION armcc --rw-base 0xE00000" } -# RO-section in qtwebkit.dll exceeds allocated space in SBSv2. Move RW-section -# base address to start from 0x800000 instead of the toolchain default 0x400000. -symbian-sbsv2: MMP_RULES += "LINKEROPTION armcc --rw-base 0x800000" include($$PWD/../WebKit.pri) diff --git a/src/3rdparty/webkit/WebCore/css/maketokenizer b/src/3rdparty/webkit/WebCore/css/maketokenizer index d14b37a..efac3c6 100644 --- a/src/3rdparty/webkit/WebCore/css/maketokenizer +++ b/src/3rdparty/webkit/WebCore/css/maketokenizer @@ -73,30 +73,36 @@ typedef unsigned int flex_uint32_t; END } - +# Skip over the flex output prologue: the above typedefs, forward declarations, etc. +# Stop when we get to the declarations of tables. while (<>) { last if /YY_NUM_RULES/; } +# Dump the generated tables. /yy_last_accepting/ matches the first declaration after the tables. print; while (<>) { last if /yy_last_accepting/; print; } -# media query, tokenizer state support +# Skip down the the declaration of yytext; the body of the flex output begins after it. while (<>) { last if /yytext/; } +# Dump the definitions of states (INITIAL, media query, tokenizer state support). while (<>) { last if not (/define/ || /line/) ; print; } +# Skip to main scanner function. while (<>) { last if /^YY_DECL/; } +# Dump main scanner declarations, substituting in our 16-bit character type. +# Declarations end with the declaration matching /yy_act/. print; while (<>) { s/char/UChar/; @@ -104,23 +110,34 @@ while (<>) { last if /yy_act/; } +# Skip past initialization code, down to main loop. while (<>) { last if /while \( 1 \)/; } +# Dump the main loop, skipping over labels we don't use. +# Stop before dumping the end-of-buffer handling, because we output our own custom end-of-buffer handling. print; while (<>) { next if /^yy_match:/; next if /^do_action:/; last if /YY_END_OF_BUFFER/; + if (/^case YY_STATE_EOF\(INITIAL\):/) { + print "case YY_END_OF_BUFFER:\n"; + # flex outputs a ton of logic related to end-of-buffer handling; we just want to fall through to + # the yyterminate() found in other EOF states. But we need to be careful to back up to behind + # the terminating double-NUL so that subsequent calls to flex will have the pointers in order, + # so this logic is a reduction of the normal flex-generated YY_END_OF_BUFFER code. + print "\tyy_c_buf_p = yy_cp - 1;\n"; + print "\tyy_cp = yy_c_buf_p;\n"; + } print; - print "case YY_END_OF_BUFFER:\n" if /^case YY_STATE_EOF\(INITIAL\):/; } +# Skip over the end-of-buffer handling; dump the rest of the function. while (<>) { last if /default:/; } - print; while (<>) { print; diff --git a/src/3rdparty/webkit/WebCore/dom/Element.cpp b/src/3rdparty/webkit/WebCore/dom/Element.cpp index 9edde25..6924773 100644 --- a/src/3rdparty/webkit/WebCore/dom/Element.cpp +++ b/src/3rdparty/webkit/WebCore/dom/Element.cpp @@ -752,7 +752,7 @@ void Element::detach() bool Element::pseudoStyleCacheIsInvalid(const RenderStyle* currentStyle, RenderStyle* newStyle) { - ASSERT(currentStyle = renderStyle()); + ASSERT(currentStyle == renderStyle()); if (!renderer() || !currentStyle) return false; diff --git a/src/3rdparty/webkit/WebCore/dom/XMLTokenizerQt.cpp b/src/3rdparty/webkit/WebCore/dom/XMLTokenizerQt.cpp index c6e73ba..79fc51e 100644 --- a/src/3rdparty/webkit/WebCore/dom/XMLTokenizerQt.cpp +++ b/src/3rdparty/webkit/WebCore/dom/XMLTokenizerQt.cpp @@ -256,7 +256,7 @@ void XMLTokenizer::doEnd() #endif if (m_stream.error() == QXmlStreamReader::PrematureEndOfDocumentError - || (m_wroteText && !m_sawFirstElement && !m_sawXSLTransform)) + || (m_wroteText && !m_sawFirstElement && !m_sawXSLTransform && !m_sawError)) handleError(fatal, qPrintable(m_stream.errorString()), lineNumber(), columnNumber()); } diff --git a/src/3rdparty/webkit/WebCore/generated/CSSGrammar.cpp b/src/3rdparty/webkit/WebCore/generated/CSSGrammar.cpp index 335562e..20e3fcb 100644 --- a/src/3rdparty/webkit/WebCore/generated/CSSGrammar.cpp +++ b/src/3rdparty/webkit/WebCore/generated/CSSGrammar.cpp @@ -1,24 +1,23 @@ -/* A Bison parser, made by GNU Bison 2.3. */ -/* Skeleton implementation for Bison's Yacc-like parsers in C +/* A Bison parser, made by GNU Bison 2.4.1. */ - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -29,7 +28,7 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ @@ -47,7 +46,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.3" +#define YYBISON_VERSION "2.4.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -55,161 +54,28 @@ /* Pure parsers. */ #define YYPURE 1 +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ -#define yyparse cssyyparse -#define yylex cssyylex -#define yyerror cssyyerror -#define yylval cssyylval -#define yychar cssyychar -#define yydebug cssyydebug -#define yynerrs cssyynerrs - - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - TOKEN_EOF = 0, - LOWEST_PREC = 258, - UNIMPORTANT_TOK = 259, - WHITESPACE = 260, - SGML_CD = 261, - INCLUDES = 262, - DASHMATCH = 263, - BEGINSWITH = 264, - ENDSWITH = 265, - CONTAINS = 266, - STRING = 267, - IDENT = 268, - NTH = 269, - HEX = 270, - IDSEL = 271, - IMPORT_SYM = 272, - PAGE_SYM = 273, - MEDIA_SYM = 274, - FONT_FACE_SYM = 275, - CHARSET_SYM = 276, - NAMESPACE_SYM = 277, - WEBKIT_RULE_SYM = 278, - WEBKIT_DECLS_SYM = 279, - WEBKIT_KEYFRAME_RULE_SYM = 280, - WEBKIT_KEYFRAMES_SYM = 281, - WEBKIT_VALUE_SYM = 282, - WEBKIT_MEDIAQUERY_SYM = 283, - WEBKIT_SELECTOR_SYM = 284, - WEBKIT_VARIABLES_SYM = 285, - WEBKIT_DEFINE_SYM = 286, - VARIABLES_FOR = 287, - WEBKIT_VARIABLES_DECLS_SYM = 288, - ATKEYWORD = 289, - IMPORTANT_SYM = 290, - MEDIA_ONLY = 291, - MEDIA_NOT = 292, - MEDIA_AND = 293, - REMS = 294, - QEMS = 295, - EMS = 296, - EXS = 297, - PXS = 298, - CMS = 299, - MMS = 300, - INS = 301, - PTS = 302, - PCS = 303, - DEGS = 304, - RADS = 305, - GRADS = 306, - TURNS = 307, - MSECS = 308, - SECS = 309, - HERZ = 310, - KHERZ = 311, - DIMEN = 312, - PERCENTAGE = 313, - FLOATTOKEN = 314, - INTEGER = 315, - URI = 316, - FUNCTION = 317, - NOTFUNCTION = 318, - UNICODERANGE = 319, - VARCALL = 320 - }; -#endif -/* Tokens. */ -#define TOKEN_EOF 0 -#define LOWEST_PREC 258 -#define UNIMPORTANT_TOK 259 -#define WHITESPACE 260 -#define SGML_CD 261 -#define INCLUDES 262 -#define DASHMATCH 263 -#define BEGINSWITH 264 -#define ENDSWITH 265 -#define CONTAINS 266 -#define STRING 267 -#define IDENT 268 -#define NTH 269 -#define HEX 270 -#define IDSEL 271 -#define IMPORT_SYM 272 -#define PAGE_SYM 273 -#define MEDIA_SYM 274 -#define FONT_FACE_SYM 275 -#define CHARSET_SYM 276 -#define NAMESPACE_SYM 277 -#define WEBKIT_RULE_SYM 278 -#define WEBKIT_DECLS_SYM 279 -#define WEBKIT_KEYFRAME_RULE_SYM 280 -#define WEBKIT_KEYFRAMES_SYM 281 -#define WEBKIT_VALUE_SYM 282 -#define WEBKIT_MEDIAQUERY_SYM 283 -#define WEBKIT_SELECTOR_SYM 284 -#define WEBKIT_VARIABLES_SYM 285 -#define WEBKIT_DEFINE_SYM 286 -#define VARIABLES_FOR 287 -#define WEBKIT_VARIABLES_DECLS_SYM 288 -#define ATKEYWORD 289 -#define IMPORTANT_SYM 290 -#define MEDIA_ONLY 291 -#define MEDIA_NOT 292 -#define MEDIA_AND 293 -#define REMS 294 -#define QEMS 295 -#define EMS 296 -#define EXS 297 -#define PXS 298 -#define CMS 299 -#define MMS 300 -#define INS 301 -#define PTS 302 -#define PCS 303 -#define DEGS 304 -#define RADS 305 -#define GRADS 306 -#define TURNS 307 -#define MSECS 308 -#define SECS 309 -#define HERZ 310 -#define KHERZ 311 -#define DIMEN 312 -#define PERCENTAGE 313 -#define FLOATTOKEN 314 -#define INTEGER 315 -#define URI 316 -#define FUNCTION 317 -#define NOTFUNCTION 318 -#define UNICODERANGE 319 -#define VARCALL 320 - - +#define yyparse cssyyparse +#define yylex cssyylex +#define yyerror cssyyerror +#define yylval cssyylval +#define yychar cssyychar +#define yydebug cssyydebug +#define yynerrs cssyynerrs /* Copy the first part of user declarations. */ + +/* Line 189 of yacc.c */ #line 1 "../css/CSSGrammar.y" @@ -270,6 +136,9 @@ using namespace HTMLNames; +/* Line 189 of yacc.c */ +#line 141 "WebCore/tmp/../generated/CSSGrammar.tab.c" + /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 @@ -288,10 +157,89 @@ using namespace HTMLNames; # define YYTOKEN_TABLE 0 #endif + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + TOKEN_EOF = 0, + LOWEST_PREC = 258, + UNIMPORTANT_TOK = 259, + WHITESPACE = 260, + SGML_CD = 261, + INCLUDES = 262, + DASHMATCH = 263, + BEGINSWITH = 264, + ENDSWITH = 265, + CONTAINS = 266, + STRING = 267, + IDENT = 268, + NTH = 269, + HEX = 270, + IDSEL = 271, + IMPORT_SYM = 272, + PAGE_SYM = 273, + MEDIA_SYM = 274, + FONT_FACE_SYM = 275, + CHARSET_SYM = 276, + NAMESPACE_SYM = 277, + WEBKIT_RULE_SYM = 278, + WEBKIT_DECLS_SYM = 279, + WEBKIT_KEYFRAME_RULE_SYM = 280, + WEBKIT_KEYFRAMES_SYM = 281, + WEBKIT_VALUE_SYM = 282, + WEBKIT_MEDIAQUERY_SYM = 283, + WEBKIT_SELECTOR_SYM = 284, + WEBKIT_VARIABLES_SYM = 285, + WEBKIT_DEFINE_SYM = 286, + VARIABLES_FOR = 287, + WEBKIT_VARIABLES_DECLS_SYM = 288, + ATKEYWORD = 289, + IMPORTANT_SYM = 290, + MEDIA_ONLY = 291, + MEDIA_NOT = 292, + MEDIA_AND = 293, + REMS = 294, + QEMS = 295, + EMS = 296, + EXS = 297, + PXS = 298, + CMS = 299, + MMS = 300, + INS = 301, + PTS = 302, + PCS = 303, + DEGS = 304, + RADS = 305, + GRADS = 306, + TURNS = 307, + MSECS = 308, + SECS = 309, + HERZ = 310, + KHERZ = 311, + DIMEN = 312, + PERCENTAGE = 313, + FLOATTOKEN = 314, + INTEGER = 315, + URI = 316, + FUNCTION = 317, + NOTFUNCTION = 318, + UNICODERANGE = 319, + VARCALL = 320 + }; +#endif + + + #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 62 "../css/CSSGrammar.y" { + +/* Line 214 of yacc.c */ +#line 62 "../css/CSSGrammar.y" + bool boolean; char character; int integer; @@ -313,18 +261,21 @@ typedef union YYSTYPE WebKitCSSKeyframeRule* keyframeRule; WebKitCSSKeyframesRule* keyframesRule; float val; -} -/* Line 187 of yacc.c. */ -#line 319 "WebCore/tmp/../generated/CSSGrammar.tab.c" - YYSTYPE; + + + +/* Line 214 of yacc.c */ +#line 269 "WebCore/tmp/../generated/CSSGrammar.tab.c" +} YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 #endif - /* Copy the second part of user declarations. */ + +/* Line 264 of yacc.c */ #line 86 "../css/CSSGrammar.y" @@ -340,8 +291,8 @@ static int cssyylex(YYSTYPE* yylval, void* parser) -/* Line 216 of yacc.c. */ -#line 345 "WebCore/tmp/../generated/CSSGrammar.tab.c" +/* Line 264 of yacc.c */ +#line 296 "WebCore/tmp/../generated/CSSGrammar.tab.c" #ifdef short # undef short @@ -416,14 +367,14 @@ typedef short int yytype_int16; #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int -YYID (int i) +YYID (int yyi) #else static int -YYID (i) - int i; +YYID (yyi) + int yyi; #endif { - return i; + return yyi; } #endif @@ -504,9 +455,9 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss; - YYSTYPE yyvs; - }; + yytype_int16 yyss_alloc; + YYSTYPE yyvs_alloc; +}; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) @@ -540,12 +491,12 @@ union yyalloc elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ -# define YYSTACK_RELOCATE(Stack) \ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ @@ -1557,17 +1508,20 @@ yy_symbol_print (yyoutput, yytype, yyvaluep) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) #else static void -yy_stack_print (bottom, top) - yytype_int16 *bottom; - yytype_int16 *top; +yy_stack_print (yybottom, yytop) + yytype_int16 *yybottom; + yytype_int16 *yytop; #endif { YYFPRINTF (stderr, "Stack now"); - for (; bottom <= top; ++bottom) - YYFPRINTF (stderr, " %d", *bottom); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } YYFPRINTF (stderr, "\n"); } @@ -1601,11 +1555,11 @@ yy_reduce_print (yyvsp, yyrule) /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { - fprintf (stderr, " $%d = ", yyi + 1); + YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) ); - fprintf (stderr, "\n"); + YYFPRINTF (stderr, "\n"); } } @@ -1885,10 +1839,8 @@ yydestruct (yymsg, yytype, yyvaluep) break; } } - /* Prevent warnings from -Wmissing-prototypes. */ - #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); @@ -1907,10 +1859,9 @@ int yyparse (); - -/*----------. -| yyparse. | -`----------*/ +/*-------------------------. +| yyparse or yypush_parse. | +`-------------------------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ @@ -1934,74 +1885,75 @@ yyparse () #endif #endif { - /* The look-ahead symbol. */ +/* The lookahead symbol. */ int yychar; -/* The semantic value of the look-ahead symbol. */ +/* The semantic value of the lookahead symbol. */ YYSTYPE yylval; -/* Number of syntax errors so far. */ -int yynerrs; + /* Number of syntax errors so far. */ + int yynerrs; - int yystate; - int yyn; - int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Look-ahead token as an internal (translated) token number. */ - int yytoken = 0; -#if YYERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char yymsgbuf[128]; - char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; -#endif - - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss = yyssa; - yytype_int16 *yyssp; + int yystate; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp; + /* The stacks and their tools: + `yyss': related to states. + `yyvs': related to semantic values. + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss; + yytype_int16 *yyssp; -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs; + YYSTYPE *yyvsp; - YYSIZE_T yystacksize = YYINITDEPTH; + YYSIZE_T yystacksize; + int yyn; + int yyresult; + /* Lookahead token as an internal (translated) token number. */ + int yytoken; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; + yytoken = 0; + yyss = yyssa; + yyvs = yyvsa; + yystacksize = YYINITDEPTH; + YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ + yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ - yyssp = yyss; yyvsp = yyvs; @@ -2031,7 +1983,6 @@ int yynerrs; YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; - /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might @@ -2039,7 +1990,6 @@ int yynerrs; yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), - &yystacksize); yyss = yyss1; @@ -2062,9 +2012,8 @@ int yynerrs; (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); - + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); @@ -2075,7 +2024,6 @@ int yynerrs; yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); @@ -2085,6 +2033,9 @@ int yynerrs; YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + if (yystate == YYFINAL) + YYACCEPT; + goto yybackup; /*-----------. @@ -2093,16 +2044,16 @@ int yynerrs; yybackup: /* Do appropriate processing given the current state. Read a - look-ahead token if we need one and don't already have one. */ + lookahead token if we need one and don't already have one. */ - /* First try to decide what to do without reference to look-ahead token. */ + /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; - /* Not known => get a look-ahead token if don't already have one. */ + /* Not known => get a lookahead token if don't already have one. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); @@ -2134,20 +2085,16 @@ yybackup: goto yyreduce; } - if (yyn == YYFINAL) - YYACCEPT; - /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; - /* Shift the look-ahead token. */ + /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - /* Discard the shifted token unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; + /* Discard the shifted token. */ + yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; @@ -2187,6 +2134,8 @@ yyreduce: switch (yyn) { case 12: + +/* Line 1455 of yacc.c */ #line 287 "../css/CSSGrammar.y" { static_cast<CSSParser*>(parser)->m_rule = (yyvsp[(4) - (6)].rule); @@ -2194,6 +2143,8 @@ yyreduce: break; case 13: + +/* Line 1455 of yacc.c */ #line 293 "../css/CSSGrammar.y" { static_cast<CSSParser*>(parser)->m_keyframe = (yyvsp[(4) - (6)].keyframeRule); @@ -2201,6 +2152,8 @@ yyreduce: break; case 14: + +/* Line 1455 of yacc.c */ #line 299 "../css/CSSGrammar.y" { /* can be empty */ @@ -2208,6 +2161,8 @@ yyreduce: break; case 15: + +/* Line 1455 of yacc.c */ #line 305 "../css/CSSGrammar.y" { /* can be empty */ @@ -2215,6 +2170,8 @@ yyreduce: break; case 16: + +/* Line 1455 of yacc.c */ #line 311 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -2230,6 +2187,8 @@ yyreduce: break; case 17: + +/* Line 1455 of yacc.c */ #line 325 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -2238,6 +2197,8 @@ yyreduce: break; case 18: + +/* Line 1455 of yacc.c */ #line 332 "../css/CSSGrammar.y" { if ((yyvsp[(4) - (5)].selectorList)) { @@ -2249,12 +2210,16 @@ yyreduce: break; case 25: + +/* Line 1455 of yacc.c */ #line 354 "../css/CSSGrammar.y" { ;} break; case 28: + +/* Line 1455 of yacc.c */ #line 364 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -2265,18 +2230,24 @@ yyreduce: break; case 29: + +/* Line 1455 of yacc.c */ #line 370 "../css/CSSGrammar.y" { ;} break; case 30: + +/* Line 1455 of yacc.c */ #line 372 "../css/CSSGrammar.y" { ;} break; case 32: + +/* Line 1455 of yacc.c */ #line 378 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -2286,12 +2257,16 @@ yyreduce: break; case 33: + +/* Line 1455 of yacc.c */ #line 383 "../css/CSSGrammar.y" { ;} break; case 35: + +/* Line 1455 of yacc.c */ #line 389 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -2301,6 +2276,8 @@ yyreduce: break; case 39: + +/* Line 1455 of yacc.c */ #line 403 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -2310,11 +2287,15 @@ yyreduce: break; case 49: + +/* Line 1455 of yacc.c */ #line 426 "../css/CSSGrammar.y" { (yyval.ruleList) = 0; ;} break; case 50: + +/* Line 1455 of yacc.c */ #line 427 "../css/CSSGrammar.y" { (yyval.ruleList) = (yyvsp[(1) - (3)].ruleList); @@ -2327,6 +2308,8 @@ yyreduce: break; case 60: + +/* Line 1455 of yacc.c */ #line 454 "../css/CSSGrammar.y" { (yyval.rule) = static_cast<CSSParser*>(parser)->createImportRule((yyvsp[(3) - (6)].string), (yyvsp[(5) - (6)].mediaList)); @@ -2334,6 +2317,8 @@ yyreduce: break; case 61: + +/* Line 1455 of yacc.c */ #line 457 "../css/CSSGrammar.y" { (yyval.rule) = 0; @@ -2341,6 +2326,8 @@ yyreduce: break; case 62: + +/* Line 1455 of yacc.c */ #line 460 "../css/CSSGrammar.y" { (yyval.rule) = 0; @@ -2348,6 +2335,8 @@ yyreduce: break; case 63: + +/* Line 1455 of yacc.c */ #line 463 "../css/CSSGrammar.y" { (yyval.rule) = 0; @@ -2355,6 +2344,8 @@ yyreduce: break; case 64: + +/* Line 1455 of yacc.c */ #line 469 "../css/CSSGrammar.y" { (yyval.rule) = static_cast<CSSParser*>(parser)->createVariablesRule((yyvsp[(3) - (7)].mediaList), true); @@ -2362,6 +2353,8 @@ yyreduce: break; case 65: + +/* Line 1455 of yacc.c */ #line 473 "../css/CSSGrammar.y" { (yyval.rule) = static_cast<CSSParser*>(parser)->createVariablesRule((yyvsp[(3) - (7)].mediaList), false); @@ -2369,6 +2362,8 @@ yyreduce: break; case 66: + +/* Line 1455 of yacc.c */ #line 479 "../css/CSSGrammar.y" { (yyval.mediaList) = static_cast<CSSParser*>(parser)->createMediaList(); @@ -2376,6 +2371,8 @@ yyreduce: break; case 67: + +/* Line 1455 of yacc.c */ #line 483 "../css/CSSGrammar.y" { (yyval.mediaList) = (yyvsp[(3) - (3)].mediaList); @@ -2383,6 +2380,8 @@ yyreduce: break; case 68: + +/* Line 1455 of yacc.c */ #line 489 "../css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (1)].boolean); @@ -2390,6 +2389,8 @@ yyreduce: break; case 69: + +/* Line 1455 of yacc.c */ #line 492 "../css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (2)].boolean); @@ -2399,6 +2400,8 @@ yyreduce: break; case 70: + +/* Line 1455 of yacc.c */ #line 497 "../css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (1)].boolean); @@ -2406,6 +2409,8 @@ yyreduce: break; case 71: + +/* Line 1455 of yacc.c */ #line 500 "../css/CSSGrammar.y" { (yyval.boolean) = false; @@ -2413,6 +2418,8 @@ yyreduce: break; case 72: + +/* Line 1455 of yacc.c */ #line 503 "../css/CSSGrammar.y" { (yyval.boolean) = false; @@ -2420,6 +2427,8 @@ yyreduce: break; case 73: + +/* Line 1455 of yacc.c */ #line 506 "../css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (2)].boolean); @@ -2427,6 +2436,8 @@ yyreduce: break; case 74: + +/* Line 1455 of yacc.c */ #line 512 "../css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (3)].boolean); @@ -2434,6 +2445,8 @@ yyreduce: break; case 75: + +/* Line 1455 of yacc.c */ #line 515 "../css/CSSGrammar.y" { (yyval.boolean) = false; @@ -2441,6 +2454,8 @@ yyreduce: break; case 76: + +/* Line 1455 of yacc.c */ #line 518 "../css/CSSGrammar.y" { (yyval.boolean) = false; @@ -2448,6 +2463,8 @@ yyreduce: break; case 77: + +/* Line 1455 of yacc.c */ #line 521 "../css/CSSGrammar.y" { (yyval.boolean) = false; @@ -2455,6 +2472,8 @@ yyreduce: break; case 78: + +/* Line 1455 of yacc.c */ #line 524 "../css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (4)].boolean); @@ -2464,6 +2483,8 @@ yyreduce: break; case 79: + +/* Line 1455 of yacc.c */ #line 529 "../css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (4)].boolean); @@ -2471,6 +2492,8 @@ yyreduce: break; case 80: + +/* Line 1455 of yacc.c */ #line 532 "../css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (6)].boolean); @@ -2478,6 +2501,8 @@ yyreduce: break; case 81: + +/* Line 1455 of yacc.c */ #line 538 "../css/CSSGrammar.y" { (yyval.boolean) = static_cast<CSSParser*>(parser)->addVariable((yyvsp[(1) - (4)].string), (yyvsp[(4) - (4)].valueList)); @@ -2485,6 +2510,8 @@ yyreduce: break; case 82: + +/* Line 1455 of yacc.c */ #line 542 "../css/CSSGrammar.y" { (yyval.boolean) = static_cast<CSSParser*>(parser)->addVariableDeclarationBlock((yyvsp[(1) - (7)].string)); @@ -2492,6 +2519,8 @@ yyreduce: break; case 83: + +/* Line 1455 of yacc.c */ #line 546 "../css/CSSGrammar.y" { (yyval.boolean) = false; @@ -2499,6 +2528,8 @@ yyreduce: break; case 84: + +/* Line 1455 of yacc.c */ #line 550 "../css/CSSGrammar.y" { (yyval.boolean) = false; @@ -2506,6 +2537,8 @@ yyreduce: break; case 85: + +/* Line 1455 of yacc.c */ #line 554 "../css/CSSGrammar.y" { /* @variables { varname: } Just reduce away this variable with no value. */ @@ -2514,6 +2547,8 @@ yyreduce: break; case 86: + +/* Line 1455 of yacc.c */ #line 559 "../css/CSSGrammar.y" { /* if we come across rules with invalid values like this case: @variables { varname: *; }, just discard the property/value pair */ @@ -2522,6 +2557,8 @@ yyreduce: break; case 87: + +/* Line 1455 of yacc.c */ #line 566 "../css/CSSGrammar.y" { (yyval.string) = (yyvsp[(1) - (2)].string); @@ -2529,6 +2566,8 @@ yyreduce: break; case 88: + +/* Line 1455 of yacc.c */ #line 572 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -2538,16 +2577,22 @@ yyreduce: break; case 91: + +/* Line 1455 of yacc.c */ #line 582 "../css/CSSGrammar.y" { (yyval.string).characters = 0; ;} break; case 92: + +/* Line 1455 of yacc.c */ #line 583 "../css/CSSGrammar.y" { (yyval.string) = (yyvsp[(1) - (2)].string); ;} break; case 95: + +/* Line 1455 of yacc.c */ #line 592 "../css/CSSGrammar.y" { (yyval.string) = (yyvsp[(1) - (2)].string); @@ -2555,6 +2600,8 @@ yyreduce: break; case 96: + +/* Line 1455 of yacc.c */ #line 598 "../css/CSSGrammar.y" { (yyval.valueList) = 0; @@ -2562,6 +2609,8 @@ yyreduce: break; case 97: + +/* Line 1455 of yacc.c */ #line 601 "../css/CSSGrammar.y" { (yyval.valueList) = (yyvsp[(3) - (4)].valueList); @@ -2569,6 +2618,8 @@ yyreduce: break; case 98: + +/* Line 1455 of yacc.c */ #line 607 "../css/CSSGrammar.y" { (yyvsp[(3) - (7)].string).lower(); @@ -2577,6 +2628,8 @@ yyreduce: break; case 99: + +/* Line 1455 of yacc.c */ #line 614 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -2586,6 +2639,8 @@ yyreduce: break; case 100: + +/* Line 1455 of yacc.c */ #line 619 "../css/CSSGrammar.y" { (yyval.mediaQueryExpList) = (yyvsp[(1) - (5)].mediaQueryExpList); @@ -2594,6 +2649,8 @@ yyreduce: break; case 101: + +/* Line 1455 of yacc.c */ #line 626 "../css/CSSGrammar.y" { (yyval.mediaQueryExpList) = static_cast<CSSParser*>(parser)->createFloatingMediaQueryExpList(); @@ -2601,6 +2658,8 @@ yyreduce: break; case 102: + +/* Line 1455 of yacc.c */ #line 629 "../css/CSSGrammar.y" { (yyval.mediaQueryExpList) = (yyvsp[(3) - (3)].mediaQueryExpList); @@ -2608,6 +2667,8 @@ yyreduce: break; case 103: + +/* Line 1455 of yacc.c */ #line 635 "../css/CSSGrammar.y" { (yyval.mediaQueryRestrictor) = MediaQuery::None; @@ -2615,6 +2676,8 @@ yyreduce: break; case 104: + +/* Line 1455 of yacc.c */ #line 638 "../css/CSSGrammar.y" { (yyval.mediaQueryRestrictor) = MediaQuery::Only; @@ -2622,6 +2685,8 @@ yyreduce: break; case 105: + +/* Line 1455 of yacc.c */ #line 641 "../css/CSSGrammar.y" { (yyval.mediaQueryRestrictor) = MediaQuery::Not; @@ -2629,6 +2694,8 @@ yyreduce: break; case 106: + +/* Line 1455 of yacc.c */ #line 647 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -2637,6 +2704,8 @@ yyreduce: break; case 107: + +/* Line 1455 of yacc.c */ #line 652 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -2646,6 +2715,8 @@ yyreduce: break; case 108: + +/* Line 1455 of yacc.c */ #line 660 "../css/CSSGrammar.y" { (yyval.mediaList) = static_cast<CSSParser*>(parser)->createMediaList(); @@ -2653,6 +2724,8 @@ yyreduce: break; case 110: + +/* Line 1455 of yacc.c */ #line 667 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -2662,6 +2735,8 @@ yyreduce: break; case 111: + +/* Line 1455 of yacc.c */ #line 672 "../css/CSSGrammar.y" { (yyval.mediaList) = (yyvsp[(1) - (4)].mediaList); @@ -2671,6 +2746,8 @@ yyreduce: break; case 112: + +/* Line 1455 of yacc.c */ #line 677 "../css/CSSGrammar.y" { (yyval.mediaList) = 0; @@ -2678,6 +2755,8 @@ yyreduce: break; case 113: + +/* Line 1455 of yacc.c */ #line 683 "../css/CSSGrammar.y" { (yyval.rule) = static_cast<CSSParser*>(parser)->createMediaRule((yyvsp[(3) - (7)].mediaList), (yyvsp[(6) - (7)].ruleList)); @@ -2685,6 +2764,8 @@ yyreduce: break; case 114: + +/* Line 1455 of yacc.c */ #line 686 "../css/CSSGrammar.y" { (yyval.rule) = static_cast<CSSParser*>(parser)->createMediaRule(0, (yyvsp[(5) - (6)].ruleList)); @@ -2692,6 +2773,8 @@ yyreduce: break; case 115: + +/* Line 1455 of yacc.c */ #line 692 "../css/CSSGrammar.y" { (yyval.string) = (yyvsp[(1) - (2)].string); @@ -2699,6 +2782,8 @@ yyreduce: break; case 116: + +/* Line 1455 of yacc.c */ #line 698 "../css/CSSGrammar.y" { (yyval.rule) = (yyvsp[(7) - (8)].keyframesRule); @@ -2707,11 +2792,15 @@ yyreduce: break; case 119: + +/* Line 1455 of yacc.c */ #line 710 "../css/CSSGrammar.y" { (yyval.keyframesRule) = static_cast<CSSParser*>(parser)->createKeyframesRule(); ;} break; case 120: + +/* Line 1455 of yacc.c */ #line 711 "../css/CSSGrammar.y" { (yyval.keyframesRule) = (yyvsp[(1) - (3)].keyframesRule); @@ -2721,6 +2810,8 @@ yyreduce: break; case 121: + +/* Line 1455 of yacc.c */ #line 719 "../css/CSSGrammar.y" { (yyval.keyframeRule) = static_cast<CSSParser*>(parser)->createKeyframeRule((yyvsp[(1) - (6)].valueList)); @@ -2728,6 +2819,8 @@ yyreduce: break; case 122: + +/* Line 1455 of yacc.c */ #line 725 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -2737,6 +2830,8 @@ yyreduce: break; case 123: + +/* Line 1455 of yacc.c */ #line 730 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -2747,11 +2842,15 @@ yyreduce: break; case 124: + +/* Line 1455 of yacc.c */ #line 739 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).isInt = false; (yyval.value).fValue = (yyvsp[(1) - (1)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_NUMBER; ;} break; case 125: + +/* Line 1455 of yacc.c */ #line 740 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).isInt = false; (yyval.value).unit = CSSPrimitiveValue::CSS_NUMBER; @@ -2766,6 +2865,8 @@ yyreduce: break; case 126: + +/* Line 1455 of yacc.c */ #line 764 "../css/CSSGrammar.y" { (yyval.rule) = 0; @@ -2773,6 +2874,8 @@ yyreduce: break; case 127: + +/* Line 1455 of yacc.c */ #line 767 "../css/CSSGrammar.y" { (yyval.rule) = 0; @@ -2780,6 +2883,8 @@ yyreduce: break; case 128: + +/* Line 1455 of yacc.c */ #line 774 "../css/CSSGrammar.y" { (yyval.rule) = static_cast<CSSParser*>(parser)->createFontFaceRule(); @@ -2787,6 +2892,8 @@ yyreduce: break; case 129: + +/* Line 1455 of yacc.c */ #line 777 "../css/CSSGrammar.y" { (yyval.rule) = 0; @@ -2794,6 +2901,8 @@ yyreduce: break; case 130: + +/* Line 1455 of yacc.c */ #line 780 "../css/CSSGrammar.y" { (yyval.rule) = 0; @@ -2801,31 +2910,43 @@ yyreduce: break; case 131: + +/* Line 1455 of yacc.c */ #line 786 "../css/CSSGrammar.y" { (yyval.relation) = CSSSelector::DirectAdjacent; ;} break; case 132: + +/* Line 1455 of yacc.c */ #line 787 "../css/CSSGrammar.y" { (yyval.relation) = CSSSelector::IndirectAdjacent; ;} break; case 133: + +/* Line 1455 of yacc.c */ #line 788 "../css/CSSGrammar.y" { (yyval.relation) = CSSSelector::Child; ;} break; case 134: + +/* Line 1455 of yacc.c */ #line 792 "../css/CSSGrammar.y" { (yyval.integer) = -1; ;} break; case 135: + +/* Line 1455 of yacc.c */ #line 793 "../css/CSSGrammar.y" { (yyval.integer) = 1; ;} break; case 136: + +/* Line 1455 of yacc.c */ #line 797 "../css/CSSGrammar.y" { (yyval.rule) = static_cast<CSSParser*>(parser)->createStyleRule((yyvsp[(1) - (5)].selectorList)); @@ -2833,6 +2954,8 @@ yyreduce: break; case 137: + +/* Line 1455 of yacc.c */ #line 803 "../css/CSSGrammar.y" { if ((yyvsp[(1) - (1)].selector)) { @@ -2846,6 +2969,8 @@ yyreduce: break; case 138: + +/* Line 1455 of yacc.c */ #line 812 "../css/CSSGrammar.y" { if ((yyvsp[(1) - (4)].selectorList) && (yyvsp[(4) - (4)].selector)) { @@ -2858,6 +2983,8 @@ yyreduce: break; case 139: + +/* Line 1455 of yacc.c */ #line 820 "../css/CSSGrammar.y" { (yyval.selectorList) = 0; @@ -2865,6 +2992,8 @@ yyreduce: break; case 140: + +/* Line 1455 of yacc.c */ #line 826 "../css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(1) - (2)].selector); @@ -2872,6 +3001,8 @@ yyreduce: break; case 141: + +/* Line 1455 of yacc.c */ #line 832 "../css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(1) - (1)].selector); @@ -2879,6 +3010,8 @@ yyreduce: break; case 142: + +/* Line 1455 of yacc.c */ #line 836 "../css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(1) - (1)].selector); @@ -2886,6 +3019,8 @@ yyreduce: break; case 143: + +/* Line 1455 of yacc.c */ #line 840 "../css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(2) - (2)].selector); @@ -2905,6 +3040,8 @@ yyreduce: break; case 144: + +/* Line 1455 of yacc.c */ #line 855 "../css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(3) - (3)].selector); @@ -2929,6 +3066,8 @@ yyreduce: break; case 145: + +/* Line 1455 of yacc.c */ #line 875 "../css/CSSGrammar.y" { (yyval.selector) = 0; @@ -2936,21 +3075,29 @@ yyreduce: break; case 146: + +/* Line 1455 of yacc.c */ #line 881 "../css/CSSGrammar.y" { (yyval.string).characters = 0; (yyval.string).length = 0; ;} break; case 147: + +/* Line 1455 of yacc.c */ #line 882 "../css/CSSGrammar.y" { static UChar star = '*'; (yyval.string).characters = ☆ (yyval.string).length = 1; ;} break; case 148: + +/* Line 1455 of yacc.c */ #line 883 "../css/CSSGrammar.y" { (yyval.string) = (yyvsp[(1) - (2)].string); ;} break; case 149: + +/* Line 1455 of yacc.c */ #line 887 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -2960,6 +3107,8 @@ yyreduce: break; case 150: + +/* Line 1455 of yacc.c */ #line 892 "../css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(2) - (2)].selector); @@ -2971,6 +3120,8 @@ yyreduce: break; case 151: + +/* Line 1455 of yacc.c */ #line 899 "../css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(1) - (1)].selector); @@ -2981,6 +3132,8 @@ yyreduce: break; case 152: + +/* Line 1455 of yacc.c */ #line 905 "../css/CSSGrammar.y" { AtomicString namespacePrefix = (yyvsp[(1) - (2)].string); @@ -2995,6 +3148,8 @@ yyreduce: break; case 153: + +/* Line 1455 of yacc.c */ #line 915 "../css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(3) - (3)].selector); @@ -3011,6 +3166,8 @@ yyreduce: break; case 154: + +/* Line 1455 of yacc.c */ #line 927 "../css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(2) - (2)].selector); @@ -3025,6 +3182,8 @@ yyreduce: break; case 155: + +/* Line 1455 of yacc.c */ #line 940 "../css/CSSGrammar.y" { CSSParserString& str = (yyvsp[(1) - (1)].string); @@ -3037,6 +3196,8 @@ yyreduce: break; case 156: + +/* Line 1455 of yacc.c */ #line 948 "../css/CSSGrammar.y" { static UChar star = '*'; @@ -3046,6 +3207,8 @@ yyreduce: break; case 157: + +/* Line 1455 of yacc.c */ #line 956 "../css/CSSGrammar.y" { (yyval.selector) = (yyvsp[(1) - (1)].selector); @@ -3053,6 +3216,8 @@ yyreduce: break; case 158: + +/* Line 1455 of yacc.c */ #line 959 "../css/CSSGrammar.y" { if (!(yyvsp[(2) - (2)].selector)) @@ -3070,6 +3235,8 @@ yyreduce: break; case 159: + +/* Line 1455 of yacc.c */ #line 972 "../css/CSSGrammar.y" { (yyval.selector) = 0; @@ -3077,6 +3244,8 @@ yyreduce: break; case 160: + +/* Line 1455 of yacc.c */ #line 978 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -3089,6 +3258,8 @@ yyreduce: break; case 161: + +/* Line 1455 of yacc.c */ #line 986 "../css/CSSGrammar.y" { if ((yyvsp[(1) - (1)].string).characters[0] >= '0' && (yyvsp[(1) - (1)].string).characters[0] <= '9') { @@ -3105,6 +3276,8 @@ yyreduce: break; case 165: + +/* Line 1455 of yacc.c */ #line 1004 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -3117,6 +3290,8 @@ yyreduce: break; case 166: + +/* Line 1455 of yacc.c */ #line 1015 "../css/CSSGrammar.y" { CSSParserString& str = (yyvsp[(1) - (2)].string); @@ -3129,6 +3304,8 @@ yyreduce: break; case 167: + +/* Line 1455 of yacc.c */ #line 1026 "../css/CSSGrammar.y" { (yyval.selector) = static_cast<CSSParser*>(parser)->createFloatingSelector(); @@ -3138,6 +3315,8 @@ yyreduce: break; case 168: + +/* Line 1455 of yacc.c */ #line 1031 "../css/CSSGrammar.y" { (yyval.selector) = static_cast<CSSParser*>(parser)->createFloatingSelector(); @@ -3148,6 +3327,8 @@ yyreduce: break; case 169: + +/* Line 1455 of yacc.c */ #line 1037 "../css/CSSGrammar.y" { AtomicString namespacePrefix = (yyvsp[(3) - (5)].string); @@ -3160,6 +3341,8 @@ yyreduce: break; case 170: + +/* Line 1455 of yacc.c */ #line 1045 "../css/CSSGrammar.y" { AtomicString namespacePrefix = (yyvsp[(3) - (9)].string); @@ -3173,6 +3356,8 @@ yyreduce: break; case 171: + +/* Line 1455 of yacc.c */ #line 1057 "../css/CSSGrammar.y" { (yyval.integer) = CSSSelector::Exact; @@ -3180,6 +3365,8 @@ yyreduce: break; case 172: + +/* Line 1455 of yacc.c */ #line 1060 "../css/CSSGrammar.y" { (yyval.integer) = CSSSelector::List; @@ -3187,6 +3374,8 @@ yyreduce: break; case 173: + +/* Line 1455 of yacc.c */ #line 1063 "../css/CSSGrammar.y" { (yyval.integer) = CSSSelector::Hyphen; @@ -3194,6 +3383,8 @@ yyreduce: break; case 174: + +/* Line 1455 of yacc.c */ #line 1066 "../css/CSSGrammar.y" { (yyval.integer) = CSSSelector::Begin; @@ -3201,6 +3392,8 @@ yyreduce: break; case 175: + +/* Line 1455 of yacc.c */ #line 1069 "../css/CSSGrammar.y" { (yyval.integer) = CSSSelector::End; @@ -3208,6 +3401,8 @@ yyreduce: break; case 176: + +/* Line 1455 of yacc.c */ #line 1072 "../css/CSSGrammar.y" { (yyval.integer) = CSSSelector::Contain; @@ -3215,6 +3410,8 @@ yyreduce: break; case 179: + +/* Line 1455 of yacc.c */ #line 1083 "../css/CSSGrammar.y" { (yyval.selector) = static_cast<CSSParser*>(parser)->createFloatingSelector(); @@ -3249,6 +3446,8 @@ yyreduce: break; case 180: + +/* Line 1455 of yacc.c */ #line 1113 "../css/CSSGrammar.y" { (yyval.selector) = static_cast<CSSParser*>(parser)->createFloatingSelector(); @@ -3272,6 +3471,8 @@ yyreduce: break; case 181: + +/* Line 1455 of yacc.c */ #line 1133 "../css/CSSGrammar.y" { CSSParser *p = static_cast<CSSParser*>(parser); @@ -3293,6 +3494,8 @@ yyreduce: break; case 182: + +/* Line 1455 of yacc.c */ #line 1151 "../css/CSSGrammar.y" { CSSParser *p = static_cast<CSSParser*>(parser); @@ -3314,6 +3517,8 @@ yyreduce: break; case 183: + +/* Line 1455 of yacc.c */ #line 1169 "../css/CSSGrammar.y" { CSSParser *p = static_cast<CSSParser*>(parser); @@ -3336,6 +3541,8 @@ yyreduce: break; case 184: + +/* Line 1455 of yacc.c */ #line 1188 "../css/CSSGrammar.y" { if (!(yyvsp[(4) - (6)].selector) || (yyvsp[(4) - (6)].selector)->simpleSelector() || (yyvsp[(4) - (6)].selector)->tagHistory()) @@ -3352,6 +3559,8 @@ yyreduce: break; case 185: + +/* Line 1455 of yacc.c */ #line 1203 "../css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (1)].boolean); @@ -3359,6 +3568,8 @@ yyreduce: break; case 186: + +/* Line 1455 of yacc.c */ #line 1206 "../css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (2)].boolean); @@ -3368,6 +3579,8 @@ yyreduce: break; case 187: + +/* Line 1455 of yacc.c */ #line 1211 "../css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (1)].boolean); @@ -3375,6 +3588,8 @@ yyreduce: break; case 188: + +/* Line 1455 of yacc.c */ #line 1214 "../css/CSSGrammar.y" { (yyval.boolean) = false; @@ -3382,6 +3597,8 @@ yyreduce: break; case 189: + +/* Line 1455 of yacc.c */ #line 1217 "../css/CSSGrammar.y" { (yyval.boolean) = false; @@ -3389,6 +3606,8 @@ yyreduce: break; case 190: + +/* Line 1455 of yacc.c */ #line 1220 "../css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (2)].boolean); @@ -3396,6 +3615,8 @@ yyreduce: break; case 191: + +/* Line 1455 of yacc.c */ #line 1223 "../css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (2)].boolean); @@ -3403,6 +3624,8 @@ yyreduce: break; case 192: + +/* Line 1455 of yacc.c */ #line 1229 "../css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (3)].boolean); @@ -3410,6 +3633,8 @@ yyreduce: break; case 193: + +/* Line 1455 of yacc.c */ #line 1232 "../css/CSSGrammar.y" { (yyval.boolean) = false; @@ -3417,6 +3642,8 @@ yyreduce: break; case 194: + +/* Line 1455 of yacc.c */ #line 1235 "../css/CSSGrammar.y" { (yyval.boolean) = false; @@ -3424,6 +3651,8 @@ yyreduce: break; case 195: + +/* Line 1455 of yacc.c */ #line 1238 "../css/CSSGrammar.y" { (yyval.boolean) = false; @@ -3431,6 +3660,8 @@ yyreduce: break; case 196: + +/* Line 1455 of yacc.c */ #line 1241 "../css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (4)].boolean); @@ -3440,6 +3671,8 @@ yyreduce: break; case 197: + +/* Line 1455 of yacc.c */ #line 1246 "../css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (4)].boolean); @@ -3447,6 +3680,8 @@ yyreduce: break; case 198: + +/* Line 1455 of yacc.c */ #line 1249 "../css/CSSGrammar.y" { (yyval.boolean) = (yyvsp[(1) - (6)].boolean); @@ -3454,6 +3689,8 @@ yyreduce: break; case 199: + +/* Line 1455 of yacc.c */ #line 1255 "../css/CSSGrammar.y" { (yyval.boolean) = false; @@ -3471,6 +3708,8 @@ yyreduce: break; case 200: + +/* Line 1455 of yacc.c */ #line 1269 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -3486,6 +3725,8 @@ yyreduce: break; case 201: + +/* Line 1455 of yacc.c */ #line 1281 "../css/CSSGrammar.y" { (yyval.boolean) = false; @@ -3493,6 +3734,8 @@ yyreduce: break; case 202: + +/* Line 1455 of yacc.c */ #line 1285 "../css/CSSGrammar.y" { /* The default movable type template has letter-spacing: .none; Handle this by looking for @@ -3503,6 +3746,8 @@ yyreduce: break; case 203: + +/* Line 1455 of yacc.c */ #line 1292 "../css/CSSGrammar.y" { /* When we encounter something like p {color: red !important fail;} we should drop the declaration */ @@ -3511,6 +3756,8 @@ yyreduce: break; case 204: + +/* Line 1455 of yacc.c */ #line 1297 "../css/CSSGrammar.y" { /* Handle this case: div { text-align: center; !important } Just reduce away the stray !important. */ @@ -3519,6 +3766,8 @@ yyreduce: break; case 205: + +/* Line 1455 of yacc.c */ #line 1302 "../css/CSSGrammar.y" { /* div { font-family: } Just reduce away this property with no value. */ @@ -3527,6 +3776,8 @@ yyreduce: break; case 206: + +/* Line 1455 of yacc.c */ #line 1307 "../css/CSSGrammar.y" { /* if we come across rules with invalid values like this case: p { weight: *; }, just discard the rule */ @@ -3535,6 +3786,8 @@ yyreduce: break; case 207: + +/* Line 1455 of yacc.c */ #line 1312 "../css/CSSGrammar.y" { /* if we come across: div { color{;color:maroon} }, ignore everything within curly brackets */ @@ -3543,6 +3796,8 @@ yyreduce: break; case 208: + +/* Line 1455 of yacc.c */ #line 1319 "../css/CSSGrammar.y" { (yyval.integer) = cssPropertyID((yyvsp[(1) - (2)].string)); @@ -3550,16 +3805,22 @@ yyreduce: break; case 209: + +/* Line 1455 of yacc.c */ #line 1325 "../css/CSSGrammar.y" { (yyval.boolean) = true; ;} break; case 210: + +/* Line 1455 of yacc.c */ #line 1326 "../css/CSSGrammar.y" { (yyval.boolean) = false; ;} break; case 211: + +/* Line 1455 of yacc.c */ #line 1330 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -3569,6 +3830,8 @@ yyreduce: break; case 212: + +/* Line 1455 of yacc.c */ #line 1335 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -3587,6 +3850,8 @@ yyreduce: break; case 213: + +/* Line 1455 of yacc.c */ #line 1349 "../css/CSSGrammar.y" { (yyval.valueList) = 0; @@ -3594,6 +3859,8 @@ yyreduce: break; case 214: + +/* Line 1455 of yacc.c */ #line 1355 "../css/CSSGrammar.y" { (yyval.character) = '/'; @@ -3601,6 +3868,8 @@ yyreduce: break; case 215: + +/* Line 1455 of yacc.c */ #line 1358 "../css/CSSGrammar.y" { (yyval.character) = ','; @@ -3608,6 +3877,8 @@ yyreduce: break; case 216: + +/* Line 1455 of yacc.c */ #line 1361 "../css/CSSGrammar.y" { (yyval.character) = 0; @@ -3615,21 +3886,29 @@ yyreduce: break; case 217: + +/* Line 1455 of yacc.c */ #line 1367 "../css/CSSGrammar.y" { (yyval.value) = (yyvsp[(1) - (1)].value); ;} break; case 218: + +/* Line 1455 of yacc.c */ #line 1368 "../css/CSSGrammar.y" { (yyval.value) = (yyvsp[(2) - (2)].value); (yyval.value).fValue *= (yyvsp[(1) - (2)].integer); ;} break; case 219: + +/* Line 1455 of yacc.c */ #line 1369 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_STRING; ;} break; case 220: + +/* Line 1455 of yacc.c */ #line 1370 "../css/CSSGrammar.y" { (yyval.value).id = cssValueKeywordID((yyvsp[(1) - (2)].string)); @@ -3639,36 +3918,50 @@ yyreduce: break; case 221: + +/* Line 1455 of yacc.c */ #line 1376 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_DIMENSION; ;} break; case 222: + +/* Line 1455 of yacc.c */ #line 1377 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(2) - (3)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_DIMENSION; ;} break; case 223: + +/* Line 1455 of yacc.c */ #line 1378 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_URI; ;} break; case 224: + +/* Line 1455 of yacc.c */ #line 1379 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_UNICODE_RANGE; ;} break; case 225: + +/* Line 1455 of yacc.c */ #line 1380 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (1)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_PARSER_HEXCOLOR; ;} break; case 226: + +/* Line 1455 of yacc.c */ #line 1381 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).string = CSSParserString(); (yyval.value).unit = CSSPrimitiveValue::CSS_PARSER_HEXCOLOR; ;} break; case 227: + +/* Line 1455 of yacc.c */ #line 1383 "../css/CSSGrammar.y" { (yyval.value) = (yyvsp[(1) - (1)].value); @@ -3676,6 +3969,8 @@ yyreduce: break; case 228: + +/* Line 1455 of yacc.c */ #line 1386 "../css/CSSGrammar.y" { (yyval.value) = (yyvsp[(1) - (2)].value); @@ -3683,6 +3978,8 @@ yyreduce: break; case 229: + +/* Line 1455 of yacc.c */ #line 1389 "../css/CSSGrammar.y" { /* Handle width: %; */ (yyval.value).id = 0; (yyval.value).unit = 0; @@ -3690,106 +3987,148 @@ yyreduce: break; case 230: + +/* Line 1455 of yacc.c */ #line 1395 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).isInt = true; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_NUMBER; ;} break; case 231: + +/* Line 1455 of yacc.c */ #line 1396 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).isInt = false; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_NUMBER; ;} break; case 232: + +/* Line 1455 of yacc.c */ #line 1397 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PERCENTAGE; ;} break; case 233: + +/* Line 1455 of yacc.c */ #line 1398 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PX; ;} break; case 234: + +/* Line 1455 of yacc.c */ #line 1399 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_CM; ;} break; case 235: + +/* Line 1455 of yacc.c */ #line 1400 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_MM; ;} break; case 236: + +/* Line 1455 of yacc.c */ #line 1401 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_IN; ;} break; case 237: + +/* Line 1455 of yacc.c */ #line 1402 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PT; ;} break; case 238: + +/* Line 1455 of yacc.c */ #line 1403 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PC; ;} break; case 239: + +/* Line 1455 of yacc.c */ #line 1404 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_DEG; ;} break; case 240: + +/* Line 1455 of yacc.c */ #line 1405 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_RAD; ;} break; case 241: + +/* Line 1455 of yacc.c */ #line 1406 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_GRAD; ;} break; case 242: + +/* Line 1455 of yacc.c */ #line 1407 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_TURN; ;} break; case 243: + +/* Line 1455 of yacc.c */ #line 1408 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_MS; ;} break; case 244: + +/* Line 1455 of yacc.c */ #line 1409 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_S; ;} break; case 245: + +/* Line 1455 of yacc.c */ #line 1410 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_HZ; ;} break; case 246: + +/* Line 1455 of yacc.c */ #line 1411 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_KHZ; ;} break; case 247: + +/* Line 1455 of yacc.c */ #line 1412 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_EMS; ;} break; case 248: + +/* Line 1455 of yacc.c */ #line 1413 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSParserValue::Q_EMS; ;} break; case 249: + +/* Line 1455 of yacc.c */ #line 1414 "../css/CSSGrammar.y" { (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_EXS; ;} break; case 250: + +/* Line 1455 of yacc.c */ #line 1415 "../css/CSSGrammar.y" { (yyval.value).id = 0; @@ -3802,6 +4141,8 @@ yyreduce: break; case 251: + +/* Line 1455 of yacc.c */ #line 1426 "../css/CSSGrammar.y" { (yyval.value).id = 0; @@ -3811,6 +4152,8 @@ yyreduce: break; case 252: + +/* Line 1455 of yacc.c */ #line 1434 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -3824,6 +4167,8 @@ yyreduce: break; case 253: + +/* Line 1455 of yacc.c */ #line 1443 "../css/CSSGrammar.y" { CSSParser* p = static_cast<CSSParser*>(parser); @@ -3837,16 +4182,22 @@ yyreduce: break; case 254: + +/* Line 1455 of yacc.c */ #line 1459 "../css/CSSGrammar.y" { (yyval.string) = (yyvsp[(1) - (2)].string); ;} break; case 255: + +/* Line 1455 of yacc.c */ #line 1460 "../css/CSSGrammar.y" { (yyval.string) = (yyvsp[(1) - (2)].string); ;} break; case 256: + +/* Line 1455 of yacc.c */ #line 1467 "../css/CSSGrammar.y" { (yyval.rule) = 0; @@ -3854,6 +4205,8 @@ yyreduce: break; case 257: + +/* Line 1455 of yacc.c */ #line 1470 "../css/CSSGrammar.y" { (yyval.rule) = 0; @@ -3861,6 +4214,8 @@ yyreduce: break; case 258: + +/* Line 1455 of yacc.c */ #line 1476 "../css/CSSGrammar.y" { (yyval.rule) = 0; @@ -3868,6 +4223,8 @@ yyreduce: break; case 259: + +/* Line 1455 of yacc.c */ #line 1479 "../css/CSSGrammar.y" { (yyval.rule) = 0; @@ -3875,6 +4232,8 @@ yyreduce: break; case 262: + +/* Line 1455 of yacc.c */ #line 1490 "../css/CSSGrammar.y" { (yyval.rule) = 0; @@ -3882,6 +4241,8 @@ yyreduce: break; case 263: + +/* Line 1455 of yacc.c */ #line 1496 "../css/CSSGrammar.y" { (yyval.rule) = 0; @@ -3889,6 +4250,8 @@ yyreduce: break; case 264: + +/* Line 1455 of yacc.c */ #line 1502 "../css/CSSGrammar.y" { (yyval.rule) = 0; @@ -3896,8 +4259,9 @@ yyreduce: break; -/* Line 1267 of yacc.c. */ -#line 3901 "WebCore/tmp/../generated/CSSGrammar.tab.c" + +/* Line 1455 of yacc.c */ +#line 4265 "WebCore/tmp/../generated/CSSGrammar.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -3908,7 +4272,6 @@ yyreduce: *++yyvsp = yyval; - /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ @@ -3973,7 +4336,7 @@ yyerrlab: if (yyerrstatus == 3) { - /* If just tried and failed to reuse look-ahead token after an + /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) @@ -3990,7 +4353,7 @@ yyerrlab: } } - /* Else will try to reuse look-ahead token after shifting the error + /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; @@ -4047,9 +4410,6 @@ yyerrlab1: YY_STACK_PRINT (yyss, yyssp); } - if (yyn == YYFINAL) - YYACCEPT; - *++yyvsp = yylval; @@ -4074,7 +4434,7 @@ yyabortlab: yyresult = 1; goto yyreturn; -#ifndef yyoverflow +#if !defined(yyoverflow) || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ @@ -4085,7 +4445,7 @@ yyexhaustedlab: #endif yyreturn: - if (yychar != YYEOF && yychar != YYEMPTY) + if (yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); /* Do not reclaim the symbols of the rule which action triggered @@ -4111,6 +4471,8 @@ yyreturn: } + +/* Line 1675 of yacc.c */ #line 1529 "../css/CSSGrammar.y" diff --git a/src/3rdparty/webkit/WebCore/generated/CSSGrammar.h b/src/3rdparty/webkit/WebCore/generated/CSSGrammar.h index e718f52..ad6b20a 100644 --- a/src/3rdparty/webkit/WebCore/generated/CSSGrammar.h +++ b/src/3rdparty/webkit/WebCore/generated/CSSGrammar.h @@ -1,26 +1,25 @@ #ifndef CSSGRAMMAR_H #define CSSGRAMMAR_H -/* A Bison parser, made by GNU Bison 2.3. */ -/* Skeleton interface for Bison's Yacc-like parsers in C +/* A Bison parser, made by GNU Bison 2.4.1. */ - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -31,10 +30,11 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ + /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE @@ -107,79 +107,16 @@ VARCALL = 320 }; #endif -/* Tokens. */ -#define TOKEN_EOF 0 -#define LOWEST_PREC 258 -#define UNIMPORTANT_TOK 259 -#define WHITESPACE 260 -#define SGML_CD 261 -#define INCLUDES 262 -#define DASHMATCH 263 -#define BEGINSWITH 264 -#define ENDSWITH 265 -#define CONTAINS 266 -#define STRING 267 -#define IDENT 268 -#define NTH 269 -#define HEX 270 -#define IDSEL 271 -#define IMPORT_SYM 272 -#define PAGE_SYM 273 -#define MEDIA_SYM 274 -#define FONT_FACE_SYM 275 -#define CHARSET_SYM 276 -#define NAMESPACE_SYM 277 -#define WEBKIT_RULE_SYM 278 -#define WEBKIT_DECLS_SYM 279 -#define WEBKIT_KEYFRAME_RULE_SYM 280 -#define WEBKIT_KEYFRAMES_SYM 281 -#define WEBKIT_VALUE_SYM 282 -#define WEBKIT_MEDIAQUERY_SYM 283 -#define WEBKIT_SELECTOR_SYM 284 -#define WEBKIT_VARIABLES_SYM 285 -#define WEBKIT_DEFINE_SYM 286 -#define VARIABLES_FOR 287 -#define WEBKIT_VARIABLES_DECLS_SYM 288 -#define ATKEYWORD 289 -#define IMPORTANT_SYM 290 -#define MEDIA_ONLY 291 -#define MEDIA_NOT 292 -#define MEDIA_AND 293 -#define REMS 294 -#define QEMS 295 -#define EMS 296 -#define EXS 297 -#define PXS 298 -#define CMS 299 -#define MMS 300 -#define INS 301 -#define PTS 302 -#define PCS 303 -#define DEGS 304 -#define RADS 305 -#define GRADS 306 -#define TURNS 307 -#define MSECS 308 -#define SECS 309 -#define HERZ 310 -#define KHERZ 311 -#define DIMEN 312 -#define PERCENTAGE 313 -#define FLOATTOKEN 314 -#define INTEGER 315 -#define URI 316 -#define FUNCTION 317 -#define NOTFUNCTION 318 -#define UNICODERANGE 319 -#define VARCALL 320 - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 62 "../css/CSSGrammar.y" { + +/* Line 1676 of yacc.c */ +#line 62 "../css/CSSGrammar.y" + bool boolean; char character; int integer; @@ -201,15 +138,18 @@ typedef union YYSTYPE WebKitCSSKeyframeRule* keyframeRule; WebKitCSSKeyframesRule* keyframesRule; float val; -} -/* Line 1489 of yacc.c. */ -#line 205 "WebCore/tmp/../generated/CSSGrammar.tab.h" - YYSTYPE; + + + +/* Line 1676 of yacc.c */ +#line 144 "WebCore/tmp/../generated/CSSGrammar.tab.h" +} YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 #endif + #endif diff --git a/src/3rdparty/webkit/WebCore/generated/Grammar.cpp b/src/3rdparty/webkit/WebCore/generated/Grammar.cpp index ee402fc..95fc52d 100644 --- a/src/3rdparty/webkit/WebCore/generated/Grammar.cpp +++ b/src/3rdparty/webkit/WebCore/generated/Grammar.cpp @@ -1,24 +1,23 @@ -/* A Bison parser, made by GNU Bison 2.3. */ -/* Skeleton implementation for Bison's Yacc-like parsers in C +/* A Bison parser, made by GNU Bison 2.4.1. */ - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -29,7 +28,7 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ @@ -47,7 +46,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.3" +#define YYBISON_VERSION "2.4.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -55,159 +54,28 @@ /* Pure parsers. */ #define YYPURE 1 +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + /* Using locations. */ #define YYLSP_NEEDED 1 /* Substitute the variable and function names. */ -#define yyparse jscyyparse -#define yylex jscyylex -#define yyerror jscyyerror -#define yylval jscyylval -#define yychar jscyychar -#define yydebug jscyydebug -#define yynerrs jscyynerrs -#define yylloc jscyylloc - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - NULLTOKEN = 258, - TRUETOKEN = 259, - FALSETOKEN = 260, - BREAK = 261, - CASE = 262, - DEFAULT = 263, - FOR = 264, - NEW = 265, - VAR = 266, - CONSTTOKEN = 267, - CONTINUE = 268, - FUNCTION = 269, - RETURN = 270, - VOIDTOKEN = 271, - DELETETOKEN = 272, - IF = 273, - THISTOKEN = 274, - DO = 275, - WHILE = 276, - INTOKEN = 277, - INSTANCEOF = 278, - TYPEOF = 279, - SWITCH = 280, - WITH = 281, - RESERVED = 282, - THROW = 283, - TRY = 284, - CATCH = 285, - FINALLY = 286, - DEBUGGER = 287, - IF_WITHOUT_ELSE = 288, - ELSE = 289, - EQEQ = 290, - NE = 291, - STREQ = 292, - STRNEQ = 293, - LE = 294, - GE = 295, - OR = 296, - AND = 297, - PLUSPLUS = 298, - MINUSMINUS = 299, - LSHIFT = 300, - RSHIFT = 301, - URSHIFT = 302, - PLUSEQUAL = 303, - MINUSEQUAL = 304, - MULTEQUAL = 305, - DIVEQUAL = 306, - LSHIFTEQUAL = 307, - RSHIFTEQUAL = 308, - URSHIFTEQUAL = 309, - ANDEQUAL = 310, - MODEQUAL = 311, - XOREQUAL = 312, - OREQUAL = 313, - OPENBRACE = 314, - CLOSEBRACE = 315, - NUMBER = 316, - IDENT = 317, - STRING = 318, - AUTOPLUSPLUS = 319, - AUTOMINUSMINUS = 320 - }; -#endif -/* Tokens. */ -#define NULLTOKEN 258 -#define TRUETOKEN 259 -#define FALSETOKEN 260 -#define BREAK 261 -#define CASE 262 -#define DEFAULT 263 -#define FOR 264 -#define NEW 265 -#define VAR 266 -#define CONSTTOKEN 267 -#define CONTINUE 268 -#define FUNCTION 269 -#define RETURN 270 -#define VOIDTOKEN 271 -#define DELETETOKEN 272 -#define IF 273 -#define THISTOKEN 274 -#define DO 275 -#define WHILE 276 -#define INTOKEN 277 -#define INSTANCEOF 278 -#define TYPEOF 279 -#define SWITCH 280 -#define WITH 281 -#define RESERVED 282 -#define THROW 283 -#define TRY 284 -#define CATCH 285 -#define FINALLY 286 -#define DEBUGGER 287 -#define IF_WITHOUT_ELSE 288 -#define ELSE 289 -#define EQEQ 290 -#define NE 291 -#define STREQ 292 -#define STRNEQ 293 -#define LE 294 -#define GE 295 -#define OR 296 -#define AND 297 -#define PLUSPLUS 298 -#define MINUSMINUS 299 -#define LSHIFT 300 -#define RSHIFT 301 -#define URSHIFT 302 -#define PLUSEQUAL 303 -#define MINUSEQUAL 304 -#define MULTEQUAL 305 -#define DIVEQUAL 306 -#define LSHIFTEQUAL 307 -#define RSHIFTEQUAL 308 -#define URSHIFTEQUAL 309 -#define ANDEQUAL 310 -#define MODEQUAL 311 -#define XOREQUAL 312 -#define OREQUAL 313 -#define OPENBRACE 314 -#define CLOSEBRACE 315 -#define NUMBER 316 -#define IDENT 317 -#define STRING 318 -#define AUTOPLUSPLUS 319 -#define AUTOMINUSMINUS 320 - - - +#define yyparse jscyyparse +#define yylex jscyylex +#define yyerror jscyyerror +#define yylval jscyylval +#define yychar jscyychar +#define yydebug jscyydebug +#define yynerrs jscyynerrs +#define yylloc jscyylloc /* Copy the first part of user declarations. */ + +/* Line 189 of yacc.c */ #line 3 "../../JavaScriptCore/parser/Grammar.y" @@ -352,6 +220,9 @@ static inline void appendToVarDeclarationList(JSGlobalData* globalData, ParserAr +/* Line 189 of yacc.c */ +#line 225 "WebCore/tmp/../generated/Grammar.tab.c" + /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 @@ -370,10 +241,88 @@ static inline void appendToVarDeclarationList(JSGlobalData* globalData, ParserAr # define YYTOKEN_TABLE 0 #endif + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + NULLTOKEN = 258, + TRUETOKEN = 259, + FALSETOKEN = 260, + BREAK = 261, + CASE = 262, + DEFAULT = 263, + FOR = 264, + NEW = 265, + VAR = 266, + CONSTTOKEN = 267, + CONTINUE = 268, + FUNCTION = 269, + RETURN = 270, + VOIDTOKEN = 271, + DELETETOKEN = 272, + IF = 273, + THISTOKEN = 274, + DO = 275, + WHILE = 276, + INTOKEN = 277, + INSTANCEOF = 278, + TYPEOF = 279, + SWITCH = 280, + WITH = 281, + RESERVED = 282, + THROW = 283, + TRY = 284, + CATCH = 285, + FINALLY = 286, + DEBUGGER = 287, + IF_WITHOUT_ELSE = 288, + ELSE = 289, + EQEQ = 290, + NE = 291, + STREQ = 292, + STRNEQ = 293, + LE = 294, + GE = 295, + OR = 296, + AND = 297, + PLUSPLUS = 298, + MINUSMINUS = 299, + LSHIFT = 300, + RSHIFT = 301, + URSHIFT = 302, + PLUSEQUAL = 303, + MINUSEQUAL = 304, + MULTEQUAL = 305, + DIVEQUAL = 306, + LSHIFTEQUAL = 307, + RSHIFTEQUAL = 308, + URSHIFTEQUAL = 309, + ANDEQUAL = 310, + MODEQUAL = 311, + XOREQUAL = 312, + OREQUAL = 313, + OPENBRACE = 314, + CLOSEBRACE = 315, + NUMBER = 316, + IDENT = 317, + STRING = 318, + AUTOPLUSPLUS = 319, + AUTOMINUSMINUS = 320 + }; +#endif + + + #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 146 "../../JavaScriptCore/parser/Grammar.y" { + +/* Line 214 of yacc.c */ +#line 146 "../../JavaScriptCore/parser/Grammar.y" + int intValue; double doubleValue; const Identifier* ident; @@ -403,13 +352,15 @@ typedef union YYSTYPE ParameterListInfo parameterList; Operator op; -} -/* Line 187 of yacc.c. */ -#line 409 "WebCore/tmp/../generated/Grammar.tab.c" - YYSTYPE; + + + +/* Line 214 of yacc.c */ +#line 360 "WebCore/tmp/../generated/Grammar.tab.c" +} YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 #endif #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED @@ -427,6 +378,8 @@ typedef struct YYLTYPE /* Copy the second part of user declarations. */ + +/* Line 264 of yacc.c */ #line 178 "../../JavaScriptCore/parser/Grammar.y" @@ -442,8 +395,8 @@ static inline void setExceptionLocation(ThrowableExpressionData* node, unsigned -/* Line 216 of yacc.c. */ -#line 447 "WebCore/tmp/../generated/Grammar.tab.c" +/* Line 264 of yacc.c */ +#line 400 "WebCore/tmp/../generated/Grammar.tab.c" #ifdef short # undef short @@ -518,14 +471,14 @@ typedef short int yytype_int16; #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int -YYID (int i) +YYID (int yyi) #else static int -YYID (i) - int i; +YYID (yyi) + int yyi; #endif { - return i; + return yyi; } #endif @@ -607,9 +560,9 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss; - YYSTYPE yyvs; - YYLTYPE yyls; + yytype_int16 yyss_alloc; + YYSTYPE yyvs_alloc; + YYLTYPE yyls_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ @@ -644,12 +597,12 @@ union yyalloc elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ -# define YYSTACK_RELOCATE(Stack) \ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ @@ -2363,17 +2316,20 @@ yy_symbol_print (yyoutput, yytype, yyvaluep, yylocationp) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) #else static void -yy_stack_print (bottom, top) - yytype_int16 *bottom; - yytype_int16 *top; +yy_stack_print (yybottom, yytop) + yytype_int16 *yybottom; + yytype_int16 *yytop; #endif { YYFPRINTF (stderr, "Stack now"); - for (; bottom <= top; ++bottom) - YYFPRINTF (stderr, " %d", *bottom); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } YYFPRINTF (stderr, "\n"); } @@ -2408,11 +2364,11 @@ yy_reduce_print (yyvsp, yylsp, yyrule) /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { - fprintf (stderr, " $%d = ", yyi + 1); + YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , &(yylsp[(yyi + 1) - (yynrhs)]) ); - fprintf (stderr, "\n"); + YYFPRINTF (stderr, "\n"); } } @@ -2694,10 +2650,8 @@ yydestruct (yymsg, yytype, yyvaluep, yylocationp) break; } } - /* Prevent warnings from -Wmissing-prototypes. */ - #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); @@ -2716,10 +2670,9 @@ int yyparse (); - -/*----------. -| yyparse. | -`----------*/ +/*-------------------------. +| yyparse or yypush_parse. | +`-------------------------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ @@ -2743,88 +2696,97 @@ yyparse () #endif #endif { - /* The look-ahead symbol. */ +/* The lookahead symbol. */ int yychar; -/* The semantic value of the look-ahead symbol. */ +/* The semantic value of the lookahead symbol. */ YYSTYPE yylval; -/* Number of syntax errors so far. */ -int yynerrs; -/* Location data for the look-ahead symbol. */ +/* Location data for the lookahead symbol. */ YYLTYPE yylloc; - int yystate; - int yyn; - int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Look-ahead token as an internal (translated) token number. */ - int yytoken = 0; -#if YYERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char yymsgbuf[128]; - char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; -#endif + /* Number of syntax errors so far. */ + int yynerrs; - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. + int yystate; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ + /* The stacks and their tools: + `yyss': related to states. + `yyvs': related to semantic values. + `yyls': related to locations. - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss = yyssa; - yytype_int16 *yyssp; + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp; + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss; + yytype_int16 *yyssp; - /* The location stack. */ - YYLTYPE yylsa[YYINITDEPTH]; - YYLTYPE *yyls = yylsa; - YYLTYPE *yylsp; - /* The locations where the error started and ended. */ - YYLTYPE yyerror_range[2]; + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs; + YYSTYPE *yyvsp; -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) + /* The location stack. */ + YYLTYPE yylsa[YYINITDEPTH]; + YYLTYPE *yyls; + YYLTYPE *yylsp; - YYSIZE_T yystacksize = YYINITDEPTH; + /* The locations where the error started and ended. */ + YYLTYPE yyerror_range[2]; + YYSIZE_T yystacksize; + + int yyn; + int yyresult; + /* Lookahead token as an internal (translated) token number. */ + int yytoken; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; YYLTYPE yyloc; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) + /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; + yytoken = 0; + yyss = yyssa; + yyvs = yyvsa; + yyls = yylsa; + yystacksize = YYINITDEPTH; + YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ + yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ - yyssp = yyss; yyvsp = yyvs; yylsp = yyls; + #if YYLTYPE_IS_TRIVIAL /* Initialize the default location before parsing starts. */ yylloc.first_line = yylloc.last_line = 1; - yylloc.first_column = yylloc.last_column = 0; + yylloc.first_column = yylloc.last_column = 1; #endif goto yysetstate; @@ -2863,6 +2825,7 @@ YYLTYPE yylloc; &yyvs1, yysize * sizeof (*yyvsp), &yyls1, yysize * sizeof (*yylsp), &yystacksize); + yyls = yyls1; yyss = yyss1; yyvs = yyvs1; @@ -2884,9 +2847,9 @@ YYLTYPE yylloc; (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); - YYSTACK_RELOCATE (yyls); + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); + YYSTACK_RELOCATE (yyls_alloc, yyls); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); @@ -2907,6 +2870,9 @@ YYLTYPE yylloc; YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + if (yystate == YYFINAL) + YYACCEPT; + goto yybackup; /*-----------. @@ -2915,16 +2881,16 @@ YYLTYPE yylloc; yybackup: /* Do appropriate processing given the current state. Read a - look-ahead token if we need one and don't already have one. */ + lookahead token if we need one and don't already have one. */ - /* First try to decide what to do without reference to look-ahead token. */ + /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; - /* Not known => get a look-ahead token if don't already have one. */ + /* Not known => get a lookahead token if don't already have one. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); @@ -2956,20 +2922,16 @@ yybackup: goto yyreduce; } - if (yyn == YYFINAL) - YYACCEPT; - /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; - /* Shift the look-ahead token. */ + /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - /* Discard the shifted token unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; + /* Discard the shifted token. */ + yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; @@ -3010,31 +2972,43 @@ yyreduce: switch (yyn) { case 2: + +/* Line 1455 of yacc.c */ #line 293 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NullNode(GLOBAL_DATA), 0, 1); ;} break; case 3: + +/* Line 1455 of yacc.c */ #line 294 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BooleanNode(GLOBAL_DATA, true), 0, 1); ;} break; case 4: + +/* Line 1455 of yacc.c */ #line 295 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BooleanNode(GLOBAL_DATA, false), 0, 1); ;} break; case 5: + +/* Line 1455 of yacc.c */ #line 296 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeNumberNode(GLOBAL_DATA, (yyvsp[(1) - (1)].doubleValue)), 0, 1); ;} break; case 6: + +/* Line 1455 of yacc.c */ #line 297 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) StringNode(GLOBAL_DATA, *(yyvsp[(1) - (1)].ident)), 0, 1); ;} break; case 7: + +/* Line 1455 of yacc.c */ #line 298 "../../JavaScriptCore/parser/Grammar.y" { Lexer& l = *GLOBAL_DATA->lexer; @@ -3050,6 +3024,8 @@ yyreduce: break; case 8: + +/* Line 1455 of yacc.c */ #line 309 "../../JavaScriptCore/parser/Grammar.y" { Lexer& l = *GLOBAL_DATA->lexer; @@ -3065,26 +3041,36 @@ yyreduce: break; case 9: + +/* Line 1455 of yacc.c */ #line 323 "../../JavaScriptCore/parser/Grammar.y" { (yyval.propertyNode) = createNodeInfo<PropertyNode*>(new (GLOBAL_DATA) PropertyNode(GLOBAL_DATA, *(yyvsp[(1) - (3)].ident), (yyvsp[(3) - (3)].expressionNode).m_node, PropertyNode::Constant), (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 10: + +/* Line 1455 of yacc.c */ #line 324 "../../JavaScriptCore/parser/Grammar.y" { (yyval.propertyNode) = createNodeInfo<PropertyNode*>(new (GLOBAL_DATA) PropertyNode(GLOBAL_DATA, *(yyvsp[(1) - (3)].ident), (yyvsp[(3) - (3)].expressionNode).m_node, PropertyNode::Constant), (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 11: + +/* Line 1455 of yacc.c */ #line 325 "../../JavaScriptCore/parser/Grammar.y" { (yyval.propertyNode) = createNodeInfo<PropertyNode*>(new (GLOBAL_DATA) PropertyNode(GLOBAL_DATA, (yyvsp[(1) - (3)].doubleValue), (yyvsp[(3) - (3)].expressionNode).m_node, PropertyNode::Constant), (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 12: + +/* Line 1455 of yacc.c */ #line 326 "../../JavaScriptCore/parser/Grammar.y" { (yyval.propertyNode) = createNodeInfo<PropertyNode*>(makeGetterOrSetterPropertyNode(GLOBAL_DATA, *(yyvsp[(1) - (7)].ident), *(yyvsp[(2) - (7)].ident), 0, (yyvsp[(6) - (7)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(5) - (7)].intValue), (yyvsp[(7) - (7)].intValue), (yylsp[(5) - (7)]).first_line)), ClosureFeature, 0); setStatementLocation((yyvsp[(6) - (7)].functionBodyNode), (yylsp[(5) - (7)]), (yylsp[(7) - (7)])); if (!(yyval.propertyNode).m_node) YYABORT; ;} break; case 13: + +/* Line 1455 of yacc.c */ #line 328 "../../JavaScriptCore/parser/Grammar.y" { (yyval.propertyNode) = createNodeInfo<PropertyNode*>(makeGetterOrSetterPropertyNode(GLOBAL_DATA, *(yyvsp[(1) - (8)].ident), *(yyvsp[(2) - (8)].ident), (yyvsp[(4) - (8)].parameterList).m_node.head, (yyvsp[(7) - (8)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(6) - (8)].intValue), (yyvsp[(8) - (8)].intValue), (yylsp[(6) - (8)]).first_line)), (yyvsp[(4) - (8)].parameterList).m_features | ClosureFeature, 0); @@ -3097,6 +3083,8 @@ yyreduce: break; case 14: + +/* Line 1455 of yacc.c */ #line 339 "../../JavaScriptCore/parser/Grammar.y" { (yyval.propertyList).m_node.head = new (GLOBAL_DATA) PropertyListNode(GLOBAL_DATA, (yyvsp[(1) - (1)].propertyNode).m_node); (yyval.propertyList).m_node.tail = (yyval.propertyList).m_node.head; @@ -3105,6 +3093,8 @@ yyreduce: break; case 15: + +/* Line 1455 of yacc.c */ #line 343 "../../JavaScriptCore/parser/Grammar.y" { (yyval.propertyList).m_node.head = (yyvsp[(1) - (3)].propertyList).m_node.head; (yyval.propertyList).m_node.tail = new (GLOBAL_DATA) PropertyListNode(GLOBAL_DATA, (yyvsp[(3) - (3)].propertyNode).m_node, (yyvsp[(1) - (3)].propertyList).m_node.tail); @@ -3113,51 +3103,71 @@ yyreduce: break; case 17: + +/* Line 1455 of yacc.c */ #line 351 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ObjectLiteralNode(GLOBAL_DATA), 0, 0); ;} break; case 18: + +/* Line 1455 of yacc.c */ #line 352 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ObjectLiteralNode(GLOBAL_DATA, (yyvsp[(2) - (3)].propertyList).m_node.head), (yyvsp[(2) - (3)].propertyList).m_features, (yyvsp[(2) - (3)].propertyList).m_numConstants); ;} break; case 19: + +/* Line 1455 of yacc.c */ #line 354 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ObjectLiteralNode(GLOBAL_DATA, (yyvsp[(2) - (4)].propertyList).m_node.head), (yyvsp[(2) - (4)].propertyList).m_features, (yyvsp[(2) - (4)].propertyList).m_numConstants); ;} break; case 20: + +/* Line 1455 of yacc.c */ #line 358 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ThisNode(GLOBAL_DATA), ThisFeature, 0); ;} break; case 23: + +/* Line 1455 of yacc.c */ #line 361 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ResolveNode(GLOBAL_DATA, *(yyvsp[(1) - (1)].ident), (yylsp[(1) - (1)]).first_column), (*(yyvsp[(1) - (1)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0, 0); ;} break; case 24: + +/* Line 1455 of yacc.c */ #line 362 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = (yyvsp[(2) - (3)].expressionNode); ;} break; case 25: + +/* Line 1455 of yacc.c */ #line 366 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ArrayNode(GLOBAL_DATA, (yyvsp[(2) - (3)].intValue)), 0, (yyvsp[(2) - (3)].intValue) ? 1 : 0); ;} break; case 26: + +/* Line 1455 of yacc.c */ #line 367 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ArrayNode(GLOBAL_DATA, (yyvsp[(2) - (3)].elementList).m_node.head), (yyvsp[(2) - (3)].elementList).m_features, (yyvsp[(2) - (3)].elementList).m_numConstants); ;} break; case 27: + +/* Line 1455 of yacc.c */ #line 368 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ArrayNode(GLOBAL_DATA, (yyvsp[(4) - (5)].intValue), (yyvsp[(2) - (5)].elementList).m_node.head), (yyvsp[(2) - (5)].elementList).m_features, (yyvsp[(4) - (5)].intValue) ? (yyvsp[(2) - (5)].elementList).m_numConstants + 1 : (yyvsp[(2) - (5)].elementList).m_numConstants); ;} break; case 28: + +/* Line 1455 of yacc.c */ #line 372 "../../JavaScriptCore/parser/Grammar.y" { (yyval.elementList).m_node.head = new (GLOBAL_DATA) ElementNode(GLOBAL_DATA, (yyvsp[(1) - (2)].intValue), (yyvsp[(2) - (2)].expressionNode).m_node); (yyval.elementList).m_node.tail = (yyval.elementList).m_node.head; @@ -3166,6 +3176,8 @@ yyreduce: break; case 29: + +/* Line 1455 of yacc.c */ #line 377 "../../JavaScriptCore/parser/Grammar.y" { (yyval.elementList).m_node.head = (yyvsp[(1) - (4)].elementList).m_node.head; (yyval.elementList).m_node.tail = new (GLOBAL_DATA) ElementNode(GLOBAL_DATA, (yyvsp[(1) - (4)].elementList).m_node.tail, (yyvsp[(3) - (4)].intValue), (yyvsp[(4) - (4)].expressionNode).m_node); @@ -3174,26 +3186,36 @@ yyreduce: break; case 30: + +/* Line 1455 of yacc.c */ #line 384 "../../JavaScriptCore/parser/Grammar.y" { (yyval.intValue) = 0; ;} break; case 32: + +/* Line 1455 of yacc.c */ #line 389 "../../JavaScriptCore/parser/Grammar.y" { (yyval.intValue) = 1; ;} break; case 33: + +/* Line 1455 of yacc.c */ #line 390 "../../JavaScriptCore/parser/Grammar.y" { (yyval.intValue) = (yyvsp[(1) - (2)].intValue) + 1; ;} break; case 35: + +/* Line 1455 of yacc.c */ #line 395 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>((yyvsp[(1) - (1)].funcExprNode).m_node, (yyvsp[(1) - (1)].funcExprNode).m_features, (yyvsp[(1) - (1)].funcExprNode).m_numConstants); ;} break; case 36: + +/* Line 1455 of yacc.c */ #line 396 "../../JavaScriptCore/parser/Grammar.y" { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (4)]).first_column, (yylsp[(1) - (4)]).last_column, (yylsp[(4) - (4)]).last_column); @@ -3202,6 +3224,8 @@ yyreduce: break; case 37: + +/* Line 1455 of yacc.c */ #line 400 "../../JavaScriptCore/parser/Grammar.y" { DotAccessorNode* node = new (GLOBAL_DATA) DotAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, *(yyvsp[(3) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(1) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); @@ -3210,6 +3234,8 @@ yyreduce: break; case 38: + +/* Line 1455 of yacc.c */ #line 404 "../../JavaScriptCore/parser/Grammar.y" { NewExprNode* node = new (GLOBAL_DATA) NewExprNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].argumentsNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); @@ -3218,6 +3244,8 @@ yyreduce: break; case 40: + +/* Line 1455 of yacc.c */ #line 412 "../../JavaScriptCore/parser/Grammar.y" { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (4)]).first_column, (yylsp[(1) - (4)]).last_column, (yylsp[(4) - (4)]).last_column); @@ -3226,6 +3254,8 @@ yyreduce: break; case 41: + +/* Line 1455 of yacc.c */ #line 416 "../../JavaScriptCore/parser/Grammar.y" { DotAccessorNode* node = new (GLOBAL_DATA) DotAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, *(yyvsp[(3) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(1) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); @@ -3234,6 +3264,8 @@ yyreduce: break; case 42: + +/* Line 1455 of yacc.c */ #line 420 "../../JavaScriptCore/parser/Grammar.y" { NewExprNode* node = new (GLOBAL_DATA) NewExprNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].argumentsNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); @@ -3242,6 +3274,8 @@ yyreduce: break; case 44: + +/* Line 1455 of yacc.c */ #line 428 "../../JavaScriptCore/parser/Grammar.y" { NewExprNode* node = new (GLOBAL_DATA) NewExprNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); @@ -3250,6 +3284,8 @@ yyreduce: break; case 46: + +/* Line 1455 of yacc.c */ #line 436 "../../JavaScriptCore/parser/Grammar.y" { NewExprNode* node = new (GLOBAL_DATA) NewExprNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); @@ -3258,16 +3294,22 @@ yyreduce: break; case 47: + +/* Line 1455 of yacc.c */ #line 443 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = makeFunctionCallNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode), (yyvsp[(2) - (2)].argumentsNode), (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); ;} break; case 48: + +/* Line 1455 of yacc.c */ #line 444 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = makeFunctionCallNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode), (yyvsp[(2) - (2)].argumentsNode), (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); ;} break; case 49: + +/* Line 1455 of yacc.c */ #line 445 "../../JavaScriptCore/parser/Grammar.y" { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (4)]).first_column, (yylsp[(1) - (4)]).last_column, (yylsp[(4) - (4)]).last_column); @@ -3276,6 +3318,8 @@ yyreduce: break; case 50: + +/* Line 1455 of yacc.c */ #line 449 "../../JavaScriptCore/parser/Grammar.y" { DotAccessorNode* node = new (GLOBAL_DATA) DotAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, *(yyvsp[(3) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(1) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); @@ -3283,16 +3327,22 @@ yyreduce: break; case 51: + +/* Line 1455 of yacc.c */ #line 455 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = makeFunctionCallNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode), (yyvsp[(2) - (2)].argumentsNode), (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); ;} break; case 52: + +/* Line 1455 of yacc.c */ #line 456 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = makeFunctionCallNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode), (yyvsp[(2) - (2)].argumentsNode), (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column); ;} break; case 53: + +/* Line 1455 of yacc.c */ #line 457 "../../JavaScriptCore/parser/Grammar.y" { BracketAccessorNode* node = new (GLOBAL_DATA) BracketAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_node, (yyvsp[(3) - (4)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (4)]).first_column, (yylsp[(1) - (4)]).last_column, (yylsp[(4) - (4)]).last_column); @@ -3301,6 +3351,8 @@ yyreduce: break; case 54: + +/* Line 1455 of yacc.c */ #line 461 "../../JavaScriptCore/parser/Grammar.y" { DotAccessorNode* node = new (GLOBAL_DATA) DotAccessorNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, *(yyvsp[(3) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(1) - (3)]).last_column, (yylsp[(3) - (3)]).last_column); @@ -3309,16 +3361,22 @@ yyreduce: break; case 55: + +/* Line 1455 of yacc.c */ #line 468 "../../JavaScriptCore/parser/Grammar.y" { (yyval.argumentsNode) = createNodeInfo<ArgumentsNode*>(new (GLOBAL_DATA) ArgumentsNode(GLOBAL_DATA), 0, 0); ;} break; case 56: + +/* Line 1455 of yacc.c */ #line 469 "../../JavaScriptCore/parser/Grammar.y" { (yyval.argumentsNode) = createNodeInfo<ArgumentsNode*>(new (GLOBAL_DATA) ArgumentsNode(GLOBAL_DATA, (yyvsp[(2) - (3)].argumentList).m_node.head), (yyvsp[(2) - (3)].argumentList).m_features, (yyvsp[(2) - (3)].argumentList).m_numConstants); ;} break; case 57: + +/* Line 1455 of yacc.c */ #line 473 "../../JavaScriptCore/parser/Grammar.y" { (yyval.argumentList).m_node.head = new (GLOBAL_DATA) ArgumentListNode(GLOBAL_DATA, (yyvsp[(1) - (1)].expressionNode).m_node); (yyval.argumentList).m_node.tail = (yyval.argumentList).m_node.head; @@ -3327,6 +3385,8 @@ yyreduce: break; case 58: + +/* Line 1455 of yacc.c */ #line 477 "../../JavaScriptCore/parser/Grammar.y" { (yyval.argumentList).m_node.head = (yyvsp[(1) - (3)].argumentList).m_node.head; (yyval.argumentList).m_node.tail = new (GLOBAL_DATA) ArgumentListNode(GLOBAL_DATA, (yyvsp[(1) - (3)].argumentList).m_node.tail, (yyvsp[(3) - (3)].expressionNode).m_node); @@ -3335,181 +3395,253 @@ yyreduce: break; case 64: + +/* Line 1455 of yacc.c */ #line 495 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePostfixNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node, OpPlusPlus, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column), (yyvsp[(1) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (2)].expressionNode).m_numConstants); ;} break; case 65: + +/* Line 1455 of yacc.c */ #line 496 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePostfixNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node, OpMinusMinus, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column), (yyvsp[(1) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (2)].expressionNode).m_numConstants); ;} break; case 67: + +/* Line 1455 of yacc.c */ #line 501 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePostfixNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node, OpPlusPlus, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column), (yyvsp[(1) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (2)].expressionNode).m_numConstants); ;} break; case 68: + +/* Line 1455 of yacc.c */ #line 502 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePostfixNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node, OpMinusMinus, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(2) - (2)]).last_column), (yyvsp[(1) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (2)].expressionNode).m_numConstants); ;} break; case 69: + +/* Line 1455 of yacc.c */ #line 506 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeDeleteNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).last_column, (yylsp[(2) - (2)]).last_column), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 70: + +/* Line 1455 of yacc.c */ #line 507 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) VoidNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants + 1); ;} break; case 71: + +/* Line 1455 of yacc.c */ #line 508 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeTypeOfNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 72: + +/* Line 1455 of yacc.c */ #line 509 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePrefixNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node, OpPlusPlus, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column), (yyvsp[(2) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 73: + +/* Line 1455 of yacc.c */ #line 510 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePrefixNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node, OpPlusPlus, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column), (yyvsp[(2) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 74: + +/* Line 1455 of yacc.c */ #line 511 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePrefixNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node, OpMinusMinus, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column), (yyvsp[(2) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 75: + +/* Line 1455 of yacc.c */ #line 512 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makePrefixNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node, OpMinusMinus, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column), (yyvsp[(2) - (2)].expressionNode).m_features | AssignFeature, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 76: + +/* Line 1455 of yacc.c */ #line 513 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) UnaryPlusNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 77: + +/* Line 1455 of yacc.c */ #line 514 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeNegateNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 78: + +/* Line 1455 of yacc.c */ #line 515 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeBitwiseNotNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 79: + +/* Line 1455 of yacc.c */ #line 516 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalNotNode(GLOBAL_DATA, (yyvsp[(2) - (2)].expressionNode).m_node), (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 85: + +/* Line 1455 of yacc.c */ #line 530 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeMultNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 86: + +/* Line 1455 of yacc.c */ #line 531 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeDivNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 87: + +/* Line 1455 of yacc.c */ #line 532 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ModNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 89: + +/* Line 1455 of yacc.c */ #line 538 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeMultNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 90: + +/* Line 1455 of yacc.c */ #line 540 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeDivNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 91: + +/* Line 1455 of yacc.c */ #line 542 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ModNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 93: + +/* Line 1455 of yacc.c */ #line 547 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeAddNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 94: + +/* Line 1455 of yacc.c */ #line 548 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeSubNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 96: + +/* Line 1455 of yacc.c */ #line 554 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeAddNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 97: + +/* Line 1455 of yacc.c */ #line 556 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeSubNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 99: + +/* Line 1455 of yacc.c */ #line 561 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeLeftShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 100: + +/* Line 1455 of yacc.c */ #line 562 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeRightShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 101: + +/* Line 1455 of yacc.c */ #line 563 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) UnsignedRightShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 103: + +/* Line 1455 of yacc.c */ #line 568 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeLeftShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 104: + +/* Line 1455 of yacc.c */ #line 569 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeRightShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 105: + +/* Line 1455 of yacc.c */ #line 570 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) UnsignedRightShiftNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 107: + +/* Line 1455 of yacc.c */ #line 575 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LessNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 108: + +/* Line 1455 of yacc.c */ #line 576 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) GreaterNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 109: + +/* Line 1455 of yacc.c */ #line 577 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LessEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 110: + +/* Line 1455 of yacc.c */ #line 578 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) GreaterEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 111: + +/* Line 1455 of yacc.c */ #line 579 "../../JavaScriptCore/parser/Grammar.y" { InstanceOfNode* node = new (GLOBAL_DATA) InstanceOfNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(3) - (3)]).first_column, (yylsp[(3) - (3)]).last_column); @@ -3517,6 +3649,8 @@ yyreduce: break; case 112: + +/* Line 1455 of yacc.c */ #line 582 "../../JavaScriptCore/parser/Grammar.y" { InNode* node = new (GLOBAL_DATA) InNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(3) - (3)]).first_column, (yylsp[(3) - (3)]).last_column); @@ -3524,26 +3658,36 @@ yyreduce: break; case 114: + +/* Line 1455 of yacc.c */ #line 589 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LessNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 115: + +/* Line 1455 of yacc.c */ #line 590 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) GreaterNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 116: + +/* Line 1455 of yacc.c */ #line 591 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LessEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 117: + +/* Line 1455 of yacc.c */ #line 592 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) GreaterEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 118: + +/* Line 1455 of yacc.c */ #line 594 "../../JavaScriptCore/parser/Grammar.y" { InstanceOfNode* node = new (GLOBAL_DATA) InstanceOfNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(3) - (3)]).first_column, (yylsp[(3) - (3)]).last_column); @@ -3551,26 +3695,36 @@ yyreduce: break; case 120: + +/* Line 1455 of yacc.c */ #line 601 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LessNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 121: + +/* Line 1455 of yacc.c */ #line 602 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) GreaterNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 122: + +/* Line 1455 of yacc.c */ #line 603 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LessEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 123: + +/* Line 1455 of yacc.c */ #line 604 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) GreaterEqNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 124: + +/* Line 1455 of yacc.c */ #line 606 "../../JavaScriptCore/parser/Grammar.y" { InstanceOfNode* node = new (GLOBAL_DATA) InstanceOfNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(3) - (3)]).first_column, (yylsp[(3) - (3)]).last_column); @@ -3578,6 +3732,8 @@ yyreduce: break; case 125: + +/* Line 1455 of yacc.c */ #line 610 "../../JavaScriptCore/parser/Grammar.y" { InNode* node = new (GLOBAL_DATA) InNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(3) - (3)]).first_column, (yylsp[(3) - (3)]).last_column); @@ -3585,156 +3741,218 @@ yyreduce: break; case 127: + +/* Line 1455 of yacc.c */ #line 617 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) EqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 128: + +/* Line 1455 of yacc.c */ #line 618 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NotEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 129: + +/* Line 1455 of yacc.c */ #line 619 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) StrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 130: + +/* Line 1455 of yacc.c */ #line 620 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NotStrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 132: + +/* Line 1455 of yacc.c */ #line 626 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) EqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 133: + +/* Line 1455 of yacc.c */ #line 628 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NotEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 134: + +/* Line 1455 of yacc.c */ #line 630 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) StrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 135: + +/* Line 1455 of yacc.c */ #line 632 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NotStrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 137: + +/* Line 1455 of yacc.c */ #line 638 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) EqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 138: + +/* Line 1455 of yacc.c */ #line 639 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NotEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 139: + +/* Line 1455 of yacc.c */ #line 641 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) StrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 140: + +/* Line 1455 of yacc.c */ #line 643 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) NotStrictEqualNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 142: + +/* Line 1455 of yacc.c */ #line 648 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitAndNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 144: + +/* Line 1455 of yacc.c */ #line 654 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitAndNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 146: + +/* Line 1455 of yacc.c */ #line 659 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitAndNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 148: + +/* Line 1455 of yacc.c */ #line 664 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitXOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 150: + +/* Line 1455 of yacc.c */ #line 670 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitXOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 152: + +/* Line 1455 of yacc.c */ #line 676 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitXOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 154: + +/* Line 1455 of yacc.c */ #line 681 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 156: + +/* Line 1455 of yacc.c */ #line 687 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 158: + +/* Line 1455 of yacc.c */ #line 693 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) BitOrNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 160: + +/* Line 1455 of yacc.c */ #line 698 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalAnd), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 162: + +/* Line 1455 of yacc.c */ #line 704 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalAnd), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 164: + +/* Line 1455 of yacc.c */ #line 710 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalAnd), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 166: + +/* Line 1455 of yacc.c */ #line 715 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalOr), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 168: + +/* Line 1455 of yacc.c */ #line 721 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalOr), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 170: + +/* Line 1455 of yacc.c */ #line 726 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) LogicalOpNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node, OpLogicalOr), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 172: + +/* Line 1455 of yacc.c */ #line 732 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ConditionalNode(GLOBAL_DATA, (yyvsp[(1) - (5)].expressionNode).m_node, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].expressionNode).m_node), (yyvsp[(1) - (5)].expressionNode).m_features | (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].expressionNode).m_features, (yyvsp[(1) - (5)].expressionNode).m_numConstants + (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].expressionNode).m_numConstants); ;} break; case 174: + +/* Line 1455 of yacc.c */ #line 738 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ConditionalNode(GLOBAL_DATA, (yyvsp[(1) - (5)].expressionNode).m_node, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].expressionNode).m_node), (yyvsp[(1) - (5)].expressionNode).m_features | (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].expressionNode).m_features, (yyvsp[(1) - (5)].expressionNode).m_numConstants + (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].expressionNode).m_numConstants); ;} break; case 176: + +/* Line 1455 of yacc.c */ #line 744 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(new (GLOBAL_DATA) ConditionalNode(GLOBAL_DATA, (yyvsp[(1) - (5)].expressionNode).m_node, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].expressionNode).m_node), (yyvsp[(1) - (5)].expressionNode).m_features | (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].expressionNode).m_features, (yyvsp[(1) - (5)].expressionNode).m_numConstants + (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].expressionNode).m_numConstants); ;} break; case 178: + +/* Line 1455 of yacc.c */ #line 750 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeAssignNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(2) - (3)].op), (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(1) - (3)].expressionNode).m_features & AssignFeature, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).first_column + 1, (yylsp[(3) - (3)]).last_column), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); @@ -3742,6 +3960,8 @@ yyreduce: break; case 180: + +/* Line 1455 of yacc.c */ #line 758 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeAssignNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(2) - (3)].op), (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(1) - (3)].expressionNode).m_features & AssignFeature, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).first_column + 1, (yylsp[(3) - (3)]).last_column), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); @@ -3749,6 +3969,8 @@ yyreduce: break; case 182: + +/* Line 1455 of yacc.c */ #line 766 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(makeAssignNode(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(2) - (3)].op), (yyvsp[(3) - (3)].expressionNode).m_node, (yyvsp[(1) - (3)].expressionNode).m_features & AssignFeature, (yyvsp[(3) - (3)].expressionNode).m_features & AssignFeature, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).first_column + 1, (yylsp[(3) - (3)]).last_column), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features | AssignFeature, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); @@ -3756,99 +3978,137 @@ yyreduce: break; case 183: + +/* Line 1455 of yacc.c */ #line 772 "../../JavaScriptCore/parser/Grammar.y" { (yyval.op) = OpEqual; ;} break; case 184: + +/* Line 1455 of yacc.c */ #line 773 "../../JavaScriptCore/parser/Grammar.y" { (yyval.op) = OpPlusEq; ;} break; case 185: + +/* Line 1455 of yacc.c */ #line 774 "../../JavaScriptCore/parser/Grammar.y" { (yyval.op) = OpMinusEq; ;} break; case 186: + +/* Line 1455 of yacc.c */ #line 775 "../../JavaScriptCore/parser/Grammar.y" { (yyval.op) = OpMultEq; ;} break; case 187: + +/* Line 1455 of yacc.c */ #line 776 "../../JavaScriptCore/parser/Grammar.y" { (yyval.op) = OpDivEq; ;} break; case 188: + +/* Line 1455 of yacc.c */ #line 777 "../../JavaScriptCore/parser/Grammar.y" { (yyval.op) = OpLShift; ;} break; case 189: + +/* Line 1455 of yacc.c */ #line 778 "../../JavaScriptCore/parser/Grammar.y" { (yyval.op) = OpRShift; ;} break; case 190: + +/* Line 1455 of yacc.c */ #line 779 "../../JavaScriptCore/parser/Grammar.y" { (yyval.op) = OpURShift; ;} break; case 191: + +/* Line 1455 of yacc.c */ #line 780 "../../JavaScriptCore/parser/Grammar.y" { (yyval.op) = OpAndEq; ;} break; case 192: + +/* Line 1455 of yacc.c */ #line 781 "../../JavaScriptCore/parser/Grammar.y" { (yyval.op) = OpXOrEq; ;} break; case 193: + +/* Line 1455 of yacc.c */ #line 782 "../../JavaScriptCore/parser/Grammar.y" { (yyval.op) = OpOrEq; ;} break; case 194: + +/* Line 1455 of yacc.c */ #line 783 "../../JavaScriptCore/parser/Grammar.y" { (yyval.op) = OpModEq; ;} break; case 196: + +/* Line 1455 of yacc.c */ #line 788 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(combineCommaNodes(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 198: + +/* Line 1455 of yacc.c */ #line 793 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(combineCommaNodes(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 200: + +/* Line 1455 of yacc.c */ #line 798 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(combineCommaNodes(GLOBAL_DATA, (yyvsp[(1) - (3)].expressionNode).m_node, (yyvsp[(3) - (3)].expressionNode).m_node), (yyvsp[(1) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].expressionNode).m_numConstants); ;} break; case 218: + +/* Line 1455 of yacc.c */ #line 822 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) BlockNode(GLOBAL_DATA, 0), 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(2) - (2)])); ;} break; case 219: + +/* Line 1455 of yacc.c */ #line 824 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) BlockNode(GLOBAL_DATA, (yyvsp[(2) - (3)].sourceElements).m_node), (yyvsp[(2) - (3)].sourceElements).m_varDeclarations, (yyvsp[(2) - (3)].sourceElements).m_funcDeclarations, (yyvsp[(2) - (3)].sourceElements).m_features, (yyvsp[(2) - (3)].sourceElements).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(3) - (3)])); ;} break; case 220: + +/* Line 1455 of yacc.c */ #line 829 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(makeVarStatementNode(GLOBAL_DATA, (yyvsp[(2) - (3)].varDeclList).m_node), (yyvsp[(2) - (3)].varDeclList).m_varDeclarations, (yyvsp[(2) - (3)].varDeclList).m_funcDeclarations, (yyvsp[(2) - (3)].varDeclList).m_features, (yyvsp[(2) - (3)].varDeclList).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(3) - (3)])); ;} break; case 221: + +/* Line 1455 of yacc.c */ #line 831 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(makeVarStatementNode(GLOBAL_DATA, (yyvsp[(2) - (3)].varDeclList).m_node), (yyvsp[(2) - (3)].varDeclList).m_varDeclarations, (yyvsp[(2) - (3)].varDeclList).m_funcDeclarations, (yyvsp[(2) - (3)].varDeclList).m_features, (yyvsp[(2) - (3)].varDeclList).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(2) - (3)])); @@ -3856,6 +4116,8 @@ yyreduce: break; case 222: + +/* Line 1455 of yacc.c */ #line 837 "../../JavaScriptCore/parser/Grammar.y" { (yyval.varDeclList).m_node = 0; (yyval.varDeclList).m_varDeclarations = new (GLOBAL_DATA) ParserArenaData<DeclarationStacks::VarStack>; @@ -3867,6 +4129,8 @@ yyreduce: break; case 223: + +/* Line 1455 of yacc.c */ #line 844 "../../JavaScriptCore/parser/Grammar.y" { AssignResolveNode* node = new (GLOBAL_DATA) AssignResolveNode(GLOBAL_DATA, *(yyvsp[(1) - (2)].ident), (yyvsp[(2) - (2)].expressionNode).m_node, (yyvsp[(2) - (2)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column); @@ -3880,6 +4144,8 @@ yyreduce: break; case 224: + +/* Line 1455 of yacc.c */ #line 854 "../../JavaScriptCore/parser/Grammar.y" { (yyval.varDeclList).m_node = (yyvsp[(1) - (3)].varDeclList).m_node; (yyval.varDeclList).m_varDeclarations = (yyvsp[(1) - (3)].varDeclList).m_varDeclarations; @@ -3891,6 +4157,8 @@ yyreduce: break; case 225: + +/* Line 1455 of yacc.c */ #line 862 "../../JavaScriptCore/parser/Grammar.y" { AssignResolveNode* node = new (GLOBAL_DATA) AssignResolveNode(GLOBAL_DATA, *(yyvsp[(3) - (4)].ident), (yyvsp[(4) - (4)].expressionNode).m_node, (yyvsp[(4) - (4)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(3) - (4)]).first_column, (yylsp[(4) - (4)]).first_column + 1, (yylsp[(4) - (4)]).last_column); @@ -3904,6 +4172,8 @@ yyreduce: break; case 226: + +/* Line 1455 of yacc.c */ #line 874 "../../JavaScriptCore/parser/Grammar.y" { (yyval.varDeclList).m_node = 0; (yyval.varDeclList).m_varDeclarations = new (GLOBAL_DATA) ParserArenaData<DeclarationStacks::VarStack>; @@ -3915,6 +4185,8 @@ yyreduce: break; case 227: + +/* Line 1455 of yacc.c */ #line 881 "../../JavaScriptCore/parser/Grammar.y" { AssignResolveNode* node = new (GLOBAL_DATA) AssignResolveNode(GLOBAL_DATA, *(yyvsp[(1) - (2)].ident), (yyvsp[(2) - (2)].expressionNode).m_node, (yyvsp[(2) - (2)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(2) - (2)]).first_column + 1, (yylsp[(2) - (2)]).last_column); @@ -3928,6 +4200,8 @@ yyreduce: break; case 228: + +/* Line 1455 of yacc.c */ #line 891 "../../JavaScriptCore/parser/Grammar.y" { (yyval.varDeclList).m_node = (yyvsp[(1) - (3)].varDeclList).m_node; (yyval.varDeclList).m_varDeclarations = (yyvsp[(1) - (3)].varDeclList).m_varDeclarations; @@ -3939,6 +4213,8 @@ yyreduce: break; case 229: + +/* Line 1455 of yacc.c */ #line 899 "../../JavaScriptCore/parser/Grammar.y" { AssignResolveNode* node = new (GLOBAL_DATA) AssignResolveNode(GLOBAL_DATA, *(yyvsp[(3) - (4)].ident), (yyvsp[(4) - (4)].expressionNode).m_node, (yyvsp[(4) - (4)].expressionNode).m_features & AssignFeature); setExceptionLocation(node, (yylsp[(3) - (4)]).first_column, (yylsp[(4) - (4)]).first_column + 1, (yylsp[(4) - (4)]).last_column); @@ -3952,18 +4228,24 @@ yyreduce: break; case 230: + +/* Line 1455 of yacc.c */ #line 911 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) ConstStatementNode(GLOBAL_DATA, (yyvsp[(2) - (3)].constDeclList).m_node.head), (yyvsp[(2) - (3)].constDeclList).m_varDeclarations, (yyvsp[(2) - (3)].constDeclList).m_funcDeclarations, (yyvsp[(2) - (3)].constDeclList).m_features, (yyvsp[(2) - (3)].constDeclList).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(3) - (3)])); ;} break; case 231: + +/* Line 1455 of yacc.c */ #line 914 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) ConstStatementNode(GLOBAL_DATA, (yyvsp[(2) - (3)].constDeclList).m_node.head), (yyvsp[(2) - (3)].constDeclList).m_varDeclarations, (yyvsp[(2) - (3)].constDeclList).m_funcDeclarations, (yyvsp[(2) - (3)].constDeclList).m_features, (yyvsp[(2) - (3)].constDeclList).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(2) - (3)])); AUTO_SEMICOLON; ;} break; case 232: + +/* Line 1455 of yacc.c */ #line 919 "../../JavaScriptCore/parser/Grammar.y" { (yyval.constDeclList).m_node.head = (yyvsp[(1) - (1)].constDeclNode).m_node; (yyval.constDeclList).m_node.tail = (yyval.constDeclList).m_node.head; @@ -3976,6 +4258,8 @@ yyreduce: break; case 233: + +/* Line 1455 of yacc.c */ #line 928 "../../JavaScriptCore/parser/Grammar.y" { (yyval.constDeclList).m_node.head = (yyvsp[(1) - (3)].constDeclList).m_node.head; (yyvsp[(1) - (3)].constDeclList).m_node.tail->m_next = (yyvsp[(3) - (3)].constDeclNode).m_node; @@ -3988,49 +4272,67 @@ yyreduce: break; case 234: + +/* Line 1455 of yacc.c */ #line 939 "../../JavaScriptCore/parser/Grammar.y" { (yyval.constDeclNode) = createNodeInfo<ConstDeclNode*>(new (GLOBAL_DATA) ConstDeclNode(GLOBAL_DATA, *(yyvsp[(1) - (1)].ident), 0), (*(yyvsp[(1) - (1)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0, 0); ;} break; case 235: + +/* Line 1455 of yacc.c */ #line 940 "../../JavaScriptCore/parser/Grammar.y" { (yyval.constDeclNode) = createNodeInfo<ConstDeclNode*>(new (GLOBAL_DATA) ConstDeclNode(GLOBAL_DATA, *(yyvsp[(1) - (2)].ident), (yyvsp[(2) - (2)].expressionNode).m_node), ((*(yyvsp[(1) - (2)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0) | (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants); ;} break; case 236: + +/* Line 1455 of yacc.c */ #line 944 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = (yyvsp[(2) - (2)].expressionNode); ;} break; case 237: + +/* Line 1455 of yacc.c */ #line 948 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = (yyvsp[(2) - (2)].expressionNode); ;} break; case 238: + +/* Line 1455 of yacc.c */ #line 952 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) EmptyStatementNode(GLOBAL_DATA), 0, 0, 0, 0); ;} break; case 239: + +/* Line 1455 of yacc.c */ #line 956 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) ExprStatementNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node), 0, 0, (yyvsp[(1) - (2)].expressionNode).m_features, (yyvsp[(1) - (2)].expressionNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(2) - (2)])); ;} break; case 240: + +/* Line 1455 of yacc.c */ #line 958 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) ExprStatementNode(GLOBAL_DATA, (yyvsp[(1) - (2)].expressionNode).m_node), 0, 0, (yyvsp[(1) - (2)].expressionNode).m_features, (yyvsp[(1) - (2)].expressionNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(1) - (2)])); AUTO_SEMICOLON; ;} break; case 241: + +/* Line 1455 of yacc.c */ #line 964 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) IfNode(GLOBAL_DATA, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].statementNode).m_node), (yyvsp[(5) - (5)].statementNode).m_varDeclarations, (yyvsp[(5) - (5)].statementNode).m_funcDeclarations, (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].statementNode).m_features, (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].statementNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (5)]), (yylsp[(4) - (5)])); ;} break; case 242: + +/* Line 1455 of yacc.c */ #line 967 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) IfElseNode(GLOBAL_DATA, (yyvsp[(3) - (7)].expressionNode).m_node, (yyvsp[(5) - (7)].statementNode).m_node, (yyvsp[(7) - (7)].statementNode).m_node), mergeDeclarationLists((yyvsp[(5) - (7)].statementNode).m_varDeclarations, (yyvsp[(7) - (7)].statementNode).m_varDeclarations), @@ -4041,24 +4343,32 @@ yyreduce: break; case 243: + +/* Line 1455 of yacc.c */ #line 976 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) DoWhileNode(GLOBAL_DATA, (yyvsp[(2) - (7)].statementNode).m_node, (yyvsp[(5) - (7)].expressionNode).m_node), (yyvsp[(2) - (7)].statementNode).m_varDeclarations, (yyvsp[(2) - (7)].statementNode).m_funcDeclarations, (yyvsp[(2) - (7)].statementNode).m_features | (yyvsp[(5) - (7)].expressionNode).m_features, (yyvsp[(2) - (7)].statementNode).m_numConstants + (yyvsp[(5) - (7)].expressionNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (7)]), (yylsp[(3) - (7)])); ;} break; case 244: + +/* Line 1455 of yacc.c */ #line 978 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) DoWhileNode(GLOBAL_DATA, (yyvsp[(2) - (7)].statementNode).m_node, (yyvsp[(5) - (7)].expressionNode).m_node), (yyvsp[(2) - (7)].statementNode).m_varDeclarations, (yyvsp[(2) - (7)].statementNode).m_funcDeclarations, (yyvsp[(2) - (7)].statementNode).m_features | (yyvsp[(5) - (7)].expressionNode).m_features, (yyvsp[(2) - (7)].statementNode).m_numConstants + (yyvsp[(5) - (7)].expressionNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (7)]), (yylsp[(3) - (7)])); ;} break; case 245: + +/* Line 1455 of yacc.c */ #line 980 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) WhileNode(GLOBAL_DATA, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].statementNode).m_node), (yyvsp[(5) - (5)].statementNode).m_varDeclarations, (yyvsp[(5) - (5)].statementNode).m_funcDeclarations, (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].statementNode).m_features, (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].statementNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (5)]), (yylsp[(4) - (5)])); ;} break; case 246: + +/* Line 1455 of yacc.c */ #line 983 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) ForNode(GLOBAL_DATA, (yyvsp[(3) - (9)].expressionNode).m_node, (yyvsp[(5) - (9)].expressionNode).m_node, (yyvsp[(7) - (9)].expressionNode).m_node, (yyvsp[(9) - (9)].statementNode).m_node, false), (yyvsp[(9) - (9)].statementNode).m_varDeclarations, (yyvsp[(9) - (9)].statementNode).m_funcDeclarations, (yyvsp[(3) - (9)].expressionNode).m_features | (yyvsp[(5) - (9)].expressionNode).m_features | (yyvsp[(7) - (9)].expressionNode).m_features | (yyvsp[(9) - (9)].statementNode).m_features, @@ -4068,6 +4378,8 @@ yyreduce: break; case 247: + +/* Line 1455 of yacc.c */ #line 989 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) ForNode(GLOBAL_DATA, (yyvsp[(4) - (10)].varDeclList).m_node, (yyvsp[(6) - (10)].expressionNode).m_node, (yyvsp[(8) - (10)].expressionNode).m_node, (yyvsp[(10) - (10)].statementNode).m_node, true), mergeDeclarationLists((yyvsp[(4) - (10)].varDeclList).m_varDeclarations, (yyvsp[(10) - (10)].statementNode).m_varDeclarations), @@ -4078,6 +4390,8 @@ yyreduce: break; case 248: + +/* Line 1455 of yacc.c */ #line 996 "../../JavaScriptCore/parser/Grammar.y" { ForInNode* node = new (GLOBAL_DATA) ForInNode(GLOBAL_DATA, (yyvsp[(3) - (7)].expressionNode).m_node, (yyvsp[(5) - (7)].expressionNode).m_node, (yyvsp[(7) - (7)].statementNode).m_node); @@ -4090,6 +4404,8 @@ yyreduce: break; case 249: + +/* Line 1455 of yacc.c */ #line 1005 "../../JavaScriptCore/parser/Grammar.y" { ForInNode *forIn = new (GLOBAL_DATA) ForInNode(GLOBAL_DATA, *(yyvsp[(4) - (8)].ident), 0, (yyvsp[(6) - (8)].expressionNode).m_node, (yyvsp[(8) - (8)].statementNode).m_node, (yylsp[(5) - (8)]).first_column, (yylsp[(5) - (8)]).first_column - (yylsp[(4) - (8)]).first_column, (yylsp[(6) - (8)]).last_column - (yylsp[(5) - (8)]).first_column); setExceptionLocation(forIn, (yylsp[(4) - (8)]).first_column, (yylsp[(5) - (8)]).first_column + 1, (yylsp[(6) - (8)]).last_column); @@ -4099,6 +4415,8 @@ yyreduce: break; case 250: + +/* Line 1455 of yacc.c */ #line 1011 "../../JavaScriptCore/parser/Grammar.y" { ForInNode *forIn = new (GLOBAL_DATA) ForInNode(GLOBAL_DATA, *(yyvsp[(4) - (9)].ident), (yyvsp[(5) - (9)].expressionNode).m_node, (yyvsp[(7) - (9)].expressionNode).m_node, (yyvsp[(9) - (9)].statementNode).m_node, (yylsp[(5) - (9)]).first_column, (yylsp[(5) - (9)]).first_column - (yylsp[(4) - (9)]).first_column, (yylsp[(5) - (9)]).last_column - (yylsp[(5) - (9)]).first_column); setExceptionLocation(forIn, (yylsp[(4) - (9)]).first_column, (yylsp[(6) - (9)]).first_column + 1, (yylsp[(7) - (9)]).last_column); @@ -4110,16 +4428,22 @@ yyreduce: break; case 251: + +/* Line 1455 of yacc.c */ #line 1021 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(0, 0, 0); ;} break; case 253: + +/* Line 1455 of yacc.c */ #line 1026 "../../JavaScriptCore/parser/Grammar.y" { (yyval.expressionNode) = createNodeInfo<ExpressionNode*>(0, 0, 0); ;} break; case 255: + +/* Line 1455 of yacc.c */ #line 1031 "../../JavaScriptCore/parser/Grammar.y" { ContinueNode* node = new (GLOBAL_DATA) ContinueNode(GLOBAL_DATA); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); @@ -4128,6 +4452,8 @@ yyreduce: break; case 256: + +/* Line 1455 of yacc.c */ #line 1035 "../../JavaScriptCore/parser/Grammar.y" { ContinueNode* node = new (GLOBAL_DATA) ContinueNode(GLOBAL_DATA); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); @@ -4136,6 +4462,8 @@ yyreduce: break; case 257: + +/* Line 1455 of yacc.c */ #line 1039 "../../JavaScriptCore/parser/Grammar.y" { ContinueNode* node = new (GLOBAL_DATA) ContinueNode(GLOBAL_DATA, *(yyvsp[(2) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4144,6 +4472,8 @@ yyreduce: break; case 258: + +/* Line 1455 of yacc.c */ #line 1043 "../../JavaScriptCore/parser/Grammar.y" { ContinueNode* node = new (GLOBAL_DATA) ContinueNode(GLOBAL_DATA, *(yyvsp[(2) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4152,6 +4482,8 @@ yyreduce: break; case 259: + +/* Line 1455 of yacc.c */ #line 1050 "../../JavaScriptCore/parser/Grammar.y" { BreakNode* node = new (GLOBAL_DATA) BreakNode(GLOBAL_DATA); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); @@ -4159,6 +4491,8 @@ yyreduce: break; case 260: + +/* Line 1455 of yacc.c */ #line 1053 "../../JavaScriptCore/parser/Grammar.y" { BreakNode* node = new (GLOBAL_DATA) BreakNode(GLOBAL_DATA); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); @@ -4166,6 +4500,8 @@ yyreduce: break; case 261: + +/* Line 1455 of yacc.c */ #line 1056 "../../JavaScriptCore/parser/Grammar.y" { BreakNode* node = new (GLOBAL_DATA) BreakNode(GLOBAL_DATA, *(yyvsp[(2) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4173,6 +4509,8 @@ yyreduce: break; case 262: + +/* Line 1455 of yacc.c */ #line 1059 "../../JavaScriptCore/parser/Grammar.y" { BreakNode* node = new (GLOBAL_DATA) BreakNode(GLOBAL_DATA, *(yyvsp[(2) - (3)].ident)); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4180,6 +4518,8 @@ yyreduce: break; case 263: + +/* Line 1455 of yacc.c */ #line 1065 "../../JavaScriptCore/parser/Grammar.y" { ReturnNode* node = new (GLOBAL_DATA) ReturnNode(GLOBAL_DATA, 0); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); @@ -4187,6 +4527,8 @@ yyreduce: break; case 264: + +/* Line 1455 of yacc.c */ #line 1068 "../../JavaScriptCore/parser/Grammar.y" { ReturnNode* node = new (GLOBAL_DATA) ReturnNode(GLOBAL_DATA, 0); setExceptionLocation(node, (yylsp[(1) - (2)]).first_column, (yylsp[(1) - (2)]).last_column, (yylsp[(1) - (2)]).last_column); @@ -4194,6 +4536,8 @@ yyreduce: break; case 265: + +/* Line 1455 of yacc.c */ #line 1071 "../../JavaScriptCore/parser/Grammar.y" { ReturnNode* node = new (GLOBAL_DATA) ReturnNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4201,6 +4545,8 @@ yyreduce: break; case 266: + +/* Line 1455 of yacc.c */ #line 1074 "../../JavaScriptCore/parser/Grammar.y" { ReturnNode* node = new (GLOBAL_DATA) ReturnNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4208,6 +4554,8 @@ yyreduce: break; case 267: + +/* Line 1455 of yacc.c */ #line 1080 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) WithNode(GLOBAL_DATA, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].statementNode).m_node, (yylsp[(3) - (5)]).last_column, (yylsp[(3) - (5)]).last_column - (yylsp[(3) - (5)]).first_column), (yyvsp[(5) - (5)].statementNode).m_varDeclarations, (yyvsp[(5) - (5)].statementNode).m_funcDeclarations, (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].statementNode).m_features | WithFeature, (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].statementNode).m_numConstants); @@ -4215,6 +4563,8 @@ yyreduce: break; case 268: + +/* Line 1455 of yacc.c */ #line 1086 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) SwitchNode(GLOBAL_DATA, (yyvsp[(3) - (5)].expressionNode).m_node, (yyvsp[(5) - (5)].caseBlockNode).m_node), (yyvsp[(5) - (5)].caseBlockNode).m_varDeclarations, (yyvsp[(5) - (5)].caseBlockNode).m_funcDeclarations, (yyvsp[(3) - (5)].expressionNode).m_features | (yyvsp[(5) - (5)].caseBlockNode).m_features, (yyvsp[(3) - (5)].expressionNode).m_numConstants + (yyvsp[(5) - (5)].caseBlockNode).m_numConstants); @@ -4222,11 +4572,15 @@ yyreduce: break; case 269: + +/* Line 1455 of yacc.c */ #line 1092 "../../JavaScriptCore/parser/Grammar.y" { (yyval.caseBlockNode) = createNodeDeclarationInfo<CaseBlockNode*>(new (GLOBAL_DATA) CaseBlockNode(GLOBAL_DATA, (yyvsp[(2) - (3)].clauseList).m_node.head, 0, 0), (yyvsp[(2) - (3)].clauseList).m_varDeclarations, (yyvsp[(2) - (3)].clauseList).m_funcDeclarations, (yyvsp[(2) - (3)].clauseList).m_features, (yyvsp[(2) - (3)].clauseList).m_numConstants); ;} break; case 270: + +/* Line 1455 of yacc.c */ #line 1094 "../../JavaScriptCore/parser/Grammar.y" { (yyval.caseBlockNode) = createNodeDeclarationInfo<CaseBlockNode*>(new (GLOBAL_DATA) CaseBlockNode(GLOBAL_DATA, (yyvsp[(2) - (5)].clauseList).m_node.head, (yyvsp[(3) - (5)].caseClauseNode).m_node, (yyvsp[(4) - (5)].clauseList).m_node.head), mergeDeclarationLists(mergeDeclarationLists((yyvsp[(2) - (5)].clauseList).m_varDeclarations, (yyvsp[(3) - (5)].caseClauseNode).m_varDeclarations), (yyvsp[(4) - (5)].clauseList).m_varDeclarations), @@ -4236,11 +4590,15 @@ yyreduce: break; case 271: + +/* Line 1455 of yacc.c */ #line 1102 "../../JavaScriptCore/parser/Grammar.y" { (yyval.clauseList).m_node.head = 0; (yyval.clauseList).m_node.tail = 0; (yyval.clauseList).m_varDeclarations = 0; (yyval.clauseList).m_funcDeclarations = 0; (yyval.clauseList).m_features = 0; (yyval.clauseList).m_numConstants = 0; ;} break; case 273: + +/* Line 1455 of yacc.c */ #line 1107 "../../JavaScriptCore/parser/Grammar.y" { (yyval.clauseList).m_node.head = new (GLOBAL_DATA) ClauseListNode(GLOBAL_DATA, (yyvsp[(1) - (1)].caseClauseNode).m_node); (yyval.clauseList).m_node.tail = (yyval.clauseList).m_node.head; @@ -4251,6 +4609,8 @@ yyreduce: break; case 274: + +/* Line 1455 of yacc.c */ #line 1113 "../../JavaScriptCore/parser/Grammar.y" { (yyval.clauseList).m_node.head = (yyvsp[(1) - (2)].clauseList).m_node.head; (yyval.clauseList).m_node.tail = new (GLOBAL_DATA) ClauseListNode(GLOBAL_DATA, (yyvsp[(1) - (2)].clauseList).m_node.tail, (yyvsp[(2) - (2)].caseClauseNode).m_node); @@ -4262,26 +4622,36 @@ yyreduce: break; case 275: + +/* Line 1455 of yacc.c */ #line 1123 "../../JavaScriptCore/parser/Grammar.y" { (yyval.caseClauseNode) = createNodeDeclarationInfo<CaseClauseNode*>(new (GLOBAL_DATA) CaseClauseNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node), 0, 0, (yyvsp[(2) - (3)].expressionNode).m_features, (yyvsp[(2) - (3)].expressionNode).m_numConstants); ;} break; case 276: + +/* Line 1455 of yacc.c */ #line 1124 "../../JavaScriptCore/parser/Grammar.y" { (yyval.caseClauseNode) = createNodeDeclarationInfo<CaseClauseNode*>(new (GLOBAL_DATA) CaseClauseNode(GLOBAL_DATA, (yyvsp[(2) - (4)].expressionNode).m_node, (yyvsp[(4) - (4)].sourceElements).m_node), (yyvsp[(4) - (4)].sourceElements).m_varDeclarations, (yyvsp[(4) - (4)].sourceElements).m_funcDeclarations, (yyvsp[(2) - (4)].expressionNode).m_features | (yyvsp[(4) - (4)].sourceElements).m_features, (yyvsp[(2) - (4)].expressionNode).m_numConstants + (yyvsp[(4) - (4)].sourceElements).m_numConstants); ;} break; case 277: + +/* Line 1455 of yacc.c */ #line 1128 "../../JavaScriptCore/parser/Grammar.y" { (yyval.caseClauseNode) = createNodeDeclarationInfo<CaseClauseNode*>(new (GLOBAL_DATA) CaseClauseNode(GLOBAL_DATA, 0), 0, 0, 0, 0); ;} break; case 278: + +/* Line 1455 of yacc.c */ #line 1129 "../../JavaScriptCore/parser/Grammar.y" { (yyval.caseClauseNode) = createNodeDeclarationInfo<CaseClauseNode*>(new (GLOBAL_DATA) CaseClauseNode(GLOBAL_DATA, 0, (yyvsp[(3) - (3)].sourceElements).m_node), (yyvsp[(3) - (3)].sourceElements).m_varDeclarations, (yyvsp[(3) - (3)].sourceElements).m_funcDeclarations, (yyvsp[(3) - (3)].sourceElements).m_features, (yyvsp[(3) - (3)].sourceElements).m_numConstants); ;} break; case 279: + +/* Line 1455 of yacc.c */ #line 1133 "../../JavaScriptCore/parser/Grammar.y" { LabelNode* node = new (GLOBAL_DATA) LabelNode(GLOBAL_DATA, *(yyvsp[(1) - (3)].ident), (yyvsp[(3) - (3)].statementNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4289,6 +4659,8 @@ yyreduce: break; case 280: + +/* Line 1455 of yacc.c */ #line 1139 "../../JavaScriptCore/parser/Grammar.y" { ThrowNode* node = new (GLOBAL_DATA) ThrowNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4297,6 +4669,8 @@ yyreduce: break; case 281: + +/* Line 1455 of yacc.c */ #line 1143 "../../JavaScriptCore/parser/Grammar.y" { ThrowNode* node = new (GLOBAL_DATA) ThrowNode(GLOBAL_DATA, (yyvsp[(2) - (3)].expressionNode).m_node); setExceptionLocation(node, (yylsp[(1) - (3)]).first_column, (yylsp[(2) - (3)]).last_column, (yylsp[(2) - (3)]).last_column); @@ -4305,6 +4679,8 @@ yyreduce: break; case 282: + +/* Line 1455 of yacc.c */ #line 1150 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) TryNode(GLOBAL_DATA, (yyvsp[(2) - (4)].statementNode).m_node, GLOBAL_DATA->propertyNames->nullIdentifier, false, 0, (yyvsp[(4) - (4)].statementNode).m_node), mergeDeclarationLists((yyvsp[(2) - (4)].statementNode).m_varDeclarations, (yyvsp[(4) - (4)].statementNode).m_varDeclarations), @@ -4315,6 +4691,8 @@ yyreduce: break; case 283: + +/* Line 1455 of yacc.c */ #line 1156 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) TryNode(GLOBAL_DATA, (yyvsp[(2) - (7)].statementNode).m_node, *(yyvsp[(5) - (7)].ident), ((yyvsp[(7) - (7)].statementNode).m_features & EvalFeature) != 0, (yyvsp[(7) - (7)].statementNode).m_node, 0), mergeDeclarationLists((yyvsp[(2) - (7)].statementNode).m_varDeclarations, (yyvsp[(7) - (7)].statementNode).m_varDeclarations), @@ -4325,6 +4703,8 @@ yyreduce: break; case 284: + +/* Line 1455 of yacc.c */ #line 1163 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) TryNode(GLOBAL_DATA, (yyvsp[(2) - (9)].statementNode).m_node, *(yyvsp[(5) - (9)].ident), ((yyvsp[(7) - (9)].statementNode).m_features & EvalFeature) != 0, (yyvsp[(7) - (9)].statementNode).m_node, (yyvsp[(9) - (9)].statementNode).m_node), mergeDeclarationLists(mergeDeclarationLists((yyvsp[(2) - (9)].statementNode).m_varDeclarations, (yyvsp[(7) - (9)].statementNode).m_varDeclarations), (yyvsp[(9) - (9)].statementNode).m_varDeclarations), @@ -4335,23 +4715,31 @@ yyreduce: break; case 285: + +/* Line 1455 of yacc.c */ #line 1172 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) DebuggerStatementNode(GLOBAL_DATA), 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(2) - (2)])); ;} break; case 286: + +/* Line 1455 of yacc.c */ #line 1174 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) DebuggerStatementNode(GLOBAL_DATA), 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(1) - (2)])); AUTO_SEMICOLON; ;} break; case 287: + +/* Line 1455 of yacc.c */ #line 1179 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) FuncDeclNode(GLOBAL_DATA, *(yyvsp[(2) - (7)].ident), (yyvsp[(6) - (7)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(5) - (7)].intValue), (yyvsp[(7) - (7)].intValue), (yylsp[(5) - (7)]).first_line)), 0, new (GLOBAL_DATA) ParserArenaData<DeclarationStacks::FunctionStack>, ((*(yyvsp[(2) - (7)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0) | ClosureFeature, 0); setStatementLocation((yyvsp[(6) - (7)].functionBodyNode), (yylsp[(5) - (7)]), (yylsp[(7) - (7)])); (yyval.statementNode).m_funcDeclarations->data.append(static_cast<FuncDeclNode*>((yyval.statementNode).m_node)->body()); ;} break; case 288: + +/* Line 1455 of yacc.c */ #line 1181 "../../JavaScriptCore/parser/Grammar.y" { (yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) FuncDeclNode(GLOBAL_DATA, *(yyvsp[(2) - (8)].ident), (yyvsp[(7) - (8)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(6) - (8)].intValue), (yyvsp[(8) - (8)].intValue), (yylsp[(6) - (8)]).first_line), (yyvsp[(4) - (8)].parameterList).m_node.head), 0, new (GLOBAL_DATA) ParserArenaData<DeclarationStacks::FunctionStack>, ((*(yyvsp[(2) - (8)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0) | (yyvsp[(4) - (8)].parameterList).m_features | ClosureFeature, 0); @@ -4363,11 +4751,15 @@ yyreduce: break; case 289: + +/* Line 1455 of yacc.c */ #line 1191 "../../JavaScriptCore/parser/Grammar.y" { (yyval.funcExprNode) = createNodeInfo(new (GLOBAL_DATA) FuncExprNode(GLOBAL_DATA, GLOBAL_DATA->propertyNames->nullIdentifier, (yyvsp[(5) - (6)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(4) - (6)].intValue), (yyvsp[(6) - (6)].intValue), (yylsp[(4) - (6)]).first_line)), ClosureFeature, 0); setStatementLocation((yyvsp[(5) - (6)].functionBodyNode), (yylsp[(4) - (6)]), (yylsp[(6) - (6)])); ;} break; case 290: + +/* Line 1455 of yacc.c */ #line 1193 "../../JavaScriptCore/parser/Grammar.y" { (yyval.funcExprNode) = createNodeInfo(new (GLOBAL_DATA) FuncExprNode(GLOBAL_DATA, GLOBAL_DATA->propertyNames->nullIdentifier, (yyvsp[(6) - (7)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(5) - (7)].intValue), (yyvsp[(7) - (7)].intValue), (yylsp[(5) - (7)]).first_line), (yyvsp[(3) - (7)].parameterList).m_node.head), (yyvsp[(3) - (7)].parameterList).m_features | ClosureFeature, 0); @@ -4378,11 +4770,15 @@ yyreduce: break; case 291: + +/* Line 1455 of yacc.c */ #line 1199 "../../JavaScriptCore/parser/Grammar.y" { (yyval.funcExprNode) = createNodeInfo(new (GLOBAL_DATA) FuncExprNode(GLOBAL_DATA, *(yyvsp[(2) - (7)].ident), (yyvsp[(6) - (7)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(5) - (7)].intValue), (yyvsp[(7) - (7)].intValue), (yylsp[(5) - (7)]).first_line)), ClosureFeature, 0); setStatementLocation((yyvsp[(6) - (7)].functionBodyNode), (yylsp[(5) - (7)]), (yylsp[(7) - (7)])); ;} break; case 292: + +/* Line 1455 of yacc.c */ #line 1201 "../../JavaScriptCore/parser/Grammar.y" { (yyval.funcExprNode) = createNodeInfo(new (GLOBAL_DATA) FuncExprNode(GLOBAL_DATA, *(yyvsp[(2) - (8)].ident), (yyvsp[(7) - (8)].functionBodyNode), GLOBAL_DATA->lexer->sourceCode((yyvsp[(6) - (8)].intValue), (yyvsp[(8) - (8)].intValue), (yylsp[(6) - (8)]).first_line), (yyvsp[(4) - (8)].parameterList).m_node.head), (yyvsp[(4) - (8)].parameterList).m_features | ClosureFeature, 0); @@ -4393,6 +4789,8 @@ yyreduce: break; case 293: + +/* Line 1455 of yacc.c */ #line 1210 "../../JavaScriptCore/parser/Grammar.y" { (yyval.parameterList).m_node.head = new (GLOBAL_DATA) ParameterNode(GLOBAL_DATA, *(yyvsp[(1) - (1)].ident)); (yyval.parameterList).m_features = (*(yyvsp[(1) - (1)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0; @@ -4400,6 +4798,8 @@ yyreduce: break; case 294: + +/* Line 1455 of yacc.c */ #line 1213 "../../JavaScriptCore/parser/Grammar.y" { (yyval.parameterList).m_node.head = (yyvsp[(1) - (3)].parameterList).m_node.head; (yyval.parameterList).m_features = (yyvsp[(1) - (3)].parameterList).m_features | ((*(yyvsp[(3) - (3)].ident) == GLOBAL_DATA->propertyNames->arguments) ? ArgumentsFeature : 0); @@ -4407,27 +4807,37 @@ yyreduce: break; case 295: + +/* Line 1455 of yacc.c */ #line 1219 "../../JavaScriptCore/parser/Grammar.y" { (yyval.functionBodyNode) = FunctionBodyNode::create(GLOBAL_DATA); ;} break; case 296: + +/* Line 1455 of yacc.c */ #line 1220 "../../JavaScriptCore/parser/Grammar.y" { (yyval.functionBodyNode) = FunctionBodyNode::create(GLOBAL_DATA); ;} break; case 297: + +/* Line 1455 of yacc.c */ #line 1224 "../../JavaScriptCore/parser/Grammar.y" { GLOBAL_DATA->parser->didFinishParsing(new (GLOBAL_DATA) SourceElements(GLOBAL_DATA), 0, 0, NoFeatures, (yylsp[(0) - (0)]).last_line, 0); ;} break; case 298: + +/* Line 1455 of yacc.c */ #line 1225 "../../JavaScriptCore/parser/Grammar.y" { GLOBAL_DATA->parser->didFinishParsing((yyvsp[(1) - (1)].sourceElements).m_node, (yyvsp[(1) - (1)].sourceElements).m_varDeclarations, (yyvsp[(1) - (1)].sourceElements).m_funcDeclarations, (yyvsp[(1) - (1)].sourceElements).m_features, (yylsp[(1) - (1)]).last_line, (yyvsp[(1) - (1)].sourceElements).m_numConstants); ;} break; case 299: + +/* Line 1455 of yacc.c */ #line 1230 "../../JavaScriptCore/parser/Grammar.y" { (yyval.sourceElements).m_node = new (GLOBAL_DATA) SourceElements(GLOBAL_DATA); (yyval.sourceElements).m_node->append((yyvsp[(1) - (1)].statementNode).m_node); @@ -4439,6 +4849,8 @@ yyreduce: break; case 300: + +/* Line 1455 of yacc.c */ #line 1237 "../../JavaScriptCore/parser/Grammar.y" { (yyval.sourceElements).m_node->append((yyvsp[(2) - (2)].statementNode).m_node); (yyval.sourceElements).m_varDeclarations = mergeDeclarationLists((yyvsp[(1) - (2)].sourceElements).m_varDeclarations, (yyvsp[(2) - (2)].statementNode).m_varDeclarations); @@ -4449,188 +4861,261 @@ yyreduce: break; case 304: + +/* Line 1455 of yacc.c */ #line 1251 "../../JavaScriptCore/parser/Grammar.y" { ;} break; case 305: + +/* Line 1455 of yacc.c */ #line 1252 "../../JavaScriptCore/parser/Grammar.y" { ;} break; case 306: + +/* Line 1455 of yacc.c */ #line 1253 "../../JavaScriptCore/parser/Grammar.y" { if (!GLOBAL_DATA->lexer->skipRegExp()) YYABORT; ;} break; case 307: + +/* Line 1455 of yacc.c */ #line 1254 "../../JavaScriptCore/parser/Grammar.y" { if (!GLOBAL_DATA->lexer->skipRegExp()) YYABORT; ;} break; case 308: + +/* Line 1455 of yacc.c */ #line 1258 "../../JavaScriptCore/parser/Grammar.y" { ;} break; case 309: + +/* Line 1455 of yacc.c */ #line 1259 "../../JavaScriptCore/parser/Grammar.y" { ;} break; case 310: + +/* Line 1455 of yacc.c */ #line 1260 "../../JavaScriptCore/parser/Grammar.y" { ;} break; case 311: + +/* Line 1455 of yacc.c */ #line 1261 "../../JavaScriptCore/parser/Grammar.y" { if (*(yyvsp[(1) - (7)].ident) != "get" && *(yyvsp[(1) - (7)].ident) != "set") YYABORT; ;} break; case 312: + +/* Line 1455 of yacc.c */ #line 1262 "../../JavaScriptCore/parser/Grammar.y" { if (*(yyvsp[(1) - (8)].ident) != "get" && *(yyvsp[(1) - (8)].ident) != "set") YYABORT; ;} break; case 316: + +/* Line 1455 of yacc.c */ #line 1272 "../../JavaScriptCore/parser/Grammar.y" { ;} break; case 317: + +/* Line 1455 of yacc.c */ #line 1273 "../../JavaScriptCore/parser/Grammar.y" { ;} break; case 318: + +/* Line 1455 of yacc.c */ #line 1275 "../../JavaScriptCore/parser/Grammar.y" { ;} break; case 322: + +/* Line 1455 of yacc.c */ #line 1282 "../../JavaScriptCore/parser/Grammar.y" { ;} break; case 517: + +/* Line 1455 of yacc.c */ #line 1650 "../../JavaScriptCore/parser/Grammar.y" { ;} break; case 518: + +/* Line 1455 of yacc.c */ #line 1651 "../../JavaScriptCore/parser/Grammar.y" { ;} break; case 520: + +/* Line 1455 of yacc.c */ #line 1656 "../../JavaScriptCore/parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 521: + +/* Line 1455 of yacc.c */ #line 1660 "../../JavaScriptCore/parser/Grammar.y" { ;} break; case 522: + +/* Line 1455 of yacc.c */ #line 1661 "../../JavaScriptCore/parser/Grammar.y" { ;} break; case 525: + +/* Line 1455 of yacc.c */ #line 1667 "../../JavaScriptCore/parser/Grammar.y" { ;} break; case 526: + +/* Line 1455 of yacc.c */ #line 1668 "../../JavaScriptCore/parser/Grammar.y" { ;} break; case 530: + +/* Line 1455 of yacc.c */ #line 1675 "../../JavaScriptCore/parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 533: + +/* Line 1455 of yacc.c */ #line 1684 "../../JavaScriptCore/parser/Grammar.y" { ;} break; case 534: + +/* Line 1455 of yacc.c */ #line 1685 "../../JavaScriptCore/parser/Grammar.y" { ;} break; case 539: + +/* Line 1455 of yacc.c */ #line 1702 "../../JavaScriptCore/parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 555: + +/* Line 1455 of yacc.c */ #line 1733 "../../JavaScriptCore/parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 557: + +/* Line 1455 of yacc.c */ #line 1735 "../../JavaScriptCore/parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 559: + +/* Line 1455 of yacc.c */ #line 1740 "../../JavaScriptCore/parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 561: + +/* Line 1455 of yacc.c */ #line 1742 "../../JavaScriptCore/parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 563: + +/* Line 1455 of yacc.c */ #line 1747 "../../JavaScriptCore/parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 565: + +/* Line 1455 of yacc.c */ #line 1749 "../../JavaScriptCore/parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 568: + +/* Line 1455 of yacc.c */ #line 1761 "../../JavaScriptCore/parser/Grammar.y" { ;} break; case 569: + +/* Line 1455 of yacc.c */ #line 1762 "../../JavaScriptCore/parser/Grammar.y" { ;} break; case 578: + +/* Line 1455 of yacc.c */ #line 1786 "../../JavaScriptCore/parser/Grammar.y" { ;} break; case 580: + +/* Line 1455 of yacc.c */ #line 1791 "../../JavaScriptCore/parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 585: + +/* Line 1455 of yacc.c */ #line 1802 "../../JavaScriptCore/parser/Grammar.y" { AUTO_SEMICOLON; ;} break; case 592: + +/* Line 1455 of yacc.c */ #line 1818 "../../JavaScriptCore/parser/Grammar.y" { ;} break; -/* Line 1267 of yacc.c. */ -#line 4634 "WebCore/tmp/../generated/Grammar.tab.c" + +/* Line 1455 of yacc.c */ +#line 5119 "WebCore/tmp/../generated/Grammar.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -4706,7 +5191,7 @@ yyerrlab: if (yyerrstatus == 3) { - /* If just tried and failed to reuse look-ahead token after an + /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) @@ -4723,7 +5208,7 @@ yyerrlab: } } - /* Else will try to reuse look-ahead token after shifting the error + /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; @@ -4781,14 +5266,11 @@ yyerrlab1: YY_STACK_PRINT (yyss, yyssp); } - if (yyn == YYFINAL) - YYACCEPT; - *++yyvsp = yylval; yyerror_range[1] = yylloc; /* Using YYLLOC is tempting, but would change the location of - the look-ahead. YYLOC is available though. */ + the lookahead. YYLOC is available though. */ YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2); *++yylsp = yyloc; @@ -4813,7 +5295,7 @@ yyabortlab: yyresult = 1; goto yyreturn; -#ifndef yyoverflow +#if !defined(yyoverflow) || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ @@ -4824,7 +5306,7 @@ yyexhaustedlab: #endif yyreturn: - if (yychar != YYEOF && yychar != YYEMPTY) + if (yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc); /* Do not reclaim the symbols of the rule which action triggered @@ -4850,6 +5332,8 @@ yyreturn: } + +/* Line 1675 of yacc.c */ #line 1834 "../../JavaScriptCore/parser/Grammar.y" diff --git a/src/3rdparty/webkit/WebCore/generated/Grammar.h b/src/3rdparty/webkit/WebCore/generated/Grammar.h index 63b66ce..e555cfb 100644 --- a/src/3rdparty/webkit/WebCore/generated/Grammar.h +++ b/src/3rdparty/webkit/WebCore/generated/Grammar.h @@ -1,24 +1,23 @@ -/* A Bison parser, made by GNU Bison 2.3. */ -/* Skeleton interface for Bison's Yacc-like parsers in C +/* A Bison parser, made by GNU Bison 2.4.1. */ - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -29,10 +28,11 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ + /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE @@ -104,78 +104,16 @@ AUTOMINUSMINUS = 320 }; #endif -/* Tokens. */ -#define NULLTOKEN 258 -#define TRUETOKEN 259 -#define FALSETOKEN 260 -#define BREAK 261 -#define CASE 262 -#define DEFAULT 263 -#define FOR 264 -#define NEW 265 -#define VAR 266 -#define CONSTTOKEN 267 -#define CONTINUE 268 -#define FUNCTION 269 -#define RETURN 270 -#define VOIDTOKEN 271 -#define DELETETOKEN 272 -#define IF 273 -#define THISTOKEN 274 -#define DO 275 -#define WHILE 276 -#define INTOKEN 277 -#define INSTANCEOF 278 -#define TYPEOF 279 -#define SWITCH 280 -#define WITH 281 -#define RESERVED 282 -#define THROW 283 -#define TRY 284 -#define CATCH 285 -#define FINALLY 286 -#define DEBUGGER 287 -#define IF_WITHOUT_ELSE 288 -#define ELSE 289 -#define EQEQ 290 -#define NE 291 -#define STREQ 292 -#define STRNEQ 293 -#define LE 294 -#define GE 295 -#define OR 296 -#define AND 297 -#define PLUSPLUS 298 -#define MINUSMINUS 299 -#define LSHIFT 300 -#define RSHIFT 301 -#define URSHIFT 302 -#define PLUSEQUAL 303 -#define MINUSEQUAL 304 -#define MULTEQUAL 305 -#define DIVEQUAL 306 -#define LSHIFTEQUAL 307 -#define RSHIFTEQUAL 308 -#define URSHIFTEQUAL 309 -#define ANDEQUAL 310 -#define MODEQUAL 311 -#define XOREQUAL 312 -#define OREQUAL 313 -#define OPENBRACE 314 -#define CLOSEBRACE 315 -#define NUMBER 316 -#define IDENT 317 -#define STRING 318 -#define AUTOPLUSPLUS 319 -#define AUTOMINUSMINUS 320 - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 146 "../../JavaScriptCore/parser/Grammar.y" { + +/* Line 1676 of yacc.c */ +#line 146 "../../JavaScriptCore/parser/Grammar.y" + int intValue; double doubleValue; const Identifier* ident; @@ -205,13 +143,15 @@ typedef union YYSTYPE ParameterListInfo parameterList; Operator op; -} -/* Line 1489 of yacc.c. */ -#line 211 "WebCore/tmp/../generated/Grammar.tab.h" - YYSTYPE; + + + +/* Line 1676 of yacc.c */ +#line 151 "WebCore/tmp/../generated/Grammar.tab.h" +} YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 #endif @@ -230,3 +170,4 @@ typedef struct YYLTYPE #endif + diff --git a/src/3rdparty/webkit/WebCore/generated/JSInspectorBackend.cpp b/src/3rdparty/webkit/WebCore/generated/JSInspectorBackend.cpp index f72baaa..bea3845 100644 --- a/src/3rdparty/webkit/WebCore/generated/JSInspectorBackend.cpp +++ b/src/3rdparty/webkit/WebCore/generated/JSInspectorBackend.cpp @@ -99,7 +99,7 @@ bool JSInspectorBackendConstructor::getOwnPropertyDescriptor(ExecState* exec, co /* Hash table for prototype */ -static const HashTableValue JSInspectorBackendPrototypeTableValues[77] = +static const HashTableValue JSInspectorBackendPrototypeTableValues[78] = { { "hideDOMNodeHighlight", DontDelete|Function, (intptr_t)jsInspectorBackendPrototypeFunctionHideDOMNodeHighlight, (intptr_t)0 }, { "highlightDOMNode", DontDelete|Function, (intptr_t)jsInspectorBackendPrototypeFunctionHighlightDOMNode, (intptr_t)1 }, @@ -122,6 +122,7 @@ static const HashTableValue JSInspectorBackendPrototypeTableValues[77] = { "localizedStringsURL", DontDelete|Function, (intptr_t)jsInspectorBackendPrototypeFunctionLocalizedStringsURL, (intptr_t)0 }, { "hiddenPanels", DontDelete|Function, (intptr_t)jsInspectorBackendPrototypeFunctionHiddenPanels, (intptr_t)0 }, { "platform", DontDelete|Function, (intptr_t)jsInspectorBackendPrototypeFunctionPlatform, (intptr_t)0 }, + { "port", DontDelete|Function, (intptr_t)jsInspectorBackendPrototypeFunctionPort, (intptr_t)0 }, { "startTimelineProfiler", DontDelete|Function, (intptr_t)jsInspectorBackendPrototypeFunctionStartTimelineProfiler, (intptr_t)0 }, { "stopTimelineProfiler", DontDelete|Function, (intptr_t)jsInspectorBackendPrototypeFunctionStopTimelineProfiler, (intptr_t)0 }, { "timelineProfilerEnabled", DontDelete|Function, (intptr_t)jsInspectorBackendPrototypeFunctionTimelineProfilerEnabled, (intptr_t)0 }, @@ -493,6 +494,19 @@ JSValue JSC_HOST_CALL jsInspectorBackendPrototypeFunctionPlatform(ExecState* exe return result; } +JSValue JSC_HOST_CALL jsInspectorBackendPrototypeFunctionPort(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args) +{ + UNUSED_PARAM(args); + if (!thisValue.inherits(&JSInspectorBackend::s_info)) + return throwError(exec, TypeError); + JSInspectorBackend* castedThisObj = static_cast<JSInspectorBackend*>(asObject(thisValue)); + InspectorBackend* imp = static_cast<InspectorBackend*>(castedThisObj->impl()); + + + JSC::JSValue result = jsString(exec, imp->port()); + return result; +} + JSValue JSC_HOST_CALL jsInspectorBackendPrototypeFunctionStartTimelineProfiler(ExecState* exec, JSObject*, JSValue thisValue, const ArgList& args) { UNUSED_PARAM(args); diff --git a/src/3rdparty/webkit/WebCore/generated/JSInspectorBackend.h b/src/3rdparty/webkit/WebCore/generated/JSInspectorBackend.h index f4a1925..7c220dc 100644 --- a/src/3rdparty/webkit/WebCore/generated/JSInspectorBackend.h +++ b/src/3rdparty/webkit/WebCore/generated/JSInspectorBackend.h @@ -114,6 +114,7 @@ JSC::JSValue JSC_HOST_CALL jsInspectorBackendPrototypeFunctionInspectedWindow(JS JSC::JSValue JSC_HOST_CALL jsInspectorBackendPrototypeFunctionLocalizedStringsURL(JSC::ExecState*, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&); JSC::JSValue JSC_HOST_CALL jsInspectorBackendPrototypeFunctionHiddenPanels(JSC::ExecState*, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&); JSC::JSValue JSC_HOST_CALL jsInspectorBackendPrototypeFunctionPlatform(JSC::ExecState*, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&); +JSC::JSValue JSC_HOST_CALL jsInspectorBackendPrototypeFunctionPort(JSC::ExecState*, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&); JSC::JSValue JSC_HOST_CALL jsInspectorBackendPrototypeFunctionStartTimelineProfiler(JSC::ExecState*, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&); JSC::JSValue JSC_HOST_CALL jsInspectorBackendPrototypeFunctionStopTimelineProfiler(JSC::ExecState*, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&); JSC::JSValue JSC_HOST_CALL jsInspectorBackendPrototypeFunctionTimelineProfilerEnabled(JSC::ExecState*, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&); diff --git a/src/3rdparty/webkit/WebCore/generated/XPathGrammar.cpp b/src/3rdparty/webkit/WebCore/generated/XPathGrammar.cpp index 1120387..5f34852 100644 --- a/src/3rdparty/webkit/WebCore/generated/XPathGrammar.cpp +++ b/src/3rdparty/webkit/WebCore/generated/XPathGrammar.cpp @@ -1,24 +1,23 @@ -/* A Bison parser, made by GNU Bison 2.3. */ -/* Skeleton implementation for Bison's Yacc-like parsers in C +/* A Bison parser, made by GNU Bison 2.4.1. */ - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -29,7 +28,7 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ @@ -47,7 +46,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.3" +#define YYBISON_VERSION "2.4.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -55,69 +54,28 @@ /* Pure parsers. */ #define YYPURE 1 +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ -#define yyparse xpathyyparse -#define yylex xpathyylex -#define yyerror xpathyyerror -#define yylval xpathyylval -#define yychar xpathyychar -#define yydebug xpathyydebug -#define yynerrs xpathyynerrs - - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - MULOP = 258, - RELOP = 259, - EQOP = 260, - MINUS = 261, - PLUS = 262, - AND = 263, - OR = 264, - AXISNAME = 265, - NODETYPE = 266, - PI = 267, - FUNCTIONNAME = 268, - LITERAL = 269, - VARIABLEREFERENCE = 270, - NUMBER = 271, - DOTDOT = 272, - SLASHSLASH = 273, - NAMETEST = 274, - XPATH_ERROR = 275 - }; -#endif -/* Tokens. */ -#define MULOP 258 -#define RELOP 259 -#define EQOP 260 -#define MINUS 261 -#define PLUS 262 -#define AND 263 -#define OR 264 -#define AXISNAME 265 -#define NODETYPE 266 -#define PI 267 -#define FUNCTIONNAME 268 -#define LITERAL 269 -#define VARIABLEREFERENCE 270 -#define NUMBER 271 -#define DOTDOT 272 -#define SLASHSLASH 273 -#define NAMETEST 274 -#define XPATH_ERROR 275 - - +#define yyparse xpathyyparse +#define yylex xpathyylex +#define yyerror xpathyyerror +#define yylval xpathyylval +#define yychar xpathyychar +#define yydebug xpathyydebug +#define yynerrs xpathyynerrs /* Copy the first part of user declarations. */ + +/* Line 189 of yacc.c */ #line 28 "../xml/XPathGrammar.y" @@ -148,6 +106,9 @@ using namespace XPath; +/* Line 189 of yacc.c */ +#line 111 "WebCore/tmp/../generated/XPathGrammar.tab.c" + /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 @@ -166,10 +127,43 @@ using namespace XPath; # define YYTOKEN_TABLE 0 #endif + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + MULOP = 258, + RELOP = 259, + EQOP = 260, + MINUS = 261, + PLUS = 262, + AND = 263, + OR = 264, + AXISNAME = 265, + NODETYPE = 266, + PI = 267, + FUNCTIONNAME = 268, + LITERAL = 269, + VARIABLEREFERENCE = 270, + NUMBER = 271, + DOTDOT = 272, + SLASHSLASH = 273, + NAMETEST = 274, + XPATH_ERROR = 275 + }; +#endif + + + #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 60 "../xml/XPathGrammar.y" { + +/* Line 214 of yacc.c */ +#line 60 "../xml/XPathGrammar.y" + Step::Axis axis; Step::NodeTest* nodeTest; NumericOp::Opcode numop; @@ -180,18 +174,21 @@ typedef union YYSTYPE Vector<Expression*>* argList; Step* step; LocationPath* locationPath; -} -/* Line 187 of yacc.c. */ -#line 186 "WebCore/tmp/../generated/XPathGrammar.tab.c" - YYSTYPE; + + + +/* Line 214 of yacc.c */ +#line 182 "WebCore/tmp/../generated/XPathGrammar.tab.c" +} YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 #endif - /* Copy the second part of user declarations. */ + +/* Line 264 of yacc.c */ #line 73 "../xml/XPathGrammar.y" @@ -200,8 +197,8 @@ static void xpathyyerror(const char*) { } -/* Line 216 of yacc.c. */ -#line 205 "WebCore/tmp/../generated/XPathGrammar.tab.c" +/* Line 264 of yacc.c */ +#line 202 "WebCore/tmp/../generated/XPathGrammar.tab.c" #ifdef short # undef short @@ -276,14 +273,14 @@ typedef short int yytype_int16; #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int -YYID (int i) +YYID (int yyi) #else static int -YYID (i) - int i; +YYID (yyi) + int yyi; #endif { - return i; + return yyi; } #endif @@ -364,9 +361,9 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss; - YYSTYPE yyvs; - }; + yytype_int16 yyss_alloc; + YYSTYPE yyvs_alloc; +}; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) @@ -400,12 +397,12 @@ union yyalloc elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ -# define YYSTACK_RELOCATE(Stack) \ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ @@ -858,17 +855,20 @@ yy_symbol_print (yyoutput, yytype, yyvaluep) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) +yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) #else static void -yy_stack_print (bottom, top) - yytype_int16 *bottom; - yytype_int16 *top; +yy_stack_print (yybottom, yytop) + yytype_int16 *yybottom; + yytype_int16 *yytop; #endif { YYFPRINTF (stderr, "Stack now"); - for (; bottom <= top; ++bottom) - YYFPRINTF (stderr, " %d", *bottom); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } YYFPRINTF (stderr, "\n"); } @@ -902,11 +902,11 @@ yy_reduce_print (yyvsp, yyrule) /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { - fprintf (stderr, " $%d = ", yyi + 1); + YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) ); - fprintf (stderr, "\n"); + YYFPRINTF (stderr, "\n"); } } @@ -1186,10 +1186,8 @@ yydestruct (yymsg, yytype, yyvaluep) break; } } - /* Prevent warnings from -Wmissing-prototypes. */ - #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); @@ -1208,10 +1206,9 @@ int yyparse (); - -/*----------. -| yyparse. | -`----------*/ +/*-------------------------. +| yyparse or yypush_parse. | +`-------------------------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ @@ -1235,74 +1232,75 @@ yyparse () #endif #endif { - /* The look-ahead symbol. */ +/* The lookahead symbol. */ int yychar; -/* The semantic value of the look-ahead symbol. */ +/* The semantic value of the lookahead symbol. */ YYSTYPE yylval; -/* Number of syntax errors so far. */ -int yynerrs; - - int yystate; - int yyn; - int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Look-ahead token as an internal (translated) token number. */ - int yytoken = 0; -#if YYERROR_VERBOSE - /* Buffer for error messages, and its allocated size. */ - char yymsgbuf[128]; - char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; -#endif - - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ + /* Number of syntax errors so far. */ + int yynerrs; - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss = yyssa; - yytype_int16 *yyssp; + int yystate; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp; + /* The stacks and their tools: + `yyss': related to states. + `yyvs': related to semantic values. + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss; + yytype_int16 *yyssp; -#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs; + YYSTYPE *yyvsp; - YYSIZE_T yystacksize = YYINITDEPTH; + YYSIZE_T yystacksize; + int yyn; + int yyresult; + /* Lookahead token as an internal (translated) token number. */ + int yytoken; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; + yytoken = 0; + yyss = yyssa; + yyvs = yyvsa; + yystacksize = YYINITDEPTH; + YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ + yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ - yyssp = yyss; yyvsp = yyvs; @@ -1332,7 +1330,6 @@ int yynerrs; YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; - /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might @@ -1340,7 +1337,6 @@ int yynerrs; yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), - &yystacksize); yyss = yyss1; @@ -1363,9 +1359,8 @@ int yynerrs; (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); - + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); @@ -1376,7 +1371,6 @@ int yynerrs; yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); @@ -1386,6 +1380,9 @@ int yynerrs; YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + if (yystate == YYFINAL) + YYACCEPT; + goto yybackup; /*-----------. @@ -1394,16 +1391,16 @@ int yynerrs; yybackup: /* Do appropriate processing given the current state. Read a - look-ahead token if we need one and don't already have one. */ + lookahead token if we need one and don't already have one. */ - /* First try to decide what to do without reference to look-ahead token. */ + /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; - /* Not known => get a look-ahead token if don't already have one. */ + /* Not known => get a lookahead token if don't already have one. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); @@ -1435,20 +1432,16 @@ yybackup: goto yyreduce; } - if (yyn == YYFINAL) - YYACCEPT; - /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; - /* Shift the look-ahead token. */ + /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - /* Discard the shifted token unless it is eof. */ - if (yychar != YYEOF) - yychar = YYEMPTY; + /* Discard the shifted token. */ + yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; @@ -1488,6 +1481,8 @@ yyreduce: switch (yyn) { case 2: + +/* Line 1455 of yacc.c */ #line 122 "../xml/XPathGrammar.y" { PARSER->m_topExpr = (yyvsp[(1) - (1)].expr); @@ -1495,6 +1490,8 @@ yyreduce: break; case 3: + +/* Line 1455 of yacc.c */ #line 129 "../xml/XPathGrammar.y" { (yyval.locationPath)->setAbsolute(false); @@ -1502,6 +1499,8 @@ yyreduce: break; case 4: + +/* Line 1455 of yacc.c */ #line 134 "../xml/XPathGrammar.y" { (yyval.locationPath)->setAbsolute(true); @@ -1509,6 +1508,8 @@ yyreduce: break; case 5: + +/* Line 1455 of yacc.c */ #line 141 "../xml/XPathGrammar.y" { (yyval.locationPath) = new LocationPath; @@ -1517,6 +1518,8 @@ yyreduce: break; case 6: + +/* Line 1455 of yacc.c */ #line 147 "../xml/XPathGrammar.y" { (yyval.locationPath) = (yyvsp[(2) - (2)].locationPath); @@ -1524,6 +1527,8 @@ yyreduce: break; case 7: + +/* Line 1455 of yacc.c */ #line 152 "../xml/XPathGrammar.y" { (yyval.locationPath) = (yyvsp[(2) - (2)].locationPath); @@ -1533,6 +1538,8 @@ yyreduce: break; case 8: + +/* Line 1455 of yacc.c */ #line 161 "../xml/XPathGrammar.y" { (yyval.locationPath) = new LocationPath; @@ -1543,6 +1550,8 @@ yyreduce: break; case 9: + +/* Line 1455 of yacc.c */ #line 169 "../xml/XPathGrammar.y" { (yyval.locationPath)->appendStep((yyvsp[(3) - (3)].step)); @@ -1551,6 +1560,8 @@ yyreduce: break; case 10: + +/* Line 1455 of yacc.c */ #line 175 "../xml/XPathGrammar.y" { (yyval.locationPath)->appendStep((yyvsp[(2) - (3)].step)); @@ -1561,6 +1572,8 @@ yyreduce: break; case 11: + +/* Line 1455 of yacc.c */ #line 185 "../xml/XPathGrammar.y" { if ((yyvsp[(2) - (2)].predList)) { @@ -1574,6 +1587,8 @@ yyreduce: break; case 12: + +/* Line 1455 of yacc.c */ #line 196 "../xml/XPathGrammar.y" { String localName; @@ -1594,6 +1609,8 @@ yyreduce: break; case 13: + +/* Line 1455 of yacc.c */ #line 214 "../xml/XPathGrammar.y" { if ((yyvsp[(3) - (3)].predList)) { @@ -1607,6 +1624,8 @@ yyreduce: break; case 14: + +/* Line 1455 of yacc.c */ #line 225 "../xml/XPathGrammar.y" { String localName; @@ -1627,6 +1646,8 @@ yyreduce: break; case 17: + +/* Line 1455 of yacc.c */ #line 249 "../xml/XPathGrammar.y" { (yyval.axis) = Step::AttributeAxis; @@ -1634,6 +1655,8 @@ yyreduce: break; case 18: + +/* Line 1455 of yacc.c */ #line 256 "../xml/XPathGrammar.y" { if (*(yyvsp[(1) - (3)].str) == "node") @@ -1649,6 +1672,8 @@ yyreduce: break; case 19: + +/* Line 1455 of yacc.c */ #line 269 "../xml/XPathGrammar.y" { (yyval.nodeTest) = new Step::NodeTest(Step::NodeTest::ProcessingInstructionNodeTest); @@ -1658,6 +1683,8 @@ yyreduce: break; case 20: + +/* Line 1455 of yacc.c */ #line 276 "../xml/XPathGrammar.y" { (yyval.nodeTest) = new Step::NodeTest(Step::NodeTest::ProcessingInstructionNodeTest, (yyvsp[(3) - (4)].str)->stripWhiteSpace()); @@ -1668,6 +1695,8 @@ yyreduce: break; case 21: + +/* Line 1455 of yacc.c */ #line 286 "../xml/XPathGrammar.y" { (yyval.predList) = 0; @@ -1675,6 +1704,8 @@ yyreduce: break; case 23: + +/* Line 1455 of yacc.c */ #line 295 "../xml/XPathGrammar.y" { (yyval.predList) = new Vector<Predicate*>; @@ -1685,6 +1716,8 @@ yyreduce: break; case 24: + +/* Line 1455 of yacc.c */ #line 303 "../xml/XPathGrammar.y" { (yyval.predList)->append(new Predicate((yyvsp[(2) - (2)].expr))); @@ -1693,6 +1726,8 @@ yyreduce: break; case 25: + +/* Line 1455 of yacc.c */ #line 311 "../xml/XPathGrammar.y" { (yyval.expr) = (yyvsp[(2) - (3)].expr); @@ -1700,6 +1735,8 @@ yyreduce: break; case 26: + +/* Line 1455 of yacc.c */ #line 318 "../xml/XPathGrammar.y" { (yyval.step) = new Step(Step::DescendantOrSelfAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest)); @@ -1708,6 +1745,8 @@ yyreduce: break; case 27: + +/* Line 1455 of yacc.c */ #line 326 "../xml/XPathGrammar.y" { (yyval.step) = new Step(Step::SelfAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest)); @@ -1716,6 +1755,8 @@ yyreduce: break; case 28: + +/* Line 1455 of yacc.c */ #line 332 "../xml/XPathGrammar.y" { (yyval.step) = new Step(Step::ParentAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest)); @@ -1724,6 +1765,8 @@ yyreduce: break; case 29: + +/* Line 1455 of yacc.c */ #line 340 "../xml/XPathGrammar.y" { (yyval.expr) = new VariableReference(*(yyvsp[(1) - (1)].str)); @@ -1733,6 +1776,8 @@ yyreduce: break; case 30: + +/* Line 1455 of yacc.c */ #line 347 "../xml/XPathGrammar.y" { (yyval.expr) = (yyvsp[(2) - (3)].expr); @@ -1740,6 +1785,8 @@ yyreduce: break; case 31: + +/* Line 1455 of yacc.c */ #line 352 "../xml/XPathGrammar.y" { (yyval.expr) = new StringExpression(*(yyvsp[(1) - (1)].str)); @@ -1749,6 +1796,8 @@ yyreduce: break; case 32: + +/* Line 1455 of yacc.c */ #line 359 "../xml/XPathGrammar.y" { (yyval.expr) = new Number((yyvsp[(1) - (1)].str)->toDouble()); @@ -1758,6 +1807,8 @@ yyreduce: break; case 34: + +/* Line 1455 of yacc.c */ #line 370 "../xml/XPathGrammar.y" { (yyval.expr) = createFunction(*(yyvsp[(1) - (3)].str)); @@ -1769,6 +1820,8 @@ yyreduce: break; case 35: + +/* Line 1455 of yacc.c */ #line 379 "../xml/XPathGrammar.y" { (yyval.expr) = createFunction(*(yyvsp[(1) - (4)].str), *(yyvsp[(3) - (4)].argList)); @@ -1781,6 +1834,8 @@ yyreduce: break; case 36: + +/* Line 1455 of yacc.c */ #line 391 "../xml/XPathGrammar.y" { (yyval.argList) = new Vector<Expression*>; @@ -1791,6 +1846,8 @@ yyreduce: break; case 37: + +/* Line 1455 of yacc.c */ #line 399 "../xml/XPathGrammar.y" { (yyval.argList)->append((yyvsp[(3) - (3)].expr)); @@ -1799,6 +1856,8 @@ yyreduce: break; case 40: + +/* Line 1455 of yacc.c */ #line 413 "../xml/XPathGrammar.y" { (yyval.expr) = new Union; @@ -1811,6 +1870,8 @@ yyreduce: break; case 41: + +/* Line 1455 of yacc.c */ #line 425 "../xml/XPathGrammar.y" { (yyval.expr) = (yyvsp[(1) - (1)].locationPath); @@ -1818,6 +1879,8 @@ yyreduce: break; case 43: + +/* Line 1455 of yacc.c */ #line 432 "../xml/XPathGrammar.y" { (yyvsp[(3) - (3)].locationPath)->setAbsolute(true); @@ -1829,6 +1892,8 @@ yyreduce: break; case 44: + +/* Line 1455 of yacc.c */ #line 441 "../xml/XPathGrammar.y" { (yyvsp[(3) - (3)].locationPath)->insertFirstStep((yyvsp[(2) - (3)].step)); @@ -1842,6 +1907,8 @@ yyreduce: break; case 46: + +/* Line 1455 of yacc.c */ #line 456 "../xml/XPathGrammar.y" { (yyval.expr) = new Filter((yyvsp[(1) - (2)].expr), *(yyvsp[(2) - (2)].predList)); @@ -1852,6 +1919,8 @@ yyreduce: break; case 48: + +/* Line 1455 of yacc.c */ #line 468 "../xml/XPathGrammar.y" { (yyval.expr) = new LogicalOp(LogicalOp::OP_Or, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); @@ -1862,6 +1931,8 @@ yyreduce: break; case 50: + +/* Line 1455 of yacc.c */ #line 480 "../xml/XPathGrammar.y" { (yyval.expr) = new LogicalOp(LogicalOp::OP_And, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); @@ -1872,6 +1943,8 @@ yyreduce: break; case 52: + +/* Line 1455 of yacc.c */ #line 492 "../xml/XPathGrammar.y" { (yyval.expr) = new EqTestOp((yyvsp[(2) - (3)].eqop), (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); @@ -1882,6 +1955,8 @@ yyreduce: break; case 54: + +/* Line 1455 of yacc.c */ #line 504 "../xml/XPathGrammar.y" { (yyval.expr) = new EqTestOp((yyvsp[(2) - (3)].eqop), (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); @@ -1892,6 +1967,8 @@ yyreduce: break; case 56: + +/* Line 1455 of yacc.c */ #line 516 "../xml/XPathGrammar.y" { (yyval.expr) = new NumericOp(NumericOp::OP_Add, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); @@ -1902,6 +1979,8 @@ yyreduce: break; case 57: + +/* Line 1455 of yacc.c */ #line 524 "../xml/XPathGrammar.y" { (yyval.expr) = new NumericOp(NumericOp::OP_Sub, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); @@ -1912,6 +1991,8 @@ yyreduce: break; case 59: + +/* Line 1455 of yacc.c */ #line 536 "../xml/XPathGrammar.y" { (yyval.expr) = new NumericOp((yyvsp[(2) - (3)].numop), (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); @@ -1922,6 +2003,8 @@ yyreduce: break; case 61: + +/* Line 1455 of yacc.c */ #line 548 "../xml/XPathGrammar.y" { (yyval.expr) = new Negative; @@ -1932,8 +2015,9 @@ yyreduce: break; -/* Line 1267 of yacc.c. */ -#line 1937 "WebCore/tmp/../generated/XPathGrammar.tab.c" + +/* Line 1455 of yacc.c */ +#line 2021 "WebCore/tmp/../generated/XPathGrammar.tab.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -1944,7 +2028,6 @@ yyreduce: *++yyvsp = yyval; - /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ @@ -2009,7 +2092,7 @@ yyerrlab: if (yyerrstatus == 3) { - /* If just tried and failed to reuse look-ahead token after an + /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) @@ -2026,7 +2109,7 @@ yyerrlab: } } - /* Else will try to reuse look-ahead token after shifting the error + /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; @@ -2083,9 +2166,6 @@ yyerrlab1: YY_STACK_PRINT (yyss, yyssp); } - if (yyn == YYFINAL) - YYACCEPT; - *++yyvsp = yylval; @@ -2110,7 +2190,7 @@ yyabortlab: yyresult = 1; goto yyreturn; -#ifndef yyoverflow +#if !defined(yyoverflow) || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ @@ -2121,7 +2201,7 @@ yyexhaustedlab: #endif yyreturn: - if (yychar != YYEOF && yychar != YYEMPTY) + if (yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); /* Do not reclaim the symbols of the rule which action triggered @@ -2147,6 +2227,8 @@ yyreturn: } + +/* Line 1675 of yacc.c */ #line 556 "../xml/XPathGrammar.y" diff --git a/src/3rdparty/webkit/WebCore/generated/XPathGrammar.h b/src/3rdparty/webkit/WebCore/generated/XPathGrammar.h index 0276481..cdf2b32 100644 --- a/src/3rdparty/webkit/WebCore/generated/XPathGrammar.h +++ b/src/3rdparty/webkit/WebCore/generated/XPathGrammar.h @@ -1,24 +1,23 @@ -/* A Bison parser, made by GNU Bison 2.3. */ -/* Skeleton interface for Bison's Yacc-like parsers in C +/* A Bison parser, made by GNU Bison 2.4.1. */ - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work @@ -29,10 +28,11 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ + /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE @@ -59,33 +59,16 @@ XPATH_ERROR = 275 }; #endif -/* Tokens. */ -#define MULOP 258 -#define RELOP 259 -#define EQOP 260 -#define MINUS 261 -#define PLUS 262 -#define AND 263 -#define OR 264 -#define AXISNAME 265 -#define NODETYPE 266 -#define PI 267 -#define FUNCTIONNAME 268 -#define LITERAL 269 -#define VARIABLEREFERENCE 270 -#define NUMBER 271 -#define DOTDOT 272 -#define SLASHSLASH 273 -#define NAMETEST 274 -#define XPATH_ERROR 275 - #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 60 "../xml/XPathGrammar.y" { + +/* Line 1676 of yacc.c */ +#line 60 "../xml/XPathGrammar.y" + Step::Axis axis; Step::NodeTest* nodeTest; NumericOp::Opcode numop; @@ -96,14 +79,17 @@ typedef union YYSTYPE Vector<Expression*>* argList; Step* step; LocationPath* locationPath; -} -/* Line 1489 of yacc.c. */ -#line 102 "WebCore/tmp/../generated/XPathGrammar.tab.h" - YYSTYPE; + + + +/* Line 1676 of yacc.c */ +#line 87 "WebCore/tmp/../generated/XPathGrammar.tab.h" +} YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 #endif + diff --git a/src/3rdparty/webkit/WebCore/generated/tokenizer.cpp b/src/3rdparty/webkit/WebCore/generated/tokenizer.cpp index 1f1ff89..a0f10b5 100644 --- a/src/3rdparty/webkit/WebCore/generated/tokenizer.cpp +++ b/src/3rdparty/webkit/WebCore/generated/tokenizer.cpp @@ -2193,8 +2193,10 @@ YY_RULE_SETUP ECHO; YY_BREAK #line 2745 "<stdout>" -case YY_STATE_EOF(INITIAL): case YY_END_OF_BUFFER: + yy_c_buf_p = yy_cp - 1; + yy_cp = yy_c_buf_p; +case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(mediaquery): case YY_STATE_EOF(forkeyword): yyterminate(); diff --git a/src/3rdparty/webkit/WebCore/html/HTMLTokenizer.cpp b/src/3rdparty/webkit/WebCore/html/HTMLTokenizer.cpp index 91285d9..9d8136b 100644 --- a/src/3rdparty/webkit/WebCore/html/HTMLTokenizer.cpp +++ b/src/3rdparty/webkit/WebCore/html/HTMLTokenizer.cpp @@ -1615,7 +1615,8 @@ inline bool HTMLTokenizer::continueProcessing(int& processedCount, double startT m_timer.startOneShot(0); #ifdef INSTRUMENT_LAYOUT_SCHEDULING if (currentTime() - startTime > m_tokenizerTimeDelay) - printf("Deferring processing of data because 500ms elapsed away from event loop.\n"); + printf("Deferring processing of data because %dms elapsed away from event loop.\n", + int(m_tokenizerTimeDelay * 1000)); #endif return false; } diff --git a/src/3rdparty/webkit/WebCore/inspector/InspectorBackend.cpp b/src/3rdparty/webkit/WebCore/inspector/InspectorBackend.cpp index 83a9719..67c08b9 100644 --- a/src/3rdparty/webkit/WebCore/inspector/InspectorBackend.cpp +++ b/src/3rdparty/webkit/WebCore/inspector/InspectorBackend.cpp @@ -245,12 +245,6 @@ const String& InspectorBackend::platform() const #endif #elif PLATFORM(WIN_OS) DEFINE_STATIC_LOCAL(const String, platform, ("windows")); -#elif PLATFORM(QT) - DEFINE_STATIC_LOCAL(const String, platform, ("qt")); -#elif PLATFORM(GTK) - DEFINE_STATIC_LOCAL(const String, platform, ("gtk")); -#elif PLATFORM(WX) - DEFINE_STATIC_LOCAL(const String, platform, ("wx")); #else DEFINE_STATIC_LOCAL(const String, platform, ("unknown")); #endif @@ -258,6 +252,22 @@ const String& InspectorBackend::platform() const return platform; } + +const String& InspectorBackend::port() const +{ +#if PLATFORM(QT) + DEFINE_STATIC_LOCAL(const String, port, ("qt")); +#elif PLATFORM(GTK) + DEFINE_STATIC_LOCAL(const String, port, ("gtk")); +#elif PLATFORM(WX) + DEFINE_STATIC_LOCAL(const String, port, ("wx")); +#else + DEFINE_STATIC_LOCAL(const String, port, ("unknown")); +#endif + + return port; +} + void InspectorBackend::startTimelineProfiler() { if (m_inspectorController) diff --git a/src/3rdparty/webkit/WebCore/inspector/InspectorBackend.h b/src/3rdparty/webkit/WebCore/inspector/InspectorBackend.h index 9d75e2f..08bb5e5 100644 --- a/src/3rdparty/webkit/WebCore/inspector/InspectorBackend.h +++ b/src/3rdparty/webkit/WebCore/inspector/InspectorBackend.h @@ -94,6 +94,7 @@ public: void closeWindow(); const String& platform() const; + const String& port() const; void startTimelineProfiler(); void stopTimelineProfiler(); diff --git a/src/3rdparty/webkit/WebCore/inspector/InspectorBackend.idl b/src/3rdparty/webkit/WebCore/inspector/InspectorBackend.idl index 7a00c6a..fd5dd79 100644 --- a/src/3rdparty/webkit/WebCore/inspector/InspectorBackend.idl +++ b/src/3rdparty/webkit/WebCore/inspector/InspectorBackend.idl @@ -61,6 +61,7 @@ module core { DOMString localizedStringsURL(); DOMString hiddenPanels(); DOMString platform(); + DOMString port(); void startTimelineProfiler(); void stopTimelineProfiler(); boolean timelineProfilerEnabled(); diff --git a/src/3rdparty/webkit/WebCore/inspector/front-end/InspectorControllerStub.js b/src/3rdparty/webkit/WebCore/inspector/front-end/InspectorControllerStub.js index 6fb5a1b..f78c9bd 100644 --- a/src/3rdparty/webkit/WebCore/inspector/front-end/InspectorControllerStub.js +++ b/src/3rdparty/webkit/WebCore/inspector/front-end/InspectorControllerStub.js @@ -58,6 +58,11 @@ WebInspector.InspectorControllerStub.prototype = { return "mac-leopard"; }, + port: function() + { + return "unknown"; + }, + closeWindow: function() { diff --git a/src/3rdparty/webkit/WebCore/inspector/front-end/inspector.css b/src/3rdparty/webkit/WebCore/inspector/front-end/inspector.css index 78ab23d..a83d38b 100644 --- a/src/3rdparty/webkit/WebCore/inspector/front-end/inspector.css +++ b/src/3rdparty/webkit/WebCore/inspector/front-end/inspector.css @@ -94,7 +94,7 @@ body.attached #toolbar { padding-left: 0; } -body.attached.platform-qt #toolbar { +body.attached.port-qt #toolbar { cursor: auto; } @@ -237,7 +237,7 @@ body.detached .toolbar-item.close-left, body.detached .toolbar-item.close-right display: none; } -body.attached.platform-qt .toolbar-item.close-left, body.attached.platform-qt .toolbar-item.close-right { +body.attached.port-qt .toolbar-item.close-left, body.attached.port-qt .toolbar-item.close-right { display: none; } @@ -392,7 +392,7 @@ body.detached #dock-status-bar-item .glyph { -webkit-mask-image: url(Images/dockButtonGlyph.png); } -body.platform-qt #dock-status-bar-item { +body.port-qt #dock-status-bar-item { display: none } diff --git a/src/3rdparty/webkit/WebCore/inspector/front-end/inspector.js b/src/3rdparty/webkit/WebCore/inspector/front-end/inspector.js index c24d589..083a0af 100644 --- a/src/3rdparty/webkit/WebCore/inspector/front-end/inspector.js +++ b/src/3rdparty/webkit/WebCore/inspector/front-end/inspector.js @@ -370,6 +370,8 @@ WebInspector.loaded = function() { var platform = InspectorController.platform(); document.body.addStyleClass("platform-" + platform); + var port = InspectorController.port(); + document.body.addStyleClass("port-" + port); this._loadPreferences(); this.pendingDispatches = 0; @@ -821,7 +823,7 @@ WebInspector.toggleAttach = function() WebInspector.toolbarDragStart = function(event) { - if ((!WebInspector.attached && InspectorController.platform() !== "mac-leopard") || InspectorController.platform() == "qt") + if ((!WebInspector.attached && InspectorController.platform() !== "mac-leopard") || InspectorController.port() == "qt") return; var target = event.target; diff --git a/src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp b/src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp index 9b15448..a85dcf5 100644 --- a/src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp +++ b/src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp @@ -2890,8 +2890,8 @@ void FrameLoader::checkLoadCompleteForThisFrame() // delegate callback. if (pdl == m_provisionalDocumentLoader) clearProvisionalLoad(); - else if (m_provisionalDocumentLoader) { - KURL unreachableURL = m_provisionalDocumentLoader->unreachableURL(); + else if (activeDocumentLoader()) { + KURL unreachableURL = activeDocumentLoader()->unreachableURL(); if (!unreachableURL.isEmpty() && unreachableURL == pdl->request().url()) shouldReset = false; } diff --git a/src/3rdparty/webkit/WebCore/loader/MainResourceLoader.cpp b/src/3rdparty/webkit/WebCore/loader/MainResourceLoader.cpp index c37daef..4970f06 100644 --- a/src/3rdparty/webkit/WebCore/loader/MainResourceLoader.cpp +++ b/src/3rdparty/webkit/WebCore/loader/MainResourceLoader.cpp @@ -433,6 +433,10 @@ void MainResourceLoader::handleDataLoadNow(MainResourceLoaderTimer*) KURL url = m_substituteData.responseURL(); if (url.isEmpty()) url = m_initialRequest.url(); + + // Clear the initial request here so that subsequent entries into the + // loader will not think there's still a deferred load left to do. + m_initialRequest = ResourceRequest(); ResourceResponse response(url, m_substituteData.mimeType(), m_substituteData.content()->size(), m_substituteData.textEncoding(), ""); didReceiveResponse(response); diff --git a/src/3rdparty/webkit/WebCore/page/PrintContext.cpp b/src/3rdparty/webkit/WebCore/page/PrintContext.cpp index bba678a..4d3a839 100644 --- a/src/3rdparty/webkit/WebCore/page/PrintContext.cpp +++ b/src/3rdparty/webkit/WebCore/page/PrintContext.cpp @@ -25,7 +25,6 @@ #include "Frame.h" #include "FrameView.h" #include "RenderView.h" -#include "Settings.h" using namespace WebCore; @@ -96,23 +95,18 @@ void PrintContext::computePageRects(const FloatRect& printRect, float headerHeig void PrintContext::begin(float width) { - float PrintingMinimumShrinkFactor = m_frame->settings() ? m_frame->settings()->printingMinimumShrinkFactor() : 0.0f; - float PrintingMaximumShrinkFactor = m_frame->settings() ? m_frame->settings()->printingMaximumShrinkFactor() : 0.0f; - - if (PrintingMaximumShrinkFactor < PrintingMinimumShrinkFactor || PrintingMinimumShrinkFactor <= 0.0f) { - // By imaging to a width a little wider than the available pixels, - // thin pages will be scaled down a little, matching the way they - // print in IE and Camino. This lets them use fewer sheets than they - // would otherwise, which is presumably why other browsers do this. - // Wide pages will be scaled down more than this. - PrintingMinimumShrinkFactor = 1.25f; - - // This number determines how small we are willing to reduce the page content - // in order to accommodate the widest line. If the page would have to be - // reduced smaller to make the widest line fit, we just clip instead (this - // behavior matches MacIE and Mozilla, at least) - PrintingMaximumShrinkFactor = 2.0f; - } + // By imaging to a width a little wider than the available pixels, + // thin pages will be scaled down a little, matching the way they + // print in IE and Camino. This lets them use fewer sheets than they + // would otherwise, which is presumably why other browsers do this. + // Wide pages will be scaled down more than this. + const float PrintingMinimumShrinkFactor = 1.25f; + + // This number determines how small we are willing to reduce the page content + // in order to accommodate the widest line. If the page would have to be + // reduced smaller to make the widest line fit, we just clip instead (this + // behavior matches MacIE and Mozilla, at least) + const float PrintingMaximumShrinkFactor = 2.0f; float minLayoutWidth = width * PrintingMinimumShrinkFactor; float maxLayoutWidth = width * PrintingMaximumShrinkFactor; diff --git a/src/3rdparty/webkit/WebCore/page/Settings.cpp b/src/3rdparty/webkit/WebCore/page/Settings.cpp index 48f310b..f528f37 100644 --- a/src/3rdparty/webkit/WebCore/page/Settings.cpp +++ b/src/3rdparty/webkit/WebCore/page/Settings.cpp @@ -63,8 +63,6 @@ Settings::Settings(Page* page) , m_maximumDecodedImageSize(numeric_limits<size_t>::max()) , m_localStorageQuota(5 * 1024 * 1024) // Suggested by the HTML5 spec. , m_pluginAllowedRunTime(numeric_limits<unsigned>::max()) - , m_printingMinimumShrinkFactor(0.0f) - , m_printingMaximumShrinkFactor(0.0f) , m_isJavaEnabled(false) , m_loadsImagesAutomatically(false) , m_privateBrowsingEnabled(false) @@ -531,14 +529,4 @@ void Settings::setWebGLEnabled(bool enabled) m_webGLEnabled = enabled; } -void Settings::setPrintingMinimumShrinkFactor(float printingMinimumShrinkFactor) -{ - m_printingMinimumShrinkFactor = printingMinimumShrinkFactor; -} - -void Settings::setPrintingMaximumShrinkFactor(float printingMaximumShrinkFactor) -{ - m_printingMaximumShrinkFactor = printingMaximumShrinkFactor; -} - } // namespace WebCore diff --git a/src/3rdparty/webkit/WebCore/page/Settings.h b/src/3rdparty/webkit/WebCore/page/Settings.h index bdb07b9..09b5bec 100644 --- a/src/3rdparty/webkit/WebCore/page/Settings.h +++ b/src/3rdparty/webkit/WebCore/page/Settings.h @@ -270,12 +270,6 @@ namespace WebCore { void setWebGLEnabled(bool); bool webGLEnabled() const { return m_webGLEnabled; } - void setPrintingMinimumShrinkFactor(float); - float printingMinimumShrinkFactor() const { return m_printingMinimumShrinkFactor; } - - void setPrintingMaximumShrinkFactor(float); - float printingMaximumShrinkFactor() const { return m_printingMaximumShrinkFactor; } - private: Page* m_page; @@ -298,8 +292,6 @@ namespace WebCore { size_t m_maximumDecodedImageSize; unsigned m_localStorageQuota; unsigned m_pluginAllowedRunTime; - float m_printingMinimumShrinkFactor; - float m_printingMaximumShrinkFactor; bool m_isJavaEnabled : 1; bool m_loadsImagesAutomatically : 1; bool m_privateBrowsingEnabled : 1; diff --git a/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontCacheQt.cpp b/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontCacheQt.cpp index 1113eae..469a72e 100644 --- a/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontCacheQt.cpp +++ b/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontCacheQt.cpp @@ -177,15 +177,20 @@ typedef HashMap<FontPlatformDataCacheKey, FontPlatformData*, FontPlatformDataCac // using Q_GLOBAL_STATIC leads to crash. TODO investigate the way to fix this. static FontPlatformDataCache* gFontPlatformDataCache = 0; -FontPlatformData* FontCache::getCachedFontPlatformData(const FontDescription& description, const AtomicString&, bool) +FontPlatformData* FontCache::getCachedFontPlatformData(const FontDescription& description, const AtomicString& family, bool) { if (!gFontPlatformDataCache) gFontPlatformDataCache = new FontPlatformDataCache; - FontPlatformDataCacheKey key(description); + FontDescription descriptionWithResolvedFamily(description); + FontFamily resolvedFamily; + resolvedFamily.setFamily(family); + descriptionWithResolvedFamily.setFamily(resolvedFamily); + + FontPlatformDataCacheKey key(descriptionWithResolvedFamily); FontPlatformData* platformData = gFontPlatformDataCache->get(key); if (!platformData) { - platformData = new FontPlatformData(description); + platformData = new FontPlatformData(descriptionWithResolvedFamily); gFontPlatformDataCache->add(key, platformData); } return platformData; diff --git a/src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp b/src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp index bbf5525..2f4722f 100644 --- a/src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp +++ b/src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp @@ -259,7 +259,7 @@ void QNetworkReplyHandler::sendResponseIfNeeded() if (m_shouldSendResponse) return; - if (m_reply->error()) + if (m_reply->error() && !ignoreHttpError(m_reply, m_responseDataSent)) return; if (m_responseSent || !m_resourceHandle) diff --git a/src/3rdparty/webkit/WebCore/platform/network/qt/ResourceRequestQt.cpp b/src/3rdparty/webkit/WebCore/platform/network/qt/ResourceRequestQt.cpp index c866a54..a183c40 100644 --- a/src/3rdparty/webkit/WebCore/platform/network/qt/ResourceRequestQt.cpp +++ b/src/3rdparty/webkit/WebCore/platform/network/qt/ResourceRequestQt.cpp @@ -41,7 +41,12 @@ QNetworkRequest ResourceRequest::toNetworkRequest(QObject* originatingFrame) con it != end; ++it) { QByteArray name = QString(it->first).toAscii(); QByteArray value = QString(it->second).toAscii(); - request.setRawHeader(name, value); + // QNetworkRequest::setRawHeader() would remove the header if the value is null + // Make sure to set an empty header instead of null header. + if (!value.isNull()) + request.setRawHeader(name, value); + else + request.setRawHeader(name, ""); } switch (cachePolicy()) { diff --git a/src/3rdparty/webkit/WebCore/platform/qt/PlatformScreenQt.cpp b/src/3rdparty/webkit/WebCore/platform/qt/PlatformScreenQt.cpp index 442ffa3..8221760 100644 --- a/src/3rdparty/webkit/WebCore/platform/qt/PlatformScreenQt.cpp +++ b/src/3rdparty/webkit/WebCore/platform/qt/PlatformScreenQt.cpp @@ -72,7 +72,7 @@ int screenDepthPerComponent(Widget* w) bool screenIsMonochrome(Widget* w) { - return QApplication::desktop()->screen(screenNumber(w))->colorCount() < 2; + return QApplication::desktop()->screen(screenNumber(w))->numColors() < 2; } FloatRect screenRect(Widget* w) diff --git a/src/3rdparty/webkit/WebCore/platform/qt/QWebPageClient.h b/src/3rdparty/webkit/WebCore/platform/qt/QWebPageClient.h index 28ef724..61adb97 100644 --- a/src/3rdparty/webkit/WebCore/platform/qt/QWebPageClient.h +++ b/src/3rdparty/webkit/WebCore/platform/qt/QWebPageClient.h @@ -30,9 +30,12 @@ class QWebPageClient { public: + virtual ~QWebPageClient() { } + virtual void scroll(int dx, int dy, const QRect&) = 0; virtual void update(const QRect&) = 0; virtual void setInputMethodEnabled(bool enable) = 0; + virtual bool inputMethodEnabled() const = 0; #if QT_VERSION >= 0x040600 virtual void setInputMethodHint(Qt::InputMethodHint hint, bool enable) = 0; #endif diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderBlock.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderBlock.cpp index 237478d..d5bb778 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderBlock.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/RenderBlock.cpp @@ -163,15 +163,18 @@ RenderBlock::~RenderBlock() void RenderBlock::destroy() { - // Detach our continuation first. - if (m_inlineContinuation) - m_inlineContinuation->destroy(); - m_inlineContinuation = 0; - // Make sure to destroy anonymous children first while they are still connected to the rest of the tree, so that they will - // properly dirty line boxes that they are removed from. Effects that do :before/:after only on hover could crash otherwise. + // properly dirty line boxes that they are removed from. Effects that do :before/:after only on hover could crash otherwise. children()->destroyLeftoverChildren(); + // Destroy our continuation before anything other than anonymous children. + // The reason we don't destroy it before anonymous children is that they may + // have continuations of their own that are anonymous children of our continuation. + if (m_inlineContinuation) { + m_inlineContinuation->destroy(); + m_inlineContinuation = 0; + } + if (!documentBeingDestroyed()) { if (firstLineBox()) { // We can't wait for RenderBox::destroy to clear the selection, diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderInline.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderInline.cpp index 0302113..2f9a247 100644 --- a/src/3rdparty/webkit/WebCore/rendering/RenderInline.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/RenderInline.cpp @@ -52,15 +52,18 @@ RenderInline::RenderInline(Node* node) void RenderInline::destroy() { - // Detach our continuation first. - if (m_continuation) - m_continuation->destroy(); - m_continuation = 0; - // Make sure to destroy anonymous children first while they are still connected to the rest of the tree, so that they will // properly dirty line boxes that they are removed from. Effects that do :before/:after only on hover could crash otherwise. children()->destroyLeftoverChildren(); + // Destroy our continuation before anything other than anonymous children. + // The reason we don't destroy it before anonymous children is that they may + // have continuations of their own that are anonymous children of our continuation. + if (m_continuation) { + m_continuation->destroy(); + m_continuation = 0; + } + if (!documentBeingDestroyed()) { if (firstLineBox()) { // We can't wait for RenderBoxModelObject::destroy to clear the selection, diff --git a/src/3rdparty/webkit/WebCore/rendering/style/RenderStyle.h b/src/3rdparty/webkit/WebCore/rendering/style/RenderStyle.h index 1e1688c..2e8fb0a 100644 --- a/src/3rdparty/webkit/WebCore/rendering/style/RenderStyle.h +++ b/src/3rdparty/webkit/WebCore/rendering/style/RenderStyle.h @@ -1182,6 +1182,7 @@ public: static float initialPerspective() { return 0; } static Length initialPerspectiveOriginX() { return Length(50.0, Percent); } static Length initialPerspectiveOriginY() { return Length(50.0, Percent); } + static Color initialBackgroundColor() { return Color::transparent; } // Keep these at the end. static int initialLineClamp() { return -1; } diff --git a/src/3rdparty/webkit/WebCore/rendering/style/StyleBackgroundData.cpp b/src/3rdparty/webkit/WebCore/rendering/style/StyleBackgroundData.cpp index 68a9ddd..08f5527 100644 --- a/src/3rdparty/webkit/WebCore/rendering/style/StyleBackgroundData.cpp +++ b/src/3rdparty/webkit/WebCore/rendering/style/StyleBackgroundData.cpp @@ -22,12 +22,14 @@ #include "config.h" #include "StyleBackgroundData.h" +#include "RenderStyle.h" #include "RenderStyleConstants.h" namespace WebCore { StyleBackgroundData::StyleBackgroundData() : m_background(BackgroundFillLayer) + , m_color(RenderStyle::initialBackgroundColor()) { } diff --git a/src/3rdparty/webkit/WebCore/storage/Database.cpp b/src/3rdparty/webkit/WebCore/storage/Database.cpp index 5aaa26f..2f82743 100644 --- a/src/3rdparty/webkit/WebCore/storage/Database.cpp +++ b/src/3rdparty/webkit/WebCore/storage/Database.cpp @@ -152,8 +152,8 @@ Database::Database(Document* document, const String& name, const String& expecte , m_document(document) , m_name(name.crossThreadString()) , m_guid(0) - , m_expectedVersion(expectedVersion) - , m_displayName(displayName) + , m_expectedVersion(expectedVersion.crossThreadString()) + , m_displayName(displayName.crossThreadString()) , m_estimatedSize(estimatedSize) , m_deleted(false) , m_stopped(false) diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp index 38d8c47..640a924 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp @@ -41,9 +41,11 @@ public: , page(0) {} + virtual ~QGraphicsWebViewPrivate(); virtual void scroll(int dx, int dy, const QRect&); virtual void update(const QRect& dirtyRect); virtual void setInputMethodEnabled(bool enable); + virtual bool inputMethodEnabled() const; #if QT_VERSION >= 0x040600 virtual void setInputMethodHint(Qt::InputMethodHint hint, bool enable); #endif @@ -65,6 +67,10 @@ public: QWebPage* page; }; +QGraphicsWebViewPrivate::~QGraphicsWebViewPrivate() +{ +} + void QGraphicsWebViewPrivate::_q_doLoadFinished(bool success) { // If the page had no title, still make sure it gets the signal @@ -92,6 +98,15 @@ void QGraphicsWebViewPrivate::setInputMethodEnabled(bool enable) #endif } +bool QGraphicsWebViewPrivate::inputMethodEnabled() const +{ +#if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0) + return q->flags() & QGraphicsItem::ItemAcceptsInputMethod; +#else + return false; +#endif +} + #if QT_VERSION >= 0x040600 void QGraphicsWebViewPrivate::setInputMethodHint(Qt::InputMethodHint hint, bool enable) { @@ -149,9 +164,9 @@ QObject* QGraphicsWebViewPrivate::pluginParent() const An instance of this class renders Web content from a URL or supplied as data, using features of the QtWebKit module. - If the width and height of the item is not set, they will dynamically adjust to - a size appropriate for the content. This width may be large (e.g., 980 pixels or - more) for typical online Web pages. + If the width and height of the item are not set, they will default to 800 and 600, + respectively. If the Web page contents is larger than that, scrollbars will be shown + if not disabled explicitly. \section1 Browser Features @@ -188,12 +203,6 @@ QObject* QGraphicsWebViewPrivate::pluginParent() const */ /*! - \fn void QGraphicsWebView::statusChanged() - - This signal is emitted when the status bar text is changed by the page. -*/ - -/*! \fn void QGraphicsWebView::iconChanged() This signal is emitted whenever the icon of the page is loaded or changes. @@ -209,7 +218,7 @@ QObject* QGraphicsWebViewPrivate::pluginParent() const This signal is emitted when a new load of the page is started. - \sa progressChanged(), loadFinished() + \sa loadProgress(), loadFinished() */ /*! @@ -222,22 +231,6 @@ QObject* QGraphicsWebViewPrivate::pluginParent() const */ /*! - \fn void QGraphicsWebView::progressChanged(qreal progress) - - This signal is emitted every time an element in the web page - completes loading and the overall loading progress advances. - - This signal tracks the progress of all child frames. - - The current value is provided by \a progress and scales from 0.0 to 1.0, - which is the default range of QProgressBar. - - \sa loadStarted(), loadFinished() -*/ - - - -/*! Constructs an empty QGraphicsWebView with parent \a parent. \sa load() @@ -736,7 +729,7 @@ void QGraphicsWebView::triggerPageAction(QWebPage::WebAction action, bool checke Returns true if \a subString was found; otherwise returns false. - \sa selectedText(), selectionChanged() + \sa QWebPage::selectedText(), QWebPage::selectionChanged() */ bool QGraphicsWebView::findText(const QString &subString, QWebPage::FindFlags options) { @@ -986,6 +979,26 @@ void QGraphicsWebView::inputMethodEvent(QInputMethodEvent* ev) } /*! + \fn void QGraphicsWebView::statusBarMessage(const QString& text) + + This signal is emitted when the statusbar \a text is changed by the page. +*/ + +/*! + \fn void QGraphicsWebView::loadProgress(int progress) + + This signal is emitted every time an element in the web page + completes loading and the overall loading progress advances. + + This signal tracks the progress of all child frames. + + The current value is provided by \a progress and scales from 0 to 100, + which is the default range of QProgressBar. + + \sa loadStarted(), loadFinished() +*/ + +/*! \fn void QGraphicsWebView::linkClicked(const QUrl &url) This signal is emitted whenever the user clicks on a link and the page's linkDelegationPolicy diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.cpp index 6305d10..8922150 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.cpp @@ -453,6 +453,30 @@ bool QWebElement::hasAttributes() const } /*! + Return the list of attributes for the namespace given as \a namespaceUri. + + \sa attribute(), setAttribute() +*/ +QStringList QWebElement::attributeNames(const QString& namespaceUri) const +{ + if (!m_element) + return QStringList(); + + QStringList attributeNameList; + const NamedNodeMap* const attrs = m_element->attributes(/* read only = */ true); + if (attrs) { + const String namespaceUriString(namespaceUri); // convert QString -> String once + const unsigned attrsCount = attrs->length(); + for (unsigned i = 0; i < attrsCount; ++i) { + const Attribute* const attribute = attrs->attributeItem(i); + if (namespaceUriString == attribute->namespaceURI()) + attributeNameList.append(attribute->localName()); + } + } + return attributeNameList; +} + +/*! Returns true if the element has keyboard input focus; otherwise, returns false \sa setFocus() @@ -1661,22 +1685,6 @@ QList<QWebElement> QWebElementCollection::toList() const QWebElementCollection provides STL style const iterators for fast low-level access to the elements. QWebElementCollection::const_iterator allows you to iterate over a QWebElementCollection. - - The default QWebElementCollection::const_iterator constructors creates an uninitialized iterator. You must initialize - it using a QWebElementCollection function like QWebElementCollection::begin() or QWebElementCollection::end() before you - can start iterating. -*/ - -/*! - \fn QWebElementCollection::const_iterator::const_iterator() - - Constructs an uninitialized iterator. - - Functions like operator*() and operator++() should not be called on - an uninitialized iterator. Use operator=() to assign a value - to it before using it. - - \sa QWebElementCollection::begin() */ /*! @@ -1824,3 +1832,193 @@ QList<QWebElement> QWebElementCollection::toList() const Returns true if the element pointed to by this iterator is greater than or equal to the element pointed to by the \a other iterator. */ + +/*! + \fn QWebElementCollection::iterator QWebElementCollection::begin() + + Returns an STL-style iterator pointing to the first element in the collection. + + \sa end() +*/ + +/*! + \fn QWebElementCollection::iterator QWebElementCollection::end() + + Returns an STL-style iterator pointing to the imaginary element after the + last element in the list. + + \sa begin() +*/ + +/*! + \fn QWebElementCollection::const_iterator QWebElementCollection::constBegin() const + + Returns an STL-style iterator pointing to the first element in the collection. + + \sa end() +*/ + +/*! + \fn QWebElementCollection::const_iterator QWebElementCollection::constEnd() const + + Returns an STL-style iterator pointing to the imaginary element after the + last element in the list. + + \sa begin() +*/ + +/*! + \class QWebElementCollection::iterator + \since 4.6 + \brief The QWebElementCollection::iterator class provides an STL-style iterator for QWebElementCollection. + + QWebElementCollection provides STL style iterators for fast low-level access to the elements. + + QWebElementCollection::iterator allows you to iterate over a QWebElementCollection. +*/ + +/*! + \fn QWebElementCollection::iterator::iterator(const iterator &other) + + Constructs a copy of \a other. +*/ + +/*! + \fn QWebElementCollection::iterator::iterator(const QWebElementCollection *collection, int index) + \internal +*/ + +/*! + \fn const QWebElement QWebElementCollection::iterator::operator*() const + + Returns the current element. +*/ + +/*! + \fn bool QWebElementCollection::iterator::operator==(const iterator &other) const + + Returns true if \a other points to the same item as this iterator; + otherwise returns false. + + \sa operator!=() +*/ + +/*! + \fn bool QWebElementCollection::iterator::operator!=(const iterator &other) const + + Returns true if \a other points to a different element than this; + iterator; otherwise returns false. + + \sa operator==() +*/ + +/*! + \fn QWebElementCollection::iterator &QWebElementCollection::iterator::operator++() + + The prefix ++ operator (\c{++it}) advances the iterator to the next element in the collection + and returns an iterator to the new current element. + + Calling this function on QWebElementCollection::end() leads to undefined results. + + \sa operator--() +*/ + +/*! + \fn QWebElementCollection::iterator QWebElementCollection::iterator::operator++(int) + + \overload + + The postfix ++ operator (\c{it++}) advances the iterator to the next element in the collection + and returns an iterator to the previously current element. + + Calling this function on QWebElementCollection::end() leads to undefined results. +*/ + +/*! + \fn QWebElementCollection::iterator &QWebElementCollection::iterator::operator--() + + The prefix -- operator (\c{--it}) makes the preceding element current and returns an + iterator to the new current element. + + Calling this function on QWebElementCollection::begin() leads to undefined results. + + \sa operator++() +*/ + +/*! + \fn QWebElementCollection::iterator QWebElementCollection::iterator::operator--(int) + + \overload + + The postfix -- operator (\c{it--}) makes the preceding element current and returns + an iterator to the previously current element. +*/ + +/*! + \fn QWebElementCollection::iterator &QWebElementCollection::iterator::operator+=(int j) + + Advances the iterator by \a j elements. If \a j is negative, the iterator goes backward. + + \sa operator-=(), operator+() +*/ + +/*! + \fn QWebElementCollection::iterator &QWebElementCollection::iterator::operator-=(int j) + + Makes the iterator go back by \a j elements. If \a j is negative, the iterator goes forward. + + \sa operator+=(), operator-() +*/ + +/*! + \fn QWebElementCollection::iterator QWebElementCollection::iterator::operator+(int j) const + + Returns an iterator to the element at \a j positions forward from this iterator. If \a j + is negative, the iterator goes backward. + + \sa operator-(), operator+=() +*/ + +/*! + \fn QWebElementCollection::iterator QWebElementCollection::iterator::operator-(int j) const + + Returns an iterator to the element at \a j positiosn backward from this iterator. + If \a j is negative, the iterator goes forward. + + \sa operator+(), operator-=() +*/ + +/*! + \fn int QWebElementCollection::iterator::operator-(iterator other) const + + Returns the number of elements between the item point to by \a other + and the element pointed to by this iterator. +*/ + +/*! + \fn bool QWebElementCollection::iterator::operator<(const iterator &other) const + + Returns true if the element pointed to by this iterator is less than the element pointed to + by the \a other iterator. +*/ + +/*! + \fn bool QWebElementCollection::iterator::operator<=(const iterator &other) const + + Returns true if the element pointed to by this iterator is less than or equal to the + element pointed to by the \a other iterator. +*/ + +/*! + \fn bool QWebElementCollection::iterator::operator>(const iterator &other) const + + Returns true if the element pointed to by this iterator is greater than the element pointed to + by the \a other iterator. +*/ + +/*! + \fn bool QWebElementCollection::iterator::operator>=(const iterator &other) const + + Returns true if the element pointed to by this iterator is greater than or equal to the + element pointed to by the \a other iterator. +*/ diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.h b/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.h index 9cb1ea1..3833070 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.h +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.h @@ -21,6 +21,7 @@ #define QWEBELEMENT_H #include <QString> +#include <QStringList> #include <QRect> #include <QVariant> #include <QExplicitlySharedDataPointer> @@ -72,6 +73,7 @@ public: void removeAttribute(const QString& name); void removeAttributeNS(const QString& namespaceUri, const QString& name); bool hasAttributes() const; + QStringList attributeNames(const QString& namespaceUri = QString()) const; QStringList classes() const; bool hasClass(const QString& name) const; diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp index 17a0118..e84b8df 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp @@ -324,7 +324,7 @@ void QWebFramePrivate::renderPrivate(QPainter *painter, QWebFrame::RenderLayer l the HTML content readily available, you can use setHtml() instead. The page() function returns a pointer to the web page object. See - \l{Elements of QWebView} for an explanation of how web + \l{QWebView}{Elements of QWebView} for an explanation of how web frames are related to a web page and web view. The QWebFrame class also offers methods to retrieve both the URL currently @@ -356,6 +356,19 @@ void QWebFramePrivate::renderPrivate(QPainter *painter, QWebFrame::RenderLayer l \sa QWebPage */ +/*! + \enum QWebFrame::RenderLayer + + This enum describes the layers available for rendering using \l{QWebFrame::}{render()}. + The layers can be OR-ed together from the following list: + + \value ContentsLayer The web content of the frame + \value ScrollBarLayer The scrollbars of the frame + \value PanIconLayer The icon used when panning the frame + + \value AllLayers Includes all the above layers +*/ + QWebFrame::QWebFrame(QWebPage *parent, QWebFrameData *frameData) : QObject(parent) , d(new QWebFramePrivate) @@ -471,7 +484,9 @@ QString QWebFrame::toPlainText() const d->frame->view()->layout(); Element *documentElement = d->frame->document()->documentElement(); - return documentElement->innerText(); + if (documentElement) + return documentElement->innerText(); + return QString(); } /*! @@ -766,6 +781,10 @@ void QWebFrame::load(const QNetworkRequest &req, The \a html is loaded immediately; external objects are loaded asynchronously. + If a script in the \a html runs longer than the default script timeout (currently 10 seconds), + for example due to being blocked by a modal JavaScript alert dialog, this method will return + as soon as possible after the timeout and any subsequent \a html will be loaded asynchronously. + When using this method WebKit assumes that external resources such as JavaScript programs or style sheets are encoded in UTF-8 unless otherwise specified. For example, the encoding of an external script can be specified through the charset attribute of the HTML script tag. It is also possible diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp index d4a491b..aedf95a 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp @@ -153,6 +153,7 @@ public: virtual void scroll(int dx, int dy, const QRect&); virtual void update(const QRect& dirtyRect); virtual void setInputMethodEnabled(bool enable); + virtual bool inputMethodEnabled() const; #if QT_VERSION >= 0x040600 virtual void setInputMethodHint(Qt::InputMethodHint hint, bool enable); #endif @@ -185,6 +186,12 @@ void QWebPageWidgetClient::setInputMethodEnabled(bool enable) { view->setAttribute(Qt::WA_InputMethodEnabled, enable); } + +bool QWebPageWidgetClient::inputMethodEnabled() const +{ + return view->testAttribute(Qt::WA_InputMethodEnabled); +} + #if QT_VERSION >= 0x040600 void QWebPageWidgetClient::setInputMethodHint(Qt::InputMethodHint hint, bool enable) { @@ -857,13 +864,13 @@ void QWebPagePrivate::mouseReleaseEvent(QGraphicsSceneMouseEvent* ev) void QWebPagePrivate::handleSoftwareInputPanel(Qt::MouseButton button) { #if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0) - if (q->view() && q->view()->testAttribute(Qt::WA_InputMethodEnabled) + if (client && client->inputMethodEnabled() && button == Qt::LeftButton && qApp->autoSipEnabled()) { QStyle::RequestSoftwareInputPanel behavior = QStyle::RequestSoftwareInputPanel( - q->view()->style()->styleHint(QStyle::SH_RequestSoftwareInputPanel)); + client->ownerWidget()->style()->styleHint(QStyle::SH_RequestSoftwareInputPanel)); if (!clickCausedFocus || behavior == QStyle::RSIP_OnMouseClick) { QEvent event(QEvent::RequestSoftwareInputPanel); - QApplication::sendEvent(q->view(), &event); + QApplication::sendEvent(client->ownerWidget(), &event); } } @@ -1055,11 +1062,9 @@ void QWebPagePrivate::keyReleaseEvent(QKeyEvent *ev) void QWebPagePrivate::focusInEvent(QFocusEvent*) { FocusController *focusController = page->focusController(); - Frame *frame = focusController->focusedFrame(); focusController->setActive(true); - if (frame) - focusController->setFocused(true); - else + focusController->setFocused(true); + if (!focusController->focusedFrame()) focusController->setFocusedFrame(QWebFramePrivate::core(mainFrame)); } @@ -1675,7 +1680,7 @@ InspectorController* QWebPagePrivate::inspectorController() */ /*! - Constructs an empty QWebView with parent \a parent. + Constructs an empty QWebPage with parent \a parent. */ QWebPage::QWebPage(QObject *parent) : QObject(parent) diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp index ff86e1f..b637d04 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp @@ -62,8 +62,6 @@ public: QString localStoragePath; QString offlineWebApplicationCachePath; qint64 offlineStorageDefaultQuota; - float printingMinimumShrinkFactor; - float printingMaximumShrinkFactor; void apply(); WebCore::Settings* settings; @@ -176,12 +174,6 @@ void QWebSettingsPrivate::apply() QString storagePath = !localStoragePath.isEmpty() ? localStoragePath : global->localStoragePath; settings->setLocalStorageDatabasePath(storagePath); - float minimumShrinkFactor = printingMinimumShrinkFactor > 0.0f ? printingMinimumShrinkFactor : global->printingMinimumShrinkFactor; - settings->setPrintingMinimumShrinkFactor(minimumShrinkFactor); - - float maximumShrinkFactor = printingMaximumShrinkFactor > 0.0f ? printingMaximumShrinkFactor : global->printingMaximumShrinkFactor; - settings->setPrintingMaximumShrinkFactor(maximumShrinkFactor); - value = attributes.value(QWebSettings::ZoomTextOnly, global->attributes.value(QWebSettings::ZoomTextOnly)); settings->setZoomsTextOnly(value); @@ -206,6 +198,7 @@ void QWebSettingsPrivate::apply() value = attributes.value(QWebSettings::LocalContentCanAccessRemoteUrls, global->attributes.value(QWebSettings::LocalContentCanAccessRemoteUrls)); settings->setAllowUniversalAccessFromFileURLs(value); + settings->setUsesPageCache(WebCore::pageCache()->capacity()); } else { QList<QWebSettingsPrivate*> settings = *::allSettings(); for (int i = 0; i < settings.count(); ++i) @@ -269,7 +262,7 @@ QWebSettings* QWebSettings::globalSettings() setOfflineStoragePath() with an appropriate file path, and can limit the quota for each application by calling setOfflineStorageDefaultQuota(). - \sa QWebPage::settings(), QWebView::settings(), {Browser} + \sa QWebPage::settings(), QWebView::settings(), {Web Browser} */ /*! @@ -346,6 +339,8 @@ QWebSettings* QWebSettings::globalSettings() web application cache feature is enabled or not. Disabled by default. \value LocalStorageEnabled Specifies whether support for the HTML 5 local storage feature is enabled or not. Disabled by default. + \value LocalStorageDatabaseEnabled \e{This enum value is deprecated.} Use + QWebSettings::LocalStorageEnabled instead. \value LocalContentCanAccessRemoteUrls Specifies whether locally loaded documents are allowed to access remote urls. */ @@ -379,8 +374,6 @@ QWebSettings::QWebSettings() d->attributes.insert(QWebSettings::LocalContentCanAccessRemoteUrls, false); d->offlineStorageDefaultQuota = 5 * 1024 * 1024; d->defaultTextEncoding = QLatin1String("iso-8859-1"); - d->printingMinimumShrinkFactor = 0.0f; - d->printingMaximumShrinkFactor = 0.0f; } /*! @@ -495,60 +488,6 @@ QString QWebSettings::defaultTextEncoding() const } /*! - \since 4.7 - Specifies minimum shrink fator allowed for printing. If set to 0 a - default value is used. - - When printing, content will be shrunk to reduce page usage, it - will reduced by a factor between printingMinimumShrinkFactor and - printingMaximumShrinkFactor. - - \sa printingMinimumShrinkFactor() - \sa setPrintingMaximumShrinkFactor() - \sa printingMaximumShrinkFactor() -*/ -void QWebSettings::setPrintingMinimumShrinkFactor(float printingMinimumShrinkFactor) -{ - d->printingMinimumShrinkFactor = printingMinimumShrinkFactor; - d->apply(); -} - -/*! - \since 4.7 - returns the minimum shrink factor used for printing. - - \sa setPrintingMinimumShrinkFactor() -*/ -float QWebSettings::printingMinimumShrinkFactor() const -{ - return d->printingMinimumShrinkFactor; -} - -/*! - \since 4.7 - Specifies maximum shrink fator allowed for printing. If set to 0 a - default value is used. - - \sa setPrintingMinimumShrinkFactor() -*/ -void QWebSettings::setPrintingMaximumShrinkFactor(float printingMaximumShrinkFactor) -{ - d->printingMaximumShrinkFactor = printingMaximumShrinkFactor; - d->apply(); -} - -/*! - \since 4.7 - returns the maximum shrink factor used for printing. - - \sa setPrintingMinimumShrinkFactor() -*/ -float QWebSettings::printingMaximumShrinkFactor() const -{ - return d->printingMaximumShrinkFactor; -} - -/*! Sets the path of the icon database to \a path. The icon database is used to store "favicons" associated with web sites. @@ -618,7 +557,7 @@ QIcon QWebSettings::iconForUrl(const QUrl& url) return* icon; } -/*! +/* Returns the plugin database object. QWebPluginDatabase *QWebSettings::pluginDatabase() @@ -704,7 +643,9 @@ void QWebSettings::clearMemoryCaches() */ void QWebSettings::setMaximumPagesInCache(int pages) { + QWebSettingsPrivate* global = QWebSettings::globalSettings()->d; WebCore::pageCache()->setCapacity(qMax(0, pages)); + global->apply(); } /*! diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h b/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h index 3b6d1a7..50cf424 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h @@ -102,12 +102,6 @@ public: void setDefaultTextEncoding(const QString &encoding); QString defaultTextEncoding() const; - void setPrintingMinimumShrinkFactor(float printingMinimumShrinkFactor); - float printingMinimumShrinkFactor() const; - - void setPrintingMaximumShrinkFactor(float printingMaximimShrinkFactor); - float printingMaximumShrinkFactor() const; - static void setIconDatabasePath(const QString &location); static QString iconDatabasePath(); static void clearIconDatabase(); diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp index 55ce1f7..8ee43a1 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp @@ -251,7 +251,7 @@ void QWebView::setPage(QWebPage* page) \note The view remains the same until enough data has arrived to display the new \a url. - \sa setUrl(), url(), urlChanged(), guessUrlFromString() + \sa setUrl(), url(), urlChanged(), QUrl::fromUserInput() */ void QWebView::load(const QUrl &url) { @@ -759,8 +759,12 @@ void QWebView::paintEvent(QPaintEvent *ev) } /*! - This function is called whenever WebKit wants to create a new window of the given \a type, for example as a result of - a JavaScript request to open a document in a new window. + This function is called from the createWindow() method of the associated QWebPage, + each time the page wants to create a new window of the given \a type. This might + be the result, for example, of a JavaScript request to open a document in a new window. + + \note If the createWindow() method of the associated page is reimplemented, this + method is not called, unless explicitly done so in the reimplementation. \sa QWebPage::createWindow() */ diff --git a/src/3rdparty/webkit/WebKit/qt/ChangeLog b/src/3rdparty/webkit/WebKit/qt/ChangeLog index 296e06c..1294d66 100644 --- a/src/3rdparty/webkit/WebKit/qt/ChangeLog +++ b/src/3rdparty/webkit/WebKit/qt/ChangeLog @@ -1,3 +1,285 @@ +2009-11-16 Simon Hausmann <simon.hausmann@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + API documentation fixes. + + * Api/qgraphicswebview.cpp: Removed duplicate docs. + * Api/qwebelement.cpp: Added missing docs. + * Api/qwebsettings.cpp: Ditto. + +2009-11-14 Antonio Gomes <tonikitoo@webkit.org> + + Reviewed by Antti Koivisto. + + [Qt] Broken back/forward after using ErrorPageExtension to set error page + https://bugs.webkit.org/show_bug.cgi?id=30573 + + Implemented autotests for covering the back/forward + reset problem involving error pages. + + * tests/qwebpage/tst_qwebpage.cpp: + (tst_QWebPage::errorPageExtension): + +2009-11-16 Holger Hans Peter Freyther <zecke@selfish.org> + + Reviewed by NOBODY (OOPS!). + + [Qt] Do not show the QWidget when the WebCore::Widget is hidden + https://bugs.webkit.org/show_bug.cgi?id=31203 + + The clipping code was making a QWidget visible even if the + WebCore::Widget was hidden. Fix the bug by calling setVisible + only if the WebCore::Widget is shown. + + * WebCoreSupport/FrameLoaderClientQt.cpp: + (WebCore::QtPluginWidget::show): Override WebCore::Widget + (WebCore::QtPluginWidget::hide): Override WebCore::Widget + (WebCore::QtPluginWidget::handleVisibility): New method to call setVisible when we are visible + (FrameLoaderClientQt::createPlugin): Hide the QWidget by default + +2009-11-09 Benjamin Poulain <benjamin.poulain@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + https://bugs.webkit.org/show_bug.cgi?id=30628 + Add an API to get all the attributes from a QWebElement. + + * Api/qwebelement.cpp: + (QWebElement::attributesName): + * Api/qwebelement.h: + * tests/qwebelement/tst_qwebelement.cpp: + (tst_QWebElement::listAttributes): + +2009-11-13 Andras Becsi <becsi.andras@stud.u-szeged.hu> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Enable Page Cache if setMaximumPagesInCache needs it. + This fixes https://bugs.webkit.org/show_bug.cgi?id=31266. + + * Api/qwebsettings.cpp: + (QWebSettingsPrivate::apply): + (QWebSettings::setMaximumPagesInCache): + +2009-11-13 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + Reviewed by Simon Hausmann. + + Update documentation for the Qt API + + * Api/qgraphicswebview.cpp: + * Api/qwebelement.cpp: + * Api/qwebframe.cpp: + * Api/qwebsettings.cpp: + * Api/qwebview.cpp: + +2009-11-13 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + Reviewed by Simon Hausmann. + + Use correct install-path when running qdoc3 + + * docs/docs.pri: + +2009-11-12 Antonio Gomes <tonikitoo@webkit.org> + + Reviewed by Jan Alonzo. + + [Qt] Various doc fixes + https://bugs.webkit.org/show_bug.cgi?id=31358 + + QWebPage's constructor docs are mentioning "QWebView": + "Constructs an empty QWebView with parent". + + * Api/qwebpage.cpp: + +2009-11-11 Antonio Gomes <tonikitoo@webkit.org> + + Reviewed by Kenneth Christiansen. + + [Qt] Various doc fixes + https://bugs.webkit.org/show_bug.cgi?id=31358 + + Fixed wrong documentation: item's dimensions do fit to Web page + content by default. + + Kenneth agreed to land this as a followup patch to the + just landed documentation patch. + + * Api/qgraphicswebview.cpp: + +2009-11-11 David Boddie <dboddie@trolltech.com> + + Reviewed by Kenneth Christiansen. + + [Qt] Various doc fixes + https://bugs.webkit.org/show_bug.cgi?id=31323 + + Fixed and synchronized QWebView related documentation. + + * Api/qgraphicswebview.cpp: + * Api/qwebview.cpp: + +2009-11-09 Laszlo Gombos <laszlo.1.gombos@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Few classes have virtual functions but non-virtual destructor + https://bugs.webkit.org/show_bug.cgi?id=31269 + + * Api/qgraphicswebview.cpp: + (QGraphicsWebViewPrivate::~QGraphicsWebViewPrivate): Add virtual + destructor. + +2009-10-30 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + Reviewed by NOBODY (OOPS!). + + [Qt] Use the default timeout interval for JS as the HTML tokenizer delay for setHtml() + + This ensures that long-running JavaScript (for example due to a modal alert() dialog), + will not trigger a deferred load after only 500ms (the default tokenizer delay) while + still giving a reasonable timeout (10 seconds) to prevent deadlock. + + https://bugs.webkit.org/show_bug.cgi?id=29381 + + * Api/qwebframe.cpp: Document the behaviour + * WebCoreSupport/FrameLoaderClientQt.cpp: set the custom tokenizer delay for substitute loads + * tests/qwebframe/tst_qwebframe.cpp: Add test + +2009-11-13 Jocelyn Turcotte <jocelyn.turcotte@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + [Qt] Fix initial QWebView focus behavior. + + focusController->setFocused(true) was not always called. + https://bugs.webkit.org/show_bug.cgi?id=31466 + + * Api/qwebpage.cpp: + (QWebPagePrivate::focusInEvent): + +2009-11-12 Benjamin Poulain <benjamin.poulain@nokia.com> + + Reviewed by Kenneth Rohde Christiansen. + + Custom printing shrink factors + https://bugs.webkit.org/show_bug.cgi?id=29042 + + This reverts commit r49769. The public API for this needs to be reviewed + before its inclusion in Qt. + + * Api/qwebsettings.cpp: + (QWebSettingsPrivate::apply): + (QWebSettings::QWebSettings): + * Api/qwebsettings.h: + +2009-11-11 Liang QI <liang.qi@nokia.com> + Update documentation for the Qt API + + * Api/qgraphicswebview.cpp: + * Api/qwebelement.cpp: + * Api/qwebframe.cpp: + * Api/qwebsettings.cpp: + * Api/qwebview.cpp: + +2009-11-13 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> + + Reviewed by Simon Hausmann. + + + [Qt] Fix tst_qwebpage and tst_qwebframe compilation on Symbian. + + * tests/qwebframe/qwebframe.pro: + * tests/qwebframe/tst_qwebframe.cpp: + * tests/qwebpage/qwebpage.pro: + * tests/qwebpage/tst_qwebpage.cpp: + +2009-11-11 Kenneth Rohde Christiansen <kenneth@webkit.org> + + Reviewed by Simon Hausmann. + + Fix a crash in the layout test plugins/document-open.html + + * Api/qwebframe.cpp: + (QWebFrame::toPlainText): + +2009-11-11 Warwick Allison <warwick.allison@nokia.com>, Simon Hausmann <simon.hausmann@nokia.com> + + Reviewed by Tor Arne Vestbø. + + [Qt] Regression: Preserve the parent of plugin objects when using + QtWebKit with only a QWebPage. + + * WebCoreSupport/FrameLoaderClientQt.cpp: + (WebCore::FrameLoaderClientQt::createPlugin): Don't reparent + plugins to 0. + * tests/qwebpage/tst_qwebpage.cpp: + (PluginCounterPage::PluginCounterPage): Initialize m_pluginParent to 0. + (PluginCounterPage::~PluginCounterPage): Delete the plugin parent later + (after the page) + (PluginTracerPage::createPlugin): Assign a dummy parent to the plugin. + (PluginTracerPage::PluginTracerPage): Set up the plugin parent. + (tst_QWebPage::createViewlessPlugin): Verify that for viewless pages the + plugin parent remains unchanged. + +2009-11-11 David Boddie <dboddie@trolltech.com> + + [Qt] Doc: Added internal or hidden placeholder documentation. + + * Api/qwebpage.cpp: + +2009-11-11 Martin Smith <msmith@trolltech.com> + + [Qt] doc: Changed Trolltech to Nokia + + * Api/qwebview.cpp: + +2009-11-10 Kenneth Rohde Christiansen <kenneth@webkit.org> + + Unreviewed documentation fixes. + + Added a few improvements from Jocelyn Turcotte to the + createWindow docs. + + * Api/qwebview.cpp: + +2009-11-10 Kenneth Rohde Christiansen <kenneth@webkit.org> + + Unreviewed documentation fix. + + [Qt] Make qwebpage's createWindow not qwebview dependent. + https://bugs.webkit.org/show_bug.cgi?id=30771 + + Update documentation to make it clear that a reimplementation + of the createWindow method of the associated QWebPage can + result in the QWebView::createWindow method to never be called. + + * Api/qwebview.cpp: + +2009-11-11 Simon Hausmann <simon.hausmann@nokia.com> + + Reviewed by Tor Arne Vestbø. + + Fix enabling of software input panel when activating editable elements + in QGraphicsWebView. + + * Api/qgraphicswebview.cpp: + (QGraphicsWebViewPrivate::inputMethodEnabled): Implement method to + query for input method support. + * Api/qwebpage.cpp: + (QWebPageWidgetClient::inputMethodEnabled): Ditto for QWidget. + (QWebPagePrivate::handleSoftwareInputPanel): Don't use view() to + test for input method support. Instead query using QWebPageClient + and send the SIPR event to the ownerWidget() instead of the view(). + The latter is null for QGraphicsWebView. + * tests/qwebpage/tst_qwebpage.cpp: + (EventSpy::EventSpy): + (EventSpy::eventFilter): + (tst_QWebPage::inputMethods): Modify the test to verify that SIPR + events are dispatched when activating focusable content. + 2009-11-09 Benjamin Poulain <benjamin.poulain@nokia.com> Reviewed by Kenneth Rohde Christiansen. diff --git a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp index b580116..9e13339 100644 --- a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp +++ b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp @@ -37,6 +37,7 @@ #include "FrameTree.h" #include "FrameView.h" #include "DocumentLoader.h" +#include "JSDOMWindowBase.h" #include "MIMETypeRegistry.h" #include "ResourceResponse.h" #include "Page.h" @@ -770,8 +771,16 @@ bool FrameLoaderClientQt::shouldFallBack(const WebCore::ResourceError&) WTF::PassRefPtr<WebCore::DocumentLoader> FrameLoaderClientQt::createDocumentLoader(const WebCore::ResourceRequest& request, const SubstituteData& substituteData) { RefPtr<DocumentLoader> loader = DocumentLoader::create(request, substituteData); - if (substituteData.isValid()) + if (substituteData.isValid()) { loader->setDeferMainResourceDataLoad(false); + // Use the default timeout interval for JS as the HTML tokenizer delay. This ensures + // that long-running JavaScript will still allow setHtml() to be synchronous, while + // still giving a reasonable timeout to prevent deadlock. + double delay = JSDOMWindowBase::commonJSGlobalData()->timeoutChecker.timeoutInterval() / 1000.0f; + m_frame->page()->setCustomHTMLTokenizerTimeDelay(delay); + } else { + m_frame->page()->setCustomHTMLTokenizerTimeDelay(-1); + } return loader.release(); } @@ -1088,7 +1097,11 @@ const unsigned numqStyleSheetProperties = sizeof(qstyleSheetProperties) / sizeof class QtPluginWidget: public Widget { public: - QtPluginWidget(QWidget* w = 0): Widget(w) {} + QtPluginWidget(QWidget* w = 0) + : Widget(w) + , m_visible(false) + {} + ~QtPluginWidget() { if (platformWidget()) @@ -1119,10 +1132,37 @@ public: QRegion clipRegion = QRegion(clipRect); platformWidget()->setMask(clipRegion); + handleVisibility(); + } + + virtual void hide() + { + m_visible = false; + Widget::hide(); + } + + virtual void show() + { + m_visible = true; + if (!platformWidget()) + return; + + handleVisibility(); + } + +private: + void handleVisibility() + { + if (!m_visible) + return; + // if setMask is set with an empty QRegion, no clipping will // be performed, so in that case we hide the platformWidget - platformWidget()->setVisible(!clipRegion.isEmpty()); + QRegion mask = platformWidget()->mask(); + platformWidget()->setVisible(!mask.isEmpty()); } + + bool m_visible; }; #if QT_VERSION >= 0x040600 @@ -1233,13 +1273,12 @@ PassRefPtr<Widget> FrameLoaderClientQt::createPlugin(const IntSize& pluginSize, if (object) { QWidget* widget = qobject_cast<QWidget*>(object); if (widget) { - QWidget* parentWidget; + QWidget* parentWidget = 0; if (m_webFrame->page()->d->client) parentWidget = qobject_cast<QWidget*>(m_webFrame->page()->d->client->pluginParent()); - else - parentWidget = 0; // The plug-in won't be fully functional because the QWebView doesn't exist. - if (parentWidget) // don't reparent to nothing (i.e. keep whatever parent createPlugin() chose. + if (parentWidget) // don't reparent to nothing (i.e. keep whatever parent QWebPage::createPlugin() chose. widget->setParent(parentWidget); + widget->hide(); RefPtr<QtPluginWidget> w = adoptRef(new QtPluginWidget()); w->setPlatformWidget(widget); // Make sure it's invisible until properly placed into the layout @@ -1249,13 +1288,12 @@ PassRefPtr<Widget> FrameLoaderClientQt::createPlugin(const IntSize& pluginSize, #if QT_VERSION >= 0x040600 QGraphicsWidget* graphicsWidget = qobject_cast<QGraphicsWidget*>(object); if (graphicsWidget) { - QGraphicsObject* parentWidget; + QGraphicsObject* parentWidget = 0; if (m_webFrame->page()->d->client) parentWidget = qobject_cast<QGraphicsObject*>(m_webFrame->page()->d->client->pluginParent()); - else - parentWidget = 0; // The plug-in won't be fully functional because the QWebView doesn't exist. graphicsWidget->hide(); - graphicsWidget->setParentItem(parentWidget); + if (parentWidget) // don't reparent to nothing (i.e. keep whatever parent QWebPage::createPlugin() chose. + graphicsWidget->setParentItem(parentWidget); RefPtr<QtPluginGraphicsWidget> w = QtPluginGraphicsWidget::create(graphicsWidget); // Make sure it's invisible until properly placed into the layout w->setFrameRect(IntRect(0, 0, 0, 0)); diff --git a/src/3rdparty/webkit/WebKit/qt/docs/docs.pri b/src/3rdparty/webkit/WebKit/qt/docs/docs.pri index 4a8c165..804817b 100644 --- a/src/3rdparty/webkit/WebKit/qt/docs/docs.pri +++ b/src/3rdparty/webkit/WebKit/qt/docs/docs.pri @@ -1,9 +1,9 @@ include(../../../WebKit.pri) unix { - QDOC = SRCDIR=$$PWD/../../.. OUTPUT_DIR=$$OUTPUT_DIR $$(QTDIR)/tools/qdoc3/qdoc3 + QDOC = SRCDIR=$$PWD/../../.. OUTPUT_DIR=$$OUTPUT_DIR $$(QTDIR)/bin/qdoc3 } else { - QDOC = $$(QTDIR)\tools\qdoc3\release\qdoc3.exe + QDOC = $$(QTDIR)\bin\qdoc3.exe } unix { diff --git a/src/3rdparty/webkit/WebKit/qt/docs/qtwebkit.qdoc b/src/3rdparty/webkit/WebKit/qt/docs/qtwebkit.qdoc index 09dfae5..411762a 100644 --- a/src/3rdparty/webkit/WebKit/qt/docs/qtwebkit.qdoc +++ b/src/3rdparty/webkit/WebKit/qt/docs/qtwebkit.qdoc @@ -25,13 +25,10 @@ Qt Commercial Edition licensees that wish to distribute applications that use the QtWebKit module need to be aware of their obligations under the - GNU Lesser General Public License (LGPL). + GNU Library General Public License (LGPL). Developers using the Open Source Edition can choose to redistribute - the module under the appropriate version of the GNU LGPL; version 2.1 - for applications and libraries licensed under the GNU GPL version 2, - or version 3 for applications and libraries licensed under the GNU - GPL version 2. + the module under the appropriate version of the GNU LGPL. \legalese WebKit is licensed under the GNU Library General Public License. diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebelement/tst_qwebelement.cpp b/src/3rdparty/webkit/WebKit/qt/tests/qwebelement/tst_qwebelement.cpp index 117393a..a04e661 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qwebelement/tst_qwebelement.cpp +++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebelement/tst_qwebelement.cpp @@ -68,6 +68,7 @@ private slots: void simpleCollection(); void attributes(); void attributesNS(); + void listAttributes(); void classes(); void namespaceURI(); void iteration(); @@ -187,6 +188,29 @@ void tst_QWebElement::attributesNS() QCOMPARE(svg.attributeNS("http://www.w3.org/2000/svg", "foobar", "defaultblah"), QString("true")); } +void tst_QWebElement::listAttributes() +{ + QString content = "<html xmlns=\"http://www.w3.org/1999/xhtml\" " + "xmlns:svg=\"http://www.w3.org/2000/svg\">" + "<body><svg:svg foo=\"\" svg:bar=\"\">" + "</svg:svg></body></html>"; + + m_mainFrame->setContent(content.toUtf8(), "application/xhtml+xml"); + + QWebElement svg = m_mainFrame->findFirstElement("svg"); + QVERIFY(!svg.isNull()); + + QVERIFY(svg.attributeNames().contains("foo")); + QVERIFY(svg.attributeNames("http://www.w3.org/2000/svg").contains("bar")); + + svg.setAttributeNS("http://www.w3.org/2000/svg", "svg:foobar", "true"); + QVERIFY(svg.attributeNames().contains("foo")); + QStringList attributes = svg.attributeNames("http://www.w3.org/2000/svg"); + QCOMPARE(attributes.size(), 2); + QVERIFY(attributes.contains("bar")); + QVERIFY(attributes.contains("foobar")); +} + void tst_QWebElement::classes() { m_mainFrame->setHtml("<body><p class=\"a b c d a c\">Test"); @@ -971,7 +995,10 @@ void tst_QWebElement::render() QImage testImage(resource.width(), resource.height(), QImage::Format_ARGB32); QPainter painter0(&testImage); painter0.fillRect(imageRect, Qt::white); - painter0.drawImage(0, 0, resource); + //render() uses pixmaps internally, and pixmaps might have bit depths + // other than 32, giving different pixel values due to rounding. + QPixmap pix = QPixmap::fromImage(resource); + painter0.drawPixmap(0, 0, pix); painter0.end(); QImage image1(resource.width(), resource.height(), QImage::Format_ARGB32); diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp b/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp index 6f07e90..b00cf09 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp +++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp @@ -591,6 +591,7 @@ private slots: void setHtml(); void setHtmlWithResource(); void setHtmlWithBaseURL(); + void setHtmlWithJSAlert(); void ipv6HostEncoding(); void metaData(); void popupFocus(); @@ -2398,6 +2399,33 @@ void tst_QWebFrame::setHtmlWithBaseURL() QCOMPARE(m_view->page()->history()->count(), 0); } +class MyPage : public QWebPage +{ +public: + MyPage() : QWebPage(), alerts(0) {} + int alerts; + +protected: + virtual void javaScriptAlert(QWebFrame*, const QString& msg) + { + alerts++; + QCOMPARE(msg, QString("foo")); + // Should not be enough to trigger deferred loading, since we've upped the HTML + // tokenizer delay in the Qt frameloader. See HTMLTokenizer::continueProcessing() + QTest::qWait(1000); + } +}; + +void tst_QWebFrame::setHtmlWithJSAlert() +{ + QString html("<html><head></head><body><script>alert('foo');</script><p>hello world</p></body></html>"); + MyPage page; + m_view->setPage(&page); + page.mainFrame()->setHtml(html); + QCOMPARE(page.alerts, 1); + QCOMPARE(m_view->page()->mainFrame()->toHtml(), html); +} + class TestNetworkManager : public QNetworkAccessManager { public: diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp b/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp index 93a1784..7fc3640 100644 --- a/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp +++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp @@ -85,6 +85,22 @@ static bool waitForSignal(QObject* obj, const char* signal, int timeout = 10000) return timeoutSpy.isEmpty(); } +class EventSpy : public QObject, public QList<QEvent::Type> +{ + Q_OBJECT +public: + EventSpy(QObject* objectToSpy) + { + objectToSpy->installEventFilter(this); + } + + virtual bool eventFilter(QObject* receiver, QEvent* event) + { + append(event->type()); + return false; + } +}; + class tst_QWebPage : public QObject { Q_OBJECT @@ -646,20 +662,41 @@ class PluginCounterPage : public QWebPage { public: int m_count; QPointer<QObject> m_widget; - PluginCounterPage(QObject* parent = 0) : QWebPage(parent), m_count(0), m_widget(0) + QObject* m_pluginParent; + PluginCounterPage(QObject* parent = 0) + : QWebPage(parent) + , m_count(0) + , m_widget(0) + , m_pluginParent(0) { settings()->setAttribute(QWebSettings::PluginsEnabled, true); } + ~PluginCounterPage() + { + if (m_pluginParent) + m_pluginParent->deleteLater(); + } }; template<class T> class PluginTracerPage : public PluginCounterPage { public: - PluginTracerPage(QObject* parent = 0) : PluginCounterPage(parent) {} + PluginTracerPage(QObject* parent = 0) + : PluginCounterPage(parent) + { + // this is a dummy parent object for the created plugin + m_pluginParent = new T; + } virtual QObject* createPlugin(const QString&, const QUrl&, const QStringList&, const QStringList&) { m_count++; - return m_widget = new T(); + m_widget = new T; + // need a cast to the specific type, as QObject::setParent cannot be called, + // because it is not virtual. Instead it is necesary to call QWidget::setParent, + // which also takes a QWidget* instead of a QObject*. Therefore we need to + // upcast to T*, which is a QWidget. + static_cast<T*>(m_widget.data())->setParent(static_cast<T*>(m_pluginParent)); + return m_widget; } }; @@ -725,6 +762,8 @@ void tst_QWebPage::createViewlessPlugin() page->mainFrame()->setHtml(content); QCOMPARE(page->m_count, 1); QVERIFY(page->m_widget); + QVERIFY(page->m_pluginParent); + QVERIFY(page->m_widget->parent() == page->m_pluginParent); delete page; } @@ -1338,6 +1377,8 @@ void tst_QWebPage::inputMethods() "</body></html>"); page->mainFrame()->setFocus(); + EventSpy viewEventSpy(container); + QWebElementCollection inputs = page->mainFrame()->documentElement().findAll("input"); QMouseEvent evpres(QEvent::MouseButtonPress, inputs.at(0).geometry().center(), Qt::LeftButton, Qt::NoButton, Qt::NoModifier); @@ -1345,15 +1386,27 @@ void tst_QWebPage::inputMethods() QMouseEvent evrel(QEvent::MouseButtonRelease, inputs.at(0).geometry().center(), Qt::LeftButton, Qt::NoButton, Qt::NoModifier); page->event(&evrel); +#if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0) + QVERIFY(!viewEventSpy.contains(QEvent::RequestSoftwareInputPanel)); +#endif + viewEventSpy.clear(); + + page->event(&evpres); + page->event(&evrel); + +#if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0) + QVERIFY(viewEventSpy.contains(QEvent::RequestSoftwareInputPanel)); +#endif + //ImMicroFocus QVariant variant = page->inputMethodQuery(Qt::ImMicroFocus); QRect focusRect = variant.toRect(); QVERIFY(inputs.at(0).geometry().contains(variant.toRect().topLeft())); //ImFont - variant = page->inputMethodQuery(Qt::ImFont); - QFont font = variant.value<QFont>(); - QCOMPARE(QString("-webkit-serif"), font.family()); + //variant = page->inputMethodQuery(Qt::ImFont); + //QFont font = variant.value<QFont>(); + //QCOMPARE(QString("-webkit-serif"), font.family()); QList<QInputMethodEvent::Attribute> inputAttributes; @@ -1604,6 +1657,22 @@ void tst_QWebPage::errorPageExtension() QCOMPARE(page->history()->canGoBack(), true); QCOMPARE(page->history()->canGoForward(), false); + page->triggerAction(QWebPage::Back); + QTest::qWait(2000); + QCOMPARE(page->history()->canGoBack(), false); + QCOMPARE(page->history()->canGoForward(), true); + + page->triggerAction(QWebPage::Forward); + QTest::qWait(2000); + QCOMPARE(page->history()->canGoBack(), true); + QCOMPARE(page->history()->canGoForward(), false); + + page->triggerAction(QWebPage::Back); + QTest::qWait(2000); + QCOMPARE(page->history()->canGoBack(), false); + QCOMPARE(page->history()->canGoForward(), true); + QCOMPARE(page->history()->currentItem().url(), QUrl("qrc:///frametest/index.html")); + m_view->setPage(0); } diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp index c1da692..8255e18 100644 --- a/src/corelib/animation/qabstractanimation.cpp +++ b/src/corelib/animation/qabstractanimation.cpp @@ -668,7 +668,7 @@ int QAbstractAnimation::currentLoopTime() const The animation's current time starts at 0, and ends at totalDuration(). - \sa loopCount, currentLoopTime + \sa loopCount, currentLoopTime() */ int QAbstractAnimation::currentTime() const { diff --git a/src/corelib/animation/qpropertyanimation.cpp b/src/corelib/animation/qpropertyanimation.cpp index 3065083..013ff7f 100644 --- a/src/corelib/animation/qpropertyanimation.cpp +++ b/src/corelib/animation/qpropertyanimation.cpp @@ -58,12 +58,12 @@ an example: \code - QPropertyAnimation animation(myWidget, "geometry"); - animation.setDuration(10000); - animation.setStartValue(QRect(0, 0, 100, 30)); - animation.setEndValue(QRect(250, 250, 100, 30)); + QPropertyAnimation *animation = new QPropertyAnimation(myWidget, "geometry"); + animation->setDuration(10000); + animation->setStartValue(QRect(0, 0, 100, 30)); + animation->setEndValue(QRect(250, 250, 100, 30)); - animation.start(); + animation->start(); \endcode The property name and the QObject instance of which property diff --git a/src/corelib/animation/qsequentialanimationgroup.cpp b/src/corelib/animation/qsequentialanimationgroup.cpp index 861e26e..5dbb8c3 100644 --- a/src/corelib/animation/qsequentialanimationgroup.cpp +++ b/src/corelib/animation/qsequentialanimationgroup.cpp @@ -63,12 +63,12 @@ pause to a sequential animation group. \code - QSequentialAnimationGroup group; + QSequentialAnimationGroup *group = new QSequentialAnimationGroup; - group.addAnimation(anim1); - group.addAnimation(anim2); + group->addAnimation(anim1); + group->addAnimation(anim2); - group.start(); + group->start(); \endcode In this example, \c anim1 and \c anim2 are two already set up diff --git a/src/corelib/arch/armv6/qatomic_generic_armv6.cpp b/src/corelib/arch/armv6/qatomic_generic_armv6.cpp new file mode 100644 index 0000000..3078662 --- /dev/null +++ b/src/corelib/arch/armv6/qatomic_generic_armv6.cpp @@ -0,0 +1,260 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module 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$ +** +** This file implements the generic atomics interface using ARMv6 assembly +** instructions. It is more efficent than the inline versions when Qt is +** built for the THUMB instruction set, as the required instructions are +** only available in ARM state. +****************************************************************************/ + +#include <QtCore/qglobal.h> + +#ifdef QT_HAVE_ARMV6 + +QT_BEGIN_NAMESPACE + +QT_USE_NAMESPACE + +#ifdef Q_CC_RVCT +#pragma push +#pragma arm +Q_CORE_EXPORT asm +bool QBasicAtomicInt_testAndSetOrdered(volatile int *_q_value, int expectedValue, int newValue) +{ + CODE32 + //R0 = _q_value + //R1 = expectedValue + //R2 = newValue +retry_testAndSetOrdered + LDREX r3,[r0] //r3 = *_q_value + EORS r3,r3,r1 //if (r3 == expectedValue) { + STREXEQ r3,r2,[r0] //*_q_value = newvalue, r3 = error + TEQEQ r3,#1 //if error + BEQ retry_testAndSetOrdered //then goto retry } + RSBS r0,r3,#1 //return (r3 == 0) + MOVCC r0,#0 + BX r14 +} + +Q_CORE_EXPORT asm +int QBasicAtomicInt_fetchAndStoreOrdered(volatile int *_q_value, int newValue) +{ + CODE32 +//R0 = _q_value +//R1 = newValue +retry_fetchAndStoreOrdered + LDREX r3,[r0] //r3 = *_q_value + STREX r2,r1,[r0] //*_q_value = newValue, r2 = error + TEQ r2,#0 //if error + BNE retry_fetchAndStoreOrdered //then goto retry + MOV r0,r3 //return r3 + BX r14 +} + +Q_CORE_EXPORT asm +int QBasicAtomicInt_fetchAndAddOrdered(volatile int *_q_value, int valueToAdd) +{ + CODE32 + //R0 = _q_value + //R1 = valueToAdd + STMDB sp!,{r12,lr} +retry_fetchAndAddOrdered + LDREX r2,[r0] //r2 = *_q_value + ADD r3,r2,r1 //r3 = r2 + r1 + STREX r12,r3,[r0] //*_q_value = r3, r12 = error + TEQ r12,#0 //if error + BNE retry_fetchAndAddOrdered //then retry + MOV r0,r2 //return r2 + LDMIA sp!,{r12,pc} +} + +Q_CORE_EXPORT asm +bool QBasicAtomicPointer_testAndSetOrdered(void * volatile *_q_value, + void *expectedValue, + void *newValue) +{ + CODE32 + //R0 = _q_value + //R1 = expectedValue + //R2 = newValue +retryPointer_testAndSetOrdered + LDREX r3,[r0] //r3 = *_q_value + EORS r3,r3,r1 //if (r3 == expectedValue) { + STREXEQ r3,r2,[r0] //*_q_value = newvalue, r3 = error + TEQEQ r3,#1 //if error + BEQ retryPointer_testAndSetOrdered //then goto retry } + RSBS r0,r3,#1 //return (r3 == 0) + MOVCC r0,#0 + BX r14 +} + +Q_CORE_EXPORT asm +void *QBasicAtomicPointer_fetchAndStoreOrdered(void * volatile *_q_value, void *newValue) +{ + CODE32 + //R0 = _q_value + //R1 = newValue +retryPointer_fetchAndStoreOrdered + LDREX r3,[r0] //r3 = *_q_value + STREX r2,r1,[r0] //*_q_value = newValue, r2 = error + TEQ r2,#0 //if error + BNE retryPointer_fetchAndStoreOrdered //then goto retry + MOV r0,r3 //return r3 + BX r14 +} + +Q_CORE_EXPORT asm +void *QBasicAtomicPointer_fetchAndAddOrdered(void * volatile *_q_value, qptrdiff valueToAdd) +{ + CODE32 + //R0 = _q_value + //R1 = valueToAdd + STMDB sp!,{r12,lr} +retryPointer_fetchAndAddOrdered + LDREX r2,[r0] //r2 = *_q_value + ADD r3,r2,r1 //r3 = r2 + r1 + STREX r12,r3,[r0] //*_q_value = r3, r12 = error + TEQ r12,#0 //if error + BNE retryPointer_fetchAndAddOrdered //then retry + MOV r0,r2 //return r2 + LDMIA sp!,{r12,pc} +} + +#pragma pop +#elif defined (Q_CC_GCCE) +Q_CORE_EXPORT __declspec( naked ) +bool QBasicAtomicInt_testAndSetOrdered(volatile int *_q_value, int expectedValue, int newValue) +{ + //R0 = _q_value + //R1 = expectedValue + //R2 = newValue + asm("retry_testAndSetOrdered:"); + asm(" LDREX r3,[r0]"); //r3 = *_q_value + asm(" EORS r3,r3,r1"); //if (r3 == expectedValue) { + asm(" STREXEQ r3,r2,[r0]"); //*_q_value = newvalue, r3 = error + asm(" TEQEQ r3,#1"); //if error + asm(" BEQ retry_testAndSetOrdered"); //then goto retry } + asm(" RSBS r0,r3,#1"); //return (r3 == 0) + asm(" MOVCC r0,#0"); + asm(" BX r14"); +} + +Q_CORE_EXPORT __declspec( naked ) +int QBasicAtomicInt_fetchAndStoreOrdered(volatile int *_q_value, int newValue) +{ +//R0 = _q_value +//R1 = newValue + asm("retry_fetchAndStoreOrdered:"); + asm(" LDREX r3,[r0]"); //r3 = *_q_value + asm(" STREX r2,r1,[r0]"); //*_q_value = newValue, r2 = error + asm(" TEQ r2,#0"); //if error + asm(" BNE retry_fetchAndStoreOrdered"); //then goto retry + asm(" MOV r0,r3"); //return r3 + asm(" BX r14"); +} + +Q_CORE_EXPORT __declspec( naked ) +int QBasicAtomicInt_fetchAndAddOrdered(volatile int *_q_value, int valueToAdd) +{ + //R0 = _q_value + //R1 = valueToAdd + asm(" STMDB sp!,{r12,lr}"); + asm("retry_fetchAndAddOrdered:"); + asm(" LDREX r2,[r0]"); //r2 = *_q_value + asm(" ADD r3,r2,r1 "); //r3 = r2 + r1 + asm(" STREX r12,r3,[r0]"); //*_q_value = r3, r12 = error + asm(" TEQ r12,#0"); //if error + asm(" BNE retry_fetchAndAddOrdered"); //then retry + asm(" MOV r0,r2"); //return r2 + asm(" LDMIA sp!,{r12,pc}"); +} + +Q_CORE_EXPORT __declspec( naked ) +bool QBasicAtomicPointer_testAndSetOrdered(void * volatile *_q_value, + void *expectedValue, + void *newValue) +{ + //R0 = _q_value + //R1 = expectedValue + //R2 = newValue + asm("retryPointer_testAndSetOrdered:"); + asm(" LDREX r3,[r0]"); //r3 = *_q_value + asm(" EORS r3,r3,r1"); //if (r3 == expectedValue) { + asm(" STREXEQ r3,r2,[r0]"); //*_q_value = newvalue, r3 = error + asm(" TEQEQ r3,#1"); //if error + asm(" BEQ retryPointer_testAndSetOrdered"); //then goto retry } + asm(" RSBS r0,r3,#1"); //return (r3 == 0) + asm(" MOVCC r0,#0"); + asm(" BX r14"); +} + +Q_CORE_EXPORT __declspec( naked ) +void *QBasicAtomicPointer_fetchAndStoreOrdered(void * volatile *_q_value, void *newValue) +{ + //R0 = _q_value + //R1 = newValue + asm("retryPointer_fetchAndStoreOrdered:"); + asm(" LDREX r3,[r0]"); //r3 = *_q_value + asm(" STREX r2,r1,[r0]"); //*_q_value = newValue, r2 = error + asm(" TEQ r2,#0"); //if error + asm(" BNE retryPointer_fetchAndStoreOrdered"); //then goto retry + asm(" MOV r0,r3"); //return r3 + asm(" BX r14"); +} + +Q_CORE_EXPORT __declspec( naked ) +void *QBasicAtomicPointer_fetchAndAddOrdered(void * volatile *_q_value, qptrdiff valueToAdd) +{ + //R0 = _q_value + //R1 = valueToAdd + asm(" STMDB sp!,{r12,lr}"); + asm("retryPointer_fetchAndAddOrdered:"); + asm(" LDREX r2,[r0]"); //r2 = *_q_value + asm(" ADD r3,r2,r1"); //r3 = r2 + r1 + asm(" STREX r12,r3,[r0]"); //*_q_value = r3, r12 = error + asm(" TEQ r12,#0"); //if error + asm(" BNE retryPointer_fetchAndAddOrdered"); //then retry + asm(" MOV r0,r2"); //return r2 + asm(" LDMIA sp!,{r12,pc}"); +} +#else +#error unknown arm compiler +#endif +QT_END_NAMESPACE +#endif diff --git a/src/corelib/arch/qatomic_armv6.h b/src/corelib/arch/qatomic_armv6.h index 6862638..1e9f0c4 100644 --- a/src/corelib/arch/qatomic_armv6.h +++ b/src/corelib/arch/qatomic_armv6.h @@ -45,7 +45,6 @@ QT_BEGIN_HEADER QT_BEGIN_NAMESPACE - #define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_ALWAYS_NATIVE inline bool QBasicAtomicInt::isReferenceCountingNative() @@ -101,6 +100,8 @@ template <typename T> Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndAddWaitFree() { return false; } +#ifndef Q_CC_RVCT + inline bool QBasicAtomicInt::ref() { register int newValue; @@ -155,21 +156,6 @@ inline bool QBasicAtomicInt::testAndSetOrdered(int expectedValue, int newValue) return result == 0; } -inline bool QBasicAtomicInt::testAndSetRelaxed(int expectedValue, int newValue) -{ - return testAndSetOrdered(expectedValue, newValue); -} - -inline bool QBasicAtomicInt::testAndSetAcquire(int expectedValue, int newValue) -{ - return testAndSetOrdered(expectedValue, newValue); -} - -inline bool QBasicAtomicInt::testAndSetRelease(int expectedValue, int newValue) -{ - return testAndSetOrdered(expectedValue, newValue); -} - inline int QBasicAtomicInt::fetchAndStoreOrdered(int newValue) { register int originalValue; @@ -188,21 +174,6 @@ inline int QBasicAtomicInt::fetchAndStoreOrdered(int newValue) return originalValue; } -inline int QBasicAtomicInt::fetchAndStoreRelaxed(int newValue) -{ - return fetchAndStoreOrdered(newValue); -} - -inline int QBasicAtomicInt::fetchAndStoreAcquire(int newValue) -{ - return fetchAndStoreOrdered(newValue); -} - -inline int QBasicAtomicInt::fetchAndStoreRelease(int newValue) -{ - return fetchAndStoreOrdered(newValue); -} - inline int QBasicAtomicInt::fetchAndAddOrdered(int valueToAdd) { register int originalValue; @@ -224,21 +195,6 @@ inline int QBasicAtomicInt::fetchAndAddOrdered(int valueToAdd) return originalValue; } -inline int QBasicAtomicInt::fetchAndAddRelaxed(int valueToAdd) -{ - return fetchAndAddOrdered(valueToAdd); -} - -inline int QBasicAtomicInt::fetchAndAddAcquire(int valueToAdd) -{ - return fetchAndAddOrdered(valueToAdd); -} - -inline int QBasicAtomicInt::fetchAndAddRelease(int valueToAdd) -{ - return fetchAndAddOrdered(valueToAdd); -} - template <typename T> Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetOrdered(T *expectedValue, T *newValue) { @@ -259,24 +215,6 @@ Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetOrdered(T *expectedValu } template <typename T> -Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelaxed(T *expectedValue, T *newValue) -{ - return testAndSetOrdered(expectedValue, newValue); -} - -template <typename T> -Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetAcquire(T *expectedValue, T *newValue) -{ - return testAndSetOrdered(expectedValue, newValue); -} - -template <typename T> -Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelease(T *expectedValue, T *newValue) -{ - return testAndSetOrdered(expectedValue, newValue); -} - -template <typename T> Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreOrdered(T *newValue) { register T *originalValue; @@ -296,24 +234,6 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreOrdered(T *newValue) } template <typename T> -Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelaxed(T *newValue) -{ - return fetchAndStoreOrdered(newValue); -} - -template <typename T> -Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreAcquire(T *newValue) -{ - return fetchAndStoreOrdered(newValue); -} - -template <typename T> -Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelease(T *newValue) -{ - return fetchAndStoreOrdered(newValue); -} - -template <typename T> Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueToAdd) { register T *originalValue; @@ -335,6 +255,226 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueTo return originalValue; } +#else +// This is Q_CC_RVCT + +// RVCT inline assembly documentation: +// http://www.keil.com/support/man/docs/armcc/armcc_chdcffdb.htm +// RVCT embedded assembly documentation: +// http://www.keil.com/support/man/docs/armcc/armcc_chddbeib.htm + +// save our pragma state and switch to ARM mode +#pragma push +#pragma arm + +inline bool QBasicAtomicInt::ref() +{ + register int newValue; + register int result; + retry: + __asm { + ldrex newValue, [&_q_value] + add newValue, newValue, #1 + strex result, newValue, [&_q_value] + teq result, #0 + bne retry + } + return newValue != 0; +} + +inline bool QBasicAtomicInt::deref() +{ + register int newValue; + register int result; + retry: + __asm { + ldrex newValue, [&_q_value] + sub newValue, newValue, #1 + strex result, newValue, [&_q_value] + teq result, #0 + bne retry + } + return newValue != 0; +} + +inline bool QBasicAtomicInt::testAndSetOrdered(int expectedValue, int newValue) +{ + register int result; + retry: + __asm { + ldrex result, [&_q_value] + eors result, result, expectedValue + strexeq result, newValue, [&_q_value] + teqeq result, #1 + beq retry + } + return result == 0; +} + +inline int QBasicAtomicInt::fetchAndStoreOrdered(int newValue) +{ + register int originalValue; + register int result; + retry: + __asm { + ldrex originalValue, [&_q_value] + strex result, newValue, [&_q_value] + teq result, #0 + bne retry + } + return originalValue; +} + +inline int QBasicAtomicInt::fetchAndAddOrdered(int valueToAdd) +{ + register int originalValue; + register int newValue; + register int result; + retry: + __asm { + ldrex originalValue, [&_q_value] + add newValue, originalValue, valueToAdd + strex result, newValue, [&_q_value] + teq result, #0 + bne retry + } + return originalValue; +} + +template <typename T> +Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetOrdered(T *expectedValue, T *newValue) +{ + register T *result; + retry: + __asm { + ldrex result, [&_q_value] + eors result, result, expectedValue + strexeq result, newValue, [&_q_value] + teqeq result, #1 + beq retry + } + return result == 0; +} + +template <typename T> +Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreOrdered(T *newValue) +{ + register T *originalValue; + register int result; + retry: + __asm { + ldrex originalValue, [&_q_value] + strex result, newValue, [&_q_value] + teq result, #0 + bne retry + } + return originalValue; +} + +template <typename T> +Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueToAdd) +{ + register T *originalValue; + register T *newValue; + register int result; + retry: + __asm { + ldrex originalValue, [&_q_value] + add newValue, originalValue, valueToAdd * sizeof(T) + strex result, newValue, [&_q_value] + teq result, #0 + bne retry + } + return originalValue; +} + +// go back to the previous pragma state (probably Thumb mode) +#pragma pop +#endif + +// common code + +inline bool QBasicAtomicInt::testAndSetRelaxed(int expectedValue, int newValue) +{ + return testAndSetOrdered(expectedValue, newValue); +} + +inline bool QBasicAtomicInt::testAndSetAcquire(int expectedValue, int newValue) +{ + return testAndSetOrdered(expectedValue, newValue); +} + +inline bool QBasicAtomicInt::testAndSetRelease(int expectedValue, int newValue) +{ + return testAndSetOrdered(expectedValue, newValue); +} + +inline int QBasicAtomicInt::fetchAndStoreRelaxed(int newValue) +{ + return fetchAndStoreOrdered(newValue); +} + +inline int QBasicAtomicInt::fetchAndStoreAcquire(int newValue) +{ + return fetchAndStoreOrdered(newValue); +} + +inline int QBasicAtomicInt::fetchAndStoreRelease(int newValue) +{ + return fetchAndStoreOrdered(newValue); +} + +inline int QBasicAtomicInt::fetchAndAddRelaxed(int valueToAdd) +{ + return fetchAndAddOrdered(valueToAdd); +} + +inline int QBasicAtomicInt::fetchAndAddAcquire(int valueToAdd) +{ + return fetchAndAddOrdered(valueToAdd); +} + +inline int QBasicAtomicInt::fetchAndAddRelease(int valueToAdd) +{ + return fetchAndAddOrdered(valueToAdd); +} + +template <typename T> +Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelaxed(T *expectedValue, T *newValue) +{ + return testAndSetOrdered(expectedValue, newValue); +} + +template <typename T> +Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetAcquire(T *expectedValue, T *newValue) +{ + return testAndSetOrdered(expectedValue, newValue); +} + +template <typename T> +Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelease(T *expectedValue, T *newValue) +{ + return testAndSetOrdered(expectedValue, newValue); +} + +template <typename T> +Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelaxed(T *newValue) +{ + return fetchAndStoreOrdered(newValue); +} + +template <typename T> +Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreAcquire(T *newValue) +{ + return fetchAndStoreOrdered(newValue); +} + +template <typename T> +Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelease(T *newValue) +{ + return fetchAndStoreOrdered(newValue); +} + template <typename T> Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelaxed(qptrdiff valueToAdd) { diff --git a/src/corelib/arch/qatomic_symbian.h b/src/corelib/arch/qatomic_symbian.h index 3721aca..92f6ef9 100644 --- a/src/corelib/arch/qatomic_symbian.h +++ b/src/corelib/arch/qatomic_symbian.h @@ -42,12 +42,8 @@ #ifndef QATOMIC_SYMBIAN_H #define QATOMIC_SYMBIAN_H -#if defined(Q_CC_RVCT) -# define QT_NO_ARM_EABI -# include <QtCore/qatomic_arm.h> -#elif defined(Q_CC_NOKIAX86) || defined(Q_CC_GCCE) -# include <QtCore/qatomic_generic.h> -#endif +#include <qglobal.h> +#include <e32std.h> QT_BEGIN_HEADER @@ -55,7 +51,232 @@ QT_BEGIN_NAMESPACE QT_MODULE(Core) -// Empty, but needed to avoid warnings +#define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_SOMETIMES_NATIVE + +inline bool QBasicAtomicInt::isReferenceCountingWaitFree() +{ return false; } + +#define Q_ATOMIC_INT_TEST_AND_SET_IS_SOMETIMES_NATIVE + +inline bool QBasicAtomicInt::isTestAndSetWaitFree() +{ return false; } + +#define Q_ATOMIC_INT_FETCH_AND_STORE_IS_SOMETIMES_NATIVE + +inline bool QBasicAtomicInt::isFetchAndStoreWaitFree() +{ return false; } + +#define Q_ATOMIC_INT_FETCH_AND_ADD_IS_SOMETIMES_NATIVE + +inline bool QBasicAtomicInt::isFetchAndAddWaitFree() +{ return false; } + +#define Q_ATOMIC_POINTER_TEST_AND_SET_IS_SOMETIMES_NATIVE + +Q_CORE_EXPORT bool QBasicAtomicPointer_isTestAndSetNative(); +template <typename T> +Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isTestAndSetNative() +{ return QBasicAtomicPointer_isTestAndSetNative(); } +template <typename T> +Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isTestAndSetWaitFree() +{ return false; } + +#define Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_SOMETIMES_NATIVE + +Q_CORE_EXPORT bool QBasicAtomicPointer_isFetchAndStoreNative(); +template <typename T> +Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndStoreNative() +{ return QBasicAtomicPointer_isFetchAndStoreNative(); } +template <typename T> +Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndStoreWaitFree() +{ return false; } + +#define Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_SOMETIMES_NATIVE + +Q_CORE_EXPORT bool QBasicAtomicPointer_isFetchAndAddNative(); +template <typename T> +Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndAddNative() +{ return QBasicAtomicPointer_isFetchAndAddNative(); } +template <typename T> +Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndAddWaitFree() +{ return false; } + +Q_CORE_EXPORT bool QBasicAtomicInt_testAndSetOrdered(volatile int *, int, int); +Q_CORE_EXPORT int QBasicAtomicInt_fetchAndStoreOrdered(volatile int *, int); +Q_CORE_EXPORT int QBasicAtomicInt_fetchAndAddOrdered(volatile int *, int); + +Q_CORE_EXPORT bool QBasicAtomicPointer_testAndSetOrdered(void * volatile *, void *, void *); +Q_CORE_EXPORT void *QBasicAtomicPointer_fetchAndStoreOrdered(void * volatile *, void *); +Q_CORE_EXPORT void *QBasicAtomicPointer_fetchAndAddOrdered(void * volatile *, qptrdiff); + +// Reference counting + +//LockedInc and LockedDec are machine coded for ARMv6 (and future proof) +inline bool QBasicAtomicInt::ref() +{ + int original = User::LockedInc((TInt&)_q_value); + return original != -1; +} + +inline bool QBasicAtomicInt::deref() +{ + int original = User::LockedDec((TInt&)_q_value); + return original != 1; +} + +// Test and set for integers + +inline bool QBasicAtomicInt::testAndSetOrdered(int expectedValue, int newValue) +{ + return QBasicAtomicInt_testAndSetOrdered(&_q_value, expectedValue, newValue); +} + +inline bool QBasicAtomicInt::testAndSetRelaxed(int expectedValue, int newValue) +{ + return testAndSetOrdered(expectedValue, newValue); +} + +inline bool QBasicAtomicInt::testAndSetAcquire(int expectedValue, int newValue) +{ + return testAndSetOrdered(expectedValue, newValue); +} + +inline bool QBasicAtomicInt::testAndSetRelease(int expectedValue, int newValue) +{ + return testAndSetOrdered(expectedValue, newValue); +} + +// Fetch and store for integers + +inline int QBasicAtomicInt::fetchAndStoreOrdered(int newValue) +{ + return QBasicAtomicInt_fetchAndStoreOrdered(&_q_value, newValue); +} + +inline int QBasicAtomicInt::fetchAndStoreRelaxed(int newValue) +{ + return fetchAndStoreOrdered(newValue); +} + +inline int QBasicAtomicInt::fetchAndStoreAcquire(int newValue) +{ + return fetchAndStoreOrdered(newValue); +} + +inline int QBasicAtomicInt::fetchAndStoreRelease(int newValue) +{ + return fetchAndStoreOrdered(newValue); +} + +// Fetch and add for integers + +inline int QBasicAtomicInt::fetchAndAddOrdered(int valueToAdd) +{ + return QBasicAtomicInt_fetchAndAddOrdered(&_q_value, valueToAdd); +} + +inline int QBasicAtomicInt::fetchAndAddRelaxed(int valueToAdd) +{ + return fetchAndAddOrdered(valueToAdd); +} + +inline int QBasicAtomicInt::fetchAndAddAcquire(int valueToAdd) +{ + return fetchAndAddOrdered(valueToAdd); +} + +inline int QBasicAtomicInt::fetchAndAddRelease(int valueToAdd) +{ + return fetchAndAddOrdered(valueToAdd); +} + +// Test and set for pointers + +template <typename T> +Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetOrdered(T *expectedValue, T *newValue) +{ + union { T * volatile * typed; void * volatile * voidp; } pointer; + pointer.typed = &_q_value; + return QBasicAtomicPointer_testAndSetOrdered(pointer.voidp, expectedValue, newValue); +} + +template <typename T> +Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelaxed(T *expectedValue, T *newValue) +{ + return testAndSetOrdered(expectedValue, newValue); +} + +template <typename T> +Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetAcquire(T *expectedValue, T *newValue) +{ + return testAndSetOrdered(expectedValue, newValue); +} + +template <typename T> +Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelease(T *expectedValue, T *newValue) +{ + return testAndSetOrdered(expectedValue, newValue); +} + +// Fetch and store for pointers + +template <typename T> +Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreOrdered(T *newValue) +{ + union { T * volatile * typed; void * volatile * voidp; } pointer; + union { T *typed; void *voidp; } returnValue; + pointer.typed = &_q_value; + returnValue.voidp = QBasicAtomicPointer_fetchAndStoreOrdered(pointer.voidp, newValue); + return returnValue.typed; +} + +template <typename T> +Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelaxed(T *newValue) +{ + return fetchAndStoreOrdered(newValue); +} + +template <typename T> +Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreAcquire(T *newValue) +{ + return fetchAndStoreOrdered(newValue); +} + +template <typename T> +Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelease(T *newValue) +{ + return fetchAndStoreOrdered(newValue); +} + +// Fetch and add for pointers + +template <typename T> +Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueToAdd) +{ + union { T * volatile *typed; void * volatile *voidp; } pointer; + union { T *typed; void *voidp; } returnValue; + pointer.typed = &_q_value; + returnValue.voidp = QBasicAtomicPointer_fetchAndAddOrdered(pointer.voidp, valueToAdd * sizeof(T)); + return returnValue.typed; +} + +template <typename T> +Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelaxed(qptrdiff valueToAdd) +{ + return fetchAndAddOrdered(valueToAdd); +} + +template <typename T> +Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddAcquire(qptrdiff valueToAdd) +{ + return fetchAndAddOrdered(valueToAdd); +} + +template <typename T> +Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelease(qptrdiff valueToAdd) +{ + return fetchAndAddOrdered(valueToAdd); +} QT_END_NAMESPACE diff --git a/src/corelib/arch/symbian/arch.pri b/src/corelib/arch/symbian/arch.pri index deb94b1..3ef1c9e 100644 --- a/src/corelib/arch/symbian/arch.pri +++ b/src/corelib/arch/symbian/arch.pri @@ -2,4 +2,4 @@ # Symbian architecture # SOURCES += $$QT_ARCH_CPP/qatomic_symbian.cpp \ - $$QT_ARCH_CPP/../generic/qatomic_generic_unix.cpp + $$QT_ARCH_CPP/../armv6/qatomic_generic_armv6.cpp diff --git a/src/corelib/arch/symbian/qatomic_symbian.cpp b/src/corelib/arch/symbian/qatomic_symbian.cpp index 8f02155..91b49c7 100644 --- a/src/corelib/arch/symbian/qatomic_symbian.cpp +++ b/src/corelib/arch/symbian/qatomic_symbian.cpp @@ -50,7 +50,7 @@ QT_BEGIN_NAMESPACE // This way we can report on heap cells and handles that are really not owned by anything which still exists. // This information can be used to detect whether memory leaks are happening, particularly if these numbers grow as the app is used more. // This code is placed here as it happens to make it the very last static to be destroyed in a Qt app. The -// reason assumed is that this file appears before any other file declaring static data in the generated +// reason assumed is that this file appears before any other file declaring static data in the generated // Symbian MMP file. This particular file was chosen as it is the earliest symbian specific file. struct QSymbianPrintExitInfo { @@ -77,37 +77,158 @@ struct QSymbianPrintExitInfo TInt initThreadHandleCount; } symbian_printExitInfo; -QT_END_NAMESPACE +Q_CORE_EXPORT bool QBasicAtomicInt::isReferenceCountingNative() +{ +#ifdef QT_HAVE_ARMV6 + return true; +#else + return false; +#endif +} +Q_CORE_EXPORT bool QBasicAtomicInt::isTestAndSetNative() +{ +#ifdef QT_HAVE_ARMV6 + return true; +#else + return false; +#endif +} -#if defined(Q_CC_RVCT) +Q_CORE_EXPORT bool QBasicAtomicInt::isFetchAndStoreNative() +{ +#ifdef QT_HAVE_ARMV6 + return true; +#else + return false; +#endif +} -#include "../arm/qatomic_arm.cpp" +Q_CORE_EXPORT bool QBasicAtomicInt::isFetchAndAddNative() +{ +#ifdef QT_HAVE_ARMV6 + return true; +#else + return false; +#endif +} -QT_BEGIN_NAMESPACE +Q_CORE_EXPORT bool QBasicAtomicPointer_isTestAndSetNative() +{ +#ifdef QT_HAVE_ARMV6 + return true; +#else + return false; +#endif +} -Q_CORE_EXPORT __asm char q_atomic_swp(volatile char *ptr, char newval) +Q_CORE_EXPORT bool QBasicAtomicPointer_isFetchAndStoreNative() { - add r2, pc, #0 - bx r2 - arm - swpb r2,r1,[r0] - mov r0, r2 - bx lr - thumb +#ifdef QT_HAVE_ARMV6 + return true; +#else + return false; +#endif } -Q_CORE_EXPORT __asm int QBasicAtomicInt::fetchAndStoreOrdered(int newValue) +Q_CORE_EXPORT bool QBasicAtomicPointer_isFetchAndAddNative() { - add r2, pc, #0 - bx r2 - arm - swp r2,r1,[r0] - mov r0, r2 - bx lr - thumb +#ifdef QT_HAVE_ARMV6 + return true; +#else + return false; +#endif } -QT_END_NAMESPACE +//For ARMv6, the generic atomics are machine coded +#ifndef QT_HAVE_ARMV6 + +class QCriticalSection +{ +public: + QCriticalSection() { fastlock.CreateLocal(); } + ~QCriticalSection() { fastlock.Close(); } + void lock() { fastlock.Wait(); } + void unlock() { fastlock.Signal(); } -#endif // Q_CC_RVCT +private: + RFastLock fastlock; +}; + +QCriticalSection qAtomicCriticalSection; + +Q_CORE_EXPORT +bool QBasicAtomicInt_testAndSetOrdered(volatile int *_q_value, int expectedValue, int newValue) +{ + bool returnValue = false; + qAtomicCriticalSection.lock(); + if (*_q_value == expectedValue) { + *_q_value = newValue; + returnValue = true; + } + qAtomicCriticalSection.unlock(); + return returnValue; +} + +Q_CORE_EXPORT +int QBasicAtomicInt_fetchAndStoreOrdered(volatile int *_q_value, int newValue) +{ + int returnValue; + qAtomicCriticalSection.lock(); + returnValue = *_q_value; + *_q_value = newValue; + qAtomicCriticalSection.unlock(); + return returnValue; +} + +Q_CORE_EXPORT +int QBasicAtomicInt_fetchAndAddOrdered(volatile int *_q_value, int valueToAdd) +{ + int returnValue; + qAtomicCriticalSection.lock(); + returnValue = *_q_value; + *_q_value += valueToAdd; + qAtomicCriticalSection.unlock(); + return returnValue; +} + +Q_CORE_EXPORT +bool QBasicAtomicPointer_testAndSetOrdered(void * volatile *_q_value, + void *expectedValue, + void *newValue) +{ + bool returnValue = false; + qAtomicCriticalSection.lock(); + if (*_q_value == expectedValue) { + *_q_value = newValue; + returnValue = true; + } + qAtomicCriticalSection.unlock(); + return returnValue; +} + +Q_CORE_EXPORT +void *QBasicAtomicPointer_fetchAndStoreOrdered(void * volatile *_q_value, void *newValue) +{ + void *returnValue; + qAtomicCriticalSection.lock(); + returnValue = *_q_value; + *_q_value = newValue; + qAtomicCriticalSection.unlock(); + return returnValue; +} + +Q_CORE_EXPORT +void *QBasicAtomicPointer_fetchAndAddOrdered(void * volatile *_q_value, qptrdiff valueToAdd) +{ + void *returnValue; + qAtomicCriticalSection.lock(); + returnValue = *_q_value; + *_q_value = reinterpret_cast<char *>(returnValue) + valueToAdd; + qAtomicCriticalSection.unlock(); + return returnValue; +} + +#endif // QT_HAVE_ARMV6 + +QT_END_NAMESPACE diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri index 0fe757d..b916b4d 100644 --- a/src/corelib/global/global.pri +++ b/src/corelib/global/global.pri @@ -19,7 +19,7 @@ INCLUDEPATH += $$QT_BUILD_TREE/src/corelib/global # Only used on platforms with CONFIG += precompile_header PRECOMPILED_HEADER = global/qt_pch.h -linux-g++*:!static { +linux*-g++*:!static { QMAKE_LFLAGS += -Wl,-e,qt_core_boilerplate prog=$$quote(if (/program interpreter: (.*)]/) { print $1; }) DEFINES += ELF_INTERPRETER=\\\"$$system(readelf -l /bin/ls | perl -n -e \'$$prog\')\\\" diff --git a/src/corelib/global/qfeatures.h b/src/corelib/global/qfeatures.h index 77785e8..1c52d4c 100644 --- a/src/corelib/global/qfeatures.h +++ b/src/corelib/global/qfeatures.h @@ -217,6 +217,9 @@ // Session Manager //#define QT_NO_SESSIONMANAGER +// QSettings +//#define QT_NO_SETTINGS + // QSharedMemory //#define QT_NO_SHAREDMEMORY @@ -352,6 +355,11 @@ #define QT_NO_IMAGEFORMAT_XPM #endif +// QLibrary +#if !defined(QT_NO_LIBRARY) && (defined(QT_NO_SETTINGS)) +#define QT_NO_LIBRARY +#endif + // QMenu #if !defined(QT_NO_MENU) && (defined(QT_NO_ACTION)) #define QT_NO_MENU @@ -367,6 +375,11 @@ #define QT_NO_PHONON_SEEKSLIDER #endif +// Phonon::AbstractMediaStream +#if !defined(QT_NO_PHONON_SETTINGSGROUP) && (defined(QT_NO_SETTINGS)) +#define QT_NO_PHONON_SETTINGSGROUP +#endif + // Phonon::VideoPlayer #if !defined(QT_NO_PHONON_VIDEOPLAYER) && (defined(QT_NO_PHONON_VIDEO)) #define QT_NO_PHONON_VIDEOPLAYER @@ -422,11 +435,6 @@ #define QT_NO_SCROLLBAR #endif -// QSettings -#if !defined(QT_NO_SETTINGS) && (defined(QT_NO_TEXTSTREAM)) -#define QT_NO_SETTINGS -#endif - // SOCKS5 #if !defined(QT_NO_SOCKS5) && (defined(QT_NO_NETWORKPROXY)) #define QT_NO_SOCKS5 @@ -507,14 +515,14 @@ #define QT_NO_HTTP #endif -// QLibrary -#if !defined(QT_NO_LIBRARY) && (defined(QT_NO_SETTINGS)) -#define QT_NO_LIBRARY +// QInputContext +#if !defined(QT_NO_IM) && (defined(QT_NO_LIBRARY)) +#define QT_NO_IM #endif -// Phonon::AbstractMediaStream -#if !defined(QT_NO_PHONON_SETTINGSGROUP) && (defined(QT_NO_SETTINGS)) -#define QT_NO_PHONON_SETTINGSGROUP +// Phonon::PlatformPlugin +#if !defined(QT_NO_PHONON_PLATFORMPLUGIN) && (defined(QT_NO_LIBRARY)) +#define QT_NO_PHONON_PLATFORMPLUGIN #endif // QScrollArea @@ -562,21 +570,11 @@ #define QT_NO_GRAPHICSVIEW #endif -// QInputContext -#if !defined(QT_NO_IM) && (defined(QT_NO_LIBRARY)) -#define QT_NO_IM -#endif - // QMdiArea #if !defined(QT_NO_MDIAREA) && (defined(QT_NO_SCROLLAREA)) #define QT_NO_MDIAREA #endif -// Phonon::PlatformPlugin -#if !defined(QT_NO_PHONON_PLATFORMPLUGIN) && (defined(QT_NO_LIBRARY)) -#define QT_NO_PHONON_PLATFORMPLUGIN -#endif - // Phonon::VolumeSlider #if !defined(QT_NO_PHONON_VOLUMESLIDER) && (defined(QT_NO_SLIDER) || defined(QT_NO_TOOLBUTTON)) #define QT_NO_PHONON_VOLUMESLIDER @@ -587,6 +585,11 @@ #define QT_NO_PRINTER #endif +// QWSInputMethod +#if !defined(QT_NO_QWS_INPUTMETHODS) && (defined(QT_NO_IM)) +#define QT_NO_QWS_INPUTMETHODS +#endif + // QSpinBox #if !defined(QT_NO_SPINBOX) && (defined(QT_NO_SPINWIDGET) || defined(QT_NO_LINEEDIT) || defined(QT_NO_VALIDATOR)) #define QT_NO_SPINBOX @@ -627,6 +630,11 @@ #define QT_NO_TABDIALOG #endif +// QTextCodecPlugin +#if !defined(QT_NO_TEXTCODECPLUGIN) && (defined(QT_NO_TEXTCODEC) || defined(QT_NO_LIBRARY)) +#define QT_NO_TEXTCODECPLUGIN +#endif + // QColorDialog #if !defined(QT_NO_COLORDIALOG) && (defined(QT_NO_SPINBOX)) #define QT_NO_COLORDIALOG @@ -647,11 +655,6 @@ #define QT_NO_MENUBAR #endif -// QWSInputMethod -#if !defined(QT_NO_QWS_INPUTMETHODS) && (defined(QT_NO_IM)) -#define QT_NO_QWS_INPUTMETHODS -#endif - // Sound Server #if !defined(QT_NO_QWS_SOUNDSERVER) && (defined(QT_NO_SOUND) || defined(QT_NO_HOSTINFO) || defined(QT_NO_QWS_MULTIPROCESS)) #define QT_NO_QWS_SOUNDSERVER @@ -672,11 +675,6 @@ #define QT_NO_TABWIDGET #endif -// QTextCodecPlugin -#if !defined(QT_NO_TEXTCODECPLUGIN) && (defined(QT_NO_TEXTCODEC) || defined(QT_NO_LIBRARY)) -#define QT_NO_TEXTCODECPLUGIN -#endif - // QTextEdit #if !defined(QT_NO_TEXTEDIT) && (defined(QT_NO_SCROLLAREA) || defined(QT_NO_PROPERTIES)) #define QT_NO_TEXTEDIT @@ -757,6 +755,11 @@ #define QT_NO_COMPLETER #endif +// Common UNIX Printing System +#if !defined(QT_NO_CUPS) && (defined(QT_NO_PRINTER) || defined(QT_NO_LIBRARY)) +#define QT_NO_CUPS +#endif + // QDataWidgetMapper #if !defined(QT_NO_DATAWIDGETMAPPER) && (defined(QT_NO_ITEMVIEWS) || defined(QT_NO_PROPERTIES)) #define QT_NO_DATAWIDGETMAPPER @@ -787,11 +790,6 @@ #define QT_NO_TREEWIDGET #endif -// Common UNIX Printing System -#if !defined(QT_NO_CUPS) && (defined(QT_NO_PRINTER) || defined(QT_NO_LIBRARY)) -#define QT_NO_CUPS -#endif - // QDirModel #if !defined(QT_NO_DIRMODEL) && (defined(QT_NO_ITEMVIEWS) || defined(QT_NO_FILESYSTEMMODEL)) #define QT_NO_DIRMODEL diff --git a/src/corelib/global/qfeatures.txt b/src/corelib/global/qfeatures.txt index ec4945f..251391e 100644 --- a/src/corelib/global/qfeatures.txt +++ b/src/corelib/global/qfeatures.txt @@ -216,7 +216,7 @@ SeeAlso: ??? Feature: SETTINGS Description: Supports persistent application settings. Section: File I/O -Requires: TEXTSTREAM +Requires: Name: QSettings SeeAlso: ??? diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index d113e02..9558256 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -437,13 +437,18 @@ namespace QT_NAMESPACE {} #elif defined(__GCCE__) # define Q_CC_GCCE # define QT_VISIBILITY_AVAILABLE +# if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) +# define QT_HAVE_ARMV6 +# endif /* ARM Realview Compiler Suite RVCT compiler also defines __EDG__ and __GNUC__ (if --gnu flag is given), so check for it before that */ #elif defined(__ARMCC__) || defined(__CC_ARM) # define Q_CC_RVCT - +# if __TARGET_ARCH_ARM >= 6 +# define QT_HAVE_ARMV6 +# endif #elif defined(__GNUC__) # define Q_CC_GNU # define Q_C_CALLBACKS diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp index 15325ae..77a86bb 100644 --- a/src/corelib/global/qlibraryinfo.cpp +++ b/src/corelib/global/qlibraryinfo.cpp @@ -46,7 +46,11 @@ #include "qlibraryinfo.h" #include "qscopedpointer.h" -#ifdef QT_BUILD_QMAKE +#if defined(QT_BUILD_QMAKE) || defined(QT_BOOTSTRAPPED) +# define BOOTSTRAPPING +#endif + +#ifdef BOOTSTRAPPING QT_BEGIN_NAMESPACE extern QString qmake_libraryInfoFile(); QT_END_NAMESPACE @@ -91,7 +95,7 @@ public: QLibrarySettings::QLibrarySettings() : settings(QLibraryInfoPrivate::findConfiguration()) { -#ifndef QT_BUILD_QMAKE +#ifndef BOOTSTRAPPING qAddPostRoutine(QLibraryInfoPrivate::cleanup); #endif } @@ -99,7 +103,7 @@ QLibrarySettings::QLibrarySettings() QSettings *QLibraryInfoPrivate::findConfiguration() { QString qtconfig = QLatin1String(":/qt/etc/qt.conf"); -#ifdef QT_BUILD_QMAKE +#ifdef BOOTSTRAPPING if(!QFile::exists(qtconfig)) qtconfig = qmake_libraryInfoFile(); #else @@ -425,7 +429,7 @@ QLibraryInfo::location(LibraryLocation loc) if (QDir::isRelativePath(ret)) { if (loc == PrefixPath) { // we make the prefix path absolute to the executable's directory -#ifdef QT_BUILD_QMAKE +#ifdef BOOTSTRAPPING return QFileInfo(qmake_libraryInfoFile()).absolutePath(); #else if (QCoreApplication::instance()) { diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc index ae47f13..7ee7a76 100644 --- a/src/corelib/global/qnamespace.qdoc +++ b/src/corelib/global/qnamespace.qdoc @@ -884,7 +884,7 @@ \value WA_InputMethodEnabled Enables input methods for Asian languages. Must be set when creating custom text editing widgets. - On Windows CE this flag can be used in addition to + On Windows CE and Symbian this flag can be used in addition to QApplication::autoSipEnabled to automatically display the SIP when entering a widget. diff --git a/src/corelib/io/qdatastream.cpp b/src/corelib/io/qdatastream.cpp index 19e86a6..b10d603 100644 --- a/src/corelib/io/qdatastream.cpp +++ b/src/corelib/io/qdatastream.cpp @@ -42,7 +42,7 @@ #include "qdatastream.h" #include "qdatastream_p.h" -#ifndef QT_NO_DATASTREAM +#if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED) #include "qbuffer.h" #include "qstring.h" #include <stdio.h> diff --git a/src/corelib/io/qdatastream.h b/src/corelib/io/qdatastream.h index f61a59c..2e4e7c1 100644 --- a/src/corelib/io/qdatastream.h +++ b/src/corelib/io/qdatastream.h @@ -66,7 +66,7 @@ template <typename T> class QSet; template <class Key, class T> class QHash; template <class Key, class T> class QMap; -#ifndef QT_NO_DATASTREAM +#if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED) class QDataStreamPrivate; class Q_CORE_EXPORT QDataStream { diff --git a/src/corelib/io/qdatastream_p.h b/src/corelib/io/qdatastream_p.h index 157fee9..98dd21f 100644 --- a/src/corelib/io/qdatastream_p.h +++ b/src/corelib/io/qdatastream_p.h @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE -#ifndef QT_NO_DATASTREAM +#if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED) class QDataStreamPrivate { public: diff --git a/src/corelib/io/qfile.cpp b/src/corelib/io/qfile.cpp index c9b2603..d4077bc 100644 --- a/src/corelib/io/qfile.cpp +++ b/src/corelib/io/qfile.cpp @@ -1339,7 +1339,7 @@ QFile::setPermissions(const QString &fileName, Permissions permissions) static inline qint64 _qfile_writeData(QAbstractFileEngine *engine, QRingBuffer *buffer) { - qint64 ret = engine->write(buffer->readPointer(), buffer->size()); + qint64 ret = engine->write(buffer->readPointer(), buffer->nextDataBlockSize()); if (ret > 0) buffer->free(ret); return ret; diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp index 9ab831f..3cf9b7e 100644 --- a/src/corelib/io/qfsfileengine.cpp +++ b/src/corelib/io/qfsfileengine.cpp @@ -762,12 +762,10 @@ qint64 QFSFileEnginePrivate::writeFdFh(const char *data, qint64 len) // Buffered stdlib mode. size_t result; - bool eof; do { result = fwrite(data + writtenBytes, 1, size_t(len - writtenBytes), fh); writtenBytes += result; - eof = feof(fh); - } while (!eof && (result == 0 ? errno == EINTR : writtenBytes < len)); + } while (result == 0 ? errno == EINTR : writtenBytes < len); } else if (fd != -1) { // Unbuffered stdio mode. @@ -783,7 +781,7 @@ qint64 QFSFileEnginePrivate::writeFdFh(const char *data, qint64 len) || (result > 0 && (writtenBytes += result) < len)); } - if (writtenBytes == 0) { + if (len && writtenBytes == 0) { writtenBytes = -1; q->setError(errno == ENOSPC ? QFile::ResourceError : QFile::WriteError, qt_error_string(errno)); } diff --git a/src/corelib/io/qiodevice.cpp b/src/corelib/io/qiodevice.cpp index 4494d2a..e4e6a15 100644 --- a/src/corelib/io/qiodevice.cpp +++ b/src/corelib/io/qiodevice.cpp @@ -619,7 +619,8 @@ qint64 QIODevice::size() const */ bool QIODevice::seek(qint64 pos) { - if (d_func()->openMode == NotOpen) { + Q_D(QIODevice); + if (d->openMode == NotOpen) { qWarning("QIODevice::seek: The device is not open"); return false; } @@ -628,7 +629,6 @@ bool QIODevice::seek(qint64 pos) return false; } - Q_D(QIODevice); #if defined QIODEVICE_DEBUG printf("%p QIODevice::seek(%d), before: d->pos = %d, d->buffer.size() = %d\n", this, int(pos), int(d->pos), d->buffer.size()); @@ -640,21 +640,16 @@ bool QIODevice::seek(qint64 pos) d->devicePos = pos; } - if (offset > 0 && !d->buffer.isEmpty()) { - // When seeking forwards, we need to pop bytes off the front of the - // buffer. - do { - int bytesToSkip = int(qMin<qint64>(offset, INT_MAX)); - d->buffer.skip(bytesToSkip); - offset -= bytesToSkip; - } while (offset > 0); - } else if (offset < 0) { + if (offset < 0 + || offset >= qint64(d->buffer.size())) // When seeking backwards, an operation that is only allowed for // random-access devices, the buffer is cleared. The next read // operation will then refill the buffer. We can optimize this, if we // find that seeking backwards becomes a significant performance hit. d->buffer.clear(); - } + else if (!d->buffer.isEmpty()) + d->buffer.skip(int(offset)); + #if defined QIODEVICE_DEBUG printf("%p \tafter: d->pos == %d, d->buffer.size() == %d\n", this, int(d->pos), d->buffer.size()); @@ -762,22 +757,20 @@ qint64 QIODevice::read(char *data, qint64 maxSize) // Short circuit for getChar() if (maxSize == 1) { - int chint = d->buffer.getChar(); - if (chint != -1) { + int chint; + while ((chint = d->buffer.getChar()) != -1) { + if (!sequential) + ++d->pos; + char c = char(uchar(chint)); - if (c == '\r' && (d->openMode & Text)) { - d->buffer.ungetChar(c); - } else { - if (data) - *data = c; - if (!sequential) - ++d->pos; + if (c == '\r' && (d->openMode & Text)) + continue; + *data = c; #if defined QIODEVICE_DEBUG - printf("%p \tread 0x%hhx (%c) returning 1 (shortcut)\n", this, - int(c), isprint(c) ? c : '?'); + printf("%p \tread 0x%hhx (%c) returning 1 (shortcut)\n", this, + int(c), isprint(c) ? c : '?'); #endif - return qint64(1); - } + return qint64(1); } } @@ -911,10 +904,10 @@ qint64 QIODevice::read(char *data, qint64 maxSize) QByteArray QIODevice::read(qint64 maxSize) { Q_D(QIODevice); - CHECK_MAXLEN(read, QByteArray()); - QByteArray tmp; - qint64 readSoFar = 0; - char buffer[4096]; + QByteArray result; + + CHECK_MAXLEN(read, result); + #if defined QIODEVICE_DEBUG printf("%p QIODevice::read(%d), d->pos = %d, d->buffer.size() = %d\n", this, int(maxSize), int(d->pos), int(d->buffer.size())); @@ -922,16 +915,34 @@ QByteArray QIODevice::read(qint64 maxSize) Q_UNUSED(d); #endif - do { - qint64 bytesToRead = qMin(int(maxSize - readSoFar), int(sizeof(buffer))); - qint64 readBytes = read(buffer, bytesToRead); - if (readBytes <= 0) - break; - tmp.append(buffer, (int) readBytes); - readSoFar += readBytes; - } while (readSoFar < maxSize && bytesAvailable() > 0); + if (maxSize != qint64(int(maxSize))) { + qWarning("QIODevice::read: maxSize argument exceeds QByteArray size limit"); + maxSize = INT_MAX; + } + + qint64 readBytes = 0; + if (maxSize) { + result.resize(int(maxSize)); + if (!result.size()) { + // If resize fails, read incrementally. + qint64 readResult; + do { + result.resize(int(qMin(maxSize, result.size() + QIODEVICE_BUFFERSIZE))); + readResult = read(result.data() + readBytes, result.size() - readBytes); + if (readResult > 0 || readBytes == 0) + readBytes += readResult; + } while (readResult == QIODEVICE_BUFFERSIZE); + } else { + readBytes = read(result.data(), result.size()); + } + } + + if (readBytes <= 0) + result.clear(); + else + result.resize(int(readBytes)); - return tmp; + return result; } /*! @@ -952,28 +963,30 @@ QByteArray QIODevice::readAll() this, int(d->pos), int(d->buffer.size())); #endif - QByteArray tmp; - if (d->isSequential() || size() == 0) { - // Read it in chunks. Use bytesAvailable() as an unreliable hint for - // sequential devices, but try to read 4K as a minimum. - int chunkSize = qMax(qint64(4096), bytesAvailable()); - qint64 totalRead = 0; - forever { - tmp.resize(tmp.size() + chunkSize); - qint64 readBytes = read(tmp.data() + totalRead, chunkSize); - tmp.chop(chunkSize - (readBytes < 0 ? 0 : readBytes)); - if (readBytes <= 0) - return tmp; - totalRead += readBytes; - chunkSize = qMax(qint64(4096), bytesAvailable()); - } + QByteArray result; + qint64 readBytes = 0; + if (d->isSequential() || (readBytes = size()) == 0) { + // Size is unknown, read incrementally. + qint64 readResult; + do { + result.resize(result.size() + QIODEVICE_BUFFERSIZE); + readResult = read(result.data() + readBytes, result.size() - readBytes); + if (readResult > 0 || readBytes == 0) + readBytes += readResult; + } while (readResult > 0); } else { // Read it all in one go. - tmp.resize(int(bytesAvailable())); - qint64 readBytes = read(tmp.data(), tmp.size()); - tmp.resize(readBytes < 0 ? 0 : int(readBytes)); + // If resize fails, don't read anything. + result.resize(int(readBytes - d->pos)); + readBytes = read(result.data(), result.size()); } - return tmp; + + if (readBytes <= 0) + result.clear(); + else + result.resize(int(readBytes)); + + return result; } /*! @@ -1122,11 +1135,9 @@ qint64 QIODevice::readLine(char *data, qint64 maxSize) QByteArray QIODevice::readLine(qint64 maxSize) { Q_D(QIODevice); - CHECK_MAXLEN(readLine, QByteArray()); - QByteArray tmp; - const int BufferGrowth = 4096; - qint64 readSoFar = 0; - qint64 readBytes = 0; + QByteArray result; + + CHECK_MAXLEN(readLine, result); #if defined QIODEVICE_DEBUG printf("%p QIODevice::readLine(%d), d->pos = %d, d->buffer.size() = %d\n", @@ -1135,25 +1146,34 @@ QByteArray QIODevice::readLine(qint64 maxSize) Q_UNUSED(d); #endif - do { - if (maxSize != 0) - tmp.resize(int(readSoFar + qMin(int(maxSize), BufferGrowth))); - else - tmp.resize(int(readSoFar + BufferGrowth)); - readBytes = readLine(tmp.data() + readSoFar, tmp.size() - readSoFar); - if (readBytes <= 0) - break; - - readSoFar += readBytes; - } while ((!maxSize || readSoFar < maxSize) && - readSoFar + 1 == tmp.size() && // +1 due to the ending null - tmp.at(readSoFar - 1) != '\n'); + if (maxSize > INT_MAX) { + qWarning("QIODevice::read: maxSize argument exceeds QByteArray size limit"); + maxSize = INT_MAX; + } - if (readSoFar == 0 && readBytes == -1) - tmp.clear(); // return Null if we found an error + result.resize(int(maxSize)); + qint64 readBytes = 0; + if (!result.size()) { + // If resize fails or maxSize == 0, read incrementally + if (maxSize == 0) + maxSize = INT_MAX; + qint64 readResult; + do { + result.resize(int(qMin(maxSize, result.size() + QIODEVICE_BUFFERSIZE))); + readResult = readLine(result.data() + readBytes, result.size() - readBytes); + if (readResult > 0 || readBytes == 0) + readBytes += readResult; + } while (readResult == QIODEVICE_BUFFERSIZE + && result[int(readBytes)] != '\n'); + } else + readBytes = readLine(result.data(), result.size()); + + if (readBytes <= 0) + result.clear(); else - tmp.resize(int(readSoFar)); - return tmp; + result.resize(readBytes); + + return result; } /*! @@ -1384,40 +1404,8 @@ bool QIODevicePrivate::putCharHelper(char c) */ bool QIODevice::getChar(char *c) { - Q_D(QIODevice); - const OpenMode openMode = d->openMode; - if (!(openMode & ReadOnly)) { - if (openMode == NotOpen) - qWarning("QIODevice::getChar: Closed device"); - else - qWarning("QIODevice::getChar: WriteOnly device"); - return false; - } - - // Shortcut for QIODevice::read(c, 1) - QRingBuffer *buffer = &d->buffer; - const int chint = buffer->getChar(); - if (chint != -1) { - char ch = char(uchar(chint)); - if ((openMode & Text) && ch == '\r') { - buffer->ungetChar(ch); - } else { - if (c) - *c = ch; - if (!d->isSequential()) - ++d->pos; - return true; - } - } - - // Fall back to read(). char ch; - if (read(&ch, 1) == 1) { - if (c) - *c = ch; - return true; - } - return false; + return (1 == read(c ? c : &ch, 1)); } /*! diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp index 86680a5..fd51bcf 100644 --- a/src/corelib/io/qurl.cpp +++ b/src/corelib/io/qurl.cpp @@ -6210,8 +6210,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \list \o qt.nokia.com becomes http://qt.nokia.com \o ftp.qt.nokia.com becomes ftp://ftp.qt.nokia.com - \o localhost becomes http://localhost - \o /home/user/test.html becomes file:///home/user/test.html (if exists) + \o hostname becomes http://hostname + \o /home/user/test.html becomes file:///home/user/test.html \endlist \section2 Tips to avoid erroneous character conversion when dealing with @@ -6228,31 +6228,32 @@ QUrl QUrl::fromUserInput(const QString &userInput) { QString trimmedString = userInput.trimmed(); - // Check the most common case of a valid url with scheme and host first + // Check first for files, since on Windows drive letters can be interpretted as schemes + if (QDir::isAbsolutePath(trimmedString)) + return QUrl::fromLocalFile(trimmedString); + QUrl url = QUrl::fromEncoded(trimmedString.toUtf8(), QUrl::TolerantMode); - if (url.isValid() && !url.scheme().isEmpty() && !url.host().isEmpty()) + QUrl urlPrepended = QUrl::fromEncoded((QLatin1String("http://") + trimmedString).toUtf8(), QUrl::TolerantMode); + + // Check the most common case of a valid url with scheme and host + // We check if the port would be valid by adding the scheme to handle the case host:port + // where the host would be interpretted as the scheme + if (url.isValid() + && !url.scheme().isEmpty() + && (!url.host().isEmpty() || !url.path().isEmpty()) + && urlPrepended.port() == -1) return url; - // Absolute files that exists - if (QDir::isAbsolutePath(trimmedString) && QFile::exists(trimmedString)) - return QUrl::fromLocalFile(trimmedString); - - // If the string is missing the scheme or the scheme is not valid prepend a scheme - QString scheme = url.scheme(); - if (scheme.isEmpty() || scheme.contains(QLatin1Char('.')) || scheme == QLatin1String("localhost")) { - // Do not do anything for strings such as "foo", only "foo.com" + // Else, try the prepended one and adjust the scheme from the host name + if (urlPrepended.isValid() && (!urlPrepended.host().isEmpty() || !urlPrepended.path().isEmpty())) + { int dotIndex = trimmedString.indexOf(QLatin1Char('.')); - if (dotIndex != -1 || trimmedString.startsWith(QLatin1String("localhost"))) { - const QString hostscheme = trimmedString.left(dotIndex).toLower(); - QByteArray scheme = (hostscheme == QLatin1String("ftp")) ? "ftp" : "http"; - trimmedString = QLatin1String(scheme) + QLatin1String("://") + trimmedString; - } - url = QUrl::fromEncoded(trimmedString.toUtf8(), QUrl::TolerantMode); + const QString hostscheme = trimmedString.left(dotIndex).toLower(); + if (hostscheme == QLatin1String("ftp")) + urlPrepended.setScheme(QLatin1String("ftp")); + return urlPrepended; } - if (url.isValid()) - return url; - return QUrl(); } // end of BSD code diff --git a/src/corelib/kernel/qabstractitemmodel.cpp b/src/corelib/kernel/qabstractitemmodel.cpp index 8e2273d..10a61ca 100644 --- a/src/corelib/kernel/qabstractitemmodel.cpp +++ b/src/corelib/kernel/qabstractitemmodel.cpp @@ -2475,10 +2475,8 @@ void QAbstractItemModel::endRemoveRows() bool QAbstractItemModelPrivate::allowMove(const QModelIndex &srcParent, int start, int end, const QModelIndex &destinationParent, int destinationStart, Qt::Orientation orientation) { // Don't move the range within itself. - if ( ( destinationParent == srcParent ) - && ( destinationStart >= start ) - && ( destinationStart <= end + 1) ) - return false; + if (destinationParent == srcParent) + return !(destinationStart >= start && destinationStart <= end + 1); QModelIndex destinationAncestor = destinationParent; int pos = (Qt::Vertical == orientation) ? destinationAncestor.row() : destinationAncestor.column(); diff --git a/src/corelib/kernel/qeventdispatcher_win.cpp b/src/corelib/kernel/qeventdispatcher_win.cpp index 3050b82..b3497b9 100644 --- a/src/corelib/kernel/qeventdispatcher_win.cpp +++ b/src/corelib/kernel/qeventdispatcher_win.cpp @@ -725,7 +725,7 @@ bool QEventDispatcherWin32::processEvents(QEventLoop::ProcessEventsFlags flags) } } if (haveMessage) { - if (msg.message == WM_QT_SENDPOSTEDEVENTS && !(flags & QEventLoop::EventLoopExec)) { + if (msg.message == WM_QT_SENDPOSTEDEVENTS) { if (seenWM_QT_SENDPOSTEDEVENTS) { needWM_QT_SENDPOSTEDEVENTS = true; continue; @@ -780,6 +780,11 @@ bool QEventDispatcherWin32::processEvents(QEventLoop::ProcessEventsFlags flags) } } while (canWait); + if (!seenWM_QT_SENDPOSTEDEVENTS && (flags & QEventLoop::EventLoopExec) == 0) { + // when called "manually", always send posted events + QCoreApplicationPrivate::sendPostedEvents(0, 0, d->threadData); + } + if (needWM_QT_SENDPOSTEDEVENTS) PostMessage(d->internalHwnd, WM_QT_SENDPOSTEDEVENTS, 0, 0); diff --git a/src/corelib/kernel/qsharedmemory_unix.cpp b/src/corelib/kernel/qsharedmemory_unix.cpp index 40b9f04..a850df0 100644 --- a/src/corelib/kernel/qsharedmemory_unix.cpp +++ b/src/corelib/kernel/qsharedmemory_unix.cpp @@ -49,6 +49,7 @@ #include <errno.h> +#ifndef QT_NO_SHAREDMEMORY #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> @@ -56,6 +57,7 @@ #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> +#endif //QT_NO_SHAREDMEMORY #include "private/qcore_unix_p.h" diff --git a/src/corelib/tools/qbytearray.cpp b/src/corelib/tools/qbytearray.cpp index d8557e5..bf9b6bd 100644 --- a/src/corelib/tools/qbytearray.cpp +++ b/src/corelib/tools/qbytearray.cpp @@ -48,9 +48,7 @@ #include "qlocale_p.h" #include "qunicodetables_p.h" #include "qscopedpointer.h" -#ifndef QT_NO_DATASTREAM #include <qdatastream.h> -#endif #ifndef QT_NO_COMPRESS #include <zlib.h> @@ -2640,7 +2638,7 @@ void QByteArray::clear() d->ref.ref(); } -#ifndef QT_NO_DATASTREAM +#if !defined(QT_NO_DATASTREAM) || (defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE)) /*! \relates QByteArray diff --git a/src/corelib/tools/qbytearray.h b/src/corelib/tools/qbytearray.h index e258481..7dd6f4f 100644 --- a/src/corelib/tools/qbytearray.h +++ b/src/corelib/tools/qbytearray.h @@ -572,7 +572,7 @@ inline QByteArray &QByteArray::setNum(float n, char f, int prec) { return setNum(double(n),f,prec); } -#ifndef QT_NO_DATASTREAM +#if !defined(QT_NO_DATASTREAM) || (defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE)) Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QByteArray &); Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QByteArray &); #endif diff --git a/src/corelib/tools/qcontiguouscache.cpp b/src/corelib/tools/qcontiguouscache.cpp index dd7cab6..dab7327 100644 --- a/src/corelib/tools/qcontiguouscache.cpp +++ b/src/corelib/tools/qcontiguouscache.cpp @@ -150,20 +150,45 @@ MyRecord record(int row) const */ /*! \fn void QContiguousCache::detach() - \internal */ /*! \fn bool QContiguousCache::isDetached() const - \internal */ /*! \fn void QContiguousCache::setSharable(bool sharable) - \internal */ +/*! \typedef QContiguousCache::value_type + \internal + */ + +/*! \typedef QContiguousCache::pointer + \internal + */ + +/*! \typedef QContiguousCache::const_pointer + \internal + */ + +/*! \typedef QContiguousCache::reference + \internal + */ + +/*! \typedef QContiguousCache::const_reference + \internal + */ + +/*! \typedef QContiguousCache::difference_type + \internal + */ + +/*! \typedef QContiguousCache::size_type + \internal + */ + /*! \fn QContiguousCache<T> &QContiguousCache::operator=(const QContiguousCache<T> &other) Assigns \a other to this cache and returns a reference to this cache. diff --git a/src/corelib/tools/qscopedpointer.cpp b/src/corelib/tools/qscopedpointer.cpp index a3ca2c3..22e9bdf 100644 --- a/src/corelib/tools/qscopedpointer.cpp +++ b/src/corelib/tools/qscopedpointer.cpp @@ -174,18 +174,20 @@ QT_BEGIN_NAMESPACE */ /*! - \fn bool QScopedPointer::operator==(const QScopedPointer<T, Cleanup> &other) const + \fn bool operator==(const QScopedPointer<T, Cleanup> &lhs, const QScopedPointer<T, Cleanup> &rhs) - Equality operator. Returns true if the scoped pointer \a other - is pointing to the same object as this pointer, otherwise returns false. + Equality operator. Returns true if the scoped pointers + \a lhs and \a rhs are pointing to the same object. + Otherwise returns false. */ /*! - \fn bool QScopedPointer::operator!=(const QScopedPointer<T, Cleanup> &other) const + \fn bool operator!=(const QScopedPointer<T, Cleanup> &lhs, const QScopedPointer<T, Cleanup> &rhs) - Inequality operator. Returns true if the scoped pointer \a other - is not pointing to the same object as this pointer, otherwise returns false. + Inequality operator. Returns true if the scoped pointers + \a lhs and \a rhs are \e not pointing to the same object. + Otherwise returns false. */ /*! diff --git a/src/corelib/tools/qscopedpointer_p.h b/src/corelib/tools/qscopedpointer_p.h index b1636d5..fb627a4 100644 --- a/src/corelib/tools/qscopedpointer_p.h +++ b/src/corelib/tools/qscopedpointer_p.h @@ -76,6 +76,16 @@ public: return this->d; } + inline bool operator==(const QCustomScopedPointer<T, Cleanup> &other) const + { + return this->d == other.d; + } + + inline bool operator!=(const QCustomScopedPointer<T, Cleanup> &other) const + { + return this->d != other.d; + } + private: Q_DISABLE_COPY(QCustomScopedPointer) }; @@ -120,6 +130,16 @@ public: QScopedPointerSharedDeleter<T>::cleanup(oldD); } + inline bool operator==(const QScopedSharedPointer<T> &other) const + { + return this->d == other.d; + } + + inline bool operator!=(const QScopedSharedPointer<T> &other) const + { + return this->d != other.d; + } + private: Q_DISABLE_COPY(QScopedSharedPointer) }; diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index f7321ef..086a2f3 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -7204,7 +7204,7 @@ QString QString::fromRawData(const QChar *unicode, int size) */ -#ifndef QT_NO_DATASTREAM +#if !defined(QT_NO_DATASTREAM) || (defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE)) /*! \fn QDataStream &operator<<(QDataStream &stream, const QString &string) \relates QString diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h index 74f93a4..668be35 100644 --- a/src/corelib/tools/qstring.h +++ b/src/corelib/tools/qstring.h @@ -1065,7 +1065,7 @@ inline QChar &QString::ref(uint i) } #endif -#ifndef QT_NO_DATASTREAM +#if !defined(QT_NO_DATASTREAM) || (defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE)) Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QString &); Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QString &); #endif diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h index 930b006..f0de98d 100644 --- a/src/corelib/tools/qvector.h +++ b/src/corelib/tools/qvector.h @@ -69,6 +69,7 @@ struct Q_CORE_EXPORT QVectorData // workaround for bug in gcc 3.4.2 uint sharable; uint capacity; + uint reserved; #else uint sharable : 1; uint capacity : 1; diff --git a/src/corelib/xml/make-parser.sh b/src/corelib/xml/make-parser.sh index 9866555..35289d2 100755 --- a/src/corelib/xml/make-parser.sh +++ b/src/corelib/xml/make-parser.sh @@ -42,7 +42,7 @@ me=$(dirname $0) mkdir -p $me/out -(cd $me/out && ../../../../util/qlalr/qlalr --troll --no-debug --no-lines ../qxmlstream.g) +(cd $me/out && ../../../../util/qlalr/qlalr --qt --no-debug --no-lines ../qxmlstream.g) for f in $me/out/*.h; do n=$(basename $f) diff --git a/src/corelib/xml/qxmlstream.g b/src/corelib/xml/qxmlstream.g index 6c0c0cf..22ba33d 100644 --- a/src/corelib/xml/qxmlstream.g +++ b/src/corelib/xml/qxmlstream.g @@ -158,6 +158,7 @@ public: if (tos + extraCapacity + 1 > cap) { cap = qMax(tos + extraCapacity + 1, cap << 1 ); data = reinterpret_cast<T *>(qRealloc(data, cap * sizeof(T))); + Q_CHECK_PTR(data); } } diff --git a/src/corelib/xml/qxmlstream_p.h b/src/corelib/xml/qxmlstream_p.h index eee3a13..253f8bd 100644 --- a/src/corelib/xml/qxmlstream_p.h +++ b/src/corelib/xml/qxmlstream_p.h @@ -1,4 +1,3 @@ -// This file was generated by qlalr - DO NOT EDIT! /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). @@ -51,6 +50,7 @@ // We mean it. // +// This file was generated by qlalr - DO NOT EDIT! #ifndef QXMLSTREAM_P_H #define QXMLSTREAM_P_H @@ -132,13 +132,13 @@ public: }; static const char *const spell []; - static const qint16 lhs []; - static const qint16 rhs []; - static const qint16 goto_default []; - static const qint16 action_default []; - static const qint16 action_index []; - static const qint16 action_info []; - static const qint16 action_check []; + static const short lhs []; + static const short rhs []; + static const short goto_default []; + static const short action_default []; + static const short action_index []; + static const short action_info []; + static const short action_check []; static inline int nt_action (int state, int nt) { @@ -169,7 +169,7 @@ const char *const QXmlStreamReader_Table::spell [] = { "EMPTY", "ANY", "PCDATA", 0, 0, 0, 0, "CDATA", "ID", "IDREF", "IDREFS", "ENTITIES", "NMTOKEN", "NMTOKENS", "<?xml", "version", 0}; -const qint16 QXmlStreamReader_Table::lhs [] = { +const short QXmlStreamReader_Table::lhs [] = { 57, 57, 59, 59, 59, 59, 59, 59, 59, 59, 67, 68, 64, 72, 72, 72, 75, 66, 66, 66, 66, 79, 78, 80, 80, 80, 80, 80, 80, 81, @@ -198,7 +198,7 @@ const qint16 QXmlStreamReader_Table::lhs [] = { 58, 58, 58, 58, 58, 58, 58, 58, 74, 69, 69, 77, 111, 102, 102, 102, 102, 102, 140}; -const qint16 QXmlStreamReader_Table:: rhs[] = { +const short QXmlStreamReader_Table::rhs [] = { 2, 1, 4, 2, 2, 2, 2, 2, 2, 0, 1, 1, 9, 2, 4, 0, 4, 4, 6, 6, 4, 1, 3, 1, 1, 1, 2, 2, 2, 1, @@ -227,7 +227,7 @@ const qint16 QXmlStreamReader_Table:: rhs[] = { 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2}; -const qint16 QXmlStreamReader_Table::action_default [] = { +const short QXmlStreamReader_Table::action_default [] = { 10, 258, 0, 2, 1, 0, 124, 116, 118, 119, 126, 128, 122, 11, 113, 107, 0, 108, 127, 110, 114, 112, 120, 123, 125, 106, 109, 111, 117, 115, @@ -272,7 +272,7 @@ const qint16 QXmlStreamReader_Table::action_default [] = { 260, 0, 230, 0, 0, 13, 269, 9, 5, 8, 4, 0, 7, 258, 6, 0, 3}; -const qint16 QXmlStreamReader_Table::goto_default [] = { +const short QXmlStreamReader_Table::goto_default [] = { 2, 4, 3, 49, 388, 43, 37, 52, 47, 41, 249, 53, 127, 84, 393, 81, 85, 126, 42, 46, 169, 130, 131, 146, 145, 149, 138, 136, 140, 147, @@ -283,7 +283,7 @@ const qint16 QXmlStreamReader_Table::goto_default [] = { 264, 252, 251, 250, 339, 326, 325, 329, 398, 399, 50, 51, 59, 0}; -const qint16 QXmlStreamReader_Table::action_index [] = { +const short QXmlStreamReader_Table::action_index [] = { -21, -57, 33, 119, 960, 70, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, 105, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, @@ -372,7 +372,7 @@ const qint16 QXmlStreamReader_Table::action_index [] = { 28, 15, 82, -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, 3, -84, 98, -84}; -const qint16 QXmlStreamReader_Table::action_info [] = { +const short QXmlStreamReader_Table::action_info [] = { 65, 332, 65, 405, 392, 385, 377, 65, 414, 410, 415, 55, 397, 374, 373, 217, 206, 408, 65, 65, 207, 211, 216, 1, 55, 199, 182, 192, 70, 70, @@ -506,7 +506,7 @@ const qint16 QXmlStreamReader_Table::action_info [] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -const qint16 QXmlStreamReader_Table::action_check [] = { +const short QXmlStreamReader_Table::action_check [] = { 26, 18, 26, 14, 4, 4, 4, 26, 24, 14, 4, 26, 4, 4, 4, 4, 22, 55, 26, 26, 42, 4, 4, 44, 26, 22, 19, 12, 2, 2, diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp index 748658d..2d27668 100644 --- a/src/dbus/qdbusintegrator.cpp +++ b/src/dbus/qdbusintegrator.cpp @@ -934,7 +934,8 @@ QDBusConnectionPrivate::QDBusConnectionPrivate(QObject *p) rootNode(QString(QLatin1Char('/'))) { static const bool threads = q_dbus_threads_init_default(); - static const int debugging = ::isDebugging = qgetenv("QDBUS_DEBUG").toInt(); + static const int debugging = qgetenv("QDBUS_DEBUG").toInt(); + ::isDebugging = debugging; Q_UNUSED(threads) Q_UNUSED(debugging) diff --git a/src/dbus/qdbusinterface.cpp b/src/dbus/qdbusinterface.cpp index 74b2a44..d0a693f 100644 --- a/src/dbus/qdbusinterface.cpp +++ b/src/dbus/qdbusinterface.cpp @@ -157,7 +157,9 @@ QDBusInterfacePrivate::QDBusInterfacePrivate(const QString &serv, const QString if (!metaObject) { // creation failed, somehow - isValid = false; + // most common causes are that the service doesn't exist or doesn't support introspection + // those are not fatal errors, so we continue working + if (!lastError.isValid()) lastError = QDBusError(QDBusError::InternalError, QLatin1String("Unknown error")); } @@ -232,7 +234,7 @@ QDBusInterface::~QDBusInterface() */ const QMetaObject *QDBusInterface::metaObject() const { - return d_func()->isValid ? d_func()->metaObject : &QDBusAbstractInterface::staticMetaObject; + return d_func()->metaObject ? d_func()->metaObject : &QDBusAbstractInterface::staticMetaObject; } /*! diff --git a/src/dbus/qdbusxmlgenerator.cpp b/src/dbus/qdbusxmlgenerator.cpp index 9870584..380b949 100644 --- a/src/dbus/qdbusxmlgenerator.cpp +++ b/src/dbus/qdbusxmlgenerator.cpp @@ -203,7 +203,7 @@ static QString generateInterfaceXml(const QMetaObject *mo, int flags, int method const char *typeName = QVariant::typeToName( QVariant::Type(types.at(j)) ); xml += QString::fromLatin1(" <annotation name=\"com.trolltech.QtDBus.QtTypeName.%1%2\" value=\"%3\"/>\n") .arg(isOutput ? QLatin1String("Out") : QLatin1String("In")) - .arg(isOutput ? j - inputCount : j - 1) + .arg(isOutput && !isSignal ? j - inputCount : j - 1) .arg(typeNameToXml(typeName)); } } diff --git a/src/declarative/graphicsitems/qmlgraphicsborderimage.cpp b/src/declarative/graphicsitems/qmlgraphicsborderimage.cpp index d7627ac..6f953bc 100644 --- a/src/declarative/graphicsitems/qmlgraphicsborderimage.cpp +++ b/src/declarative/graphicsitems/qmlgraphicsborderimage.cpp @@ -176,12 +176,10 @@ void QmlGraphicsBorderImage::setSource(const QUrl &url) if (url.isEmpty()) { d->pix = QPixmap(); d->status = Null; - d->progress = 1.0; setImplicitWidth(0); setImplicitHeight(0); emit statusChanged(d->status); emit sourceChanged(d->url); - emit progressChanged(1.0); update(); } else { d->status = Loading; @@ -219,7 +217,7 @@ void QmlGraphicsBorderImage::setSource(const QUrl &url) d->progress = 1.0; emit statusChanged(d->status); emit sourceChanged(d->url); - emit progressChanged(1.0); + emit progressChanged(d->progress); update(); } } @@ -395,7 +393,8 @@ void QmlGraphicsBorderImage::paint(QPainter *p, const QStyleOptionGraphicsItem * if (d->smooth) p->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform, d->smooth); - QMargins margins(border()->top(), border()->left(), border()->bottom(), border()->right()); + const QmlGraphicsScaleGrid *border = d->getScaleGrid(); + QMargins margins(border->top(), border->left(), border->bottom(), border->right()); QTileRules rules((Qt::TileRule)d->horizontalTileMode, (Qt::TileRule)d->verticalTileMode); qDrawBorderPixmap(p, QRect(0, 0, (int)d->width, (int)d->height), margins, d->pix, d->pix.rect(), margins, rules); if (d->smooth) { diff --git a/src/declarative/graphicsitems/qmlgraphicsflickable.cpp b/src/declarative/graphicsitems/qmlgraphicsflickable.cpp index ea9c173..b3a34ed 100644 --- a/src/declarative/graphicsitems/qmlgraphicsflickable.cpp +++ b/src/declarative/graphicsitems/qmlgraphicsflickable.cpp @@ -568,18 +568,6 @@ QmlGraphicsItem *QmlGraphicsFlickable::viewport() return d->viewport; } -qreal QmlGraphicsFlickable::visibleX() const -{ - Q_D(const QmlGraphicsFlickable); - return -d->_moveX.value(); -} - -qreal QmlGraphicsFlickable::visibleY() const -{ - Q_D(const QmlGraphicsFlickable); - return -d->_moveY.value(); -} - QmlGraphicsFlickableVisibleArea *QmlGraphicsFlickable::visibleArea() { Q_D(QmlGraphicsFlickable); diff --git a/src/declarative/graphicsitems/qmlgraphicsflickable_p.h b/src/declarative/graphicsitems/qmlgraphicsflickable_p.h index 10447f6..50248e1 100644 --- a/src/declarative/graphicsitems/qmlgraphicsflickable_p.h +++ b/src/declarative/graphicsitems/qmlgraphicsflickable_p.h @@ -159,9 +159,6 @@ protected: void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); void timerEvent(QTimerEvent *event); - qreal visibleX() const; - qreal visibleY() const; - QmlGraphicsFlickableVisibleArea *visibleArea(); protected Q_SLOTS: diff --git a/src/declarative/graphicsitems/qmlgraphicsgridview.cpp b/src/declarative/graphicsitems/qmlgraphicsgridview.cpp index 473f9e5..7e2d983 100644 --- a/src/declarative/graphicsitems/qmlgraphicsgridview.cpp +++ b/src/declarative/graphicsitems/qmlgraphicsgridview.cpp @@ -1302,12 +1302,21 @@ void QmlGraphicsGridView::trackedPositionChanged() if (!d->trackedItem) return; if (!isFlicking() && !d->moving && d->moveReason != QmlGraphicsGridViewPrivate::Mouse) { - if (d->trackedItem->rowPos() < d->position()) { - d->setPosition(d->trackedItem->rowPos()); - } else if (d->trackedItem->endRowPos() > d->position() + d->size()) { - qreal pos = d->trackedItem->endRowPos() - d->size(); - if (d->rowSize() > d->size()) - pos = d->trackedItem->rowPos(); + const qreal viewPos = d->position(); + if (d->trackedItem->rowPos() < viewPos && d->currentItem->rowPos() < viewPos) { + d->setPosition(d->currentItem->rowPos() < d->trackedItem->rowPos() ? d->trackedItem->rowPos() : d->currentItem->rowPos()); + } else if (d->trackedItem->endRowPos() > viewPos + d->size() + && d->currentItem->endRowPos() > viewPos + d->size()) { + qreal pos; + if (d->trackedItem->endRowPos() < d->currentItem->endRowPos()) { + pos = d->trackedItem->endRowPos() - d->size(); + if (d->rowSize() > d->size()) + pos = d->trackedItem->rowPos(); + } else { + pos = d->currentItem->endRowPos() - d->size(); + if (d->rowSize() > d->size()) + pos = d->currentItem->rowPos(); + } d->setPosition(pos); } } diff --git a/src/declarative/graphicsitems/qmlgraphicsimagebase.cpp b/src/declarative/graphicsitems/qmlgraphicsimagebase.cpp index 0b57540..3e86a7c 100644 --- a/src/declarative/graphicsitems/qmlgraphicsimagebase.cpp +++ b/src/declarative/graphicsitems/qmlgraphicsimagebase.cpp @@ -108,16 +108,15 @@ void QmlGraphicsImageBase::setSource(const QUrl &url) if (url.isEmpty()) { d->pix = QPixmap(); d->status = Null; - d->progress = 1.0; setImplicitWidth(0); setImplicitHeight(0); emit statusChanged(d->status); emit sourceChanged(d->url); - emit progressChanged(1.0); update(); } else { d->status = Loading; - QNetworkReply *reply = QmlPixmapCache::get(qmlEngine(this), d->url, &d->pix); + bool ok = true; + QNetworkReply *reply = QmlPixmapCache::get(qmlEngine(this), d->url, &d->pix, &ok); if (reply) { d->pendingPixmapCache = true; connect(reply, SIGNAL(finished()), this, SLOT(requestFinished())); @@ -125,15 +124,19 @@ void QmlGraphicsImageBase::setSource(const QUrl &url) this, SLOT(requestProgress(qint64,qint64))); } else { //### should be unified with requestFinished - setImplicitWidth(d->pix.width()); - setImplicitHeight(d->pix.height()); - - if (d->status == Loading) - d->status = Ready; + if (ok) { + setImplicitWidth(d->pix.width()); + setImplicitHeight(d->pix.height()); + + if (d->status == Loading) + d->status = Ready; + } else { + d->status = Error; + } d->progress = 1.0; emit statusChanged(d->status); emit sourceChanged(d->url); - emit progressChanged(1.0); + emit progressChanged(d->progress); update(); } } diff --git a/src/declarative/graphicsitems/qmlgraphicsrectangle_p_p.h b/src/declarative/graphicsitems/qmlgraphicsrectangle_p_p.h index cb914d6..c4bbbe4 100644 --- a/src/declarative/graphicsitems/qmlgraphicsrectangle_p_p.h +++ b/src/declarative/graphicsitems/qmlgraphicsrectangle_p_p.h @@ -1,7 +1,8 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Qt Software Information (qt-info@nokia.com) +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtDeclarative module of the Qt Toolkit. ** @@ -9,8 +10,8 @@ ** 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 either Technology Preview License Agreement or the -** Beta Release License Agreement. +** 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 @@ -20,21 +21,20 @@ ** 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.0, included in the file LGPL_EXCEPTION.txt in this -** package. +** 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. +** +** +** +** +** +** ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. ** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at qt-sales@nokia.com. ** $QT_END_LICENSE$ ** ****************************************************************************/ diff --git a/src/declarative/graphicsitems/qmlgraphicswebview.cpp b/src/declarative/graphicsitems/qmlgraphicswebview.cpp index da6c00d..e165e59 100644 --- a/src/declarative/graphicsitems/qmlgraphicswebview.cpp +++ b/src/declarative/graphicsitems/qmlgraphicswebview.cpp @@ -1192,6 +1192,35 @@ QmlGraphicsWebPage::~QmlGraphicsWebPage() { } +void QmlGraphicsWebPage::javaScriptConsoleMessage(const QString& message, int lineNumber, const QString& sourceID) +{ + qWarning() << sourceID << ":" << lineNumber << ":" << message; +} + +QString QmlGraphicsWebPage::chooseFile(QWebFrame *originatingFrame, const QString& oldFile) +{ + // Not supported (it's modal) + return oldFile; +} + +void QmlGraphicsWebPage::javaScriptAlert(QWebFrame *originatingFrame, const QString& msg) +{ + emit viewItem()->alert(msg); +} + +bool QmlGraphicsWebPage::javaScriptConfirm(QWebFrame *originatingFrame, const QString& msg) +{ + // Not supported (it's modal) + return false; +} + +bool QmlGraphicsWebPage::javaScriptPrompt(QWebFrame *originatingFrame, const QString& msg, const QString& defaultValue, QString* result) +{ + // Not supported (it's modal) + return false; +} + + /* Qt WebKit does not understand non-QWidget plugins, so dummy widgets are created, parented to a single dummy tool window. diff --git a/src/declarative/graphicsitems/qmlgraphicswebview_p.h b/src/declarative/graphicsitems/qmlgraphicswebview_p.h index e2e4888..fa7d19d 100644 --- a/src/declarative/graphicsitems/qmlgraphicswebview_p.h +++ b/src/declarative/graphicsitems/qmlgraphicswebview_p.h @@ -69,6 +69,11 @@ public: protected: QObject *createPlugin(const QString &classid, const QUrl &url, const QStringList ¶mNames, const QStringList ¶mValues); QWebPage *createWindow(WebWindowType type); + void javaScriptConsoleMessage(const QString& message, int lineNumber, const QString& sourceID); + QString chooseFile(QWebFrame *originatingFrame, const QString& oldFile); + void javaScriptAlert(QWebFrame *originatingFrame, const QString& msg); + bool javaScriptConfirm(QWebFrame *originatingFrame, const QString& msg); + bool javaScriptPrompt(QWebFrame *originatingFrame, const QString& msg, const QString& defaultValue, QString* result); private: QmlGraphicsWebView *viewItem(); @@ -195,6 +200,8 @@ Q_SIGNALS: void zoomTo(qreal zoom, int centerX, int centerY); + void alert(const QString& message); + public Q_SLOTS: QVariant evaluateJavaScript(const QString&); diff --git a/src/declarative/qml/qmlengine.cpp b/src/declarative/qml/qmlengine.cpp index 86472de..e292e5c 100644 --- a/src/declarative/qml/qmlengine.cpp +++ b/src/declarative/qml/qmlengine.cpp @@ -99,7 +99,7 @@ QT_BEGIN_NAMESPACE DEFINE_BOOL_CONFIG_OPTION(qmlImportTrace, QML_IMPORT_TRACE) -QML_DEFINE_TYPE(Qt,4,6,Object,QObject) +QML_DEFINE_TYPE(Qt,4,6,QtObject,QObject) struct StaticQtMetaObject : public QObject { diff --git a/src/declarative/util/qmlanimation_p_p.h b/src/declarative/util/qmlanimation_p_p.h index 27c0cd7..cb1c642 100644 --- a/src/declarative/util/qmlanimation_p_p.h +++ b/src/declarative/util/qmlanimation_p_p.h @@ -1,7 +1,8 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Qt Software Information (qt-info@nokia.com) +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtDeclarative module of the Qt Toolkit. ** @@ -9,8 +10,8 @@ ** 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 either Technology Preview License Agreement or the -** Beta Release License Agreement. +** 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 @@ -20,21 +21,20 @@ ** 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.0, included in the file LGPL_EXCEPTION.txt in this -** package. +** 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. +** +** +** +** +** +** ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. ** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at qt-sales@nokia.com. ** $QT_END_LICENSE$ ** ****************************************************************************/ diff --git a/src/declarative/util/qmlbind.cpp b/src/declarative/util/qmlbind.cpp index b8ab53e..2f692d8 100644 --- a/src/declarative/util/qmlbind.cpp +++ b/src/declarative/util/qmlbind.cpp @@ -55,9 +55,10 @@ QT_BEGIN_NAMESPACE class QmlBindPrivate : public QObjectPrivate { public: - QmlBindPrivate() : when(true), obj(0) {} + QmlBindPrivate() : when(true), componentComplete(false), obj(0) {} - bool when; + bool when : 1; + bool componentComplete : 1; QObject *obj; QString prop; QmlNullableValue<QVariant> value; @@ -176,10 +177,17 @@ void QmlBind::setValue(const QVariant &v) eval(); } +void QmlBind::componentComplete() +{ + Q_D(QmlBind); + d->componentComplete = true; + eval(); +} + void QmlBind::eval() { Q_D(QmlBind); - if (!d->obj || d->value.isNull || !d->when) + if (!d->obj || d->value.isNull || !d->when || !d->componentComplete) return; QmlMetaProperty prop(d->obj, d->prop); diff --git a/src/declarative/util/qmlbind_p.h b/src/declarative/util/qmlbind_p.h index a9b7b98..4d85698 100644 --- a/src/declarative/util/qmlbind_p.h +++ b/src/declarative/util/qmlbind_p.h @@ -52,11 +52,11 @@ QT_BEGIN_NAMESPACE QT_MODULE(Declarative) class QmlBindPrivate; -class Q_DECLARATIVE_EXPORT QmlBind : public QObject +class Q_DECLARATIVE_EXPORT QmlBind : public QObject, public QmlParserStatus { Q_OBJECT Q_DECLARE_PRIVATE(QmlBind) - + Q_INTERFACES(QmlParserStatus) Q_PROPERTY(QObject *target READ object WRITE setObject) Q_PROPERTY(QString property READ property WRITE setProperty) Q_PROPERTY(QVariant value READ value WRITE setValue) @@ -78,6 +78,9 @@ public: QVariant value() const; void setValue(const QVariant &); +protected: + virtual void componentComplete(); + private: void eval(); }; diff --git a/src/declarative/util/qmlpackage.cpp b/src/declarative/util/qmlpackage.cpp index 908b368..6bc1ef9 100644 --- a/src/declarative/util/qmlpackage.cpp +++ b/src/declarative/util/qmlpackage.cpp @@ -101,7 +101,7 @@ QmlPackage::~QmlPackage() Q_D(QmlPackage); for (int ii = 0; ii < d->dataList.count(); ++ii) { QObject *obj = d->dataList.at(ii); - delete obj; + obj->setParent(this); } } diff --git a/src/declarative/util/qmlpixmapcache.cpp b/src/declarative/util/qmlpixmapcache.cpp index ba7895a..b8a9bd7 100644 --- a/src/declarative/util/qmlpixmapcache.cpp +++ b/src/declarative/util/qmlpixmapcache.cpp @@ -213,23 +213,34 @@ bool QmlPixmapCache::find(const QUrl& url, QPixmap *pixmap) The returned QNetworkReply will be deleted when all get() calls are matched by a corresponding find() call. + + If the \a ok parameter is passed and \a url is a local file, + its value will be set to false if the pixmap could not be loaded; + otherwise the pixmap was loaded and *ok will be true. */ -QNetworkReply *QmlPixmapCache::get(QmlEngine *engine, const QUrl& url, QPixmap *pixmap) +QNetworkReply *QmlPixmapCache::get(QmlEngine *engine, const QUrl& url, QPixmap *pixmap, bool *ok) { #ifndef QT_NO_LOCALFILE_OPTIMIZED_QML QString lf = toLocalFileOrQrc(url); if (!lf.isEmpty()) { QString key = url.toString(); if (!QPixmapCache::find(key,pixmap)) { + bool loaded = true; QFile f(lf); if (f.open(QIODevice::ReadOnly)) { if (!readImage(&f, pixmap)) { qWarning() << "Format error loading" << url; *pixmap = QPixmap(); + loaded = false; } - } else + } else { + qWarning() << "Cannot open" << url; *pixmap = QPixmap(); - QPixmapCache::insert(key, *pixmap); + loaded = false; + } + if (loaded) + QPixmapCache::insert(key, *pixmap); + if (ok) *ok = loaded; } return 0; } diff --git a/src/declarative/util/qmlpixmapcache_p.h b/src/declarative/util/qmlpixmapcache_p.h index e6ed452..d2e272c 100644 --- a/src/declarative/util/qmlpixmapcache_p.h +++ b/src/declarative/util/qmlpixmapcache_p.h @@ -56,7 +56,7 @@ class QNetworkReply; class Q_DECLARATIVE_EXPORT QmlPixmapCache { public: - static QNetworkReply *get(QmlEngine *, const QUrl& url, QPixmap *pixmap); + static QNetworkReply *get(QmlEngine *, const QUrl& url, QPixmap *pixmap, bool *ok=0); static void cancelGet(const QUrl& url, QObject* obj); static bool find(const QUrl& url, QPixmap *pixmap); // url must have been passed to QmlPixmapCache::get, and any returned reply finished. diff --git a/src/declarative/util/qmlstate.cpp b/src/declarative/util/qmlstate.cpp index c05c539..5fde89a 100644 --- a/src/declarative/util/qmlstate.cpp +++ b/src/declarative/util/qmlstate.cpp @@ -161,6 +161,9 @@ QmlState::QmlState(QObject *parent) QmlState::~QmlState() { + Q_D(QmlState); + if (d->group) + d->group->removeState(this); } /*! diff --git a/src/declarative/util/qmlstategroup.cpp b/src/declarative/util/qmlstategroup.cpp index 506ab82..d6ce191 100644 --- a/src/declarative/util/qmlstategroup.cpp +++ b/src/declarative/util/qmlstategroup.cpp @@ -119,6 +119,9 @@ QmlStateGroup::QmlStateGroup(QObject *parent) QmlStateGroup::~QmlStateGroup() { + Q_D(const QmlStateGroup); + for (int i = 0; i < d->states.count(); ++i) + d->states.at(i)->setStateGroup(0); } QList<QmlState *> QmlStateGroup::states() const @@ -380,4 +383,10 @@ QmlState *QmlStateGroup::findState(const QString &name) const return 0; } +void QmlStateGroup::removeState(QmlState *state) +{ + Q_D(QmlStateGroup); + d->states.removeOne(state); +} + QT_END_NAMESPACE diff --git a/src/declarative/util/qmlstategroup_p.h b/src/declarative/util/qmlstategroup_p.h index f4c6d86..ddd27d7 100644 --- a/src/declarative/util/qmlstategroup_p.h +++ b/src/declarative/util/qmlstategroup_p.h @@ -83,6 +83,7 @@ Q_SIGNALS: private: friend class QmlState; void updateAutoState(); + void removeState(QmlState *state); }; QT_END_NAMESPACE diff --git a/src/declarative/util/qmltransitionmanager.cpp b/src/declarative/util/qmltransitionmanager.cpp index d1db9ec..ba726db 100644 --- a/src/declarative/util/qmltransitionmanager.cpp +++ b/src/declarative/util/qmltransitionmanager.cpp @@ -236,8 +236,11 @@ void QmlTransitionManager::transition(const QList<Action> &list, action.property.write(action.toValue); } } - if (!transition) + if (!transition) { d->applyBindings(); + if (d->state) + static_cast<QmlStatePrivate*>(QObjectPrivate::get(d->state))->complete(); + } } void QmlTransitionManager::cancel() @@ -262,7 +265,6 @@ void QmlTransitionManager::cancel() } d->bindingsList.clear(); d->completeList.clear(); - } QT_END_NAMESPACE diff --git a/src/gui/accessible/qaccessible.cpp b/src/gui/accessible/qaccessible.cpp index a527ee7..a11ebea 100644 --- a/src/gui/accessible/qaccessible.cpp +++ b/src/gui/accessible/qaccessible.cpp @@ -984,6 +984,16 @@ const QAccessibleInterface *other, int otherChild) const */ /*! + \fn QAccessibleActionInterface *QAccessibleInterface::actionInterface() + \internal +*/ + +/*! + \fn QAccessibleImageInterface *QAccessibleInterface::imageInterface() + \internal +*/ + +/*! \class QAccessibleEvent \brief The QAccessibleEvent class is used to query addition accessibility information about complex widgets. diff --git a/src/gui/dialogs/qfiledialog.cpp b/src/gui/dialogs/qfiledialog.cpp index 6bc6b76..3b1befd 100644 --- a/src/gui/dialogs/qfiledialog.cpp +++ b/src/gui/dialogs/qfiledialog.cpp @@ -3022,12 +3022,6 @@ bool QFileDialogPrivate::itemViewKeyboardEvent(QKeyEvent *event) { case Qt::Key_Escape: q->hide(); return true; -#ifdef QT_KEYPAD_NAVIGATION - case Qt::Key_Down: - case Qt::Key_Up: - return (QApplication::navigationMode() != Qt::NavigationModeKeypadTabOrder - && QApplication::navigationMode() != Qt::NavigationModeKeypadDirectional); -#endif default: break; } @@ -3145,20 +3139,16 @@ QSize QFileDialogListView::sizeHint() const void QFileDialogListView::keyPressEvent(QKeyEvent *e) { - if (!d_ptr->itemViewKeyboardEvent(e)) { - QListView::keyPressEvent(e); - } #ifdef QT_KEYPAD_NAVIGATION - else if ((QApplication::navigationMode() == Qt::NavigationModeKeypadTabOrder - || QApplication::navigationMode() == Qt::NavigationModeKeypadDirectional) - && !hasEditFocus()) { - e->ignore(); - } else { - e->accept(); + if (QApplication::navigationMode() == Qt::NavigationModeKeypadDirectional) { + QListView::keyPressEvent(e); + return; } -#else +#endif // QT_KEYPAD_NAVIGATION + + if (!d_ptr->itemViewKeyboardEvent(e)) + QListView::keyPressEvent(e); e->accept(); -#endif } QFileDialogTreeView::QFileDialogTreeView(QWidget *parent) : QTreeView(parent) @@ -3184,20 +3174,16 @@ void QFileDialogTreeView::init(QFileDialogPrivate *d_pointer) void QFileDialogTreeView::keyPressEvent(QKeyEvent *e) { - if (!d_ptr->itemViewKeyboardEvent(e)) { - QTreeView::keyPressEvent(e); - } #ifdef QT_KEYPAD_NAVIGATION - else if ((QApplication::navigationMode() == Qt::NavigationModeKeypadTabOrder - || QApplication::navigationMode() == Qt::NavigationModeKeypadDirectional) - && !hasEditFocus()) { - e->ignore(); - } else { - e->accept(); + if (QApplication::navigationMode() == Qt::NavigationModeKeypadDirectional) { + QTreeView::keyPressEvent(e); + return; } -#else +#endif // QT_KEYPAD_NAVIGATION + + if (!d_ptr->itemViewKeyboardEvent(e)) + QTreeView::keyPressEvent(e); e->accept(); -#endif } QSize QFileDialogTreeView::sizeHint() const @@ -3213,13 +3199,16 @@ QSize QFileDialogTreeView::sizeHint() const */ void QFileDialogLineEdit::keyPressEvent(QKeyEvent *e) { +#ifdef QT_KEYPAD_NAVIGATION + if (QApplication::navigationMode() == Qt::NavigationModeKeypadDirectional) { + QLineEdit::keyPressEvent(e); + return; + } +#endif // QT_KEYPAD_NAVIGATION + int key = e->key(); QLineEdit::keyPressEvent(e); - if (key != Qt::Key_Escape -#ifdef QT_KEYPAD_NAVIGATION - && QApplication::navigationMode() == Qt::NavigationModeNone -#endif - ) + if (key != Qt::Key_Escape) e->accept(); if (hideOnEsc && (key == Qt::Key_Escape || key == Qt::Key_Return || key == Qt::Key_Enter)) { e->accept(); diff --git a/src/gui/dialogs/qfiledialog_win.cpp b/src/gui/dialogs/qfiledialog_win.cpp index 8089b43..d8ae73e 100644 --- a/src/gui/dialogs/qfiledialog_win.cpp +++ b/src/gui/dialogs/qfiledialog_win.cpp @@ -509,7 +509,7 @@ static bool qt_win_set_IFileDialogOptions(IFileDialog *pfd, DWORD newOptions; hr = pfd->GetOptions(&newOptions); if (SUCCEEDED(hr)) { - newOptions |= (FOS_NOCHANGEDIR | FOS_NOREADONLYRETURN); + newOptions |= FOS_NOCHANGEDIR; if (mode == QFileDialog::ExistingFile || mode == QFileDialog::ExistingFiles) newOptions |= (FOS_FILEMUSTEXIST | FOS_PATHMUSTEXIST); diff --git a/src/gui/dialogs/qprintdialog_unix.cpp b/src/gui/dialogs/qprintdialog_unix.cpp index 6fc270d..9d6cd55 100644 --- a/src/gui/dialogs/qprintdialog_unix.cpp +++ b/src/gui/dialogs/qprintdialog_unix.cpp @@ -835,9 +835,6 @@ void QUnixPrintWidgetPrivate::setOptionsPane(QPrintDialogPrivate *pane) void QUnixPrintWidgetPrivate::_q_btnBrowseClicked() { - const int prevPrinter = widget.printers->currentIndex(); - widget.printers->setCurrentIndex(widget.printers->count() - 2); // the pdf one - QString filename = widget.filename->text(); #ifndef QT_NO_FILEDIALOG filename = QFileDialog::getSaveFileName(parent, QPrintDialog::tr("Print To File ..."), filename, @@ -849,9 +846,11 @@ void QUnixPrintWidgetPrivate::_q_btnBrowseClicked() widget.filename->setText(filename); if (filename.endsWith(QString::fromLatin1(".ps"), Qt::CaseInsensitive)) widget.printers->setCurrentIndex(widget.printers->count() - 1); // the postscript one + else if (filename.endsWith(QString::fromLatin1(".pdf"), Qt::CaseInsensitive)) + widget.printers->setCurrentIndex(widget.printers->count() - 2); // the pdf one + else if (widget.printers->currentIndex() != widget.printers->count() - 1) // if ps is not selected, pdf is default + widget.printers->setCurrentIndex(widget.printers->count() - 2); // the pdf one } - else - widget.printers->setCurrentIndex(prevPrinter); } void QUnixPrintWidgetPrivate::applyPrinterProperties(QPrinter *p) diff --git a/src/gui/effects/qgraphicseffect.cpp b/src/gui/effects/qgraphicseffect.cpp index 3fca319..239e29c 100644 --- a/src/gui/effects/qgraphicseffect.cpp +++ b/src/gui/effects/qgraphicseffect.cpp @@ -135,19 +135,6 @@ QT_BEGIN_NAMESPACE */ /*! - \enum QGraphicsEffectSource::PixmapPadMode - - This enum describes how much of the effect will be rendered to a pixmap - created using the pixmap() function. - - \value NoExpandPadMode The pixmap is the size of the widget or graphics item. - \value ExpandToTransparentBorderPadMode The pixmap is expanded to include - the widget or graphics item plus a transparent border. - \value ExpandToEffectRectPadMode The pixmap is expanded to include the widget - or graphics item and the effect. -*/ - -/*! \internal */ QGraphicsEffectSource::QGraphicsEffectSource(QGraphicsEffectSourcePrivate &dd, QObject *parent) diff --git a/src/gui/egl/qegl.cpp b/src/gui/egl/qegl.cpp index 39291d3..c0e4890 100644 --- a/src/gui/egl/qegl.cpp +++ b/src/gui/egl/qegl.cpp @@ -62,6 +62,7 @@ QEglContext::QEglContext() , currentSurface(EGL_NO_SURFACE) , current(false) , ownsContext(true) + , sharing(false) { } @@ -174,6 +175,7 @@ bool QEglContext::createContext(QEglContext *shareContext, const QEglProperties if (apiType == QEgl::OpenGL) contextProps.setValue(EGL_CONTEXT_CLIENT_VERSION, 2); #endif + sharing = false; if (shareContext && shareContext->ctx == EGL_NO_CONTEXT) shareContext = 0; if (shareContext) { @@ -181,6 +183,8 @@ bool QEglContext::createContext(QEglContext *shareContext, const QEglProperties if (ctx == EGL_NO_CONTEXT) { qWarning() << "QEglContext::createContext(): Could not share context:" << errorString(eglGetError()); shareContext = 0; + } else { + sharing = true; } } if (ctx == EGL_NO_CONTEXT) { diff --git a/src/gui/egl/qegl_p.h b/src/gui/egl/qegl_p.h index 16b5b16..51bdbbe 100644 --- a/src/gui/egl/qegl_p.h +++ b/src/gui/egl/qegl_p.h @@ -81,6 +81,7 @@ public: bool isValid() const; bool isCurrent() const; + bool isSharing() const { return sharing; } QEgl::API api() const { return apiType; } void setApi(QEgl::API api) { apiType = api; } @@ -132,6 +133,7 @@ private: EGLSurface currentSurface; bool current; bool ownsContext; + bool sharing; static EGLDisplay getDisplay(QPaintDevice *device); diff --git a/src/gui/graphicsview/qgraphicsanchorlayout.cpp b/src/gui/graphicsview/qgraphicsanchorlayout.cpp index 872ec3c..7e5929e 100644 --- a/src/gui/graphicsview/qgraphicsanchorlayout.cpp +++ b/src/gui/graphicsview/qgraphicsanchorlayout.cpp @@ -477,9 +477,6 @@ void QGraphicsAnchorLayout::removeAt(int index) return; // Removing an item affects both horizontal and vertical graphs - d->restoreSimplifiedGraph(QGraphicsAnchorLayoutPrivate::Horizontal); - d->restoreSimplifiedGraph(QGraphicsAnchorLayoutPrivate::Vertical); - d->removeCenterConstraints(item, QGraphicsAnchorLayoutPrivate::Horizontal); d->removeCenterConstraints(item, QGraphicsAnchorLayoutPrivate::Vertical); d->removeAnchors(item); diff --git a/src/gui/graphicsview/qgraphicsanchorlayout.h b/src/gui/graphicsview/qgraphicsanchorlayout.h index 01c3a86..063639e 100644 --- a/src/gui/graphicsview/qgraphicsanchorlayout.h +++ b/src/gui/graphicsview/qgraphicsanchorlayout.h @@ -76,6 +76,7 @@ private: Q_DECLARE_PRIVATE(QGraphicsAnchor) friend class QGraphicsAnchorLayoutPrivate; + friend struct AnchorData; }; class Q_GUI_EXPORT QGraphicsAnchorLayout : public QGraphicsLayout diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp index 182594e..fb67278 100644 --- a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp +++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp @@ -55,14 +55,13 @@ QT_BEGIN_NAMESPACE QGraphicsAnchorPrivate::QGraphicsAnchorPrivate(int version) : QObjectPrivate(version), layoutPrivate(0), data(0), - sizePolicy(QSizePolicy::Fixed) + sizePolicy(QSizePolicy::Fixed), preferredSize(0), + hasSize(true), reversed(false) { } QGraphicsAnchorPrivate::~QGraphicsAnchorPrivate() { - // ### - layoutPrivate->restoreSimplifiedGraph(QGraphicsAnchorLayoutPrivate::Orientation(data->orientation)); layoutPrivate->removeAnchor(data->from, data->to); } @@ -76,31 +75,60 @@ void QGraphicsAnchorPrivate::setSizePolicy(QSizePolicy::Policy policy) void QGraphicsAnchorPrivate::setSpacing(qreal value) { - if (data) { - layoutPrivate->setAnchorSize(data, &value); - } else { + if (!data) { qWarning("QGraphicsAnchor::setSpacing: The anchor does not exist."); + return; + } + + const qreal rawValue = reversed ? -preferredSize : preferredSize; + if (hasSize && (rawValue == value)) + return; + + // The anchor has an user-defined size + hasSize = true; + + // The simplex solver cannot handle negative sizes. To workaround that, + // if value is less than zero, we reverse the anchor and set the absolute + // value; + if (value >= 0) { + preferredSize = value; + if (reversed) + qSwap(data->from, data->to); + reversed = false; + } else { + preferredSize = -value; + if (!reversed) + qSwap(data->from, data->to); + reversed = true; } + + layoutPrivate->q_func()->invalidate(); } void QGraphicsAnchorPrivate::unsetSpacing() { - if (data) { - layoutPrivate->setAnchorSize(data, 0); - } else { + if (!data) { qWarning("QGraphicsAnchor::setSpacing: The anchor does not exist."); + return; } + + // Return to standard direction + hasSize = false; + if (reversed) + qSwap(data->from, data->to); + reversed = false; + + layoutPrivate->q_func()->invalidate(); } qreal QGraphicsAnchorPrivate::spacing() const { - qreal size = 0; - if (data) { - layoutPrivate->anchorSize(data, 0, &size, 0); - } else { + if (!data) { qWarning("QGraphicsAnchor::setSpacing: The anchor does not exist."); + return 0; } - return size; + + return reversed ? -preferredSize : preferredSize; } @@ -139,22 +167,22 @@ static void internalSizeHints(QSizePolicy::Policy policy, *prefSize = prefSizeHint; } -bool AnchorData::refreshSizeHints(const QLayoutStyleInfo *styleInfo) +void AnchorData::refreshSizeHints(const QLayoutStyleInfo *styleInfo) { QSizePolicy::Policy policy; qreal minSizeHint; qreal prefSizeHint; qreal maxSizeHint; - // It is an internal anchor if (item) { + // It is an internal anchor, fetch size information from the item if (isLayoutAnchor) { minSize = 0; prefSize = 0; maxSize = QWIDGETSIZE_MAX; if (isCenterAnchor) maxSize /= 2; - return true; + return; } else { if (orientation == QGraphicsAnchorLayoutPrivate::Horizontal) { policy = item->sizePolicy().horizontalPolicy(); @@ -175,14 +203,16 @@ bool AnchorData::refreshSizeHints(const QLayoutStyleInfo *styleInfo) } } } else { + // It is a user-created anchor, fetch size information from the associated QGraphicsAnchor Q_ASSERT(graphicsAnchor); - policy = graphicsAnchor->sizePolicy(); + QGraphicsAnchorPrivate *anchorPrivate = graphicsAnchor->d_func(); + policy = anchorPrivate->sizePolicy; minSizeHint = 0; - if (hasSize) { + if (anchorPrivate->hasSize) { // One can only configure the preferred size of a normal anchor. Their minimum and // maximum "size hints" are always 0 and QWIDGETSIZE_MAX, correspondingly. However, // their effective size hints might be narrowed down due to their size policies. - prefSizeHint = prefSize; + prefSizeHint = anchorPrivate->preferredSize; } else { const Qt::Orientation orient = Qt::Orientation(QGraphicsAnchorLayoutPrivate::edgeOrientation(from->m_edge) + 1); qreal s = styleInfo->defaultSpacing(orient); @@ -214,8 +244,6 @@ bool AnchorData::refreshSizeHints(const QLayoutStyleInfo *styleInfo) sizeAtMinimum = prefSize; sizeAtPreferred = prefSize; sizeAtMaximum = prefSize; - - return true; } void ParallelAnchorData::updateChildrenSizes() @@ -224,8 +252,13 @@ void ParallelAnchorData::updateChildrenSizes() firstEdge->sizeAtPreferred = sizeAtPreferred; firstEdge->sizeAtMaximum = sizeAtMaximum; - const bool secondFwd = (secondEdge->from == from); - if (secondFwd) { + // We have the convention that the first children will define the direction of the + // pararell group. So we can check whether the second edge is "forward" in relation + // to the group if it have the same direction as the first edge. Note that we don't + // use 'this->from' because it might be changed by vertex simplification. + const bool secondForward = (firstEdge->from == secondEdge->from); + + if (secondForward) { secondEdge->sizeAtMinimum = sizeAtMinimum; secondEdge->sizeAtPreferred = sizeAtPreferred; secondEdge->sizeAtMaximum = sizeAtMaximum; @@ -239,26 +272,21 @@ void ParallelAnchorData::updateChildrenSizes() secondEdge->updateChildrenSizes(); } -bool ParallelAnchorData::refreshSizeHints(const QLayoutStyleInfo *styleInfo) +bool ParallelAnchorData::calculateSizeHints() { - return refreshSizeHints_helper(styleInfo); -} - -bool ParallelAnchorData::refreshSizeHints_helper(const QLayoutStyleInfo *styleInfo, - bool refreshChildren) -{ - if (refreshChildren && (!firstEdge->refreshSizeHints(styleInfo) - || !secondEdge->refreshSizeHints(styleInfo))) { - return false; - } + // Note that parallel groups can lead to unfeasibility, so during calculation, we can + // find out one unfeasibility. Because of that this method return boolean. This can't + // happen in sequential, so there the method is void. // Account for parallel anchors where the second edge is backwards. // We rely on the fact that a forward anchor of sizes min, pref, max is equivalent // to a backwards anchor of size (-max, -pref, -min) - const bool secondFwd = (secondEdge->from == from); - const qreal secondMin = secondFwd ? secondEdge->minSize : -secondEdge->maxSize; - const qreal secondPref = secondFwd ? secondEdge->prefSize : -secondEdge->prefSize; - const qreal secondMax = secondFwd ? secondEdge->maxSize : -secondEdge->minSize; + + // Also see comments in updateChildrenSizes(). + const bool secondForward = (firstEdge->from == secondEdge->from); + const qreal secondMin = secondForward ? secondEdge->minSize : -secondEdge->maxSize; + const qreal secondPref = secondForward ? secondEdge->prefSize : -secondEdge->prefSize; + const qreal secondMax = secondForward ? secondEdge->maxSize : -secondEdge->minSize; minSize = qMax(firstEdge->minSize, secondMin); maxSize = qMin(firstEdge->maxSize, secondMax); @@ -386,13 +414,7 @@ void SequentialAnchorData::updateChildrenSizes() } } -bool SequentialAnchorData::refreshSizeHints(const QLayoutStyleInfo *styleInfo) -{ - return refreshSizeHints_helper(styleInfo); -} - -bool SequentialAnchorData::refreshSizeHints_helper(const QLayoutStyleInfo *styleInfo, - bool refreshChildren) +void SequentialAnchorData::calculateSizeHints() { minSize = 0; prefSize = 0; @@ -400,11 +422,6 @@ bool SequentialAnchorData::refreshSizeHints_helper(const QLayoutStyleInfo *style for (int i = 0; i < m_edges.count(); ++i) { AnchorData *edge = m_edges.at(i); - - // If it's the case refresh children information first - if (refreshChildren && !edge->refreshSizeHints(styleInfo)) - return false; - minSize += edge->minSize; prefSize += edge->prefSize; maxSize += edge->maxSize; @@ -414,8 +431,6 @@ bool SequentialAnchorData::refreshSizeHints_helper(const QLayoutStyleInfo *style sizeAtMinimum = prefSize; sizeAtPreferred = prefSize; sizeAtMaximum = prefSize; - - return true; } #ifdef QT_DEBUG @@ -490,7 +505,6 @@ QGraphicsAnchorLayoutPrivate::QGraphicsAnchorLayoutPrivate() interpolationProgress[i] = -1; spacings[i] = -1; - graphSimplified[i] = false; graphHasConflicts[i] = false; layoutFirstVertex[i] = 0; @@ -591,7 +605,7 @@ AnchorData *QGraphicsAnchorLayoutPrivate::addAnchorMaybeParallel(AnchorData *new // At this point we can identify that the parallel anchor is not feasible, e.g. one // anchor minimum size is bigger than the other anchor maximum size. - *feasible = parallel->refreshSizeHints_helper(0, false); + *feasible = parallel->calculateSizeHints(); newAnchor = parallel; } @@ -652,7 +666,7 @@ static AnchorData *createSequence(Graph<AnchorVertex, AnchorData> *graph, sequence->from = before; sequence->to = after; - sequence->refreshSizeHints_helper(0, false); + sequence->calculateSizeHints(); return sequence; } @@ -696,16 +710,18 @@ static AnchorData *createSequence(Graph<AnchorVertex, AnchorData> *graph, */ bool QGraphicsAnchorLayoutPrivate::simplifyGraph(Orientation orientation) { - static bool noSimplification = !qgetenv("QT_ANCHORLAYOUT_NO_SIMPLIFICATION").isEmpty(); - if (noSimplification || items.isEmpty()) + if (items.isEmpty()) return true; - if (graphSimplified[orientation]) - return true; - -#if 0 +#if defined(QT_DEBUG) && 0 qDebug("Simplifying Graph for %s", orientation == Horizontal ? "Horizontal" : "Vertical"); + + static int count = 0; + if (orientation == Horizontal) { + count++; + dumpGraph(QString::fromAscii("%1-full").arg(count)); + } #endif // Vertex simplification @@ -723,13 +739,16 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraph(Orientation orientation) // Note that if we are not feasible, we fallback and make sure that the graph is fully restored if (!feasible) { - graphSimplified[orientation] = true; restoreSimplifiedGraph(orientation); restoreVertices(orientation); return false; } - graphSimplified[orientation] = true; +#if defined(QT_DEBUG) && 0 + dumpGraph(QString::fromAscii("%1-simplified-%2").arg(count).arg( + QString::fromAscii(orientation == Horizontal ? "Horizontal" : "Vertical"))); +#endif + return true; } @@ -903,7 +922,7 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraphIteration(QGraphicsAnchorLayoutP QStack<QPair<AnchorVertex *, AnchorVertex *> > stack; stack.push(qMakePair(static_cast<AnchorVertex *>(0), layoutFirstVertex[orientation])); QVector<AnchorVertex*> candidates; - bool candidatesForward; + bool candidatesForward = true; // Walk depth-first, in the stack we store start of the candidate sequence (beforeSequence) // and the vertex to be visited. @@ -1134,10 +1153,6 @@ void QGraphicsAnchorLayoutPrivate::restoreSimplifiedConstraints(ParallelAnchorDa void QGraphicsAnchorLayoutPrivate::restoreSimplifiedGraph(Orientation orientation) { - if (!graphSimplified[orientation]) - return; - graphSimplified[orientation] = false; - #if 0 qDebug("Restoring Simplified Graph for %s", orientation == Horizontal ? "Horizontal" : "Vertical"); @@ -1292,19 +1307,17 @@ void QGraphicsAnchorLayoutPrivate::deleteLayoutEdges() void QGraphicsAnchorLayoutPrivate::createItemEdges(QGraphicsLayoutItem *item) { - Q_ASSERT(!graphSimplified[Horizontal] && !graphSimplified[Vertical]); - items.append(item); // Create horizontal and vertical internal anchors for the item and // refresh its size hint / policy values. AnchorData *data = new AnchorData; addAnchor_helper(item, Qt::AnchorLeft, item, Qt::AnchorRight, data); - data->refreshSizeHints(0); // 0 = effectiveSpacing, will not be used + data->refreshSizeHints(); data = new AnchorData; addAnchor_helper(item, Qt::AnchorTop, item, Qt::AnchorBottom, data); - data->refreshSizeHints(0); // 0 = effectiveSpacing, will not be used + data->refreshSizeHints(); } /*! @@ -1336,8 +1349,6 @@ void QGraphicsAnchorLayoutPrivate::createCenterAnchors( return; } - Q_ASSERT(!graphSimplified[orientation]); - // Check if vertex already exists if (internalVertex(item, centerEdge)) return; @@ -1366,14 +1377,14 @@ void QGraphicsAnchorLayoutPrivate::createCenterAnchors( addAnchor_helper(item, firstEdge, item, centerEdge, data); data->isCenterAnchor = true; data->dependency = AnchorData::Master; - data->refreshSizeHints(0); + data->refreshSizeHints(); data = new AnchorData; c->variables.insert(data, -1.0); addAnchor_helper(item, centerEdge, item, lastEdge, data); data->isCenterAnchor = true; data->dependency = AnchorData::Slave; - data->refreshSizeHints(0); + data->refreshSizeHints(); itemCenterConstraints[orientation].append(c); @@ -1404,8 +1415,6 @@ void QGraphicsAnchorLayoutPrivate::removeCenterAnchors( return; } - Q_ASSERT(!graphSimplified[orientation]); - // Orientation code Qt::AnchorPoint firstEdge; Qt::AnchorPoint lastEdge; @@ -1442,7 +1451,7 @@ void QGraphicsAnchorLayoutPrivate::removeCenterAnchors( // Create the new anchor that should substitute the left-center-right anchors. AnchorData *data = new AnchorData; addAnchor_helper(item, firstEdge, item, lastEdge, data); - data->refreshSizeHints(0); + data->refreshSizeHints(); // Remove old anchors removeAnchor_helper(first, center); @@ -1473,8 +1482,6 @@ void QGraphicsAnchorLayoutPrivate::removeCenterAnchors( void QGraphicsAnchorLayoutPrivate::removeCenterConstraints(QGraphicsLayoutItem *item, Orientation orientation) { - Q_ASSERT(!graphSimplified[orientation]); - // Remove the item center constraints associated to this item // ### This is a temporary solution. We should probably use a better // data structure to hold items and/or their associated constraints @@ -1505,15 +1512,21 @@ void QGraphicsAnchorLayoutPrivate::removeCenterConstraints(QGraphicsLayoutItem * /*! * \internal + * Implements the high level "addAnchor" feature. Called by the public API + * addAnchor method. * - * Helper function that is called from the anchor functions in the public API. - * If \a spacing is 0, it will pick up the spacing defined by the style. + * The optional \a spacing argument defines the size of the anchor. If not provided, + * the anchor size is either 0 or not-set, depending on type of anchor created (see + * matrix below). + * + * All anchors that remain with size not-set will assume the standard spacing, + * set either by the layout style or through the "setSpacing" layout API. */ QGraphicsAnchor *QGraphicsAnchorLayoutPrivate::addAnchor(QGraphicsLayoutItem *firstItem, - Qt::AnchorPoint firstEdge, - QGraphicsLayoutItem *secondItem, - Qt::AnchorPoint secondEdge, - qreal *spacing) + Qt::AnchorPoint firstEdge, + QGraphicsLayoutItem *secondItem, + Qt::AnchorPoint secondEdge, + qreal *spacing) { Q_Q(QGraphicsAnchorLayout); if ((firstItem == 0) || (secondItem == 0)) { @@ -1534,10 +1547,6 @@ QGraphicsAnchor *QGraphicsAnchorLayoutPrivate::addAnchor(QGraphicsLayoutItem *fi return 0; } - // Guarantee that the graph is no simplified when adding this anchor, - // anchor manipulation always happen in the full graph - restoreSimplifiedGraph(edgeOrientation(firstEdge)); - // In QGraphicsAnchorLayout, items are represented in its internal // graph as four anchors that connect: // - Left -> HCenter @@ -1547,12 +1556,10 @@ QGraphicsAnchor *QGraphicsAnchorLayoutPrivate::addAnchor(QGraphicsLayoutItem *fi // Ensure that the internal anchors have been created for both items. if (firstItem != q && !items.contains(firstItem)) { - restoreSimplifiedGraph(edgeOrientation(firstEdge) == Horizontal ? Vertical : Horizontal); createItemEdges(firstItem); addChildLayoutItem(firstItem); } if (secondItem != q && !items.contains(secondItem)) { - restoreSimplifiedGraph(edgeOrientation(firstEdge) == Horizontal ? Vertical : Horizontal); createItemEdges(secondItem); addChildLayoutItem(secondItem); } @@ -1565,7 +1572,13 @@ QGraphicsAnchor *QGraphicsAnchorLayoutPrivate::addAnchor(QGraphicsLayoutItem *fi correctEdgeDirection(firstItem, firstEdge, secondItem, secondEdge); AnchorData *data = new AnchorData; - if (!spacing) { + QGraphicsAnchor *graphicsAnchor = acquireGraphicsAnchor(data); + + addAnchor_helper(firstItem, firstEdge, secondItem, secondEdge, data); + + if (spacing) { + graphicsAnchor->setSpacing(*spacing); + } else { // If firstItem or secondItem is the layout itself, the spacing will default to 0. // Otherwise, the following matrix is used (questionmark means that the spacing // is queried from the style): @@ -1578,45 +1591,39 @@ QGraphicsAnchor *QGraphicsAnchorLayoutPrivate::addAnchor(QGraphicsLayoutItem *fi || secondItem == q || pickEdge(firstEdge, Horizontal) == Qt::AnchorHorizontalCenter || oppositeEdge(firstEdge) != secondEdge) { - data->setPreferredSize(0); + graphicsAnchor->setSpacing(0); } else { - data->unsetSize(); + graphicsAnchor->unsetSpacing(); } - addAnchor_helper(firstItem, firstEdge, secondItem, secondEdge, data); - - } else if (*spacing >= 0) { - data->setPreferredSize(*spacing); - addAnchor_helper(firstItem, firstEdge, secondItem, secondEdge, data); - - } else { - data->setPreferredSize(-*spacing); - addAnchor_helper(secondItem, secondEdge, firstItem, firstEdge, data); } - return acquireGraphicsAnchor(data); + return graphicsAnchor; } +/* + \internal + + This method adds an AnchorData to the internal graph. It is responsible for doing + the boilerplate part of such task. + + If another AnchorData exists between the mentioned vertices, it is deleted and + the new one is inserted. +*/ void QGraphicsAnchorLayoutPrivate::addAnchor_helper(QGraphicsLayoutItem *firstItem, - Qt::AnchorPoint firstEdge, - QGraphicsLayoutItem *secondItem, - Qt::AnchorPoint secondEdge, - AnchorData *data) + Qt::AnchorPoint firstEdge, + QGraphicsLayoutItem *secondItem, + Qt::AnchorPoint secondEdge, + AnchorData *data) { Q_Q(QGraphicsAnchorLayout); const Orientation orientation = edgeOrientation(firstEdge); - // Guarantee that the graph is no simplified when adding this anchor, - // anchor manipulation always happen in the full graph - restoreSimplifiedGraph(orientation); - - // Is the Vertex (firstItem, firstEdge) already represented in our - // internal structure? + // Create or increase the reference count for the related vertices. AnchorVertex *v1 = addInternalVertex(firstItem, firstEdge); AnchorVertex *v2 = addInternalVertex(secondItem, secondEdge); // Remove previous anchor - // ### Could we update the existing edgeData rather than creating a new one? if (graph[orientation].edgeData(v1, v2)) { removeAnchor_helper(v1, v2); } @@ -1647,15 +1654,13 @@ QGraphicsAnchor *QGraphicsAnchorLayoutPrivate::getAnchor(QGraphicsLayoutItem *fi QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge) { - Orientation orient = edgeOrientation(firstEdge); - restoreSimplifiedGraph(orient); - + const Orientation orientation = edgeOrientation(firstEdge); AnchorVertex *v1 = internalVertex(firstItem, firstEdge); AnchorVertex *v2 = internalVertex(secondItem, secondEdge); QGraphicsAnchor *graphicsAnchor = 0; - AnchorData *data = graph[orient].edgeData(v1, v2); + AnchorData *data = graph[orientation].edgeData(v1, v2); if (data) graphicsAnchor = acquireGraphicsAnchor(data); return graphicsAnchor; @@ -1740,12 +1745,9 @@ void QGraphicsAnchorLayoutPrivate::removeAnchor(AnchorVertex *firstVertex, void QGraphicsAnchorLayoutPrivate::removeAnchor_helper(AnchorVertex *v1, AnchorVertex *v2) { Q_ASSERT(v1 && v2); - // Guarantee that the graph is no simplified when removing this anchor, - // anchor manipulation always happen in the full graph - Orientation o = edgeOrientation(v1->m_edge); - restoreSimplifiedGraph(o); // Remove edge from graph + const Orientation o = edgeOrientation(v1->m_edge); graph[o].removeEdge(v1, v2); // Decrease vertices reference count (may trigger a deletion) @@ -1753,67 +1755,6 @@ void QGraphicsAnchorLayoutPrivate::removeAnchor_helper(AnchorVertex *v1, AnchorV removeInternalVertex(v2->m_item, v2->m_edge); } -/*! - \internal - Only called from outside. (calls invalidate()) -*/ -void QGraphicsAnchorLayoutPrivate::setAnchorSize(AnchorData *data, const qreal *anchorSize) -{ - Q_Q(QGraphicsAnchorLayout); - // ### we can avoid restoration if we really want to, but we would have to - // search recursively through all composite anchors - Q_ASSERT(data); - restoreSimplifiedGraph(edgeOrientation(data->from->m_edge)); - - QGraphicsLayoutItem *firstItem = data->from->m_item; - QGraphicsLayoutItem *secondItem = data->to->m_item; - Qt::AnchorPoint firstEdge = data->from->m_edge; - Qt::AnchorPoint secondEdge = data->to->m_edge; - - // Use heuristics to find out what the user meant with this anchor. - correctEdgeDirection(firstItem, firstEdge, secondItem, secondEdge); - if (data->from->m_item != firstItem) - qSwap(data->from, data->to); - - if (anchorSize) { - // ### The current implementation makes "setAnchorSize" behavior - // dependent on the argument order for cases where we have - // no heuristic. Ie. two widgets, same anchor point. - - // We cannot have negative sizes inside the graph. This would cause - // the simplex solver to fail because all simplex variables are - // positive by definition. - // "negative spacing" is handled by inverting the standard item order. - if (*anchorSize >= 0) { - data->setPreferredSize(*anchorSize); - } else { - data->setPreferredSize(-*anchorSize); - qSwap(data->from, data->to); - } - } else { - data->unsetSize(); - } - q->invalidate(); -} - -void QGraphicsAnchorLayoutPrivate::anchorSize(const AnchorData *data, - qreal *minSize, - qreal *prefSize, - qreal *maxSize) const -{ - Q_ASSERT(minSize || prefSize || maxSize); - Q_ASSERT(data); - QGraphicsAnchorLayoutPrivate *that = const_cast<QGraphicsAnchorLayoutPrivate *>(this); - that->restoreSimplifiedGraph(Orientation(data->orientation)); - - if (minSize) - *minSize = data->minSize; - if (prefSize) - *prefSize = data->prefSize; - if (maxSize) - *maxSize = data->maxSize; -} - AnchorVertex *QGraphicsAnchorLayoutPrivate::addInternalVertex(QGraphicsLayoutItem *item, Qt::AnchorPoint edge) { @@ -1879,8 +1820,6 @@ void QGraphicsAnchorLayoutPrivate::removeVertex(QGraphicsLayoutItem *item, Qt::A void QGraphicsAnchorLayoutPrivate::removeAnchors(QGraphicsLayoutItem *item) { - Q_ASSERT(!graphSimplified[Horizontal] && !graphSimplified[Vertical]); - // remove the center anchor first!! removeCenterAnchors(item, Qt::AnchorHorizontalCenter, false); removeVertex(item, Qt::AnchorLeft); @@ -1983,20 +1922,8 @@ void QGraphicsAnchorLayoutPrivate::calculateGraphs() { if (!calculateGraphCacheDirty) return; - -#if defined(QT_DEBUG) && 0 - static int count = 0; - count++; - dumpGraph(QString::fromAscii("%1-before").arg(count)); -#endif - calculateGraphs(Horizontal); calculateGraphs(Vertical); - -#if defined(QT_DEBUG) && 0 - dumpGraph(QString::fromAscii("%1-after").arg(count)); -#endif - calculateGraphCacheDirty = false; } @@ -2044,26 +1971,13 @@ void QGraphicsAnchorLayoutPrivate::calculateGraphs( lastCalculationUsedSimplex[orientation] = false; #endif - // ### This is necessary because now we do vertex simplification, we still don't know - // differentiate between invalidate()s that doesn't need resimplification and those which - // need. For example, when size hint of an item changes, this may cause an anchor to reach 0 or to - // leave 0 and get a size. In both cases we need resimplify. - // - // ### one possible solution would be tracking all the 0-sized anchors, if this set change, we need - // resimplify. - restoreSimplifiedGraph(orientation); - - // Reset the nominal sizes of each anchor based on the current item sizes. This function - // works with both simplified and non-simplified graphs, so it'll work when the - // simplification is going to be reused. - if (!refreshAllSizeHints(orientation)) { - qWarning("QGraphicsAnchorLayout: anchor setup is not feasible."); - graphHasConflicts[orientation] = true; - return; - } + static bool simplificationEnabled = qgetenv("QT_ANCHORLAYOUT_NO_SIMPLIFICATION").isEmpty(); + + // Reset the nominal sizes of each anchor based on the current item sizes + refreshAllSizeHints(orientation); // Simplify the graph - if (!simplifyGraph(orientation)) { + if (simplificationEnabled && !simplifyGraph(orientation)) { qWarning("QGraphicsAnchorLayout: anchor setup is not feasible."); graphHasConflicts[orientation] = true; return; @@ -2127,6 +2041,9 @@ void QGraphicsAnchorLayoutPrivate::calculateGraphs( qDeleteAll(constraints[orientation]); constraints[orientation].clear(); graphPaths[orientation].clear(); // ### + + if (simplificationEnabled) + restoreSimplifiedGraph(orientation); } /*! @@ -2226,29 +2143,19 @@ bool QGraphicsAnchorLayoutPrivate::calculateNonTrunk(const QList<QSimplexConstra /*! \internal - Traverse the graph refreshing the size hints. Complex anchors will call the - refresh method of their children anchors. Simple anchors, if are internal - anchors, will query the associated item for their size hints. - - Returns false if some unfeasibility was found in the graph regarding the - complex anchors. + Traverse the graph refreshing the size hints. Edges will query their associated + item or graphicsAnchor for their size hints. */ -bool QGraphicsAnchorLayoutPrivate::refreshAllSizeHints(Orientation orientation) +void QGraphicsAnchorLayoutPrivate::refreshAllSizeHints(Orientation orientation) { Graph<AnchorVertex, AnchorData> &g = graph[orientation]; QList<QPair<AnchorVertex *, AnchorVertex *> > vertices = g.connections(); QLayoutStyleInfo styleInf = styleInfo(); for (int i = 0; i < vertices.count(); ++i) { - AnchorData *data = g.edgeData(vertices.at(i).first, vertices.at(i).second);; - Q_ASSERT(data->from && data->to); - - // During the traversal we check the feasibility of the complex anchors. - if (!data->refreshSizeHints(&styleInf)) - return false; + AnchorData *data = g.edgeData(vertices.at(i).first, vertices.at(i).second); + data->refreshSizeHints(&styleInf); } - - return true; } /*! @@ -2621,21 +2528,6 @@ void QGraphicsAnchorLayoutPrivate::setItemsGeometries(const QRectF &geom) } /*! - \internal - - Fill the distance in the vertex and in the sub-vertices if its a combined vertex. -*/ -static void setVertexDistance(AnchorVertex *v, qreal distance) -{ - v->distance = distance; - if (v->m_type == AnchorVertex::Pair) { - AnchorVertexPair *pair = static_cast<AnchorVertexPair *>(v); - setVertexDistance(pair->m_first, distance); - setVertexDistance(pair->m_second, distance); - } -} - -/*! \internal Calculate the position of each vertex based on the paths to each of @@ -2650,7 +2542,7 @@ void QGraphicsAnchorLayoutPrivate::calculateVertexPositions( // Get root vertex AnchorVertex *root = layoutFirstVertex[orientation]; - setVertexDistance(root, 0); + root->distance = 0; visited.insert(root); // Add initial edges to the queue @@ -2661,16 +2553,12 @@ void QGraphicsAnchorLayoutPrivate::calculateVertexPositions( // Do initial calculation required by "interpolateEdge()" setupEdgesInterpolation(orientation); - // Traverse the graph and calculate vertex positions, we need to - // visit all pairs since each of them could have a sequential - // anchor inside, which hides more vertices. + // Traverse the graph and calculate vertex positions while (!queue.isEmpty()) { QPair<AnchorVertex *, AnchorVertex *> pair = queue.dequeue(); AnchorData *edge = graph[orientation].edgeData(pair.first, pair.second); - // Both vertices were interpolated, and the anchor itself can't have other - // anchors inside (it's not a complex anchor). - if (edge->type == AnchorData::Normal && visited.contains(pair.second)) + if (visited.contains(pair.second)) continue; visited.insert(pair.second); @@ -2710,24 +2598,20 @@ void QGraphicsAnchorLayoutPrivate::setupEdgesInterpolation( } /*! - \internal - - Calculate the current Edge size based on the current Layout size and the - size the edge is supposed to have when the layout is at its: + \internal - - minimum size, - - preferred size, - - maximum size. + Calculate the current Edge size based on the current Layout size and the + size the edge is supposed to have when the layout is at its: - These three key values are calculated in advance using linear - programming (more expensive) or the simplification algorithm, then - subsequential resizes of the parent layout require a simple - interpolation. + - minimum size, + - preferred size, + - maximum size. - If the edge is sequential or parallel, it's possible to have more - vertices to be initalized, so it calls specialized functions that - will recurse back to interpolateEdge(). - */ + These three key values are calculated in advance using linear + programming (more expensive) or the simplification algorithm, then + subsequential resizes of the parent layout require a simple + interpolation. +*/ void QGraphicsAnchorLayoutPrivate::interpolateEdge(AnchorVertex *base, AnchorData *edge) { const Orientation orientation = Orientation(edge->orientation); @@ -2741,64 +2625,10 @@ void QGraphicsAnchorLayoutPrivate::interpolateEdge(AnchorVertex *base, AnchorDat // Calculate the distance for the vertex opposite to the base if (edge->from == base) { - setVertexDistance(edge->to, base->distance + edgeDistance); + edge->to->distance = base->distance + edgeDistance; } else { - setVertexDistance(edge->from, base->distance - edgeDistance); - } - - // Process child anchors - if (edge->type == AnchorData::Sequential) - interpolateSequentialEdges(static_cast<SequentialAnchorData *>(edge)); - else if (edge->type == AnchorData::Parallel) - interpolateParallelEdges(static_cast<ParallelAnchorData *>(edge)); -} - -void QGraphicsAnchorLayoutPrivate::interpolateParallelEdges(ParallelAnchorData *data) -{ - // In parallels the boundary vertices are already calculate, we - // just need to look for sequential groups inside, because only - // them may have new vertices associated. - - // First edge - if (data->firstEdge->type == AnchorData::Sequential) - interpolateSequentialEdges(static_cast<SequentialAnchorData *>(data->firstEdge)); - else if (data->firstEdge->type == AnchorData::Parallel) - interpolateParallelEdges(static_cast<ParallelAnchorData *>(data->firstEdge)); - - // Second edge - if (data->secondEdge->type == AnchorData::Sequential) - interpolateSequentialEdges(static_cast<SequentialAnchorData *>(data->secondEdge)); - else if (data->secondEdge->type == AnchorData::Parallel) - interpolateParallelEdges(static_cast<ParallelAnchorData *>(data->secondEdge)); -} - -void QGraphicsAnchorLayoutPrivate::interpolateSequentialEdges(SequentialAnchorData *data) -{ - // This method is supposed to handle any sequential anchor, even out-of-order - // ones. However, in the current QGAL implementation we should get only the - // well behaved ones. - Q_ASSERT(data->m_edges.first()->from == data->from); - Q_ASSERT(data->m_edges.last()->to == data->to); - - // At this point, the two outter vertices already have their distance - // calculated. - // We use the first as the base to calculate the internal ones - - AnchorVertex *prev = data->from; - - for (int i = 0; i < data->m_edges.count() - 1; ++i) { - AnchorData *edge = data->m_edges.at(i); - interpolateEdge(prev, edge); - - // Use the recently calculated vertex as the base for the next one - const bool edgeIsForward = (edge->from == prev); - prev = edgeIsForward ? edge->to : edge->from; + edge->from->distance = base->distance - edgeDistance; } - - // Treat the last specially, since we already calculated it's end - // vertex, so it's only interesting if it's a complex one - if (data->m_edges.last()->type != AnchorData::Normal) - interpolateEdge(prev, data->m_edges.last()); } bool QGraphicsAnchorLayoutPrivate::solveMinMax(const QList<QSimplexConstraint *> &constraints, diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.h b/src/gui/graphicsview/qgraphicsanchorlayout_p.h index 5f50c85..2b365fb 100644 --- a/src/gui/graphicsview/qgraphicsanchorlayout_p.h +++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.h @@ -121,17 +121,17 @@ struct AnchorData : public QSimplexVariable { }; AnchorData() - : QSimplexVariable(), item(0), from(0), to(0), + : QSimplexVariable(), from(0), to(0), minSize(0), prefSize(0), maxSize(0), sizeAtMinimum(0), sizeAtPreferred(0), - sizeAtMaximum(0), + sizeAtMaximum(0), item(0), graphicsAnchor(0), skipInPreferred(0), - type(Normal), hasSize(true), isLayoutAnchor(false), + type(Normal), isLayoutAnchor(false), isCenterAnchor(false), orientation(0), dependency(Independent) {} virtual void updateChildrenSizes() {} - virtual bool refreshSizeHints(const QLayoutStyleInfo *styleInfo); + void refreshSizeHints(const QLayoutStyleInfo *styleInfo = 0); virtual ~AnchorData() {} @@ -141,43 +141,36 @@ struct AnchorData : public QSimplexVariable { QString name; #endif - inline void setPreferredSize(qreal size) - { - prefSize = size; - hasSize = true; - } - - inline void unsetSize() - { - hasSize = false; - } - - // Internal anchors have associated items - QGraphicsLayoutItem *item; - // Anchor is semantically directed AnchorVertex *from; AnchorVertex *to; - // Size restrictions of this edge. For anchors internal to items, these - // values are derived from the respective item size hints. For anchors - // that were added by users, these values are equal to the specified anchor - // size. + // Nominal sizes + // These are the intrinsic size restrictions for a given item. They are + // used as input for the calculation of the actual sizes. + // These values are filled by the refreshSizeHints method, based on the + // anchor size policy, the size hints of the item it (possibly) represents + // and the layout spacing information. qreal minSize; qreal prefSize; qreal maxSize; + // Calculated sizes // These attributes define which sizes should that anchor be in when the // layout is at its minimum, preferred or maximum sizes. Values are // calculated by the Simplex solver based on the current layout setup. qreal sizeAtMinimum; qreal sizeAtPreferred; qreal sizeAtMaximum; + + // References to the classes that represent this anchor in the public world + // An anchor may represent a LayoutItem, it may also be acessible externally + // through a GraphicsAnchor "handler". + QGraphicsLayoutItem *item; QGraphicsAnchor *graphicsAnchor; uint skipInPreferred : 1; uint type : 2; // either Normal, Sequential or Parallel - uint hasSize : 1; // if false, get size from style. uint isLayoutAnchor : 1; // if this anchor is an internal layout anchor uint isCenterAnchor : 1; uint orientation : 1; @@ -204,9 +197,7 @@ struct SequentialAnchorData : public AnchorData } virtual void updateChildrenSizes(); - virtual bool refreshSizeHints(const QLayoutStyleInfo *styleInfo); - - bool refreshSizeHints_helper(const QLayoutStyleInfo *styleInfo, bool refreshChildren = true); + void calculateSizeHints(); QVector<AnchorVertex*> m_children; // list of vertices in the sequence QVector<AnchorData*> m_edges; // keep the list of edges too. @@ -233,9 +224,7 @@ struct ParallelAnchorData : public AnchorData } virtual void updateChildrenSizes(); - virtual bool refreshSizeHints(const QLayoutStyleInfo *styleInfo); - - bool refreshSizeHints_helper(const QLayoutStyleInfo *styleInfo, bool refreshChildren = true); + bool calculateSizeHints(); AnchorData* firstEdge; AnchorData* secondEdge; @@ -350,7 +339,13 @@ public: QGraphicsAnchorLayoutPrivate *layoutPrivate; AnchorData *data; + + // Size information for user controlled anchor QSizePolicy::Policy sizePolicy; + qreal preferredSize; + + uint hasSize : 1; // if false, get size from style. + uint reversed : 1; // if true, the anchor was inverted to keep its value positive }; @@ -445,11 +440,6 @@ public: void removeAnchor(AnchorVertex *firstVertex, AnchorVertex *secondVertex); void removeAnchor_helper(AnchorVertex *v1, AnchorVertex *v2); - void setAnchorSize(AnchorData *data, const qreal *anchorSize); - void anchorSize(const AnchorData *data, - qreal *minSize = 0, - qreal *prefSize = 0, - qreal *maxSize = 0) const; void removeAnchors(QGraphicsLayoutItem *item); @@ -489,7 +479,7 @@ public: const QList<AnchorData *> &variables); // Support functions for calculateGraph() - bool refreshAllSizeHints(Orientation orientation); + void refreshAllSizeHints(Orientation orientation); void findPaths(Orientation orientation); void constraintsFromPaths(Orientation orientation); void updateAnchorSizes(Orientation orientation); @@ -528,8 +518,6 @@ public: void calculateVertexPositions(Orientation orientation); void setupEdgesInterpolation(Orientation orientation); void interpolateEdge(AnchorVertex *base, AnchorData *edge); - void interpolateSequentialEdges(SequentialAnchorData *edge); - void interpolateParallelEdges(ParallelAnchorData *edge); // Linear Programming solver methods bool solveMinMax(const QList<QSimplexConstraint *> &constraints, @@ -576,8 +564,6 @@ public: Interval interpolationInterval[2]; qreal interpolationProgress[2]; - // ### - bool graphSimplified[2]; bool graphHasConflicts[2]; QSet<QGraphicsLayoutItem *> m_floatItems[2]; diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 9d495e9..3f6dff2 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -9606,6 +9606,7 @@ void QGraphicsTextItem::setDefaultTextColor(const QColor &col) QPalette pal = c->palette(); pal.setColor(QPalette::Text, col); c->setPalette(pal); + update(); } /*! @@ -10177,9 +10178,10 @@ bool QGraphicsTextItemPrivate::_q_mouseOnEdge(QGraphicsSceneMouseEvent *event) void QGraphicsTextItem::setTextInteractionFlags(Qt::TextInteractionFlags flags) { if (flags == Qt::NoTextInteraction) - setFlags(this->flags() & ~QGraphicsItem::ItemIsFocusable); + setFlags(this->flags() & ~(QGraphicsItem::ItemIsFocusable | QGraphicsItem::ItemAcceptsInputMethod)); else - setFlags(this->flags() | QGraphicsItem::ItemIsFocusable); + setFlags(this->flags() | QGraphicsItem::ItemIsFocusable | QGraphicsItem::ItemAcceptsInputMethod); + dd->textControl()->setTextInteractionFlags(flags); } diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index 13f31b8..5b0643d 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -4551,6 +4551,10 @@ void QGraphicsScenePrivate::drawItemHelper(QGraphicsItem *item, QPainter *painte void QGraphicsScenePrivate::drawItems(QPainter *painter, const QTransform *const viewTransform, QRegion *exposedRegion, QWidget *widget) { + // Make sure we don't have unpolished items before we draw. + if (!unpolishedItems.isEmpty()) + _q_polishItems(); + QRectF exposedSceneRect; if (exposedRegion && indexMethod != QGraphicsScene::NoIndex) { exposedSceneRect = exposedRegion->boundingRect().adjusted(-1, -1, 1, 1); @@ -5077,6 +5081,10 @@ void QGraphicsScene::drawItems(QPainter *painter, const QStyleOptionGraphicsItem options[], QWidget *widget) { Q_D(QGraphicsScene); + // Make sure we don't have unpolished items before we draw. + if (!d->unpolishedItems.isEmpty()) + d->_q_polishItems(); + QTransform viewTransform = painter->worldTransform(); Q_UNUSED(options); diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp index 3ef311c..3f9f443 100644 --- a/src/gui/graphicsview/qgraphicsview.cpp +++ b/src/gui/graphicsview/qgraphicsview.cpp @@ -1517,6 +1517,8 @@ void QGraphicsView::setScene(QGraphicsScene *scene) QEvent windowDeactivate(QEvent::WindowDeactivate); QApplication::sendEvent(d->scene, &windowDeactivate); } + if(hasFocus()) + d->scene->clearFocus(); } // Assign the new scene and update the contents (scrollbars, etc.)). diff --git a/src/gui/image/qpixmap_s60.cpp b/src/gui/image/qpixmap_s60.cpp index f7a880c..17baa50 100644 --- a/src/gui/image/qpixmap_s60.cpp +++ b/src/gui/image/qpixmap_s60.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage @@ -349,7 +349,8 @@ QS60PixmapData::QS60PixmapData(PixelType type) : QRasterPixmapData(type), bitmapDevice(0), bitmapGc(0), pengine(0), - bytes(0) + bytes(0), + formatLocked(false) { } @@ -425,11 +426,12 @@ void QS60PixmapData::release() } /*! - * Takes ownership of bitmap + * Takes ownership of bitmap. Used by window surface */ void QS60PixmapData::fromSymbianBitmap(CFbsBitmap* bitmap) { cfbsBitmap = bitmap; + formatLocked = true; if(!initSymbianBitmapContext()) { qWarning("Could not create CBitmapContext"); @@ -693,8 +695,10 @@ void QS60PixmapData::beginDataAccess() bytes = newBytes; TDisplayMode mode = cfbsBitmap->DisplayMode(); QImage::Format format = qt_TDisplayMode2Format(mode); - //on S60 3.1, premultiplied alpha pixels are stored in a bitmap with 16MA type - if (format == QImage::Format_ARGB32) + // On S60 3.1, premultiplied alpha pixels are stored in a bitmap with 16MA type. + // S60 window surface needs backing store pixmap for transparent window in ARGB32 format. + // In that case formatLocked is true. + if (!formatLocked && format == QImage::Format_ARGB32) format = QImage::Format_ARGB32_Premultiplied; // pixel data is actually in premultiplied format QVector<QRgb> savedColorTable; diff --git a/src/gui/image/qpixmap_s60_p.h b/src/gui/image/qpixmap_s60_p.h index b23961a..b1b5824 100644 --- a/src/gui/image/qpixmap_s60_p.h +++ b/src/gui/image/qpixmap_s60_p.h @@ -118,6 +118,8 @@ private: QPaintEngine *pengine; uchar* bytes; + bool formatLocked; + friend class QPixmap; friend class QS60WindowSurface; friend class QS60PaintEngine; diff --git a/src/gui/image/qpixmap_x11.cpp b/src/gui/image/qpixmap_x11.cpp index 3f297df..7008fbd 100644 --- a/src/gui/image/qpixmap_x11.cpp +++ b/src/gui/image/qpixmap_x11.cpp @@ -416,6 +416,11 @@ void QX11PixmapData::fromImage(const QImage &img, d = img.depth(); is_null = (w <= 0 || h <= 0); + if (is_null) { + w = h = 0; + return; + } + if (defaultScreen >= 0 && defaultScreen != xinfo.screen()) { QX11InfoData* xd = xinfo.getX11Data(true); xd->screen = defaultScreen; diff --git a/src/gui/image/qpixmapfilter.cpp b/src/gui/image/qpixmapfilter.cpp index c0b840a..3723500 100644 --- a/src/gui/image/qpixmapfilter.cpp +++ b/src/gui/image/qpixmapfilter.cpp @@ -1064,9 +1064,7 @@ void QPixmapDropShadowFilter::setOffset(const QPointF &offset) QRectF QPixmapDropShadowFilter::boundingRectFor(const QRectF &rect) const { Q_D(const QPixmapDropShadowFilter); - qreal delta = d->radius + 1; - return rect.adjusted(-2, -2, 2, 2).united( - rect.translated(d->offset).adjusted(-delta, -delta, delta, delta)); + return rect.united(rect.translated(d->offset).adjusted(-d->radius, -d->radius, d->radius, d->radius)); } /*! @@ -1089,19 +1087,24 @@ void QPixmapDropShadowFilter::draw(QPainter *p, return; } - QImage tmp = src.isNull() ? px.toImage() : px.copy(src.toAlignedRect()).toImage(); + QImage tmp(px.size(), QImage::Format_ARGB32_Premultiplied); + tmp.fill(0); + QPainter tmpPainter(&tmp); + tmpPainter.setCompositionMode(QPainter::CompositionMode_Source); + tmpPainter.drawPixmap(d->offset, px); + tmpPainter.end(); // blur the alpha channel tmp = blurred(tmp, tmp.rect(), qRound(d->radius), true); // blacken the image... - QPainter tmpPainter(&tmp); + tmpPainter.begin(&tmp); tmpPainter.setCompositionMode(QPainter::CompositionMode_SourceIn); - tmpPainter.fillRect(0, 0, tmp.width(), tmp.height(), d->color); + tmpPainter.fillRect(tmp.rect(), d->color); tmpPainter.end(); // draw the blurred drop shadow... - p->drawImage(pos + d->offset, tmp); + p->drawImage(pos, tmp); // Draw the actual pixmap... p->drawPixmap(pos, px, src); diff --git a/src/gui/inputmethod/qcoefepinputcontext_p.h b/src/gui/inputmethod/qcoefepinputcontext_p.h index 452aa75..e24ee04 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_p.h +++ b/src/gui/inputmethod/qcoefepinputcontext_p.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage @@ -84,7 +84,7 @@ public: bool filterEvent(const QEvent *event); void mouseHandler( int x, QMouseEvent *event); - bool isComposing() const { return m_isEditing; } + bool isComposing() const { return !m_preeditString.isEmpty(); } void setFocusWidget(QWidget * w); void widgetDestroyed(QWidget *w); @@ -132,6 +132,7 @@ public: // From MObjectProvider public: TTypeUid::Ptr MopSupplyObject(TTypeUid id); + MObjectProvider *MopNext(); private: QSymbianControl *m_parent; @@ -139,13 +140,14 @@ private: QString m_preeditString; Qt::InputMethodHints m_lastImHints; TUint m_textCapabilities; - bool m_isEditing; bool m_inDestruction; bool m_pendingInputCapabilitiesChanged; int m_cursorVisibility; int m_inlinePosition; MFepInlineTextFormatRetriever *m_formatRetriever; MFepPointerEventHandlerDuringInlineEdit *m_pointerHandler; + int m_longPress; + int m_cursorPos; }; QT_END_NAMESPACE diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp index 25b2313..bdff5e7 100644 --- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp +++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage @@ -65,13 +65,14 @@ QCoeFepInputContext::QCoeFepInputContext(QObject *parent) m_fepState(q_check_ptr(new CAknEdwinState)), // CBase derived object needs check on new m_lastImHints(Qt::ImhNone), m_textCapabilities(TCoeInputCapabilities::EAllText), - m_isEditing(false), m_inDestruction(false), m_pendingInputCapabilitiesChanged(false), m_cursorVisibility(1), m_inlinePosition(0), m_formatRetriever(0), - m_pointerHandler(0) + m_pointerHandler(0), + m_longPress(0), + m_cursorPos(0) { m_fepState->SetObjectProvider(this); m_fepState->SetFlags(EAknEditorFlagDefault); @@ -79,7 +80,7 @@ QCoeFepInputContext::QCoeFepInputContext(QObject *parent) m_fepState->SetPermittedInputModes( EAknEditorAllInputModes ); m_fepState->SetDefaultCase( EAknEditorLowerCase ); m_fepState->SetPermittedCases( EAknEditorLowerCase|EAknEditorUpperCase ); - m_fepState->SetSpecialCharacterTableResourceId( 0 ); + m_fepState->SetSpecialCharacterTableResourceId(R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG); m_fepState->SetNumericKeymap( EAknEditorStandardNumberModeKeymap ); } @@ -202,14 +203,26 @@ bool QCoeFepInputContext::filterEvent(const QEvent *event) if (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease) { const QKeyEvent *keyEvent = static_cast<const QKeyEvent *>(event); - Q_ASSERT(m_lastImHints == focusWidget()->inputMethodHints()); - if (keyEvent->key() == Qt::Key_F20 && m_lastImHints & Qt::ImhHiddenText) { - // Special case in Symbian. On editors with secret text, F20 is for some reason - // considered to be a backspace. - QKeyEvent modifiedEvent(keyEvent->type(), Qt::Key_Backspace, keyEvent->modifiers(), - keyEvent->text(), keyEvent->isAutoRepeat(), keyEvent->count()); - QApplication::sendEvent(focusWidget(), &modifiedEvent); - return true; + switch (keyEvent->key()) { + case Qt::Key_F20: + Q_ASSERT(m_lastImHints == focusWidget()->inputMethodHints()); + if (m_lastImHints & Qt::ImhHiddenText) { + // Special case in Symbian. On editors with secret text, F20 is for some reason + // considered to be a backspace. + QKeyEvent modifiedEvent(keyEvent->type(), Qt::Key_Backspace, keyEvent->modifiers(), + keyEvent->text(), keyEvent->isAutoRepeat(), keyEvent->count()); + QApplication::sendEvent(focusWidget(), &modifiedEvent); + return true; + } + break; + case Qt::Key_Select: + if (!m_preeditString.isEmpty()) { + commitCurrentString(false); + return true; + } + break; + default: + break; } } @@ -243,7 +256,6 @@ bool QCoeFepInputContext::filterEvent(const QEvent *event) void QCoeFepInputContext::mouseHandler( int x, QMouseEvent *event) { - Q_ASSERT(m_isEditing); Q_ASSERT(focusWidget()); if (event->type() == QEvent::MouseButtonPress && event->button() == Qt::LeftButton) { @@ -407,6 +419,14 @@ void QCoeFepInputContext::applyHints(Qt::InputMethodHints hints) } m_fepState->SetNumericKeymap(static_cast<TAknEditorNumericKeymap>(flags)); + if (hints & ImhEmailCharactersOnly) { + m_fepState->SetSpecialCharacterTableResourceId(R_AVKON_EMAIL_ADDR_SPECIAL_CHARACTER_TABLE_DIALOG); + } else if (hints & ImhUrlCharactersOnly) { + m_fepState->SetSpecialCharacterTableResourceId(R_AVKON_URL_SPECIAL_CHARACTER_TABLE_DIALOG); + } else { + m_fepState->SetSpecialCharacterTableResourceId(R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG); + } + if (hints & ImhHiddenText) { m_textCapabilities = TCoeInputCapabilities::EAllText | TCoeInputCapabilities::ESecretText; } else { @@ -478,8 +498,8 @@ void QCoeFepInputContext::StartFepInlineEditL(const TDesC& aInitialInlineText, if (!w) return; - m_isEditing = true; - + m_cursorPos = w->inputMethodQuery(Qt::ImCursorPosition).toInt(); + QList<QInputMethodEvent::Attribute> attributes; m_cursorVisibility = aCursorVisibility ? 1 : 0; @@ -543,8 +563,6 @@ void QCoeFepInputContext::CancelFepInlineEdit() event.setCommitString(QLatin1String(""), 0, 0); m_preeditString.clear(); sendEvent(event); - - m_isEditing = false; } TInt QCoeFepInputContext::DocumentLengthForFep() const @@ -683,16 +701,22 @@ void QCoeFepInputContext::DoCommitFepInlineEditL() void QCoeFepInputContext::commitCurrentString(bool triggeredBySymbian) { if (m_preeditString.size() == 0) { + QWidget *w = focusWidget(); + if (triggeredBySymbian && 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; + } return; } QList<QInputMethodEvent::Attribute> attributes; QInputMethodEvent event(QLatin1String(""), attributes); - event.setCommitString(m_preeditString, 0, 0);//m_preeditString.size()); + event.setCommitString(m_preeditString, 0-m_longPress, m_longPress); m_preeditString.clear(); sendEvent(event); - m_isEditing = false; + m_longPress = 0; if (!triggeredBySymbian) { CCoeFep* fep = CCoeEnv::Static()->Fep(); @@ -733,6 +757,14 @@ TTypeUid::Ptr QCoeFepInputContext::MopSupplyObject(TTypeUid /*id*/) return TTypeUid::Null(); } +MObjectProvider *QCoeFepInputContext::MopNext() +{ + QWidget *w = focusWidget(); + if (w) + return w->effectiveWinId(); + return 0; +} + QT_END_NAMESPACE #endif // QT_NO_IM diff --git a/src/gui/itemviews/qitemselectionmodel.cpp b/src/gui/itemviews/qitemselectionmodel.cpp index c6e02a6..2e4a602 100644 --- a/src/gui/itemviews/qitemselectionmodel.cpp +++ b/src/gui/itemviews/qitemselectionmodel.cpp @@ -730,13 +730,14 @@ void QItemSelectionModelPrivate::_q_layoutAboutToBeChanged() savedPersistentIndexes.clear(); savedPersistentCurrentIndexes.clear(); - // special case for when all indexes are selected + // optimisation for when all indexes are selected + // (only if there is lots of items (1000) because this is not entirely correct) if (ranges.isEmpty() && currentSelection.count() == 1) { QItemSelectionRange range = currentSelection.first(); QModelIndex parent = range.parent(); tableRowCount = model->rowCount(parent); tableColCount = model->columnCount(parent); - if (tableRowCount * tableColCount > 100 + if (tableRowCount * tableColCount > 1000 && range.top() == 0 && range.left() == 0 && range.bottom() == tableRowCount - 1 diff --git a/src/gui/itemviews/qlistview.cpp b/src/gui/itemviews/qlistview.cpp index 15db9a6..c6622cb 100644 --- a/src/gui/itemviews/qlistview.cpp +++ b/src/gui/itemviews/qlistview.cpp @@ -972,9 +972,9 @@ void QListView::paintEvent(QPaintEvent *e) option.rect = visualRect(*it); if (flow() == TopToBottom) - option.rect.setWidth(qMin(viewport()->size().width() - 2 * d->spacing(), option.rect.width())); + option.rect.setWidth(qMin(d->contentsSize().width() - 2 * d->spacing(), option.rect.width())); else - option.rect.setHeight(qMin(viewport()->size().height() - 2 * d->spacing(), option.rect.height())); + option.rect.setHeight(qMin(d->contentsSize().height() - 2 * d->spacing(), option.rect.height())); option.state = state; if (selections && selections->isSelected(*it)) diff --git a/src/gui/itemviews/qtablewidget.cpp b/src/gui/itemviews/qtablewidget.cpp index 21c4e0a..d9b8346 100644 --- a/src/gui/itemviews/qtablewidget.cpp +++ b/src/gui/itemviews/qtablewidget.cpp @@ -2458,7 +2458,7 @@ const QTableWidgetItem *QTableWidget::itemPrototype() const The table widget will use the item prototype clone function when it needs to create a new table item. For example when the user is editing - editing in an empty cell. This is useful when you have a QTableWidgetItem + in an empty cell. This is useful when you have a QTableWidgetItem subclass and want to make sure that QTableWidget creates instances of your subclass. diff --git a/src/gui/itemviews/qtreewidget.cpp b/src/gui/itemviews/qtreewidget.cpp index 040c498..c133ae4 100644 --- a/src/gui/itemviews/qtreewidget.cpp +++ b/src/gui/itemviews/qtreewidget.cpp @@ -2851,7 +2851,14 @@ QTreeWidgetItem *QTreeWidget::itemAt(const QPoint &p) const QRect QTreeWidget::visualItemRect(const QTreeWidgetItem *item) const { Q_D(const QTreeWidget); - return visualRect(d->index(item)); + //the visual rect for an item is across all columns. So we need to determine + //what is the first and last column and get their visual index rects + QModelIndex base = d->index(item); + const int firstVisiblesection = header()->logicalIndexAt(- header()->offset()); + const int lastVisibleSection = header()->logicalIndexAt(header()->length() - header()->offset() - 1); + QModelIndex first = base.sibling(base.row(), header()->logicalIndex(firstVisiblesection)); + QModelIndex last = base.sibling(base.row(), header()->logicalIndex(lastVisibleSection)); + return visualRect(first) | visualRect(last); } /*! diff --git a/src/gui/kernel/qaction.cpp b/src/gui/kernel/qaction.cpp index 6f3cbaf..3eaf2e1 100644 --- a/src/gui/kernel/qaction.cpp +++ b/src/gui/kernel/qaction.cpp @@ -100,6 +100,21 @@ QActionPrivate::~QActionPrivate() { } +bool QActionPrivate::showStatusText(QWidget *widget, const QString &str) +{ +#ifdef QT_NO_STATUSTIP + Q_UNUSED(widget); + Q_UNUSED(str); +#else + if(QObject *object = widget ? widget : parent) { + QStatusTipEvent tip(str); + QApplication::sendEvent(object, &tip); + return true; + } +#endif + return false; +} + void QActionPrivate::sendDataChanged() { Q_Q(QAction); @@ -1206,16 +1221,7 @@ QAction::setData(const QVariant &data) bool QAction::showStatusText(QWidget *widget) { -#ifdef QT_NO_STATUSTIP - Q_UNUSED(widget); -#else - if(QObject *object = widget ? widget : parent()) { - QStatusTipEvent tip(statusTip()); - QApplication::sendEvent(object, &tip); - return true; - } -#endif - return false; + return d_func()->showStatusText(widget, statusTip()); } /*! diff --git a/src/gui/kernel/qaction_p.h b/src/gui/kernel/qaction_p.h index 2527a02..f7b035b 100644 --- a/src/gui/kernel/qaction_p.h +++ b/src/gui/kernel/qaction_p.h @@ -75,6 +75,8 @@ public: QActionPrivate(); ~QActionPrivate(); + bool showStatusText(QWidget *w, const QString &str); + QPointer<QActionGroup> group; QString text; QString iconText; diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 987aa26..4b8f6a0 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -791,7 +791,8 @@ void QApplicationPrivate::construct( } //make sure the plugin is loaded - qt_guiPlatformPlugin(); + if (qt_is_gui_used) + qt_guiPlatformPlugin(); #endif } diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 5578a72..c7f0c00 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage @@ -319,7 +319,11 @@ void QLongTapTimer::RunL() } QSymbianControl::QSymbianControl(QWidget *w) - : CCoeControl(), qwidget(w), m_ignoreFocusChanged(false) + : CCoeControl() + , qwidget(w) + , m_longTapDetector(0) + , m_ignoreFocusChanged(0) + , m_symbianPopupIsOpen(0) { } @@ -357,9 +361,6 @@ QSymbianControl::~QSymbianControl() setFocusSafely(false); S60->appUi()->RemoveFromStack(this); delete m_longTapDetector; - - if(m_previousEventLongTap) - QApplicationPrivate::mouse_buttons = QApplicationPrivate::mouse_buttons & ~Qt::RightButton; } void QSymbianControl::setWidget(QWidget *w) @@ -374,19 +375,11 @@ void QSymbianControl::HandleLongTapEventL( const TPoint& aPenEventLocation, cons alienWidget = qwidget->childAt(widgetPos); if (!alienWidget) alienWidget = qwidget; - QApplicationPrivate::mouse_buttons = QApplicationPrivate::mouse_buttons &(~Qt::LeftButton); - QApplicationPrivate::mouse_buttons = QApplicationPrivate::mouse_buttons | Qt::RightButton; - QMouseEvent mEvent(QEvent::MouseButtonPress, alienWidget->mapFrom(qwidget, widgetPos), globalPos, - Qt::RightButton, QApplicationPrivate::mouse_buttons, Qt::NoModifier); - - bool res = sendMouseEvent(alienWidget, &mEvent); #if !defined(QT_NO_CONTEXTMENU) - QContextMenuEvent contextMenuEvent(QContextMenuEvent::Mouse, widgetPos, globalPos, mEvent.modifiers()); + QContextMenuEvent contextMenuEvent(QContextMenuEvent::Mouse, widgetPos, globalPos, Qt::NoModifier); qt_sendSpontaneousEvent(alienWidget, &contextMenuEvent); #endif - - m_previousEventLongTap = true; } #ifdef QT_SYMBIAN_SUPPORTS_ADVANCED_POINTER @@ -510,12 +503,6 @@ void QSymbianControl::HandlePointerEvent(const TPointerEvent& pEvent) mapS60MouseEventTypeToQt(&type, &button, &pEvent); Qt::KeyboardModifiers modifiers = mapToQtModifiers(pEvent.iModifiers); - if (m_previousEventLongTap) - if (type == QEvent::MouseButtonRelease){ - button = Qt::RightButton; - QApplicationPrivate::mouse_buttons = QApplicationPrivate::mouse_buttons & ~Qt::RightButton; - m_previousEventLongTap = false; - } if (type == QMouseEvent::None) return; @@ -911,6 +898,15 @@ void QSymbianControl::FocusChanged(TDrawNow /* aDrawNow */) return; if (IsFocused() && IsVisible()) { + if (m_symbianPopupIsOpen) { + QWidget *fw = QApplication::focusWidget(); + if (fw) { + QFocusEvent event(QEvent::FocusIn, Qt::PopupFocusReason); + QCoreApplication::sendEvent(fw, &event); + } + m_symbianPopupIsOpen = false; + } + QApplication::setActiveWindow(qwidget->window()); #ifdef Q_WS_S60 // If widget is fullscreen, hide status pane and button container @@ -924,6 +920,16 @@ void QSymbianControl::FocusChanged(TDrawNow /* aDrawNow */) buttonGroup->MakeVisible(!isFullscreen); #endif } else if (QApplication::activeWindow() == qwidget->window()) { + if (CCoeEnv::Static()->AppUi()->IsDisplayingMenuOrDialog()) { + QWidget *fw = QApplication::focusWidget(); + if (fw) { + QFocusEvent event(QEvent::FocusOut, Qt::PopupFocusReason); + QCoreApplication::sendEvent(fw, &event); + } + m_symbianPopupIsOpen = true; + return; + } + QApplication::setActiveWindow(0); } // else { We don't touch the active window unless we were explicitly activated or deactivated } diff --git a/src/gui/kernel/qclipboard_s60.cpp b/src/gui/kernel/qclipboard_s60.cpp index de13a51..48aa331 100644 --- a/src/gui/kernel/qclipboard_s60.cpp +++ b/src/gui/kernel/qclipboard_s60.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/gui/kernel/qcursor_s60.cpp b/src/gui/kernel/qcursor_s60.cpp index 7f5c32a..07b6de4 100644 --- a/src/gui/kernel/qcursor_s60.cpp +++ b/src/gui/kernel/qcursor_s60.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/gui/kernel/qdesktopwidget_s60.cpp b/src/gui/kernel/qdesktopwidget_s60.cpp index 43e0b85..79b8f91 100644 --- a/src/gui/kernel/qdesktopwidget_s60.cpp +++ b/src/gui/kernel/qdesktopwidget_s60.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/gui/kernel/qdnd_s60.cpp b/src/gui/kernel/qdnd_s60.cpp index a8d3ac5..65deb5d 100644 --- a/src/gui/kernel/qdnd_s60.cpp +++ b/src/gui/kernel/qdnd_s60.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/gui/kernel/qeventdispatcher_mac.mm b/src/gui/kernel/qeventdispatcher_mac.mm index c9dd949..427f0b0 100644 --- a/src/gui/kernel/qeventdispatcher_mac.mm +++ b/src/gui/kernel/qeventdispatcher_mac.mm @@ -571,6 +571,12 @@ bool QEventDispatcherMac::processEvents(QEventLoop::ProcessEventsFlags flags) QBoolBlocker execGuard(d->currentExecIsNSAppRun, false); while (!d->interrupt && [NSApp runModalSession:session] == NSRunContinuesResponse) qt_mac_waitForMoreModalSessionEvents(); + if (!d->interrupt && session == d->currentModalSessionCached) { + // Someone called e.g. [NSApp stopModal:] from outside the event + // dispatcher (e.g to stop a native dialog). But that call wrongly stopped + // 'session' as well. As a result, we need to restart all internal sessions: + d->temporarilyStopAllModalSessions(); + } } else { d->nsAppRunCalledByQt = true; QBoolBlocker execGuard(d->currentExecIsNSAppRun, true); diff --git a/src/gui/kernel/qeventdispatcher_s60.cpp b/src/gui/kernel/qeventdispatcher_s60.cpp index dcf83bc..9d18c9b 100644 --- a/src/gui/kernel/qeventdispatcher_s60.cpp +++ b/src/gui/kernel/qeventdispatcher_s60.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/gui/kernel/qeventdispatcher_s60_p.h b/src/gui/kernel/qeventdispatcher_s60_p.h index 94282b7..fbce60a 100644 --- a/src/gui/kernel/qeventdispatcher_s60_p.h +++ b/src/gui/kernel/qeventdispatcher_s60_p.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/gui/kernel/qgesturemanager.cpp b/src/gui/kernel/qgesturemanager.cpp index 3d4bb8c..192f9ac 100644 --- a/src/gui/kernel/qgesturemanager.cpp +++ b/src/gui/kernel/qgesturemanager.cpp @@ -601,6 +601,7 @@ void QGestureManager::deliverEvents(const QSet<QGesture *> &gestures, Qt::GestureType gestureType = gesture->gestureType(); Q_ASSERT(gestureType != Qt::CustomGesture); + Q_UNUSED(gestureType); if (target) { if (gesture->state() == Qt::GestureStarted) { diff --git a/src/gui/kernel/qkeymapper_s60.cpp b/src/gui/kernel/qkeymapper_s60.cpp index d272d6e..ecfb7fb 100644 --- a/src/gui/kernel/qkeymapper_s60.cpp +++ b/src/gui/kernel/qkeymapper_s60.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp index 1a76083..e3af683 100644 --- a/src/gui/kernel/qkeysequence.cpp +++ b/src/gui/kernel/qkeysequence.cpp @@ -1014,9 +1014,12 @@ bool QKeySequence::isEmpty() const */ QKeySequence QKeySequence::mnemonic(const QString &text) { + QKeySequence ret; + if(qt_sequence_no_mnemonics) - return QKeySequence(); + return ret; + bool found = false; int p = 0; while (p >= 0) { p = text.indexOf(QLatin1Char('&'), p) + 1; @@ -1025,13 +1028,22 @@ QKeySequence QKeySequence::mnemonic(const QString &text) if (text.at(p) != QLatin1Char('&')) { QChar c = text.at(p); if (c.isPrint()) { - c = c.toUpper(); - return QKeySequence(c.unicode() + Qt::ALT); + if (!found) { + c = c.toUpper(); + ret = QKeySequence(c.unicode() + Qt::ALT); +#ifdef QT_NO_DEBUG + return ret; +#else + found = true; + } else { + qWarning("QKeySequence::mnemonic: \"%s\" contains multiple occurences of '&'", qPrintable(text)); +#endif + } } } p++; } - return QKeySequence(); + return ret; } /*! diff --git a/src/gui/kernel/qmacgesturerecognizer_mac.mm b/src/gui/kernel/qmacgesturerecognizer_mac.mm index f142d71..3e0ba23 100644 --- a/src/gui/kernel/qmacgesturerecognizer_mac.mm +++ b/src/gui/kernel/qmacgesturerecognizer_mac.mm @@ -67,7 +67,7 @@ QMacSwipeGestureRecognizer::recognize(QGesture *gesture, QObject *obj, QEvent *e case QNativeGestureEvent::Swipe: { QSwipeGesture *g = static_cast<QSwipeGesture *>(gesture); g->setSwipeAngle(ev->angle); - return QGestureRecognizer::TriggerGesture | QGestureRecognizer::ConsumeEventHint; + return QGestureRecognizer::FinishGesture | QGestureRecognizer::ConsumeEventHint; break; } default: break; diff --git a/src/gui/kernel/qsoftkeymanager.cpp b/src/gui/kernel/qsoftkeymanager.cpp index ecad72f..775d773 100644 --- a/src/gui/kernel/qsoftkeymanager.cpp +++ b/src/gui/kernel/qsoftkeymanager.cpp @@ -210,14 +210,22 @@ bool QSoftKeyManager::event(QEvent *e) #ifdef Q_WS_S60 void QSoftKeyManagerPrivate::updateSoftKeys_sys(const QList<QAction*> &softkeys) { + // lets not update softkeys if s60 native dialog or menu is shown + if (CCoeEnv::Static()->AppUi()->IsDisplayingMenuOrDialog()) + return; + CEikButtonGroupContainer* nativeContainer = S60->buttonGroupContainer(); nativeContainer->DrawableWindow()->SetOrdinalPosition(0); nativeContainer->DrawableWindow()->SetPointerCapturePriority(1); //keep softkeys available in modal dialog - QT_TRAP_THROWING(nativeContainer->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY_WITH_IDS)); + nativeContainer->DrawableWindow()->SetFaded(EFalse, RWindowTreeNode::EFadeIncludeChildren); int position = -1; - int command; bool needsExitButton = true; + QT_TRAP_THROWING( + //Using -1 instead of EAknSoftkeyEmpty to avoid flickering. + nativeContainer->SetCommandL(0, -1, KNullDesC); + nativeContainer->SetCommandL(2, -1, KNullDesC); + ); for (int index = 0; index < softkeys.count(); index++) { const QAction* softKeyAction = softkeys.at(index); @@ -238,7 +246,7 @@ void QSoftKeyManagerPrivate::updateSoftKeys_sys(const QList<QAction*> &softkeys) break; } - command = (softKeyAction->objectName().contains("_q_menuSoftKeyAction")) + int command = (softKeyAction->objectName().contains("_q_menuSoftKeyAction")) ? EAknSoftkeyOptions : s60CommandStart + index; @@ -255,7 +263,8 @@ void QSoftKeyManagerPrivate::updateSoftKeys_sys(const QList<QAction*> &softkeys) : Qt::Widget; if (needsExitButton && sourceWindowType != Qt::Dialog && sourceWindowType != Qt::Popup) - QT_TRAP_THROWING(nativeContainer->SetCommandL(2, EAknSoftkeyExit, qt_QString2TPtrC(QSoftKeyManager::tr("Exit")))); + QT_TRAP_THROWING( + nativeContainer->SetCommandL(2, EAknSoftkeyExit, qt_QString2TPtrC(QSoftKeyManager::tr("Exit")))); nativeContainer->DrawDeferred(); // 3.1 needs an extra invitation } diff --git a/src/gui/kernel/qsound_s60.cpp b/src/gui/kernel/qsound_s60.cpp index e4b7cec..af0fae6 100644 --- a/src/gui/kernel/qsound_s60.cpp +++ b/src/gui/kernel/qsound_s60.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h index 3405bcf..08f8bb5 100644 --- a/src/gui/kernel/qt_s60_p.h +++ b/src/gui/kernel/qt_s60_p.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage @@ -175,7 +175,7 @@ public: protected: // from MAknFadedComponent TInt CountFadedComponents() {return 1;} - CCoeControl* FadedComponent(TInt aIndex) {return this;} + CCoeControl* FadedComponent(TInt /*aIndex*/) {return this;} #else #warning No fallback implementation for QSymbianControl::FadeBehindPopup void FadeBehindPopup(bool /*fade*/){ } @@ -202,9 +202,9 @@ private: private: QWidget *qwidget; - bool m_ignoreFocusChanged; QLongTapTimer* m_longTapDetector; - bool m_previousEventLongTap; + bool m_ignoreFocusChanged : 1; + bool m_symbianPopupIsOpen : 1; #ifdef Q_WS_S60 // Fader object used to fade everything except this menu and the CBA. diff --git a/src/gui/kernel/qt_x11_p.h b/src/gui/kernel/qt_x11_p.h index 9f08dc6..9e4cf60 100644 --- a/src/gui/kernel/qt_x11_p.h +++ b/src/gui/kernel/qt_x11_p.h @@ -163,7 +163,9 @@ extern "C" { #endif // QT_NO_XRENDER #ifndef QT_NO_XSYNC +extern "C" { # include "X11/extensions/sync.h" +} #endif // #define QT_NO_XKB diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index c776c36..709f6f3 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -3084,9 +3084,10 @@ void QWidgetPrivate::setEnabled_helper(bool enable) #endif #ifndef QT_NO_IM if (q->testAttribute(Qt::WA_InputMethodEnabled) && q->hasFocus()) { - QInputContext *qic = inputContext(); + QWidget *focusWidget = effectiveFocusWidget(); + QInputContext *qic = focusWidget->d_func()->inputContext(); if (enable) { - qic->setFocusWidget(q); + qic->setFocusWidget(focusWidget); } else { qic->reset(); qic->setFocusWidget(0); @@ -4676,8 +4677,10 @@ void QWidgetPrivate::resolveLayoutDirection() By default, this property is set to Qt::LeftToRight. When the layout direction is set on a widget, it will propagate to - the widget's children. Children added after the call to \c - setLayoutDirection() will not inherit the parent's layout + the widget's children, but not to a child that is a window and not + to a child for which setLayoutDirection() has been explicitly + called. Also, child widgets added \e after setLayoutDirection() + has been called for the parent do not inherit the parent's layout direction. \sa QApplication::layoutDirection @@ -10348,9 +10351,10 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) break; } case Qt::WA_NativeWindow: { #ifndef QT_NO_IM + QWidget *focusWidget = d->effectiveFocusWidget(); QInputContext *ic = 0; if (on && !internalWinId() && testAttribute(Qt::WA_InputMethodEnabled) && hasFocus()) { - ic = d->inputContext(); + ic = focusWidget->d_func()->inputContext(); ic->reset(); ic->setFocusWidget(0); } @@ -10359,7 +10363,7 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) if (on && !internalWinId() && testAttribute(Qt::WA_WState_Created)) d->createWinId(); if (ic && isEnabled()) - ic->setFocusWidget(this); + ic->setFocusWidget(focusWidget); #endif //QT_NO_IM break; } @@ -10391,13 +10395,14 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) break; case Qt::WA_InputMethodEnabled: { #ifndef QT_NO_IM - QInputContext *ic = d->ic; + QWidget *focusWidget = d->effectiveFocusWidget(); + QInputContext *ic = focusWidget->d_func()->ic; if (!ic && (!on || hasFocus())) - ic = d->inputContext(); + ic = focusWidget->d_func()->inputContext(); if (ic) { - if (on && hasFocus() && ic->focusWidget() != this && isEnabled()) { - ic->setFocusWidget(this); - } else if (!on && ic->focusWidget() == this) { + if (on && hasFocus() && ic->focusWidget() != focusWidget && isEnabled()) { + ic->setFocusWidget(focusWidget); + } else if (!on && ic->focusWidget() == focusWidget) { ic->reset(); ic->setFocusWidget(0); } @@ -11462,6 +11467,17 @@ void QWidget::languageChange() { } // compat \sa QWidget::setMaximumSize() */ +/*! + \fn QWidget::setupUi(QWidget *widget) + + Sets up the user interface for the specified \a widget. + + \note This function is available with widgets that derive from user + interface descriptions created using \l{uic}. + + \sa {Using a Designer UI File in Your Application} +*/ + QRect QWidgetPrivate::frameStrut() const { Q_Q(const QWidget); @@ -11855,8 +11871,7 @@ void QWidget::ungrabGesture(Qt::GestureType gesture) isVisible() returns false for a widget, that widget cannot call grabMouse(). - \sa releaseMouse() grabKeyboard() releaseKeyboard() grabKeyboard() - focusWidget() + \sa releaseMouse() grabKeyboard() releaseKeyboard() */ /*! diff --git a/src/gui/kernel/qwidget.h b/src/gui/kernel/qwidget.h index b7c55f9..5ba1d23 100644 --- a/src/gui/kernel/qwidget.h +++ b/src/gui/kernel/qwidget.h @@ -288,6 +288,10 @@ public: void setMaximumWidth(int maxw); void setMaximumHeight(int maxh); +#ifdef Q_QDOC + void setupUi(QWidget *widget); +#endif + QSize sizeIncrement() const; void setSizeIncrement(const QSize &); void setSizeIncrement(int w, int h); diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index 75f9a59..71f0077 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -2673,7 +2673,10 @@ void QWidgetPrivate::transferChildren() // site disabled until it is part of the new hierarchy. bool oldRegistered = w->testAttribute(Qt::WA_DropSiteRegistered); w->setAttribute(Qt::WA_DropSiteRegistered, false); + [qt_mac_nativeview_for(w) retain]; + [qt_mac_nativeview_for(w) removeFromSuperview]; [qt_mac_nativeview_for(q) addSubview:qt_mac_nativeview_for(w)]; + [qt_mac_nativeview_for(w) release]; w->setAttribute(Qt::WA_DropSiteRegistered, oldRegistered); #endif } diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index df28bac..66efcb5 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -465,6 +465,12 @@ public: void setLayoutItemMargins(QStyle::SubElement element, const QStyleOption *opt = 0); QInputContext *inputContext() const; + inline QWidget *effectiveFocusWidget() { + QWidget *w = q_func(); + while (w->focusProxy()) + w = w->focusProxy(); + return w; + } void setModal_sys(); @@ -479,7 +485,7 @@ public: QGraphicsProxyWidget *ancestorProxy = widget->d_func()->nearestGraphicsProxyWidget(widget); //It's embedded if it has an ancestor if (ancestorProxy) { - if (!bypassGraphicsProxyWidget(widget)) { + if (!bypassGraphicsProxyWidget(widget) && ancestorProxy->scene() != 0) { // One view, let be smart and return the viewport rect then the popup is aligned if (ancestorProxy->scene()->views().size() == 1) { QGraphicsView *view = ancestorProxy->scene()->views().at(0); diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp index 88cd63d..b1c37d3 100644 --- a/src/gui/kernel/qwidget_s60.cpp +++ b/src/gui/kernel/qwidget_s60.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage @@ -213,6 +213,15 @@ void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) if ((q->windowType() == Qt::Desktop)) return; + + QPoint oldPos(q->pos()); + QSize oldSize(q->size()); + QRect oldGeom(data.crect); + + // Lose maximized status if deliberate resize + if (w != oldSize.width() || h != oldSize.height()) + data.window_state &= ~Qt::WindowMaximized; + if (extra) { // any size restrictions? w = qMin(w,extra->maxw); h = qMin(h,extra->maxh); @@ -228,17 +237,10 @@ void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) data.window_state = s; } - QPoint oldPos(q->pos()); - QSize oldSize(q->size()); - QRect oldGeom(data.crect); - bool isResize = w != oldSize.width() || h != oldSize.height(); if (!isMove && !isResize) return; - if (isResize) - data.window_state &= ~Qt::WindowMaximized; - if (q->isWindow()) { if (w == 0 || h == 0) { q->setAttribute(Qt::WA_OutsideWSRange, true); @@ -359,6 +361,7 @@ void QWidgetPrivate::create_sys(WId window, bool /* initializeWindow */, bool de QScopedPointer<QSymbianControl> control( q_check_ptr(new QSymbianControl(q)) ); QT_TRAP_THROWING(control->ConstructL(true, desktop)); + control->SetMopParent(static_cast<CEikAppUi*>(S60->appUi())); // Symbian windows are always created in an inactive state // We perform this assignment for the case where the window is being re-created @@ -1235,7 +1238,7 @@ void QWidget::releaseKeyboard() void QWidget::grabMouse() { - if (!qt_nograb()) { + if (isVisible() && !qt_nograb()) { if (QWidgetPrivate::mouseGrabber && QWidgetPrivate::mouseGrabber != this) QWidgetPrivate::mouseGrabber->releaseMouse(); Q_ASSERT(testAttribute(Qt::WA_WState_Created)); @@ -1252,7 +1255,7 @@ void QWidget::grabMouse() #ifndef QT_NO_CURSOR void QWidget::grabMouse(const QCursor &cursor) { - if (!qt_nograb()) { + if (isVisible() && !qt_nograb()) { if (QWidgetPrivate::mouseGrabber && QWidgetPrivate::mouseGrabber != this) QWidgetPrivate::mouseGrabber->releaseMouse(); Q_ASSERT(testAttribute(Qt::WA_WState_Created)); diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index c35c33a..628a109 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -370,7 +370,6 @@ symbian { SOURCES += painting/qwindowsurface_s60.cpp armccIfdefBlock = \ "$${LITERAL_HASH}if defined(ARMV6)" \ - "MACRO QT_HAVE_ARMV6" \ "SOURCEPATH painting" \ "SOURCE qblendfunctions_armv6_rvct.s" \ "SOURCE qdrawhelper_armv6_rvct.s" \ diff --git a/src/gui/painting/qblendfunctions.cpp b/src/gui/painting/qblendfunctions.cpp index 8737f10..b92c5c2 100644 --- a/src/gui/painting/qblendfunctions.cpp +++ b/src/gui/painting/qblendfunctions.cpp @@ -223,21 +223,22 @@ void qt_scale_image_16bit(uchar *destPixels, int dbpl, int h = ty2 - ty1; int w = tx2 - tx1; + quint32 basex; quint32 srcy; if (sx < 0) { - int dstx = qFloor((tx1 + 0.5 - targetRect.right()) * ix) + 1; + int dstx = qFloor((tx1 + qreal(0.5) - targetRect.right()) * ix) + 1; basex = quint32(srcRect.right() * 65536) + dstx; } else { - int dstx = qCeil((tx1 + 0.5 - targetRect.left()) * ix) - 1; + int dstx = qCeil((tx1 + qreal(0.5) - targetRect.left()) * ix) - 1; basex = quint32(srcRect.left() * 65536) + dstx; } if (sy < 0) { - int dsty = qFloor((ty1 + 0.5 - targetRect.bottom()) * iy) + 1; + int dsty = qFloor((ty1 + qreal(0.5) - targetRect.bottom()) * iy) + 1; srcy = quint32(srcRect.bottom() * 65536) + dsty; } else { - int dsty = qCeil((ty1 + 0.5 - targetRect.top()) * iy) - 1; + int dsty = qCeil((ty1 + qreal(0.5) - targetRect.top()) * iy) - 1; srcy = quint32(srcRect.top() * 65536) + dsty; } @@ -738,18 +739,22 @@ template <typename T> void qt_scale_image_32bit(uchar *destPixels, int dbpl, quint32 basex; quint32 srcy; + const int dstx = qCeil((tx1 + 0.5 - qMin(targetRect.left(), targetRect.right())) * ix) - 1; + const int dsty = qCeil((ty1 + 0.5 - qMin(targetRect.top(), targetRect.bottom())) * iy) - 1; + + if (sx < 0) { - int dstx = qFloor((tx1 + 0.5 - targetRect.right()) * ix) + 1; + int dstx = qFloor((tx1 + qreal(0.5) - targetRect.right()) * ix) + 1; basex = quint32(srcRect.right() * 65536) + dstx; } else { - int dstx = qCeil((tx1 + 0.5 - targetRect.left()) * ix) - 1; + int dstx = qCeil((tx1 + qreal(0.5) - targetRect.left()) * ix) - 1; basex = quint32(srcRect.left() * 65536) + dstx; } if (sy < 0) { - int dsty = qFloor((ty1 + 0.5 - targetRect.bottom()) * iy) + 1; + int dsty = qFloor((ty1 + qreal(0.5) - targetRect.bottom()) * iy) + 1; srcy = quint32(srcRect.bottom() * 65536) + dsty; } else { - int dsty = qCeil((ty1 + 0.5 - targetRect.top()) * iy) - 1; + int dsty = qCeil((ty1 + qreal(0.5) - targetRect.top()) * iy) - 1; srcy = quint32(srcRect.top() * 65536) + dsty; } diff --git a/src/gui/painting/qbrush.cpp b/src/gui/painting/qbrush.cpp index afe9986..7273c35 100644 --- a/src/gui/painting/qbrush.cpp +++ b/src/gui/painting/qbrush.cpp @@ -970,7 +970,7 @@ bool QBrush::operator==(const QBrush &b) const QDebug operator<<(QDebug dbg, const QBrush &b) { #ifndef Q_BROKEN_DEBUG_STREAM - const char *BRUSH_STYLES[] = { + static const char *BRUSH_STYLES[] = { "NoBrush", "SolidPattern", "Dense1Pattern", diff --git a/src/gui/painting/qpaintbuffer_p.h b/src/gui/painting/qpaintbuffer_p.h index adf0564..e100512 100644 --- a/src/gui/painting/qpaintbuffer_p.h +++ b/src/gui/painting/qpaintbuffer_p.h @@ -66,7 +66,7 @@ class QPaintBufferPlayback; class Q_GUI_EXPORT QPaintBuffer : public QPaintDevice { - Q_DECLARE_PRIVATE(QPaintBuffer); + Q_DECLARE_PRIVATE(QPaintBuffer) public: QPaintBuffer(); QPaintBuffer(const QPaintBuffer &other); diff --git a/src/gui/painting/qpaintdevice.qdoc b/src/gui/painting/qpaintdevice.qdoc index dca7e0e..ac1c3de 100644 --- a/src/gui/painting/qpaintdevice.qdoc +++ b/src/gui/painting/qpaintdevice.qdoc @@ -83,7 +83,7 @@ inch. The physicalDpiX() and physicalDpiY() functions also return the resolution of the device in dots per inch, but note that if the logical and vertical resolution differ, the corresponding - QPaintEngine must handle the mapping. Finally, the numColors() + QPaintEngine must handle the mapping. Finally, the colorCount() function returns the number of different colors available for the paint device. @@ -111,7 +111,7 @@ also heightMM(). \value PdmNumColors The number of different colors available for - the paint device. See also numColors(). + the paint device. See also colorCount(). \value PdmDepth The bit depth (number of bit planes) of the paint device. See also depth(). @@ -221,11 +221,23 @@ /*! \fn int QPaintDevice::numColors() const + \deprecated + + Use colorCount() instead. + + Returns the number of different colors available for the paint + device. Since this value is an int, it will not be sufficient to + represent the number of colors on 32 bit displays, in this case + INT_MAX is returned instead. + */ + +/*! + \fn int QPaintDevice::colorCount() const Returns the number of different colors available for the paint - device. Since this value is an int, it will not be sufficient to represent - the number of colors on 32 bit displays, in this case INT_MAX is - returned instead. + device. Since this value is an int, it will not be sufficient to + represent the number of colors on 32 bit displays, in this case + INT_MAX is returned instead. */ /*! diff --git a/src/gui/painting/qpathclipper.cpp b/src/gui/painting/qpathclipper.cpp index ab2dc33..51d6195 100644 --- a/src/gui/painting/qpathclipper.cpp +++ b/src/gui/painting/qpathclipper.cpp @@ -1650,7 +1650,7 @@ static void clear(QWingedEdge& list, int edge, QPathEdge::Traversal traversal) template <typename InputIterator> InputIterator qFuzzyFind(InputIterator first, InputIterator last, qreal val) { - while (first != last && !qFuzzyCompare(qreal(*first), qreal(val))) + while (first != last && !QT_PREPEND_NAMESPACE(qFuzzyCompare)(qreal(*first), qreal(val))) ++first; return first; } diff --git a/src/gui/painting/qpdf.cpp b/src/gui/painting/qpdf.cpp index 41a7fbb..d45bd10 100644 --- a/src/gui/painting/qpdf.cpp +++ b/src/gui/painting/qpdf.cpp @@ -78,8 +78,8 @@ const char *qt_real_to_string(qreal val, char *buf) { unsigned int ival = (unsigned int) val; qreal frac = val - (qreal)ival; - int ifrac = (int)(frac * 1000000); - if (ifrac == 1000000) { + int ifrac = (int)(frac * 1000000000); + if (ifrac == 1000000000) { ++ival; ifrac = 0; } @@ -90,7 +90,7 @@ const char *qt_real_to_string(qreal val, char *buf) { ++i; ival /= 10; } - int fact = 100000; + int fact = 100000000; if (i == 0) { *(buf++) = '0'; } else { @@ -145,7 +145,7 @@ namespace QPdf { fileBackingActive(false), handleDirty(false) { - dev->open(QIODevice::ReadWrite); + dev->open(QIODevice::ReadWrite | QIODevice::Append); } ByteStream::ByteStream(bool fileBacking) diff --git a/src/gui/painting/qregion.cpp b/src/gui/painting/qregion.cpp index 9d1d965..63dec2b 100644 --- a/src/gui/painting/qregion.cpp +++ b/src/gui/painting/qregion.cpp @@ -3867,23 +3867,28 @@ QRegion::QRegion(const QRect &r, RegionType t) QRegion::QRegion(const QPolygon &a, Qt::FillRule fillRule) { if (a.count() > 2) { - d = new QRegionData; - d->ref = 1; + QRegionPrivate *qt_rgn = PolygonRegion(a.constData(), a.size(), + fillRule == Qt::WindingFill ? WindingRule : EvenOddRule); + if (qt_rgn) { + d = new QRegionData; + d->ref = 1; #if defined(Q_WS_X11) - d->rgn = 0; - d->xrectangles = 0; + d->rgn = 0; + d->xrectangles = 0; #elif defined(Q_WS_WIN) - d->rgn = 0; + d->rgn = 0; #endif - d->qt_rgn = PolygonRegion(a.constData(), a.size(), - fillRule == Qt::WindingFill ? WindingRule : EvenOddRule); + d->qt_rgn = qt_rgn; + } else { + d = &shared_empty; + d->ref.ref(); + } } else { d = &shared_empty; d->ref.ref(); } } - QRegion::QRegion(const QRegion &r) { d = r.d; diff --git a/src/gui/painting/qregion_s60.cpp b/src/gui/painting/qregion_s60.cpp index 76b0948..3dc2e8d 100644 --- a/src/gui/painting/qregion_s60.cpp +++ b/src/gui/painting/qregion_s60.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/gui/painting/qwindowsurface_s60.cpp b/src/gui/painting/qwindowsurface_s60.cpp index dc4e43b..c66da71 100644 --- a/src/gui/painting/qwindowsurface_s60.cpp +++ b/src/gui/painting/qwindowsurface_s60.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/gui/painting/qwindowsurface_s60_p.h b/src/gui/painting/qwindowsurface_s60_p.h index 3c4059f..0305454 100644 --- a/src/gui/painting/qwindowsurface_s60_p.h +++ b/src/gui/painting/qwindowsurface_s60_p.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/gui/styles/qcleanlooksstyle.cpp b/src/gui/styles/qcleanlooksstyle.cpp index 973e682..b08847d 100644 --- a/src/gui/styles/qcleanlooksstyle.cpp +++ b/src/gui/styles/qcleanlooksstyle.cpp @@ -3817,6 +3817,7 @@ QSize QCleanlooksStyle::sizeFromContents(ContentsType type, const QStyleOption * newSize.setWidth(80); if (!btn->icon.isNull() && btn->iconSize.height() > 16) newSize -= QSize(0, 2); + newSize += QSize(0, 1); } if (const QPushButton *button = qobject_cast<const QPushButton *>(widget)) { if (qobject_cast<const QDialogButtonBox *>(button->parentWidget())) { diff --git a/src/gui/styles/qgtkstyle.cpp b/src/gui/styles/qgtkstyle.cpp index 1c78a47..5566cc6 100644 --- a/src/gui/styles/qgtkstyle.cpp +++ b/src/gui/styles/qgtkstyle.cpp @@ -127,11 +127,19 @@ static const int groupBoxBottomMargin = 2; // space below the groupbox static const int groupBoxTitleMargin = 6; // space between contents and title static const int groupBoxTopMargin = 2; +/*! + Returns the configuration string for \a value. + Returns \a fallback if \a value is not found. + */ QString QGtkStyle::getGConfString(const QString &value, const QString &fallback) { return QGtkStylePrivate::getGConfString(value, fallback); } +/*! + Returns the configuration boolean for \a key. + Returns \a fallback if \a key is not found. + */ bool QGtkStyle::getGConfBool(const QString &key, bool fallback) { return QGtkStylePrivate::getGConfBool(key, fallback); @@ -2513,7 +2521,7 @@ void QGtkStyle::drawControl(ControlElement element, bool selected = menuItem->state & State_Selected && menuItem->state & State_Enabled; if (selected) { - QRect rect = option->rect.adjusted(0, 0, -1, -1); + QRect rect = option->rect.adjusted(0, 0, 0, -1); #ifndef QT_NO_COMBOBOX if (qobject_cast<const QComboBox*>(widget)) rect = option->rect; @@ -2620,7 +2628,7 @@ void QGtkStyle::drawControl(ControlElement element, int pixw = pixmap.width(); int pixh = pixmap.height(); QRect pmr(0, 0, pixw, pixh); - pmr.moveCenter(vCheckRect.center()); + pmr.moveCenter(vCheckRect.center() - QPoint(0, 1)); painter->setPen(menuItem->palette.text().color()); if (!ignoreCheckMark && checkable && checked) { QStyleOption opt = *option; @@ -2662,8 +2670,8 @@ void QGtkStyle::drawControl(ControlElement element, menuitem->rect.getRect(&x, &y, &w, &h); int tab = menuitem->tabWidth; int xm = windowsItemFrame + checkcol + windowsItemHMargin; - int xpos = menuitem->rect.x() + xm; - QRect textRect(xpos, y + windowsItemVMargin, w - xm - windowsRightBorder - tab + 1, h - 2 * windowsItemVMargin); + int xpos = menuitem->rect.x() + xm + 1; + QRect textRect(xpos, y + windowsItemVMargin - 1, w - xm - windowsRightBorder - tab + 1, h - 2 * windowsItemVMargin); QRect vTextRect = visualRect(opt->direction, menuitem->rect, textRect); QString s = menuitem->text; @@ -2710,13 +2718,19 @@ void QGtkStyle::drawControl(ControlElement element, QFontMetrics fm(menuitem->font); int arrow_size = fm.ascent() + fm.descent() - 2 * gtkMenuItem->style->ythickness; gfloat arrow_scaling = 0.8; + int extra = 0; + if (!d->gtk_check_version(2, 16, 0)) { + // "arrow-scaling" is actually hardcoded and fails on hardy (see gtk+-2.12/gtkmenuitem.c) + // though the current documentation states otherwise + d->gtk_widget_style_get(gtkMenuItem, "arrow-scaling", &arrow_scaling, NULL); + // in versions < 2.16 ythickness was previously subtracted from the arrow_size + extra = 2 * gtkMenuItem->style->ythickness; + } - // "arrow-scaling" is actually hardcoded and fails on hardy (see gtk+-2.12/gtkmenuitem.c) - // though the current documentation states otherwise int horizontal_padding; d->gtk_widget_style_get(gtkMenuItem, "horizontal-padding", &horizontal_padding, NULL); - const int dim = static_cast<int>(arrow_size * arrow_scaling); + const int dim = static_cast<int>(arrow_size * arrow_scaling) + extra; int xpos = menuItem->rect.left() + menuItem->rect.width() - horizontal_padding - dim; QRect vSubMenuRect = visualRect(option->direction, menuItem->rect, QRect(xpos, menuItem->rect.top() + @@ -3115,7 +3129,7 @@ QSize QGtkStyle::sizeFromContents(ContentsType type, const QStyleOption *option, case CT_ToolButton: if (const QStyleOptionToolButton *toolbutton = qstyleoption_cast<const QStyleOptionToolButton *>(option)) { GtkWidget *gtkButton = d->gtkWidget(QLS("GtkToolButton.GtkButton")); - newSize = size + QSize(2 * gtkButton->style->xthickness, 1 + 2 * gtkButton->style->ythickness); + newSize = size + QSize(2 * gtkButton->style->xthickness, 2 + 2 * gtkButton->style->ythickness); if (widget && qobject_cast<QToolBar *>(widget->parentWidget())) { QSize minSize(0, 25); if (toolbutton->toolButtonStyle != Qt::ToolButtonTextOnly) @@ -3147,7 +3161,7 @@ QSize QGtkStyle::sizeFromContents(ContentsType type, const QStyleOption *option, GtkWidget *gtkMenuItem = d->gtkWidget(QLS("GtkMenu.GtkMenuItem")); GtkStyle* style = gtkMenuItem->style; - newSize += QSize(textMargin + style->xthickness - 2, style->ythickness - 4); + newSize += QSize(textMargin + style->xthickness - 1, style->ythickness - 3); // Cleanlooks assumes a check column of 20 pixels so we need to // expand it a bit @@ -3167,7 +3181,7 @@ QSize QGtkStyle::sizeFromContents(ContentsType type, const QStyleOption *option, case CT_SpinBox: // QSpinBox does some nasty things that depends on CT_LineEdit - newSize = size + QSize(0, -d->gtkWidget(QLS("GtkSpinButton"))->style->ythickness * 2 + 2); + newSize = size + QSize(0, -d->gtkWidget(QLS("GtkSpinButton"))->style->ythickness * 2); break; case CT_PushButton: @@ -3198,13 +3212,9 @@ QSize QGtkStyle::sizeFromContents(ContentsType type, const QStyleOption *option, } break; - case CT_MenuBarItem://cleanlooks adds 2 pixels - newSize = QWindowsStyle::sizeFromContents(type, option, size, widget) + QSize(0, 1); - break; - case CT_LineEdit: { GtkWidget *gtkEntry = d->gtkWidget(QLS("GtkEntry")); - newSize = size + QSize(2*gtkEntry->style->xthickness, 2*gtkEntry->style->ythickness); + newSize = size + QSize(2*gtkEntry->style->xthickness, 2 + 2*gtkEntry->style->ythickness); } break; @@ -3219,7 +3229,7 @@ QSize QGtkStyle::sizeFromContents(ContentsType type, const QStyleOption *option, newSize = size + QSize(12 + arrowButtonRect.width() + 2*gtkCombo->style->xthickness, 4 + 2*gtkCombo->style->ythickness); if (!(widget && qobject_cast<QToolBar *>(widget->parentWidget()))) - newSize += QSize(0, 3); + newSize += QSize(0, 2); } break; @@ -3232,7 +3242,7 @@ QSize QGtkStyle::sizeFromContents(ContentsType type, const QStyleOption *option, if (!tab->icon.isNull()) newSize += QSize(6, 0); } - newSize += QSize(1, 0); + newSize += QSize(1, 1); break; default: diff --git a/src/gui/styles/qgtkstyle_p.cpp b/src/gui/styles/qgtkstyle_p.cpp index 7119a4f..5f4ebae 100644 --- a/src/gui/styles/qgtkstyle_p.cpp +++ b/src/gui/styles/qgtkstyle_p.cpp @@ -202,12 +202,16 @@ Ptr_gnome_vfs_init QGtkStylePrivate::gnome_vfs_init = 0; typedef int (*x11ErrorHandler)(Display*, XErrorEvent*); -static void gtkStyleSetCallback(GtkWidget*, QGtkStylePrivate* stylePrivate) +Q_DECLARE_METATYPE(QGtkStylePrivate*); + +static void gtkStyleSetCallback(GtkWidget*) { + qRegisterMetaType<QGtkStylePrivate *>(); + // We have to let this function return and complete the event // loop to ensure that all gtk widgets have been styled before // updating - QMetaObject::invokeMethod(styleScheduler(), "updateTheme", Qt::QueuedConnection, Q_ARG(QGtkStylePrivate*, stylePrivate)); + QMetaObject::invokeMethod(styleScheduler(), "updateTheme", Qt::QueuedConnection); } static void update_toolbar_style(GtkWidget *gtkToolBar, GParamSpec *, gpointer) @@ -251,10 +255,18 @@ bool QGtkStyleFilter::eventFilter(QObject *obj, QEvent *e) return QObject::eventFilter(obj, e); } +QList<QGtkStylePrivate *> QGtkStylePrivate::instances; + QGtkStylePrivate::QGtkStylePrivate() : QCleanlooksStylePrivate() , filter(this) { + instances.append(this); +} + +QGtkStylePrivate::~QGtkStylePrivate() +{ + instances.removeOne(this); } void QGtkStylePrivate::init() @@ -285,7 +297,7 @@ GtkStyle* QGtkStylePrivate::gtkStyle(const QString &path) /*! \internal * Get references to gtk functions after we dynamically load the library. */ -void QGtkStylePrivate::resolveGtk() +void QGtkStylePrivate::resolveGtk() const { // enforce the "0" suffix, so we'll open libgtk-x11-2.0.so.0 QLibrary libgtk(QLS("gtk-x11-2.0"), 0, 0); @@ -413,7 +425,7 @@ void QGtkStylePrivate::resolveGtk() * Initializes a number of gtk menu widgets. * The widgets are cached. */ -void QGtkStylePrivate::initGtkMenu() +void QGtkStylePrivate::initGtkMenu() const { // Create menubar GtkWidget *gtkMenuBar = QGtkStylePrivate::gtk_menu_bar_new(); @@ -444,7 +456,7 @@ void QGtkStylePrivate::initGtkMenu() } -void QGtkStylePrivate::initGtkTreeview() +void QGtkStylePrivate::initGtkTreeview() const { GtkWidget *gtkTreeView = gtk_tree_view_new(); gtk_tree_view_append_column((GtkTreeView*)gtkTreeView, gtk_tree_view_column_new()); @@ -458,7 +470,7 @@ void QGtkStylePrivate::initGtkTreeview() * Initializes a number of gtk widgets that we can later on use to determine some of our styles. * The widgets are cached. */ -void QGtkStylePrivate::initGtkWidgets() +void QGtkStylePrivate::initGtkWidgets() const { // From gtkmain.c uid_t ruid = getuid (); @@ -509,7 +521,7 @@ void QGtkStylePrivate::initGtkWidgets() if (!gtkWidgetMap()->contains(QLS("GtkButton"))) { GtkWidget *gtkButton = QGtkStylePrivate::gtk_button_new(); addWidget(gtkButton); - g_signal_connect(gtkButton, "style-set", G_CALLBACK(gtkStyleSetCallback), this); + g_signal_connect(gtkButton, "style-set", G_CALLBACK(gtkStyleSetCallback), 0); addWidget(QGtkStylePrivate::gtk_tool_button_new(NULL, NULL)); addWidget(QGtkStylePrivate::gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_NONE)); addWidget(QGtkStylePrivate::gtk_hbutton_box_new()); @@ -613,7 +625,7 @@ bool QGtkStylePrivate::getGConfBool(const QString &key, bool fallback) return retVal; } -QString QGtkStylePrivate::getThemeName() const +QString QGtkStylePrivate::getThemeName() { QString themeName; // We try to parse the gtkrc file first @@ -730,7 +742,7 @@ void QGtkStylePrivate::addAllSubWidgets(GtkWidget *widget, gpointer v) } // Updates window/windowtext palette based on the indicated gtk widget -QPalette QGtkStylePrivate::gtkWidgetPalette(const QString >kWidgetName) +QPalette QGtkStylePrivate::gtkWidgetPalette(const QString >kWidgetName) const { GtkWidget *gtkWidget = QGtkStylePrivate::gtkWidget(gtkWidgetName); Q_ASSERT(gtkWidget); @@ -751,7 +763,7 @@ QPalette QGtkStylePrivate::gtkWidgetPalette(const QString >kWidgetName) } -void QGtkStyleUpdateScheduler::updateTheme( QGtkStylePrivate* stylePrivate ) +void QGtkStyleUpdateScheduler::updateTheme() { static QString oldTheme(QLS("qt_not_set")); QPixmapCache::clear(); @@ -760,20 +772,22 @@ void QGtkStyleUpdateScheduler::updateTheme( QGtkStylePrivate* stylePrivate ) if (QApplication::font() != font) qApp->setFont(font); - if (oldTheme != stylePrivate->getThemeName()) { - oldTheme = stylePrivate->getThemeName(); - QPalette newPalette = qApp->style()->standardPalette(); - QApplicationPrivate::setSystemPalette(newPalette); - QApplication::setPalette(newPalette); - stylePrivate->initGtkWidgets(); - stylePrivate->applyCustomPaletteHash(); - QList<QWidget*> widgets = QApplication::allWidgets(); - // Notify all widgets that size metrics might have changed - foreach (QWidget *widget, widgets) { - QEvent e(QEvent::StyleChange); - QApplication::sendEvent(widget, &e); - } - } + if (oldTheme != QGtkStylePrivate::getThemeName()) { + oldTheme = QGtkStylePrivate::getThemeName(); + QPalette newPalette = qApp->style()->standardPalette(); + QApplicationPrivate::setSystemPalette(newPalette); + QApplication::setPalette(newPalette); + if (!QGtkStylePrivate::instances.isEmpty()) { + QGtkStylePrivate::instances.last()->initGtkWidgets(); + QGtkStylePrivate::instances.last()->applyCustomPaletteHash(); + } + QList<QWidget*> widgets = QApplication::allWidgets(); + // Notify all widgets that size metrics might have changed + foreach (QWidget *widget, widgets) { + QEvent e(QEvent::StyleChange); + QApplication::sendEvent(widget, &e); + } + } QIconLoader::instance()->updateSystemTheme(); } diff --git a/src/gui/styles/qgtkstyle_p.h b/src/gui/styles/qgtkstyle_p.h index fa16769..f6ab8a3 100644 --- a/src/gui/styles/qgtkstyle_p.h +++ b/src/gui/styles/qgtkstyle_p.h @@ -255,16 +255,17 @@ class QGtkStylePrivate : public QCleanlooksStylePrivate Q_DECLARE_PUBLIC(QGtkStyle) public: QGtkStylePrivate(); + ~QGtkStylePrivate(); QGtkStyleFilter filter; static GtkWidget* gtkWidget(const QString &path); static GtkStyle* gtkStyle(const QString &path = QLatin1String("GtkWindow")); - virtual void resolveGtk(); - virtual void initGtkMenu(); - virtual void initGtkTreeview(); - virtual void initGtkWidgets(); + virtual void resolveGtk() const; + virtual void initGtkMenu() const; + virtual void initGtkTreeview() const; + virtual void initGtkWidgets() const; static void cleanupGtkWidgets(); @@ -276,7 +277,7 @@ public: static bool getGConfBool(const QString &key, bool fallback = 0); static QString getGConfString(const QString &key, const QString &fallback = QString()); - virtual QString getThemeName() const; + static QString getThemeName(); virtual int getSpinboxArrowSize() const; static void setupGtkFileChooser(GtkWidget* gtkFileChooser, QWidget *parent, @@ -412,7 +413,7 @@ public: static Ptr_gnome_icon_lookup_sync gnome_icon_lookup_sync; static Ptr_gnome_vfs_init gnome_vfs_init; - virtual QPalette gtkWidgetPalette(const QString >kWidgetName); + virtual QPalette gtkWidgetPalette(const QString >kWidgetName) const; protected: typedef QHash<QString, GtkWidget*> WidgetMap; @@ -434,6 +435,10 @@ protected: static void addWidget(GtkWidget *widget); virtual void init(); + +private: + static QList<QGtkStylePrivate *> instances; + friend class QGtkStyleUpdateScheduler; }; // Helper to ensure that we have polished all our gtk widgets @@ -442,7 +447,7 @@ class QGtkStyleUpdateScheduler : public QObject { Q_OBJECT public slots: - void updateTheme( QGtkStylePrivate* stylePrivate ); + void updateTheme(); }; QT_END_NAMESPACE diff --git a/src/gui/styles/qplastiquestyle.cpp b/src/gui/styles/qplastiquestyle.cpp index f880351..be4fff2 100644 --- a/src/gui/styles/qplastiquestyle.cpp +++ b/src/gui/styles/qplastiquestyle.cpp @@ -1094,8 +1094,6 @@ void QPlastiqueStyle::drawPrimitive(PrimitiveElement element, const QStyleOption QColor borderColor = option->palette.background().color().darker(178); QColor gradientStartColor = option->palette.button().color().lighter(104); QColor gradientStopColor = option->palette.button().color().darker(105); - QColor baseGradientStartColor = option->palette.base().color().darker(101); - QColor baseGradientStopColor = option->palette.base().color().darker(106); QColor highlightedGradientStartColor = option->palette.button().color().lighter(101); QColor highlightedGradientStopColor = mergedColors(option->palette.button().color(), option->palette.highlight().color(), 85); QColor highlightedBaseGradientStartColor = option->palette.base().color(); @@ -1978,7 +1976,13 @@ void QPlastiqueStyle::drawPrimitive(PrimitiveElement element, const QStyleOption QRect gradientRect(adjustedRect.left() + 1, adjustedRect.top() + 1, adjustedRect.right() - adjustedRect.left() - 1, adjustedRect.bottom() - adjustedRect.top() - 1); - qt_plastique_draw_gradient(painter, gradientRect, baseGradientStartColor, baseGradientStopColor); + if (option->palette.base().style() == Qt::SolidPattern) { + QColor baseGradientStartColor = option->palette.base().color().darker(101); + QColor baseGradientStopColor = option->palette.base().color().darker(106); + qt_plastique_draw_gradient(painter, gradientRect, baseGradientStartColor, baseGradientStopColor); + } else { + painter->fillRect(gradientRect, option->palette.base()); + } // draw "+" or "-" painter->setPen(alphaTextColor); painter->drawLine(center.x() - 2, center.y(), center.x() + 2, center.y()); diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 02ffb29..7c3e11f 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage @@ -473,7 +473,7 @@ void QS60StylePrivate::setBackgroundTexture(QApplication *app) const Q_UNUSED(app) QPalette applicationPalette = QApplication::palette(); applicationPalette.setBrush(QPalette::Window, backgroundTexture()); - setThemePalette(app); + setThemePalette(&applicationPalette); } void QS60StylePrivate::deleteBackground() @@ -668,7 +668,7 @@ void QS60StylePrivate::setThemePalette(QPalette *palette) const s60Color(QS60StyleEnums::CL_QsnTextColors, 55, 0)); palette->setColor(QPalette::BrightText, palette->color(QPalette::WindowText).lighter()); palette->setColor(QPalette::HighlightedText, - s60Color(QS60StyleEnums::CL_QsnTextColors, 10, 0)); + s60Color(QS60StyleEnums::CL_QsnTextColors, 24, 0)); palette->setColor(QPalette::Link, s60Color(QS60StyleEnums::CL_QsnHighlightColors, 3, 0)); palette->setColor(QPalette::LinkVisited, palette->color(QPalette::Link).darker()); @@ -783,6 +783,14 @@ void QS60StylePrivate::setThemePaletteHash(QPalette *palette) const widgetPalette.setBrush(QPalette::Window, QBrush()); QApplication::setPalette(widgetPalette, "QScrollArea"); widgetPalette = *palette; + + //Webpages should not use S60 theme colors as they are designed to work + //with themeBackground and do not generally mesh well with web page backgrounds. + QPalette webPalette = *palette; + webPalette.setColor(QPalette::WindowText, Qt::black); + webPalette.setColor(QPalette::Text, Qt::black); + QApplication::setPalette(webPalette, "QWebView"); + QApplication::setPalette(webPalette, "QGraphicsWebView"); } QSize QS60StylePrivate::partSize(QS60StyleEnums::SkinParts part, SkinElementFlags flags) @@ -799,6 +807,9 @@ QSize QS60StylePrivate::partSize(QS60StyleEnums::SkinParts part, SkinElementFlag case QS60StyleEnums::SP_QgnGrafTabPassiveR: case QS60StyleEnums::SP_QgnGrafTabPassiveL: case QS60StyleEnums::SP_QgnGrafTabActiveL: + //Returned QSize for tabs must not be square, but narrow rectangle with width:height + //ratio of 1:2 for horizontal tab bars (and 2:1 for vertical ones). + result.setWidth(10); break; case QS60StyleEnums::SP_QgnIndiSliderEdit: result.scale(pixelMetric(QStyle::PM_SliderLength), @@ -809,7 +820,7 @@ QSize QS60StylePrivate::partSize(QS60StyleEnums::SkinParts part, SkinElementFlag case QS60StyleEnums::SP_QgnGrafBarFrameSideR: result.setWidth(pixelMetric(PM_Custom_FrameCornerWidth)); break; - + case QS60StyleEnums::SP_QsnCpScrollHandleBottomPressed: case QS60StyleEnums::SP_QsnCpScrollHandleTopPressed: case QS60StyleEnums::SP_QsnCpScrollHandleMiddlePressed: @@ -2004,7 +2015,7 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti buttonRect.adjust(0,-newY,0,-newY); painter->save(); - QColor themeColor = d->s60Color(QS60StyleEnums::CL_QsnIconColors, 13, option); + QColor themeColor = d->s60Color(QS60StyleEnums::CL_QsnTextColors, 6, option); QColor buttonTextColor = option->palette.buttonText().color(); if (themeColor != buttonTextColor) painter->setPen(buttonTextColor); diff --git a/src/gui/styles/qs60style.h b/src/gui/styles/qs60style.h index 885ea40..cd63431 100644 --- a/src/gui/styles/qs60style.h +++ b/src/gui/styles/qs60style.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h index b9789b9..cfe87ac 100644 --- a/src/gui/styles/qs60style_p.h +++ b/src/gui/styles/qs60style_p.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index b5f2d1c..a8dbf8d 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/gui/styles/qs60style_simulated.cpp b/src/gui/styles/qs60style_simulated.cpp index 4317483..55d5771 100644 --- a/src/gui/styles/qs60style_simulated.cpp +++ b/src/gui/styles/qs60style_simulated.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/gui/styles/qstyleoption.cpp b/src/gui/styles/qstyleoption.cpp index d73a563..9188ee0 100644 --- a/src/gui/styles/qstyleoption.cpp +++ b/src/gui/styles/qstyleoption.cpp @@ -4713,10 +4713,17 @@ QStyleOptionTabWidgetFrameV2::QStyleOptionTabWidgetFrameV2(int version) } +/*! \fn QStyleOptionTabWidgetFrameV2::QStyleOptionTabWidgetFrameV2(const QStyleOptionTabWidgetFrameV2 &other) + Constructs a QStyleOptionTabWidgetFrameV2 copy of the \a other style option. + + If the \a other style option's version is 1, the new style option's \l + selectedTabRect and tabBarRect will contain null rects + + \sa version +*/ + /*! - Constructs a QStyleOptionTabWidgetFrameV2 copy of the \a other style option - which can be either of the QStyleOptionTabWidgetFrameV2 or - QStyleOptionTabWidgetFrame types. + Constructs a QStyleOptionTabWidgetFrameV2 copy of the \a other style option. If the \a other style option's version is 1, the new style option's \l selectedTabRect and tabBarRect will contain null rects diff --git a/src/gui/styles/qstylesheetstyle.cpp b/src/gui/styles/qstylesheetstyle.cpp index ce73fd8..8b40931 100644 --- a/src/gui/styles/qstylesheetstyle.cpp +++ b/src/gui/styles/qstylesheetstyle.cpp @@ -1180,7 +1180,7 @@ void QRenderRule::drawBackgroundImage(QPainter *p, const QRect &rect, QPoint off QRect r = originRect(rect, background()->origin); QRect aligned = QStyle::alignedRect(Qt::LeftToRight, background()->position, bgp.size(), r); - QRect inter = aligned.intersected(r); + QRect inter = aligned.translated(-off).intersected(r); switch (background()->repeat) { case Repeat_Y: @@ -4637,6 +4637,7 @@ int QStyleSheetStyle::pixelMetric(PixelMetric m, const QStyleOption *opt, const } break; +#ifndef QT_NO_TABWIDGET case PM_TabBarTabHSpace: case PM_TabBarTabVSpace: subRule = renderRule(w, opt, PseudoElement_TabBarTab); @@ -4660,11 +4661,14 @@ int QStyleSheetStyle::pixelMetric(PixelMetric m, const QStyleOption *opt, const return 0; break; - case PM_TabBarBaseOverlap: - if (hasStyleRule(w->parentWidget(), PseudoElement_TabWidgetPane)) { + case PM_TabBarBaseOverlap: { + const QWidget *tabWidget = qobject_cast<const QTabWidget *>(w) ? w : w->parentWidget(); + if (hasStyleRule(tabWidget, PseudoElement_TabWidgetPane)) { return 0; } break; + } +#endif // QT_NO_TABWIDGET case PM_SliderThickness: // horizontal slider's height (sizeHint) case PM_SliderLength: // minimum length of slider diff --git a/src/gui/text/qabstracttextdocumentlayout.h b/src/gui/text/qabstracttextdocumentlayout.h index 2f8a746..438b291 100644 --- a/src/gui/text/qabstracttextdocumentlayout.h +++ b/src/gui/text/qabstracttextdocumentlayout.h @@ -122,6 +122,7 @@ protected: QTextCharFormat format(int pos); private: + friend class QTextControl; friend class QTextDocument; friend class QTextDocumentPrivate; friend class QTextEngine; diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp index 447087c..f1cd6bb 100644 --- a/src/gui/text/qfont.cpp +++ b/src/gui/text/qfont.cpp @@ -1613,7 +1613,8 @@ bool QFont::operator==(const QFont &f) const && f.d->underline == d->underline && f.d->overline == d->overline && f.d->strikeOut == d->strikeOut - && f.d->kerning == d->kerning)); + && f.d->kerning == d->kerning + && f.d->capital == d->capital)); } @@ -1645,6 +1646,7 @@ bool QFont::operator<(const QFont &f) const #ifdef Q_WS_X11 if (r1.addStyle != r2.addStyle) return r1.addStyle < r2.addStyle; #endif // Q_WS_X11 + if (f.d->capital != d->capital) return f.d->capital < d->capital; int f1attrs = (f.d->underline << 3) + (f.d->overline << 2) + (f.d->strikeOut<<1) + f.d->kerning; int f2attrs = (d->underline << 3) + (d->overline << 2) + (d->strikeOut<<1) + d->kerning; diff --git a/src/gui/text/qfont_s60.cpp b/src/gui/text/qfont_s60.cpp index 277d88f..0375fdb 100644 --- a/src/gui/text/qfont_s60.cpp +++ b/src/gui/text/qfont_s60.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/gui/text/qfontdatabase_s60.cpp b/src/gui/text/qfontdatabase_s60.cpp index ca5be0e..808dca6 100644 --- a/src/gui/text/qfontdatabase_s60.cpp +++ b/src/gui/text/qfontdatabase_s60.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp index 4041717..293eac7 100644 --- a/src/gui/text/qfontengine_ft.cpp +++ b/src/gui/text/qfontengine_ft.cpp @@ -755,9 +755,8 @@ QFontEngineFT::Glyph *QFontEngineFT::loadGlyphMetrics(QGlyphSet *set, uint glyph load_flags = FT_LOAD_NO_BITMAP; // apply our matrix to this, but note that the metrics will not be affected by this. - FT_Matrix matrix = freetype->matrix; FT_Face face = lockFace(); - matrix = this->matrix; + FT_Matrix matrix = this->matrix; FT_Matrix_Multiply(&set->transformationMatrix, &matrix); FT_Set_Transform(face, &matrix, 0); freetype->matrix = matrix; diff --git a/src/gui/text/qfontengine_s60.cpp b/src/gui/text/qfontengine_s60.cpp index 88ae8f6..e279ad2 100644 --- a/src/gui/text/qfontengine_s60.cpp +++ b/src/gui/text/qfontengine_s60.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/gui/text/qfontengine_s60_p.h b/src/gui/text/qfontengine_s60_p.h index 44f8122..9e22245 100644 --- a/src/gui/text/qfontengine_s60_p.h +++ b/src/gui/text/qfontengine_s60_p.h @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/gui/text/qtextcontrol.cpp b/src/gui/text/qtextcontrol.cpp index 2bfe33c..be79773 100644 --- a/src/gui/text/qtextcontrol.cpp +++ b/src/gui/text/qtextcontrol.cpp @@ -55,6 +55,7 @@ #include <qstyle.h> #include <qtimer.h> #include "private/qtextdocumentlayout_p.h" +#include "private/qabstracttextdocumentlayout_p.h" #include "private/qtextedit_p.h" #include "qtextdocument.h" #include "private/qtextdocument_p.h" @@ -126,6 +127,7 @@ QTextControlPrivate::QTextControlPrivate() #endif isEnabled(true), hadSelectionOnMousePress(false), + ignoreUnusedNavigationEvents(false), openExternalLinks(false) {} @@ -264,19 +266,25 @@ bool QTextControlPrivate::cursorMoveKeyEvent(QKeyEvent *e) cursor.setVisualNavigation(visualNavigation); q->ensureCursorVisible(); + bool ignoreNavigationEvents = ignoreUnusedNavigationEvents; + bool isNavigationEvent = e->key() == Qt::Key_Up || e->key() == Qt::Key_Down; + +#ifdef QT_KEYPAD_NAVIGATION + ignoreNavigationEvents = ignoreNavigationEvents || QApplication::keypadNavigationEnabled(); + isNavigationEvent = isNavigationEvent || + (QApplication::navigationMode() == Qt::NavigationModeKeypadDirectional + && (e->key() == Qt::Key_Left || e->key() == Qt::Key_Right)); +#else + isNavigationEvent = isNavigationEvent || e->key() == Qt::Key_Left || e->key() == Qt::Key_Right; +#endif + if (moved) { if (cursor.position() != oldCursorPos) emit q->cursorPositionChanged(); emit q->microFocusChanged(); - } -#ifdef QT_KEYPAD_NAVIGATION - else if (QApplication::keypadNavigationEnabled() - && ((e->key() == Qt::Key_Up || e->key() == Qt::Key_Down) - || QApplication::navigationMode() == Qt::NavigationModeKeypadDirectional - && (e->key() == Qt::Key_Left || e->key() == Qt::Key_Right))) { + } else if (ignoreNavigationEvents && isNavigationEvent) { return false; } -#endif selectionChanged(/*forceEmitSelectionChanged =*/(mode == QTextCursor::KeepAnchor)); @@ -2263,6 +2271,18 @@ bool QTextControl::openExternalLinks() const return d->openExternalLinks; } +bool QTextControl::ignoreUnusedNavigationEvents() const +{ + Q_D(const QTextControl); + return d->ignoreUnusedNavigationEvents; +} + +void QTextControl::setIgnoreUnusedNavigationEvents(bool ignore) +{ + Q_D(QTextControl); + d->ignoreUnusedNavigationEvents = ignore; +} + void QTextControl::moveCursor(QTextCursor::MoveOperation op, QTextCursor::MoveMode mode) { Q_D(QTextControl); @@ -2319,6 +2339,9 @@ void QTextControl::print(QPrinter *printer) const tempDoc->setUseDesignMetrics(doc->useDesignMetrics()); QTextCursor(tempDoc).insertFragment(d->cursor.selection()); doc = tempDoc; + + // copy the custom object handlers + doc->documentLayout()->d_func()->handlers = d->doc->documentLayout()->d_func()->handlers; } doc->print(printer); delete tempDoc; diff --git a/src/gui/text/qtextcontrol_p.h b/src/gui/text/qtextcontrol_p.h index 263af31..bc8e063 100644 --- a/src/gui/text/qtextcontrol_p.h +++ b/src/gui/text/qtextcontrol_p.h @@ -95,6 +95,7 @@ class Q_GUI_EXPORT QTextControl : public QObject Q_PROPERTY(int cursorWidth READ cursorWidth WRITE setCursorWidth) Q_PROPERTY(Qt::TextInteractionFlags textInteractionFlags READ textInteractionFlags WRITE setTextInteractionFlags) Q_PROPERTY(bool openExternalLinks READ openExternalLinks WRITE setOpenExternalLinks) + Q_PROPERTY(bool ignoreUnusedNavigationEvents READ ignoreUnusedNavigationEvents WRITE setIgnoreUnusedNavigationEvents) public: explicit QTextControl(QObject *parent = 0); explicit QTextControl(const QString &text, QObject *parent = 0); @@ -163,6 +164,9 @@ public: void setOpenExternalLinks(bool open); bool openExternalLinks() const; + void setIgnoreUnusedNavigationEvents(bool ignore); + bool ignoreUnusedNavigationEvents() const; + void moveCursor(QTextCursor::MoveOperation op, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor); bool canPaste() const; diff --git a/src/gui/text/qtextcontrol_p_p.h b/src/gui/text/qtextcontrol_p_p.h index 66459f6..c230512 100644 --- a/src/gui/text/qtextcontrol_p_p.h +++ b/src/gui/text/qtextcontrol_p_p.h @@ -206,6 +206,7 @@ public: QString anchorOnMousePress; bool hadSelectionOnMousePress; + bool ignoreUnusedNavigationEvents; bool openExternalLinks; QString linkToCopy; diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp index 1aad385..048325c 100644 --- a/src/gui/text/qtextdocument.cpp +++ b/src/gui/text/qtextdocument.cpp @@ -64,6 +64,7 @@ #include "qtextdocument_p.h" #include <private/qprinter_p.h> +#include <private/qabstracttextdocumentlayout_p.h> #include <limits.h> @@ -1722,6 +1723,9 @@ void QTextDocument::print(QPrinter *printer) const QAbstractTextDocumentLayout *layout = doc->documentLayout(); layout->setPaintDevice(p.device()); + // copy the custom object handlers + layout->d_func()->handlers = documentLayout()->d_func()->handlers; + int dpiy = p.device()->logicalDpiY(); int margin = 0; if (printer->fullPage() && !printer->d_func()->hasCustomPageMargins) { diff --git a/src/gui/text/qtextdocument_p.cpp b/src/gui/text/qtextdocument_p.cpp index 2ad6512..18e1ffc 100644 --- a/src/gui/text/qtextdocument_p.cpp +++ b/src/gui/text/qtextdocument_p.cpp @@ -1114,9 +1114,11 @@ void QTextDocumentPrivate::endEditBlock() return; if (undoEnabled && undoState > 0) { + const bool wasBlocking = !undoStack[undoState - 1].block_end; if (undoStack[undoState - 1].block_part) { undoStack[undoState - 1].block_end = true; - emit document()->undoCommandAdded(); + if (wasBlocking) + emit document()->undoCommandAdded(); } } diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp index 73434b1..2604879 100644 --- a/src/gui/text/qtextdocumentlayout.cpp +++ b/src/gui/text/qtextdocumentlayout.cpp @@ -1448,13 +1448,13 @@ void QTextDocumentLayoutPrivate::drawListItem(const QPointF &offset, QPainter *p painter->fillRect(r, brush); break; case QTextListFormat::ListCircle: - painter->drawEllipse(r); + painter->setPen(QPen(brush, 0)); + painter->drawEllipse(r.translated(0.5, 0.5)); // pixel align for sharper rendering break; case QTextListFormat::ListDisc: painter->setBrush(brush); painter->setPen(Qt::NoPen); painter->drawEllipse(r); - painter->setBrush(Qt::NoBrush); break; case QTextListFormat::ListStyleUndefined: break; diff --git a/src/gui/text/qtextformat.cpp b/src/gui/text/qtextformat.cpp index d05d9e5..deda39f 100644 --- a/src/gui/text/qtextformat.cpp +++ b/src/gui/text/qtextformat.cpp @@ -265,21 +265,55 @@ private: friend QDataStream &operator>>(QDataStream &, QTextFormat &); }; -static uint variantHash(const QVariant &variant) +// this is only safe if sizeof(int) == sizeof(float) +static inline uint hash(float d) { - switch (variant.userType()) { - case QVariant::Invalid: return 0; - case QVariant::Bool: return variant.toBool(); - case QVariant::Int: return variant.toInt(); - case QMetaType::Float: return static_cast<int>(variant.toFloat()); - case QVariant::Double: return static_cast<int>(variant.toDouble()); + return reinterpret_cast<uint&>(d); +} + +static inline uint hash(const QColor &color) +{ + return (color.isValid()) ? color.rgba() : 0x234109; +} + +static inline uint hash(const QPen &pen) +{ + return hash(pen.color()) + hash(pen.widthF()); +} + +static inline uint hash(const QBrush &brush) +{ + return hash(brush.color()) + (brush.style() << 3); +} + +static inline uint variantHash(const QVariant &variant) +{ + // simple and fast hash functions to differentiate between type and value + switch (variant.userType()) { // sorted by occurrence frequency case QVariant::String: return qHash(variant.toString()); - case QVariant::Color: return qHash(qvariant_cast<QColor>(variant).rgb()); + case QVariant::Double: return hash(variant.toDouble()); + case QVariant::Int: return 0x811890 + variant.toInt(); + case QVariant::Brush: + return 0x01010101 + hash(qvariant_cast<QBrush>(variant)); + case QVariant::Bool: return 0x371818 + variant.toBool(); + case QVariant::Pen: return 0x02020202 + hash(qvariant_cast<QPen>(variant)); + case QVariant::List: + return 0x8377 + qvariant_cast<QVariantList>(variant).count(); + case QVariant::Color: return hash(qvariant_cast<QColor>(variant)); + case QVariant::TextLength: + return 0x377 + hash(qvariant_cast<QTextLength>(variant).rawValue()); + case QMetaType::Float: return hash(variant.toFloat()); + case QVariant::Invalid: return 0; default: break; } return qHash(variant.typeName()); } +static inline int getHash(const QTextFormatPrivate *d, int format) +{ + return (d ? d->hash() : 0) + format; +} + uint QTextFormatPrivate::recalcHash() const { hashValue = 0; @@ -3033,13 +3067,15 @@ QTextFormatCollection::~QTextFormatCollection() int QTextFormatCollection::indexForFormat(const QTextFormat &format) { - uint hash = format.d ? format.d->hash() : 0; - if (hashes.contains(hash)) { - for (int i = 0; i < formats.size(); ++i) { - if (formats.at(i) == format) - return i; + uint hash = getHash(format.d, format.format_type); + QMultiHash<uint, int>::const_iterator i = hashes.find(hash); + while (i != hashes.end() && i.key() == hash) { + if (formats.value(i.value()) == format) { + return i.value(); } + ++i; } + int idx = formats.size(); formats.append(format); @@ -3049,7 +3085,7 @@ int QTextFormatCollection::indexForFormat(const QTextFormat &format) f.d = new QTextFormatPrivate; f.d->resolveFont(defaultFnt); - hashes.insert(hash); + hashes.insert(hash, idx); } QT_CATCH(...) { formats.pop_back(); @@ -3060,11 +3096,13 @@ int QTextFormatCollection::indexForFormat(const QTextFormat &format) bool QTextFormatCollection::hasFormatCached(const QTextFormat &format) const { - uint hash = format.d ? format.d->hash() : 0; - if (hashes.contains(hash)) { - for (int i = 0; i < formats.size(); ++i) - if (formats.at(i) == format) - return true; + uint hash = getHash(format.d, format.format_type); + QMultiHash<uint, int>::const_iterator i = hashes.find(hash); + while (i != hashes.end() && i.key() == hash) { + if (formats.value(i.value()) == format) { + return true; + } + ++i; } return false; } diff --git a/src/gui/text/qtextformat_p.h b/src/gui/text/qtextformat_p.h index c796343..73ca0ce 100644 --- a/src/gui/text/qtextformat_p.h +++ b/src/gui/text/qtextformat_p.h @@ -55,7 +55,7 @@ #include "QtGui/qtextformat.h" #include "QtCore/qvector.h" -#include "QtCore/qset.h" +#include "QtCore/qhash.h" QT_BEGIN_NAMESPACE @@ -97,7 +97,7 @@ public: FormatVector formats; QVector<qint32> objFormats; - QSet<uint> hashes; + QMultiHash<uint,int> hashes; inline QFont defaultFont() const { return defaultFnt; } void setDefaultFont(const QFont &f); diff --git a/src/gui/util/qdesktopservices_s60.cpp b/src/gui/util/qdesktopservices_s60.cpp index fd06cf3..1890d56 100644 --- a/src/gui/util/qdesktopservices_s60.cpp +++ b/src/gui/util/qdesktopservices_s60.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui of the Qt Toolkit. +** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/gui/widgets/qabstractscrollarea.cpp b/src/gui/widgets/qabstractscrollarea.cpp index b0d0baf..35639b7 100644 --- a/src/gui/widgets/qabstractscrollarea.cpp +++ b/src/gui/widgets/qabstractscrollarea.cpp @@ -1130,10 +1130,13 @@ void QAbstractScrollArea::mouseMoveEvent(QMouseEvent *e) void QAbstractScrollArea::wheelEvent(QWheelEvent *e) { Q_D(QAbstractScrollArea); - if (static_cast<QWheelEvent*>(e)->orientation() == Qt::Horizontal) - QApplication::sendEvent(d->hbar, e); - else - QApplication::sendEvent(d->vbar, e); + 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); } #endif diff --git a/src/gui/widgets/qabstractslider.cpp b/src/gui/widgets/qabstractslider.cpp index fec9fab..e0db9c2 100644 --- a/src/gui/widgets/qabstractslider.cpp +++ b/src/gui/widgets/qabstractslider.cpp @@ -690,8 +690,6 @@ void QAbstractSlider::wheelEvent(QWheelEvent * e) { Q_D(QAbstractSlider); e->ignore(); - if (e->orientation() != d->orientation && !rect().contains(e->pos())) - return; int stepsToScroll = 0; qreal offset = qreal(e->delta()) / 120; diff --git a/src/gui/widgets/qcalendarwidget.cpp b/src/gui/widgets/qcalendarwidget.cpp index 08ed7f6..ee536ee 100644 --- a/src/gui/widgets/qcalendarwidget.cpp +++ b/src/gui/widgets/qcalendarwidget.cpp @@ -2297,7 +2297,21 @@ int QCalendarWidget::monthShown() const void QCalendarWidget::setCurrentPage(int year, int month) { Q_D(QCalendarWidget); + QDate currentDate = d->getCurrentDate(); + int day = currentDate.day(); + int daysInMonths = QDate(year, month, 1).daysInMonth(); + if (day > daysInMonths) + day = daysInMonths; + d->showMonth(year, month); + + QDate newDate(year, month, day); + int row = -1, col = -1; + d->m_model->cellForDate(newDate, &row, &col); + if (row != -1 && col != -1) { + d->m_view->selectionModel()->setCurrentIndex(d->m_model->index(row, col), + QItemSelectionModel::NoUpdate); + } } /*! diff --git a/src/gui/widgets/qdialogbuttonbox.cpp b/src/gui/widgets/qdialogbuttonbox.cpp index 2231b98..2ee5751 100644 --- a/src/gui/widgets/qdialogbuttonbox.cpp +++ b/src/gui/widgets/qdialogbuttonbox.cpp @@ -315,9 +315,9 @@ void QDialogButtonBoxPrivate::initLayout() buttonLayout = new QVBoxLayout(q); } - int left, top, right, bottom; + int left, top, right, bottom; setLayoutItemMargins(QStyle::SE_PushButtonLayoutItem); - getLayoutItemMargins(&left, &top, &right, &bottom); + getLayoutItemMargins(&left, &top, &right, &bottom); buttonLayout->setContentsMargins(-left, -top, -right, -bottom); if (!q->testAttribute(Qt::WA_WState_OwnSizePolicy)) { @@ -356,7 +356,7 @@ void QDialogButtonBoxPrivate::addButtonsToLayout(const QList<QAbstractButton *> void QDialogButtonBoxPrivate::layoutButtons() { Q_Q(QDialogButtonBox); - const int MacGap = 36 - 8; // 8 is the default gap between a widget and a spacer item + const int MacGap = 36 - 8; // 8 is the default gap between a widget and a spacer item for (int i = buttonLayout->count() - 1; i >= 0; --i) { QLayoutItem *item = buttonLayout->takeAt(i); @@ -581,6 +581,22 @@ QAction* QDialogButtonBoxPrivate::createSoftKey(QAbstractButton *button, QDialog } QObject::connect(action, SIGNAL(triggered()), button, SIGNAL(clicked())); action->setSoftKeyRole(softkeyRole); + + + QWidget *dialog = 0; + QWidget *p = q; + while (p && !p->isWindow()) { + p = p->parentWidget(); + if ((dialog = qobject_cast<QDialog *>(p))) + break; + } + + if (dialog) { + dialog->addAction(action); + } else { + q->addAction(action); + } + return action; } #endif @@ -1193,12 +1209,8 @@ bool QDialogButtonBox::event(QEvent *event) if (!hasDefault && firstAcceptButton) firstAcceptButton->setDefault(true); #ifdef QT_SOFTKEYS_ENABLED - if (dialog) { + if (dialog) setFixedSize(0,0); - dialog->addActions(d->softKeyActions.values()); - } else { - addActions(d->softKeyActions.values()); - } #endif }else if (event->type() == QEvent::LanguageChange) { d->retranslateStrings(); diff --git a/src/gui/widgets/qdockarealayout.cpp b/src/gui/widgets/qdockarealayout.cpp index dffec11..07914b2 100644 --- a/src/gui/widgets/qdockarealayout.cpp +++ b/src/gui/widgets/qdockarealayout.cpp @@ -1841,7 +1841,6 @@ void QDockAreaLayoutInfo::saveState(QDataStream &stream) const } } -#ifdef Q_WS_MAC static Qt::DockWidgetArea toDockWidgetArea(QInternal::DockPosition pos) { switch (pos) { @@ -1853,7 +1852,6 @@ static Qt::DockWidgetArea toDockWidgetArea(QInternal::DockPosition pos) } return Qt::NoDockWidgetArea; } -#endif static QRect constrainedRect(QRect rect, const QRect &desktop) { @@ -1970,19 +1968,19 @@ bool QDockAreaLayoutInfo::restoreState(QDataStream &stream, QList<QDockWidget*> if (!testing) { widget->setVisible(flags & StateFlagVisible); + item_list.append(item); } } else { int dummy; stream >> item.pos >> item.size >> dummy >> dummy; if (!testing) { + item_list.append(item); widget->setFloating(false); widget->setVisible(flags & StateFlagVisible); + emit widget->dockLocationChanged(toDockWidgetArea(dockPos)); } } - if (!testing) { - item_list.append(item); - } } } else if (nextMarker == SequenceMarker) { int dummy; diff --git a/src/gui/widgets/qdockwidget.cpp b/src/gui/widgets/qdockwidget.cpp index a8e2a37..9cf6af1 100644 --- a/src/gui/widgets/qdockwidget.cpp +++ b/src/gui/widgets/qdockwidget.cpp @@ -1225,6 +1225,7 @@ void QDockWidget::setFeatures(QDockWidget::DockWidgetFeatures features) features &= DockWidgetFeatureMask; if (d->features == features) return; + const bool closableChanged = (d->features ^ features) & DockWidgetClosable; d->features = features; QDockWidgetLayout *layout = qobject_cast<QDockWidgetLayout*>(this->layout()); @@ -1233,6 +1234,10 @@ void QDockWidget::setFeatures(QDockWidget::DockWidgetFeatures features) d->toggleViewAction->setEnabled((d->features & DockWidgetClosable) == DockWidgetClosable); emit featuresChanged(d->features); update(); + if (closableChanged && layout->nativeWindowDeco()) { + //this ensures the native decoration is drawn + d->setWindowState(true /*floating*/, true /*unplug*/); + } } QDockWidget::DockWidgetFeatures QDockWidget::features() const diff --git a/src/gui/widgets/qfontcombobox.cpp b/src/gui/widgets/qfontcombobox.cpp index 806db59..d601f81 100644 --- a/src/gui/widgets/qfontcombobox.cpp +++ b/src/gui/widgets/qfontcombobox.cpp @@ -247,7 +247,14 @@ void QFontComboBoxPrivate::_q_updateModel() } list = result; + //we need to block the signals so that the model doesn't emit reset + //this prevents the current index from changing + //it will be updated just after this + ///TODO: we should finda way to avoid blocking signals and have a real update of the model + const bool old = m->blockSignals(true); m->setStringList(list); + m->blockSignals(old); + if (list.isEmpty()) { if (currentFont != QFont()) { currentFont = QFont(); @@ -420,8 +427,10 @@ void QFontComboBox::setCurrentFont(const QFont &font) Q_D(QFontComboBox); if (font != d->currentFont) { d->currentFont = font; - emit currentFontChanged(d->currentFont); d->_q_updateModel(); + if (d->currentFont == font) { //else the signal has already be emitted by _q_updateModel + emit currentFontChanged(d->currentFont); + } } } diff --git a/src/gui/widgets/qlabel.cpp b/src/gui/widgets/qlabel.cpp index 3d908a1..ea711e8 100644 --- a/src/gui/widgets/qlabel.cpp +++ b/src/gui/widgets/qlabel.cpp @@ -1170,22 +1170,10 @@ void QLabelPrivate::updateShortcut() // But then we do want to hide the ampersands, so we can't use shortcutId. hasShortcut = false; - if (control) { - ensureTextPopulated(); - // Underline the first character that follows an ampersand - shortcutCursor = control->document()->find(QLatin1String("&")); - if (shortcutCursor.isNull()) - return; - hasShortcut = true; - shortcutId = q->grabShortcut(QKeySequence::mnemonic(text)); - shortcutCursor.deleteChar(); // remove the ampersand - shortcutCursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor); - } else { - if (!text.contains(QLatin1Char('&'))) - return; - hasShortcut = true; - shortcutId = q->grabShortcut(QKeySequence::mnemonic(text)); - } + if (!text.contains(QLatin1Char('&'))) + return; + hasShortcut = true; + shortcutId = q->grabShortcut(QKeySequence::mnemonic(text)); } #endif // QT_NO_SHORTCUT @@ -1456,6 +1444,24 @@ void QLabelPrivate::ensureTextPopulated() const doc->setPlainText(text); #endif doc->setUndoRedoEnabled(false); + +#ifndef QT_NO_SHORTCUT + if (hasShortcut) { + // Underline the first character that follows an ampersand (and remove the others ampersands) + int from = 0; + bool found = false; + QTextCursor cursor; + while (!(cursor = control->document()->find((QLatin1String("&")), from)).isNull()) { + cursor.deleteChar(); // remove the ampersand + cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor); + from = cursor.position(); + if (!found && cursor.selectedText() != QLatin1String("&")) { //not a second & + found = true; + shortcutCursor = cursor; + } + } + } +#endif } } textDirty = false; diff --git a/src/gui/widgets/qlabel_p.h b/src/gui/widgets/qlabel_p.h index c5a74e2..ca17a35 100644 --- a/src/gui/widgets/qlabel_p.h +++ b/src/gui/widgets/qlabel_p.h @@ -113,7 +113,7 @@ public: mutable uint hasShortcut : 1; Qt::TextFormat textformat; mutable QTextControl *control; - QTextCursor shortcutCursor; + mutable QTextCursor shortcutCursor; Qt::TextInteractionFlags textInteractionFlags; inline bool needTextControl() const { diff --git a/src/gui/widgets/qlcdnumber.cpp b/src/gui/widgets/qlcdnumber.cpp index 3497eba..69c52cf 100644 --- a/src/gui/widgets/qlcdnumber.cpp +++ b/src/gui/widgets/qlcdnumber.cpp @@ -441,10 +441,10 @@ QLCDNumber::~QLCDNumber() /*! - \obsolete + \deprecated \property QLCDNumber::numDigits \brief the current number of digits displayed - \sa setDigitCount() + \sa digitCount */ void QLCDNumber::setNumDigits(int numDigits) diff --git a/src/gui/widgets/qlinecontrol.cpp b/src/gui/widgets/qlinecontrol.cpp index 2914164..300a2ea 100644 --- a/src/gui/widgets/qlinecontrol.cpp +++ b/src/gui/widgets/qlinecontrol.cpp @@ -414,7 +414,7 @@ void QLineControl::processInputMethodEvent(QInputMethodEvent *event) int c = m_cursor; // cursor position after insertion of commit string - if (event->replacementStart() <= 0) + if (event->replacementStart() == 0) c += event->commitString().length() + qMin(-event->replacementStart(), event->replacementLength()); m_cursor += event->replacementStart(); diff --git a/src/gui/widgets/qlineedit.cpp b/src/gui/widgets/qlineedit.cpp index f5dbe1c..9f3fe4f 100644 --- a/src/gui/widgets/qlineedit.cpp +++ b/src/gui/widgets/qlineedit.cpp @@ -1515,7 +1515,8 @@ void QLineEdit::mouseReleaseEvent(QMouseEvent* e) } #endif - d->handleSoftwareInputPanel(e->button(), d->clickCausedFocus); + if (!isReadOnly()) + d->handleSoftwareInputPanel(e->button(), d->clickCausedFocus); d->clickCausedFocus = 0; } @@ -1594,7 +1595,9 @@ void QLineEdit::keyPressEvent(QKeyEvent *event) && !isReadOnly()) { setEditFocus(true); +#ifndef Q_OS_SYMBIAN clear(); +#endif } else { event->ignore(); return; @@ -1651,7 +1654,9 @@ void QLineEdit::inputMethodEvent(QInputMethodEvent *e) && hasFocus() && !hasEditFocus() && !e->preeditString().isEmpty()) { setEditFocus(true); +#ifndef Q_OS_SYMBIAN selectAll(); // so text is replaced rather than appended to +#endif } #endif diff --git a/src/gui/widgets/qmainwindowlayout.cpp b/src/gui/widgets/qmainwindowlayout.cpp index 027a5d6..fa6f7a1 100644 --- a/src/gui/widgets/qmainwindowlayout.cpp +++ b/src/gui/widgets/qmainwindowlayout.cpp @@ -1641,6 +1641,9 @@ void QMainWindowLayout::animationFinished(QWidget *widget) 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/qmenu.cpp b/src/gui/widgets/qmenu.cpp index cc39b7f..fc88d06 100644 --- a/src/gui/widgets/qmenu.cpp +++ b/src/gui/widgets/qmenu.cpp @@ -602,14 +602,7 @@ void QMenuPrivate::setCurrentAction(QAction *action, int popup, SelectionReason } #ifndef QT_NO_STATUSTIP } else if (previousAction) { - QWidget *w = causedPopup.widget; - while (QMenu *m = qobject_cast<QMenu*>(w)) - w = m->d_func()->causedPopup.widget; - if (w) { - QString empty; - QStatusTipEvent tip(empty); - QApplication::sendEvent(w, &tip); - } + previousAction->d_func()->showStatusText(topCausedWidget(), QString()); #endif } if (hideActiveMenu) { @@ -623,6 +616,15 @@ void QMenuPrivate::setCurrentAction(QAction *action, int popup, SelectionReason } } +//return the top causedPopup.widget that is not a QMenu +QWidget *QMenuPrivate::topCausedWidget() const +{ + QWidget* top = causedPopup.widget; + while (QMenu* m = qobject_cast<QMenu *>(top)) + top = m->d_func()->causedPopup.widget; + return top; +} + QAction *QMenuPrivate::actionAt(QPoint p) const { if (!q_func()->rect().contains(p)) //sanity check @@ -1094,10 +1096,7 @@ void QMenuPrivate::activateAction(QAction *action, QAction::ActionEvent action_e QAccessible::updateAccessibility(q, actionIndex, QAccessible::Selection); } #endif - QWidget *w = causedPopup.widget; - while (QMenu *m = qobject_cast<QMenu*>(w)) - w = m->d_func()->causedPopup.widget; - action->showStatusText(w); + action->showStatusText(topCausedWidget()); } else { actionAboutToTrigger = 0; } @@ -1107,6 +1106,7 @@ void QMenuPrivate::_q_actionTriggered() { Q_Q(QMenu); if (QAction *action = qobject_cast<QAction *>(q->sender())) { + QWeakPointer<QAction> actionGuard = action; #ifdef QT3_SUPPORT //we store it here because the action might be deleted/changed by connected slots const int id = q->findIdForAction(action); @@ -1116,7 +1116,7 @@ void QMenuPrivate::_q_actionTriggered() emit q->activated(id); #endif - if (!activationRecursionGuard) { + if (!activationRecursionGuard && actionGuard) { //in case the action has not been activated by the mouse //we check the parent hierarchy QList< QPointer<QWidget> > list; @@ -1801,10 +1801,7 @@ void QMenu::popup(const QPoint &p, QAction *atAction) #ifndef QT_NO_MENUBAR // if this menu is part of a chain attached to a QMenuBar, set the // _NET_WM_WINDOW_TYPE_DROPDOWN_MENU X11 window type - QWidget* top = this; - while (QMenu* m = qobject_cast<QMenu *>(top)) - top = m->d_func()->causedPopup.widget; - setAttribute(Qt::WA_X11NetWmWindowTypeDropDownMenu, qobject_cast<QMenuBar *>(top) != 0); + setAttribute(Qt::WA_X11NetWmWindowTypeDropDownMenu, qobject_cast<QMenuBar *>(d->topCausedWidget()) != 0); #endif ensurePolished(); // Get the right font @@ -2752,18 +2749,14 @@ void QMenu::keyPressEvent(QKeyEvent *e) } } if (!key_consumed) { - if (QWidget *caused = d->causedPopup.widget) { - while(QMenu *m = qobject_cast<QMenu*>(caused)) - caused = m->d_func()->causedPopup.widget; #ifndef QT_NO_MENUBAR - if (QMenuBar *mb = qobject_cast<QMenuBar*>(caused)) { - QAction *oldAct = mb->d_func()->currentAction; - QApplication::sendEvent(mb, e); - if (mb->d_func()->currentAction != oldAct) - key_consumed = true; - } -#endif + if (QMenuBar *mb = qobject_cast<QMenuBar*>(d->topCausedWidget())) { + QAction *oldAct = mb->d_func()->currentAction; + QApplication::sendEvent(mb, e); + if (mb->d_func()->currentAction != oldAct) + key_consumed = true; } +#endif } #ifdef Q_OS_WIN32 diff --git a/src/gui/widgets/qmenu_p.h b/src/gui/widgets/qmenu_p.h index a5bde7c..c021063 100644 --- a/src/gui/widgets/qmenu_p.h +++ b/src/gui/widgets/qmenu_p.h @@ -215,6 +215,7 @@ public: SelectedFromKeyboard, SelectedFromElsewhere }; + QWidget *topCausedWidget() const; QAction *actionAt(QPoint p) const; void setFirstActionActive(); void setCurrentAction(QAction *, int popup = -1, SelectionReason reason = SelectedFromElsewhere, bool activateFirst = false); diff --git a/src/gui/widgets/qmenubar.cpp b/src/gui/widgets/qmenubar.cpp index 689d2e1..b1ff662 100644 --- a/src/gui/widgets/qmenubar.cpp +++ b/src/gui/widgets/qmenubar.cpp @@ -332,7 +332,9 @@ void QMenuBarPrivate::popupAction(QAction *action, bool activateFirst) QPoint pos(q->mapToGlobal(QPoint(adjustedActionRect.left(), adjustedActionRect.bottom() + 1))); QSize popup_size = activeMenu->sizeHint(); - QRect screenRect = QApplication::desktop()->screenGeometry(pos); + //we put the popup menu on the screen containing the bottom-center of the action rect + QRect screenRect = QApplication::desktop()->screenGeometry(pos + QPoint(adjustedActionRect.width() / 2, 0)); + pos = QPoint(qMax(pos.x(), screenRect.x()), qMax(pos.y(), screenRect.y())); const bool fitUp = (q->mapToGlobal(adjustedActionRect.topLeft()).y() >= popup_size.height()); const bool fitDown = (pos.y() + popup_size.height() <= screenRect.bottom()); diff --git a/src/gui/widgets/qplaintextedit.cpp b/src/gui/widgets/qplaintextedit.cpp index 18adc6c..c7759e8 100644 --- a/src/gui/widgets/qplaintextedit.cpp +++ b/src/gui/widgets/qplaintextedit.cpp @@ -1966,7 +1966,8 @@ void QPlainTextEdit::mouseReleaseEvent(QMouseEvent *e) d->ensureCursorVisible(); } - d->handleSoftwareInputPanel(e->button(), d->clickCausedFocus); + if (!isReadOnly()) + d->handleSoftwareInputPanel(e->button(), d->clickCausedFocus); d->clickCausedFocus = 0; } diff --git a/src/gui/widgets/qtextedit.cpp b/src/gui/widgets/qtextedit.cpp index 88502e3..1c49ef0 100644 --- a/src/gui/widgets/qtextedit.cpp +++ b/src/gui/widgets/qtextedit.cpp @@ -530,7 +530,9 @@ void QTextEditPrivate::_q_ensureVisible(const QRectF &_rect) when the property is set. If the text edit has another content type, it will not be replaced - by plain text if you call toPlainText(). + by plain text if you call toPlainText(). The only exception to this + is the non-break space, \e{nbsp;}, that will be converted into + standard space. By default, for an editor with no contents, this property contains an empty string. @@ -1210,7 +1212,9 @@ void QTextEdit::keyPressEvent(QKeyEvent *e) if (!hasEditFocus() && !(e->modifiers() & Qt::ControlModifier)) { if (e->text()[0].isPrint()) { setEditFocus(true); +#ifndef Q_OS_SYMBIAN clear(); +#endif } else { e->ignore(); return; @@ -1574,7 +1578,8 @@ void QTextEdit::mouseReleaseEvent(QMouseEvent *e) d->autoScrollTimer.stop(); ensureCursorVisible(); } - d->handleSoftwareInputPanel(e->button(), d->clickCausedFocus); + if (!isReadOnly()) + d->handleSoftwareInputPanel(e->button(), d->clickCausedFocus); d->clickCausedFocus = 0; } @@ -1672,7 +1677,9 @@ void QTextEdit::inputMethodEvent(QInputMethodEvent *e) && QApplication::keypadNavigationEnabled() && !hasEditFocus()) { setEditFocus(true); +#ifndef Q_OS_SYMBIAN selectAll(); // so text is replaced rather than appended to +#endif } #endif d->sendControlEvent(e); @@ -1899,7 +1906,7 @@ void QTextEdit::setOverwriteMode(bool overwrite) \brief the tab stop width in pixels \since 4.1 - By default, this property contains a value of 80. + By default, this property contains a value of 80 pixels. */ int QTextEdit::tabStopWidth() const diff --git a/src/gui/widgets/qtoolbar.cpp b/src/gui/widgets/qtoolbar.cpp index 5596ca4..58a3d28 100644 --- a/src/gui/widgets/qtoolbar.cpp +++ b/src/gui/widgets/qtoolbar.cpp @@ -396,7 +396,7 @@ bool QToolBarPrivate::mouseMoveEvent(QMouseEvent *event) void QToolBarPrivate::unplug(const QRect &_r) { Q_Q(QToolBar); - layout->setExpanded(false, false); + layout->setExpanded(false); QRect r = _r; r.moveTopLeft(q->mapToGlobal(QPoint(0, 0))); setWindowState(true, true, r); diff --git a/src/gui/widgets/qtoolbararealayout.cpp b/src/gui/widgets/qtoolbararealayout.cpp index de11625..b7e985c 100644 --- a/src/gui/widgets/qtoolbararealayout.cpp +++ b/src/gui/widgets/qtoolbararealayout.cpp @@ -480,7 +480,7 @@ void QToolBarAreaLayoutInfo::moveToolBar(QToolBar *toolbar, int pos) } -QList<int> QToolBarAreaLayoutInfo::gapIndex(const QPoint &pos) const +QList<int> QToolBarAreaLayoutInfo::gapIndex(const QPoint &pos, int *minDistance) const { int p = pick(o, pos); @@ -509,12 +509,19 @@ QList<int> QToolBarAreaLayoutInfo::gapIndex(const QPoint &pos) const QList<int> result; result << j << k; + *minDistance = 0; //we found a perfect match + return result; + } + } else { + const int dist = distance(pos); + //it will only return a path if the minDistance is higher than the current distance + if (dist >= 0 && *minDistance > dist) { + *minDistance = dist; + + QList<int> result; + result << lines.count() << 0; return result; } - } else if (appendLineDropRect().contains(pos)) { - QList<int> result; - result << lines.count() << 0; - return result; } return QList<int>(); @@ -587,32 +594,20 @@ QRect QToolBarAreaLayoutInfo::itemRect(const QList<int> &path) const return result; } -QRect QToolBarAreaLayoutInfo::appendLineDropRect() const +int QToolBarAreaLayoutInfo::distance(const QPoint &pos) const { - QRect result; - switch (dockPos) { case QInternal::LeftDock: - result = QRect(rect.right(), rect.top(), - EmptyDockAreaSize, rect.height()); - break; + return pos.x() - rect.right(); case QInternal::RightDock: - result = QRect(rect.left() - EmptyDockAreaSize, rect.top(), - EmptyDockAreaSize, rect.height()); - break; + return rect.left() - pos.x(); case QInternal::TopDock: - result = QRect(rect.left(), rect.bottom() + 1, - rect.width(), EmptyDockAreaSize); - break; + return pos.y() - rect.bottom(); case QInternal::BottomDock: - result = QRect(rect.left(), rect.top() - EmptyDockAreaSize, - rect.width(), EmptyDockAreaSize); - break; + return rect.top() - pos.y(); default: - break; + return -1; } - - return result; } /****************************************************************************** @@ -1022,21 +1017,24 @@ QList<int> QToolBarAreaLayout::indexOf(QWidget *toolBar) const return result; } +//this functions returns the path to the possible gapindex for the position pos QList<int> QToolBarAreaLayout::gapIndex(const QPoint &pos) const { Qt::LayoutDirection dir = mainWindow->layoutDirection(); + int minDistance = 80; // when a dock area is empty, how "wide" is it? + QList<int> ret; //return value for (int i = 0; i < QInternal::DockCount; ++i) { QPoint p = pos; if (docks[i].o == Qt::Horizontal) p = QStyle::visualPos(dir, docks[i].rect, p); - QList<int> result = docks[i].gapIndex(p); + QList<int> result = docks[i].gapIndex(p, &minDistance); if (!result.isEmpty()) { result.prepend(i); - return result; + ret = result; } } - return QList<int>(); + return ret; } QList<int> QToolBarAreaLayout::currentGapIndex() const diff --git a/src/gui/widgets/qtoolbararealayout_p.h b/src/gui/widgets/qtoolbararealayout_p.h index 1e113b7..f0ab80c 100644 --- a/src/gui/widgets/qtoolbararealayout_p.h +++ b/src/gui/widgets/qtoolbararealayout_p.h @@ -155,8 +155,6 @@ public: class QToolBarAreaLayoutInfo { public: - enum { EmptyDockAreaSize = 80 }; // when a dock area is empty, how "wide" is it? - QToolBarAreaLayoutInfo(QInternal::DockPosition pos = QInternal::TopDock); QList<QToolBarAreaLayoutLine> lines; @@ -173,11 +171,11 @@ public: void removeToolBarBreak(QToolBar *before); void moveToolBar(QToolBar *toolbar, int pos); - QList<int> gapIndex(const QPoint &pos) const; + QList<int> gapIndex(const QPoint &pos, int *maxDistance) const; bool insertGap(const QList<int> &path, QLayoutItem *item); void clear(); QRect itemRect(const QList<int> &path) const; - QRect appendLineDropRect() const; + int distance(const QPoint &pos) const; QRect rect; Qt::Orientation o; diff --git a/src/gui/widgets/qtoolbarlayout.cpp b/src/gui/widgets/qtoolbarlayout.cpp index 7dc1e01..0afe5d8 100644 --- a/src/gui/widgets/qtoolbarlayout.cpp +++ b/src/gui/widgets/qtoolbarlayout.cpp @@ -642,7 +642,7 @@ QSize QToolBarLayout::expandedSize(const QSize &size) const return result; } -void QToolBarLayout::setExpanded(bool exp, bool animated) +void QToolBarLayout::setExpanded(bool exp) { if (exp == expanded) return; @@ -654,7 +654,6 @@ void QToolBarLayout::setExpanded(bool exp, bool animated) if (!tb) return; if (QMainWindow *win = qobject_cast<QMainWindow*>(tb->parentWidget())) { - animating = true; QMainWindowLayout *layout = qobject_cast<QMainWindowLayout*>(win->layout()); if (expanded) { tb->raise(); @@ -665,7 +664,7 @@ void QToolBarLayout::setExpanded(bool exp, bool animated) layoutActions(rect.size()); } } - layout->layoutState.toolBarAreaLayout.apply(animated); + layout->layoutState.toolBarAreaLayout.apply(win->isAnimated()); } } diff --git a/src/gui/widgets/qtoolbarlayout_p.h b/src/gui/widgets/qtoolbarlayout_p.h index d49a5df..afd0227 100644 --- a/src/gui/widgets/qtoolbarlayout_p.h +++ b/src/gui/widgets/qtoolbarlayout_p.h @@ -112,7 +112,7 @@ public: bool hasExpandFlag() const; public Q_SLOTS: - void setExpanded(bool b, bool animated = true); + void setExpanded(bool b); private: QList<QToolBarItem*> items; diff --git a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp index 5de6c70..9645fa8 100644 --- a/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp +++ b/src/multimedia/audio/qaudiodeviceinfo_alsa_p.cpp @@ -152,13 +152,23 @@ bool QAudioDeviceInfoInternal::open() { int err = 0; QString dev = device; - if(!dev.contains(QLatin1String("default"))) { + QList<QByteArray> devices = availableDevices(mode); + + if(dev.compare(QLatin1String("default")) == 0) { +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) + dev = QLatin1String(devices.first().constData()); +#else + dev = QLatin1String("hw:0,0"); +#endif + } else { #if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) - dev = QString(QLatin1String("default:CARD=%1")).arg(dev); + dev = device; #else int idx = 0; char *name; + QString shortName = device.mid(device.indexOf(QLatin1String("="),0)+1); + while(snd_card_get_name(idx,&name) == 0) { if(dev.contains(QLatin1String(name))) break; @@ -195,16 +205,25 @@ bool QAudioDeviceInfoInternal::testSettings(const QAudioFormat& format) const snd_pcm_hw_params_t *params; QString dev = device; - // open() - if(!dev.contains(QLatin1String("default"))) { + QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioOutput); + + if(dev.compare(QLatin1String("default")) == 0) { #if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) - dev = QString(QLatin1String("default:CARD=%1")).arg(dev); + dev = QLatin1String(devices.first().constData()); +#else + dev = QLatin1String("hw:0,0"); +#endif + } else { +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) + dev = device; #else int idx = 0; char *name; - + + QString shortName = device.mid(device.indexOf(QLatin1String("="),0)+1); + while(snd_card_get_name(idx,&name) == 0) { - if(dev.contains(QLatin1String(name))) + if(shortName.compare(QLatin1String(name)) == 0) break; idx++; } @@ -386,6 +405,7 @@ QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode) { QList<QByteArray> devices; QByteArray filter; + #if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) // Create a list of all current audio devices that support mode void **hints, **n; @@ -408,12 +428,10 @@ QList<QByteArray> QAudioDeviceInfoInternal::availableDevices(QAudio::Mode mode) descr = snd_device_name_get_hint(*n, "DESC"); io = snd_device_name_get_hint(*n, "IOID"); if((name != NULL) && (descr != NULL) && ((io == NULL) || (io == filter))) { - QString str = QLatin1String(name); - - if(str.contains(QLatin1String("default"))) { - int pos = str.indexOf(QLatin1String("="),0); - devices.append(str.mid(pos+1).toLocal8Bit().constData()); - } + QString deviceName = QLatin1String(name); + QString deviceDescription = QLatin1String(descr); + if(deviceDescription.contains(QLatin1String("Default Audio Device"))) + devices.append(deviceName.toLocal8Bit().constData()); } if(name != NULL) free(name); @@ -448,7 +466,7 @@ QByteArray QAudioDeviceInfoInternal::defaultInputDevice() if(devices.size() == 0) return QByteArray(); - return QByteArray("default"); + return devices.first(); } QByteArray QAudioDeviceInfoInternal::defaultOutputDevice() @@ -457,7 +475,7 @@ QByteArray QAudioDeviceInfoInternal::defaultOutputDevice() if(devices.size() == 0) return QByteArray(); - return QByteArray("default"); + return devices.first(); } QT_END_NAMESPACE diff --git a/src/multimedia/audio/qaudioinput.cpp b/src/multimedia/audio/qaudioinput.cpp index e794eaf..8b368d5 100644 --- a/src/multimedia/audio/qaudioinput.cpp +++ b/src/multimedia/audio/qaudioinput.cpp @@ -47,7 +47,6 @@ #include "qaudiodevicefactory_p.h" - QT_BEGIN_NAMESPACE /*! diff --git a/src/multimedia/audio/qaudioinput_alsa_p.cpp b/src/multimedia/audio/qaudioinput_alsa_p.cpp index 8a8f0db..3dbe66c 100644 --- a/src/multimedia/audio/qaudioinput_alsa_p.cpp +++ b/src/multimedia/audio/qaudioinput_alsa_p.cpp @@ -52,6 +52,7 @@ #include <QtCore/qcoreapplication.h> #include "qaudioinput_alsa_p.h" +#include "qaudiodeviceinfo_alsa_p.h" QT_BEGIN_NAMESPACE @@ -80,8 +81,7 @@ QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device, const QAudioFor pullMode = true; resuming = false; - QStringList list1 = QString(QLatin1String(device)).split(QLatin1String(":")); - m_device = QByteArray(list1.at(0).toLocal8Bit().constData()); + m_device = device; timer = new QTimer(this); connect(timer,SIGNAL(timeout()),SLOT(userFeed())); @@ -259,22 +259,31 @@ bool QAudioInputPrivate::open() unsigned int freakuency=settings.frequency(); QString dev = QString(QLatin1String(m_device.constData())); - if(!dev.contains(QLatin1String("default"))) { -#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) - dev = QString(QLatin1String("default:CARD=%1")).arg(QLatin1String(m_device.constData())); + QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioInput); + if(dev.compare(QLatin1String("default")) == 0) { +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) + dev = QLatin1String(devices.first()); +#else + dev = QLatin1String("hw:0,0"); +#endif + } else { +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) + dev = QLatin1String(m_device); #else int idx = 0; char *name; + QString shortName = QLatin1String(m_device.mid(m_device.indexOf('=',0)+1).constData()); + while(snd_card_get_name(idx,&name) == 0) { - if(m_device.contains(name)) + if(qstrncmp(shortName.toLocal8Bit().constData(),name,shortName.length()) == 0) break; idx++; } dev = QString(QLatin1String("hw:%1,0")).arg(idx); #endif } - + // Step 1: try and open the device while((count < 5) && (err < 0)) { err=snd_pcm_open(&handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_CAPTURE,0); @@ -614,7 +623,7 @@ qint64 QAudioInputPrivate::elapsedUSecs() const if (deviceState == QAudio::StoppedState) return 0; -#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) snd_pcm_status_t* status; snd_pcm_status_alloca(&status); diff --git a/src/multimedia/audio/qaudiooutput_alsa_p.cpp b/src/multimedia/audio/qaudiooutput_alsa_p.cpp index e9784d2..020a104 100644 --- a/src/multimedia/audio/qaudiooutput_alsa_p.cpp +++ b/src/multimedia/audio/qaudiooutput_alsa_p.cpp @@ -52,6 +52,7 @@ #include <QtCore/qcoreapplication.h> #include "qaudiooutput_alsa_p.h" +#include "qaudiodeviceinfo_alsa_p.h" QT_BEGIN_NAMESPACE @@ -281,21 +282,31 @@ bool QAudioOutputPrivate::open() unsigned int freakuency=settings.frequency(); QString dev = QLatin1String(m_device.constData()); - if(!dev.contains(QLatin1String("default"))) { -#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) - dev = QString(QLatin1String("default:CARD=%1")).arg(QLatin1String(m_device.constData())); + QList<QByteArray> devices = QAudioDeviceInfoInternal::availableDevices(QAudio::AudioOutput); + if(dev.compare(QLatin1String("default")) == 0) { +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) + dev = QLatin1String(devices.first().constData()); +#else + dev = QLatin1String("hw:0,0"); +#endif + } else { +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) + dev = QLatin1String(m_device); #else int idx = 0; char *name; + QString shortName = QLatin1String(m_device.mid(m_device.indexOf('=',0)+1).constData()); + while(snd_card_get_name(idx,&name) == 0) { - if(m_device.contains(name)) + if(qstrncmp(shortName.toLocal8Bit().constData(),name,shortName.length()) == 0) break; idx++; } dev = QString(QLatin1String("hw:%1,0")).arg(idx); #endif } + // Step 1: try and open the device while((count < 5) && (err < 0)) { err=snd_pcm_open(&handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_PLAYBACK,0); @@ -666,7 +677,7 @@ qint64 QAudioOutputPrivate::elapsedUSecs() const if (deviceState == QAudio::StoppedState) return 0; -#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) +#if(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 14) snd_pcm_status_t* status; snd_pcm_status_alloca(&status); diff --git a/src/network/access/access.pri b/src/network/access/access.pri index edc1b63..aa36890 100644 --- a/src/network/access/access.pri +++ b/src/network/access/access.pri @@ -7,6 +7,7 @@ HEADERS += access/qftp.h \ access/qhttpnetworkreply_p.h \ access/qhttpnetworkconnection_p.h \ access/qhttpnetworkconnectionchannel_p.h \ + access/qfilenetworkreply_p.h \ access/qnetworkaccessmanager.h \ access/qnetworkaccessmanager_p.h \ access/qnetworkaccesscache_p.h \ @@ -38,6 +39,7 @@ SOURCES += access/qftp.cpp \ access/qhttpnetworkreply.cpp \ access/qhttpnetworkconnection.cpp \ access/qhttpnetworkconnectionchannel.cpp \ + access/qfilenetworkreply.cpp \ access/qnetworkaccessmanager.cpp \ access/qnetworkaccesscache.cpp \ access/qnetworkaccessbackend.cpp \ diff --git a/src/network/access/qfilenetworkreply.cpp b/src/network/access/qfilenetworkreply.cpp new file mode 100644 index 0000000..497519f --- /dev/null +++ b/src/network/access/qfilenetworkreply.cpp @@ -0,0 +1,205 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtNetwork module 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 "qfilenetworkreply_p.h" + +#include "QtCore/qdatetime.h" +#include <QtCore/QCoreApplication> +#include <QtCore/QFileInfo> + +QT_BEGIN_NAMESPACE + +QFileNetworkReplyPrivate::QFileNetworkReplyPrivate() + : QNetworkReplyPrivate(), realFileSize(0), finished(false) +{ +} + +QFileNetworkReply::QFileNetworkReply(QObject *parent, const QNetworkRequest &req) + : QNetworkReply(*new QFileNetworkReplyPrivate(), parent) +{ + setRequest(req); + setUrl(req.url()); + setOperation(QNetworkAccessManager::GetOperation); + QMetaObject::invokeMethod(this, "_q_startOperation", Qt::QueuedConnection); + QNetworkReply::open(QIODevice::ReadOnly); +} + +QFileNetworkReply::~QFileNetworkReply() +{ +} + +// This code is mostly inspired by QNetworkAccessFileBackend +// We also use its translation context for error messages +void QFileNetworkReplyPrivate::_q_startOperation() +{ + Q_Q(QFileNetworkReply); + + QUrl url = q->url(); + if (url.host() == QLatin1String("localhost")) + url.setHost(QString()); + +#if !defined(Q_OS_WIN) + // do not allow UNC paths on Unix + if (!url.host().isEmpty()) { + // we handle only local files + QString msg = QCoreApplication::translate("QNetworkAccessFileBackend", "Request for opening non-local file %1").arg(url.toString()); + q->setError(QNetworkReply::ProtocolInvalidOperationError, msg); + emit q->error(QNetworkReply::ProtocolInvalidOperationError); + doFinished(); + return; + } +#endif + if (url.path().isEmpty()) + url.setPath(QLatin1String("/")); + q->setUrl(url); + + + QString fileName = url.toLocalFile(); + if (fileName.isEmpty()) { + fileName = url.toString(QUrl::RemoveAuthority | QUrl::RemoveFragment | QUrl::RemoveQuery); + } + realFile.setFileName(fileName); + + QFileInfo fi(realFile); + if (fi.isDir()) { + QString msg = QCoreApplication::translate("QNetworkAccessFileBackend", "Cannot open %1: Path is a directory").arg(url.toString()); + q->setError(QNetworkReply::ContentOperationNotPermittedError, msg); + emit q->error(QNetworkReply::ContentOperationNotPermittedError); + doFinished(); + return; + } + + bool opened = realFile.open(QIODevice::ReadOnly | QIODevice::Unbuffered); + + // could we open the file? + if (!opened) { + QString msg = QCoreApplication::translate("QNetworkAccessFileBackend", "Error opening %1: %2") + .arg(realFile.fileName(), realFile.errorString()); + + if (realFile.exists()) { + q->setError(QNetworkReply::ContentAccessDenied, msg); + emit q->error(QNetworkReply::ContentAccessDenied); + } else { + q->setError(QNetworkReply::ContentNotFoundError, msg); + emit q->error(QNetworkReply::ContentNotFoundError); + } + doFinished(); + return; + } + + realFileSize = fi.size(); + q->setHeader(QNetworkRequest::LastModifiedHeader, fi.lastModified()); + q->setHeader(QNetworkRequest::ContentLengthHeader, realFileSize); + + emit q->metaDataChanged(); + emit q->downloadProgress(realFileSize, realFileSize); + emit q->readyRead(); + doFinished(); +} + +bool QFileNetworkReplyPrivate::isFinished() const +{ + return finished; +} + +void QFileNetworkReplyPrivate::doFinished() +{ + Q_Q(QFileNetworkReply); + finished = true; + emit q->finished(); +} + + +void QFileNetworkReply::close() +{ + Q_D(QFileNetworkReply); + QNetworkReply::close(); + d->realFile.close(); + + if (!d->finished) + d->doFinished(); +} + +void QFileNetworkReply::abort() +{ + Q_D(QFileNetworkReply); + QNetworkReply::close(); + d->realFile.close(); + + if (!d->finished) + d->doFinished(); +} + +qint64 QFileNetworkReply::bytesAvailable() const +{ + Q_D(const QFileNetworkReply); + return QNetworkReply::bytesAvailable() + d->realFile.bytesAvailable(); +} + +bool QFileNetworkReply::isSequential () const +{ + return true; +} + +qint64 QFileNetworkReply::size() const +{ + Q_D(const QFileNetworkReply); + return d->realFileSize; +} + +/*! + \internal +*/ +qint64 QFileNetworkReply::readData(char *data, qint64 maxlen) +{ + Q_D(QFileNetworkReply); + qint64 ret = d->realFile.read(data, maxlen); + if (ret == 0 && bytesAvailable() == 0) + return -1; // everything had been read + else + return ret; +} + + +QT_END_NAMESPACE + +#include "moc_qfilenetworkreply_p.cpp" + diff --git a/src/network/access/qfilenetworkreply_p.h b/src/network/access/qfilenetworkreply_p.h new file mode 100644 index 0000000..831f50a --- /dev/null +++ b/src/network/access/qfilenetworkreply_p.h @@ -0,0 +1,107 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtNetwork module 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 QFILENETWORKREPLY_P_H +#define QFILENETWORKREPLY_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of the Network Access API. This header file may change from +// version to version without notice, or even be removed. +// +// We mean it. +// + +#include "qnetworkreply.h" +#include "qnetworkreply_p.h" +#include "qnetworkaccessmanager.h" +#include <QFile> + +QT_BEGIN_NAMESPACE + + +class QFileNetworkReplyPrivate; +class QFileNetworkReply: public QNetworkReply +{ + Q_OBJECT +public: + QFileNetworkReply(QObject *parent, const QNetworkRequest &req); + ~QFileNetworkReply(); + virtual void abort(); + + // reimplemented from QNetworkReply + virtual void close(); + virtual qint64 bytesAvailable() const; + virtual bool isSequential () const; + qint64 size() const; + + + virtual qint64 readData(char *data, qint64 maxlen); + + Q_DECLARE_PRIVATE(QFileNetworkReply) + Q_PRIVATE_SLOT(d_func(), void _q_startOperation()) + +}; + +class QFileNetworkReplyPrivate: public QNetworkReplyPrivate +{ +public: + QFileNetworkReplyPrivate(); + + QFile realFile; + qint64 realFileSize; + + void _q_startOperation(); + + virtual bool isFinished() const; + void doFinished(); + bool finished; + + + Q_DECLARE_PUBLIC(QFileNetworkReply) +}; + +QT_END_NAMESPACE + +#endif // QFILENETWORKREPLY_P_H diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index 8dd7a00..2dbd512 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -194,11 +194,20 @@ void QHttpNetworkConnectionPrivate::prepareRequest(HttpMessagePair &messagePair) // some websites mandate an accept-language header and fail // if it is not sent. This is a problem with the website and - // not with us, but we work around this by setting a - // universal one always. + // not with us, but we work around this by setting + // one always. value = request.headerField("accept-language"); - if (value.isEmpty()) - request.setHeaderField("accept-language", "en,*"); + if (value.isEmpty()) { + QString systemLocale = QLocale::system().name().replace(QChar::fromAscii('_'),QChar::fromAscii('-')); + QString acceptLanguage; + if (systemLocale == QLatin1String("C")) + acceptLanguage = QString::fromAscii("en,*"); + else if (systemLocale.startsWith(QLatin1String("en-"))) + acceptLanguage = QString::fromAscii("%1,*").arg(systemLocale); + else + acceptLanguage = QString::fromAscii("%1,en,*").arg(systemLocale); + request.setHeaderField("Accept-Language", acceptLanguage.toAscii()); + } // set the User Agent value = request.headerField("user-agent"); diff --git a/src/network/access/qhttpnetworkheader.cpp b/src/network/access/qhttpnetworkheader.cpp index 68ed3e5..e9866ca 100644 --- a/src/network/access/qhttpnetworkheader.cpp +++ b/src/network/access/qhttpnetworkheader.cpp @@ -92,11 +92,10 @@ QByteArray QHttpNetworkHeaderPrivate::headerField(const QByteArray &name, const QList<QByteArray> QHttpNetworkHeaderPrivate::headerFieldValues(const QByteArray &name) const { QList<QByteArray> result; - QByteArray lowerName = name.toLower(); QList<QPair<QByteArray, QByteArray> >::ConstIterator it = fields.constBegin(), end = fields.constEnd(); for ( ; it != end; ++it) - if (lowerName == it->first.toLower()) + if (qstricmp(name.constData(), it->first) == 0) result += it->second; return result; @@ -104,10 +103,9 @@ QList<QByteArray> QHttpNetworkHeaderPrivate::headerFieldValues(const QByteArray void QHttpNetworkHeaderPrivate::setHeaderField(const QByteArray &name, const QByteArray &data) { - QByteArray lowerName = name.toLower(); QList<QPair<QByteArray, QByteArray> >::Iterator it = fields.begin(); while (it != fields.end()) { - if (lowerName == it->first.toLower()) + if (qstricmp(name.constData(), it->first) == 0) it = fields.erase(it); else ++it; diff --git a/src/network/access/qhttpnetworkreply.cpp b/src/network/access/qhttpnetworkreply.cpp index e990704..2b0c252 100644 --- a/src/network/access/qhttpnetworkreply.cpp +++ b/src/network/access/qhttpnetworkreply.cpp @@ -239,7 +239,7 @@ qint64 QHttpNetworkReplyPrivate::bytesAvailable() const bool QHttpNetworkReplyPrivate::isGzipped() { QByteArray encoding = headerField("content-encoding"); - return encoding.toLower() == "gzip"; + return qstricmp(encoding.constData(), "gzip") == 0; } void QHttpNetworkReplyPrivate::removeAutoDecompressHeader() @@ -247,11 +247,10 @@ void QHttpNetworkReplyPrivate::removeAutoDecompressHeader() // The header "Content-Encoding = gzip" is retained. // Content-Length is removed since the actual one send by the server is for compressed data QByteArray name("content-length"); - QByteArray lowerName = name.toLower(); QList<QPair<QByteArray, QByteArray> >::Iterator it = fields.begin(), end = fields.end(); while (it != end) { - if (name == it->first.toLower()) { + if (qstricmp(name.constData(), it->first.constData()) == 0) { fields.erase(it); break; } @@ -269,6 +268,7 @@ bool QHttpNetworkReplyPrivate::findChallenge(bool forProxy, QByteArray &challeng QList<QByteArray> challenges = headerFieldValues(header); for (int i = 0; i<challenges.size(); i++) { QByteArray line = challenges.at(i); + // todo use qstrincmp if (!line.toLower().startsWith("negotiate")) challenge = line; } diff --git a/src/network/access/qnetworkaccessbackend.cpp b/src/network/access/qnetworkaccessbackend.cpp index 1a92868..3e2db7a 100644 --- a/src/network/access/qnetworkaccessbackend.cpp +++ b/src/network/access/qnetworkaccessbackend.cpp @@ -141,6 +141,8 @@ QNonContiguousByteDevice* QNetworkAccessBackend::createUploadByteDevice() // and the special backends need to access this. void QNetworkAccessBackend::emitReplyUploadProgress(qint64 bytesSent, qint64 bytesTotal) { + if (reply->isFinished()) + return; reply->emitUploadProgress(bytesSent, bytesTotal); } diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp index bfcc299..91f9189 100644 --- a/src/network/access/qnetworkaccesshttpbackend.cpp +++ b/src/network/access/qnetworkaccesshttpbackend.cpp @@ -732,7 +732,7 @@ void QNetworkAccessHttpBackend::replyHeaderChanged() for (; it != end; ++it) { QByteArray value = rawHeader(it->first); if (!value.isEmpty()) { - if (it->first.toLower() == "set-cookie") + if (qstricmp(it->first.constData(), "set-cookie") == 0) value += "\n"; else value += ", "; diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index b1160aa..754633d 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -52,6 +52,7 @@ #include "qnetworkaccessfilebackend_p.h" #include "qnetworkaccessdatabackend_p.h" #include "qnetworkaccessdebugpipebackend_p.h" +#include "qfilenetworkreply_p.h" #include "QtCore/qbuffer.h" #include "QtCore/qurl.h" @@ -681,6 +682,17 @@ QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Opera QIODevice *outgoingData) { Q_D(QNetworkAccessManager); + + // fast path for GET on file:// URLs + // Also if the scheme is empty we consider it a file. + // The QNetworkAccessFileBackend will right now only be used + // for PUT or qrc:// + if (op == QNetworkAccessManager::GetOperation + && (req.url().scheme() == QLatin1String("file") + || req.url().scheme().isEmpty())) { + return new QFileNetworkReply(this, req); + } + QNetworkRequest request = req; if (!request.header(QNetworkRequest::ContentLengthHeader).isValid() && outgoingData && !outgoingData->isSequential()) { diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp index 86195c6..c91c608 100644 --- a/src/network/access/qnetworkrequest.cpp +++ b/src/network/access/qnetworkrequest.cpp @@ -48,6 +48,8 @@ #include "QtCore/qlocale.h" #include "QtCore/qdatetime.h" +#include <ctype.h> + QT_BEGIN_NAMESPACE /*! @@ -606,26 +608,25 @@ static QNetworkRequest::KnownHeaders parseHeaderName(const QByteArray &headerNam { // headerName is not empty here - QByteArray lower = headerName.toLower(); - switch (lower.at(0)) { + switch (tolower(headerName.at(0))) { case 'c': - if (lower == "content-type") + if (qstricmp(headerName.constData(), "content-type") == 0) return QNetworkRequest::ContentTypeHeader; - else if (lower == "content-length") + else if (qstricmp(headerName.constData(), "content-length") == 0) return QNetworkRequest::ContentLengthHeader; - else if (lower == "cookie") + else if (qstricmp(headerName.constData(), "cookie") == 0) return QNetworkRequest::CookieHeader; break; case 'l': - if (lower == "location") + if (qstricmp(headerName.constData(), "location") == 0) return QNetworkRequest::LocationHeader; - else if (lower == "last-modified") + else if (qstricmp(headerName.constData(), "last-modified") == 0) return QNetworkRequest::LastModifiedHeader; break; case 's': - if (lower == "set-cookie") + if (qstricmp(headerName.constData(), "set-cookie") == 0) return QNetworkRequest::SetCookieHeader; break; } @@ -697,11 +698,10 @@ static QVariant parseHeaderValue(QNetworkRequest::KnownHeaders header, const QBy QNetworkHeadersPrivate::RawHeadersList::ConstIterator QNetworkHeadersPrivate::findRawHeader(const QByteArray &key) const { - QByteArray lowerKey = key.toLower(); RawHeadersList::ConstIterator it = rawHeaders.constBegin(); RawHeadersList::ConstIterator end = rawHeaders.constEnd(); for ( ; it != end; ++it) - if (it->first.toLower() == lowerKey) + if (qstricmp(it->first.constData(), key.constData()) == 0) return it; return end; // not found @@ -775,10 +775,9 @@ void QNetworkHeadersPrivate::setCookedHeader(QNetworkRequest::KnownHeaders heade void QNetworkHeadersPrivate::setRawHeaderInternal(const QByteArray &key, const QByteArray &value) { - QByteArray lowerKey = key.toLower(); RawHeadersList::Iterator it = rawHeaders.begin(); while (it != rawHeaders.end()) { - if (it->first.toLower() == lowerKey) + if (qstricmp(it->first.constData(), key.constData()) == 0) it = rawHeaders.erase(it); else ++it; @@ -805,6 +804,68 @@ void QNetworkHeadersPrivate::parseAndSetHeader(const QByteArray &key, const QByt } } +// Fast month string to int conversion. This code +// assumes that the Month name is correct and that +// the string is at least three chars long. +static int name_to_month(const char* month_str) +{ + switch (month_str[0]) { + case 'J': + switch (month_str[1]) { + case 'a': + return 1; + break; + case 'u': + switch (month_str[2] ) { + case 'n': + return 6; + break; + case 'l': + return 7; + break; + } + } + break; + case 'F': + return 2; + break; + case 'M': + switch (month_str[2] ) { + case 'r': + return 3; + break; + case 'y': + return 5; + break; + } + break; + case 'A': + switch (month_str[1]) { + case 'p': + return 4; + break; + case 'u': + return 8; + break; + } + break; + case 'O': + return 10; + break; + case 'S': + return 9; + break; + case 'N': + return 11; + break; + case 'D': + return 12; + break; + } + + return 0; +} + QDateTime QNetworkHeadersPrivate::fromHttpDate(const QByteArray &value) { // HTTP dates have three possible formats: @@ -820,16 +881,20 @@ QDateTime QNetworkHeadersPrivate::fromHttpDate(const QByteArray &value) // no comma -> asctime(3) format dt = QDateTime::fromString(QString::fromLatin1(value), Qt::TextDate); } else { - // eat the weekday, the comma and the space following it - QString sansWeekday = QString::fromLatin1(value.constData() + pos + 2); - - QLocale c = QLocale::c(); - if (pos == 3) - // must be RFC 1123 date - dt = c.toDateTime(sansWeekday, QLatin1String("dd MMM yyyy hh:mm:ss 'GMT")); - else + // Use sscanf over QLocal/QDateTimeParser for speed reasons. See the + // QtWebKit performance benchmarks to get an idea. + if (pos == 3) { + char month_name[4]; + int day, year, hour, minute, second; + if (sscanf(value.constData(), "%*3s, %d %3s %d %d:%d:%d 'GMT'", &day, month_name, &year, &hour, &minute, &second) == 6) + dt = QDateTime(QDate(year, name_to_month(month_name), day), QTime(hour, minute, second)); + } else { + QLocale c = QLocale::c(); + // eat the weekday, the comma and the space following it + QString sansWeekday = QString::fromLatin1(value.constData() + pos + 2); // must be RFC 850 date dt = c.toDateTime(sansWeekday, QLatin1String("dd-MMM-yy hh:mm:ss 'GMT'")); + } } #endif // QT_NO_DATESTRING diff --git a/src/opengl/gl2paintengineex/qtriangulatingstroker.cpp b/src/opengl/gl2paintengineex/qtriangulatingstroker.cpp index 1163eba..1478b09 100644 --- a/src/opengl/gl2paintengineex/qtriangulatingstroker.cpp +++ b/src/opengl/gl2paintengineex/qtriangulatingstroker.cpp @@ -61,6 +61,9 @@ void QTriangulatingStroker::endCapOrJoinClosed(const qreal *start, const qreal * } else { endCap(cur); } + int count = m_vertices.size(); + m_vertices.add(m_vertices.at(count-2)); + m_vertices.add(m_vertices.at(count-1)); } @@ -144,7 +147,6 @@ void QTriangulatingStroker::process(const QVectorPath &path, const QPen &pen) bool endsAtStart = startPts[0] == *(endPts-2) && startPts[1] == *(endPts-1); - Qt::PenCapStyle cap = m_cap_style; if (endsAtStart || path.hasImplicitClose()) m_cap_style = Qt::FlatCap; moveTo(pts); @@ -166,7 +168,7 @@ void QTriangulatingStroker::process(const QVectorPath &path, const QPen &pen) switch (*types) { case QPainterPath::MoveToElement: { if (pts != path.points()) - endCapOrJoinClosed(startPts, pts, path.hasImplicitClose(), endsAtStart); + endCapOrJoinClosed(startPts, pts-2, path.hasImplicitClose(), endsAtStart); startPts = pts; int end = (endPts - pts) / 2; @@ -244,8 +246,6 @@ void QTriangulatingStroker::cubicTo(const qreal *pts) m_nvy = vy; } - - static void qdashprocessor_moveTo(qreal x, qreal y, void *data) { ((QDashedStrokeProcessor *) data)->addElement(QPainterPath::MoveToElement, x, y); @@ -279,12 +279,12 @@ void QDashedStrokeProcessor::process(const QVectorPath &path, const QPen &pen) m_points.reset(); m_types.reset(); - qreal width = pen.width(); + qreal width = qpen_widthf(pen); if (width == 0) width = 1; m_dash_stroker.setDashPattern(pen.dashPattern()); - m_dash_stroker.setStrokeWidth(width); + m_dash_stroker.setStrokeWidth(pen.isCosmetic() ? width * m_inv_scale : width); m_dash_stroker.setMiterLimit(pen.miterLimit()); qreal curvyness = sqrt(width) * m_inv_scale / 8; diff --git a/src/opengl/gl2paintengineex/qtriangulatingstroker_p.h b/src/opengl/gl2paintengineex/qtriangulatingstroker_p.h index defa3f1..a0117d5 100644 --- a/src/opengl/gl2paintengineex/qtriangulatingstroker_p.h +++ b/src/opengl/gl2paintengineex/qtriangulatingstroker_p.h @@ -188,10 +188,6 @@ inline void QTriangulatingStroker::endCap(const qreal *pts) break; default: break; // to shut gcc up... } - - int count = m_vertices.size(); - m_vertices.add(m_vertices.at(count-2)); - m_vertices.add(m_vertices.at(count-1)); } diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 8063fc8..d5ca218 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -184,8 +184,13 @@ public: engineType = QPaintEngine::OpenGL2; #else // We can't do this in the constructor for this object because it - // needs to be called *before* the QApplication constructor + // needs to be called *before* the QApplication constructor. + // Also check for the FragmentProgram extension in conjunction with + // the 2.0 version flag, to cover the case where we export the display + // from an old GL 1.1 server to a GL 2.x client. In that case we can't + // use GL 2.0. if ((QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_2_0) + && (QGLExtensions::glExtensions & QGLExtensions::FragmentProgram) && qgetenv("QT_GL_USE_OPENGL1ENGINE").isEmpty()) engineType = QPaintEngine::OpenGL2; else @@ -2170,8 +2175,8 @@ QGLTexture* QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G int tx_h = qt_next_power_of_two(image.height()); QImage img = image; - if (( !(QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_2_0) && - !(QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_ES_Version_2_0) ) + if (!(QGLExtensions::glExtensions & QGLExtensions::NPOTTextures) + && !(QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_ES_Version_2_0) && (target == GL_TEXTURE_2D && (tx_w != image.width() || tx_h != image.height()))) { img = img.scaled(tx_w, tx_h); @@ -2192,9 +2197,9 @@ QGLTexture* QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G bool genMipmap = false; #endif if (glFormat.directRendering() - && QGLExtensions::glExtensions & QGLExtensions::GenerateMipmap + && (QGLExtensions::glExtensions & QGLExtensions::GenerateMipmap) && target == GL_TEXTURE_2D - && options & QGLContext::MipmapBindOption) + && (options & QGLContext::MipmapBindOption)) { #ifdef QGL_BIND_TEXTURE_DEBUG printf(" - generating mipmaps (%d ms)\n", time.elapsed()); @@ -2220,7 +2225,7 @@ QGLTexture* QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G bool premul = options & QGLContext::PremultipliedAlphaBindOption; GLenum externalFormat; GLuint pixel_type; - if (QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_1_2) { + if (QGLExtensions::glExtensions & QGLExtensions::BGRATextureFormat) { externalFormat = GL_BGRA; pixel_type = GL_UNSIGNED_INT_8_8_8_8_REV; } else { @@ -3030,7 +3035,7 @@ void QGLContext::setValid(bool valid) bool QGLContext::isSharing() const { Q_D(const QGLContext); - return d->sharing; + return d->group->isSharing(); } QGLFormat QGLContext::format() const @@ -4886,54 +4891,59 @@ QGLWidget::QGLWidget(QGLContext *context, QWidget *parent, void QGLExtensions::init_extensions() { - QString extensions = QLatin1String(reinterpret_cast<const char *>(glGetString(GL_EXTENSIONS))); - if (extensions.contains(QLatin1String("texture_rectangle"))) + QList<QByteArray> extensions = QByteArray(reinterpret_cast<const char *>(glGetString(GL_EXTENSIONS))).split(' '); + if (extensions.contains("GL_ARB_texture_rectangle")) glExtensions |= TextureRectangle; - if (extensions.contains(QLatin1String("multisample"))) + if (extensions.contains("GL_ARB_multisample")) glExtensions |= SampleBuffers; - if (extensions.contains(QLatin1String("generate_mipmap"))) + if (extensions.contains("GL_SGIS_generate_mipmap")) glExtensions |= GenerateMipmap; - if (extensions.contains(QLatin1String("texture_compression_s3tc"))) + if (extensions.contains("GL_EXT_texture_compression_s3tc")) glExtensions |= TextureCompression; - if (extensions.contains(QLatin1String("ARB_fragment_program"))) + if (extensions.contains("GL_ARB_fragment_program")) glExtensions |= FragmentProgram; - if (extensions.contains(QLatin1String("mirrored_repeat"))) + if (extensions.contains("GL_ARB_texture_mirrored_repeat")) glExtensions |= MirroredRepeat; - if (extensions.contains(QLatin1String("EXT_framebuffer_object"))) + if (extensions.contains("GL_EXT_framebuffer_object")) glExtensions |= FramebufferObject; - if (extensions.contains(QLatin1String("EXT_stencil_two_side"))) + if (extensions.contains("GL_EXT_stencil_two_side")) glExtensions |= StencilTwoSide; - if (extensions.contains(QLatin1String("EXT_stencil_wrap"))) + if (extensions.contains("GL_EXT_stencil_wrap")) glExtensions |= StencilWrap; - if (extensions.contains(QLatin1String("EXT_packed_depth_stencil"))) + if (extensions.contains("GL_EXT_packed_depth_stencil")) glExtensions |= PackedDepthStencil; - if (extensions.contains(QLatin1String("GL_NV_float_buffer"))) + if (extensions.contains("GL_NV_float_buffer")) glExtensions |= NVFloatBuffer; - if (extensions.contains(QLatin1String("ARB_pixel_buffer_object"))) + if (extensions.contains("GL_ARB_pixel_buffer_object")) glExtensions |= PixelBufferObject; #if defined(QT_OPENGL_ES_2) glExtensions |= FramebufferObject; glExtensions |= GenerateMipmap; #endif #if defined(QT_OPENGL_ES_1) || defined(QT_OPENGL_ES_1_CL) - if (extensions.contains(QLatin1String("OES_framebuffer_object"))) + if (extensions.contains("GL_OES_framebuffer_object")) glExtensions |= FramebufferObject; #endif #if defined(QT_OPENGL_ES) - if (extensions.contains(QLatin1String("OES_packed_depth_stencil"))) + if (extensions.contains("GL_OES_packed_depth_stencil")) glExtensions |= PackedDepthStencil; #endif - if (extensions.contains(QLatin1String("ARB_framebuffer_object"))) { + if (extensions.contains("GL_ARB_framebuffer_object")) { // ARB_framebuffer_object also includes EXT_framebuffer_blit. glExtensions |= FramebufferObject; glExtensions |= FramebufferBlit; } - if (extensions.contains(QLatin1String("EXT_framebuffer_blit"))) + + if (extensions.contains("GL_EXT_framebuffer_blit")) glExtensions |= FramebufferBlit; - if (extensions.contains(QLatin1String("GL_ARB_texture_non_power_of_two"))) + if (extensions.contains("GL_ARB_texture_non_power_of_two")) glExtensions |= NPOTTextures; + if (extensions.contains("GL_EXT_bgra")) + glExtensions |= BGRATextureFormat; + + QGLContext cx(QGLFormat::defaultFormat()); if (glExtensions & TextureCompression) { qt_glCompressedTexImage2DARB = (pfn_glCompressedTexImage2DARB) cx.getProcAddress(QLatin1String("glCompressedTexImage2DARB")); diff --git a/src/opengl/qgl_mac.mm b/src/opengl/qgl_mac.mm index 063082b..4dd822d 100644 --- a/src/opengl/qgl_mac.mm +++ b/src/opengl/qgl_mac.mm @@ -460,6 +460,7 @@ void QGLContext::reset() if (d->cx) aglDestroyContext((AGLContext)d->cx); #else + QMacCocoaAutoReleasePool pool; [static_cast<NSOpenGLContext *>(d->cx) release]; #endif d->cx = 0; diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index 9a17c67..8e472e5 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -233,6 +233,7 @@ public: QGLExtensionFuncs &extensionFuncs() {return m_extensionFuncs;} const QGLContext *context() const {return m_context;} + bool isSharing() const { return m_shares.size() >= 2; } void addGuard(QGLSharedResourceGuard *guard); void removeGuard(QGLSharedResourceGuard *guard); @@ -374,7 +375,8 @@ public: NVFloatBuffer = 0x00000400, PixelBufferObject = 0x00000800, FramebufferBlit = 0x00001000, - NPOTTextures = 0x00002000 + NPOTTextures = 0x00002000, + BGRATextureFormat = 0x00004000 }; Q_DECLARE_FLAGS(Extensions, Extension) diff --git a/src/opengl/qgl_qws.cpp b/src/opengl/qgl_qws.cpp index 5e59975..a189c20 100644 --- a/src/opengl/qgl_qws.cpp +++ b/src/opengl/qgl_qws.cpp @@ -206,6 +206,9 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) d->eglContext = 0; return false; } + d->sharing = d->eglContext->isSharing(); + if (d->sharing && shareContext) + const_cast<QGLContext *>(shareContext)->d_func()->sharing = true; #if defined(EGL_VERSION_1_1) if (d->glFormat.swapInterval() != -1 && devType == QInternal::Widget) diff --git a/src/opengl/qgl_wince.cpp b/src/opengl/qgl_wince.cpp index fea2d3a..2553110 100644 --- a/src/opengl/qgl_wince.cpp +++ b/src/opengl/qgl_wince.cpp @@ -166,6 +166,9 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) d->eglContext = 0; return false; } + d->sharing = d->eglContext->isSharing(); + if (d->sharing && shareContext) + const_cast<QGLContext *>(shareContext)->d_func()->sharing = true; #if defined(EGL_VERSION_1_1) if (d->glFormat.swapInterval() != -1 && devType == QInternal::Widget) diff --git a/src/opengl/qgl_x11.cpp b/src/opengl/qgl_x11.cpp index 899047a..a037282 100644 --- a/src/opengl/qgl_x11.cpp +++ b/src/opengl/qgl_x11.cpp @@ -343,8 +343,8 @@ void* qglx_getProcAddress(const char* procName) static bool triedResolvingGlxGetProcAddress = false; if (!triedResolvingGlxGetProcAddress) { triedResolvingGlxGetProcAddress = true; - QString glxExt = QLatin1String(glXGetClientString(QX11Info::display(), GLX_EXTENSIONS)); - if (glxExt.contains(QLatin1String("GLX_ARB_get_proc_address"))) { + QList<QByteArray> glxExt = QByteArray(glXGetClientString(QX11Info::display(), GLX_EXTENSIONS)).split(' '); + if (glxExt.contains("GLX_ARB_get_proc_address")) { #if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) void *handle = dlopen(NULL, RTLD_LAZY); if (handle) { @@ -523,8 +523,8 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) if (!d->gpm) return false; } - QString glxExt = QLatin1String(glXGetClientString(QX11Info::display(), GLX_EXTENSIONS)); - if (glxExt.contains(QLatin1String("GLX_SGI_video_sync"))) { + QList<QByteArray> glxExt = QByteArray(glXQueryExtensionsString(xinfo->display(), xinfo->screen())).split(' '); + if (glxExt.contains("GLX_SGI_video_sync")) { if (d->glFormat.swapInterval() == -1) d->glFormat.setSwapInterval(0); } else { @@ -874,8 +874,9 @@ void QGLContext::swapBuffers() const static qt_glXWaitVideoSyncSGI glXWaitVideoSyncSGI = 0; static bool resolved = false; if (!resolved) { - QString glxExt = QLatin1String(glXGetClientString(QX11Info::display(), GLX_EXTENSIONS)); - if (glxExt.contains(QLatin1String("GLX_SGI_video_sync"))) { + const QX11Info *xinfo = qt_x11Info(d->paintDevice); + QList<QByteArray> glxExt = QByteArray(glXQueryExtensionsString(xinfo->display(), xinfo->screen())).split(' '); + if (glxExt.contains("GLX_SGI_video_sync")) { glXGetVideoSyncSGI = (qt_glXGetVideoSyncSGI)qglx_getProcAddress("glXGetVideoSyncSGI"); glXWaitVideoSyncSGI = (qt_glXWaitVideoSyncSGI)qglx_getProcAddress("glXWaitVideoSyncSGI"); } @@ -1106,8 +1107,8 @@ void *QGLContext::getProcAddress(const QString &proc) const if (resolved && !glXGetProcAddressARB) return 0; if (!glXGetProcAddressARB) { - QString glxExt = QLatin1String(glXGetClientString(QX11Info::display(), GLX_EXTENSIONS)); - if (glxExt.contains(QLatin1String("GLX_ARB_get_proc_address"))) { + QList<QByteArray> glxExt = QByteArray(glXGetClientString(QX11Info::display(), GLX_EXTENSIONS)).split(' '); + if (glxExt.contains("GLX_ARB_get_proc_address")) { #if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) void *handle = dlopen(NULL, RTLD_LAZY); if (handle) { @@ -1594,7 +1595,7 @@ typedef void (*qt_glXReleaseTexImageEXT)(Display*, GLXDrawable, int); static qt_glXBindTexImageEXT glXBindTexImageEXT = 0; static qt_glXReleaseTexImageEXT glXReleaseTexImageEXT = 0; -bool qt_resolveTextureFromPixmap() +static bool qt_resolveTextureFromPixmap(QPaintDevice *paintDevice) { static bool resolvedTextureFromPixmap = false; @@ -1607,9 +1608,9 @@ bool qt_resolveTextureFromPixmap() { return false; // Can't use TFP without NPOT } - - QString glxExt = QLatin1String(glXGetClientString(QX11Info::display(), GLX_EXTENSIONS)); - if (glxExt.contains(QLatin1String("GLX_EXT_texture_from_pixmap"))) { + const QX11Info *xinfo = qt_x11Info(paintDevice); + QList<QByteArray> glxExt = QByteArray(glXQueryExtensionsString(xinfo->display(), xinfo->screen())).split(' '); + if (glxExt.contains("GLX_EXT_texture_from_pixmap")) { glXBindTexImageEXT = (qt_glXBindTexImageEXT) qglx_getProcAddress("glXBindTexImageEXT"); glXReleaseTexImageEXT = (qt_glXReleaseTexImageEXT) qglx_getProcAddress("glXReleaseTexImageEXT"); } @@ -1630,7 +1631,7 @@ QGLTexture *QGLContextPrivate::bindTextureFromNativePixmap(QPixmapData *pmd, con Q_ASSERT(pmd->classId() == QPixmapData::X11Class); - if (!qt_resolveTextureFromPixmap()) + if (!qt_resolveTextureFromPixmap(paintDevice)) return 0; QX11PixmapData *pixmapData = static_cast<QX11PixmapData*>(pmd); diff --git a/src/opengl/qgl_x11egl.cpp b/src/opengl/qgl_x11egl.cpp index 9b20297..b51c239 100644 --- a/src/opengl/qgl_x11egl.cpp +++ b/src/opengl/qgl_x11egl.cpp @@ -115,6 +115,9 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) d->eglContext = 0; return false; } + d->sharing = d->eglContext->isSharing(); + if (d->sharing && shareContext) + const_cast<QGLContext *>(shareContext)->d_func()->sharing = true; #if defined(EGL_VERSION_1_1) if (d->glFormat.swapInterval() != -1 && devType == QInternal::Widget) diff --git a/src/opengl/qglpixelbuffer_egl.cpp b/src/opengl/qglpixelbuffer_egl.cpp index 744fbd4..de08655 100644 --- a/src/opengl/qglpixelbuffer_egl.cpp +++ b/src/opengl/qglpixelbuffer_egl.cpp @@ -72,37 +72,53 @@ bool QGLPixelBufferPrivate::init(const QSize &size, const QGLFormat &f, QGLWidge return false; } + // Find the shared context. + QEglContext *shareContext = 0; + if (shareWidget && shareWidget->d_func()->glcx) + shareContext = shareWidget->d_func()->glcx->d_func()->eglContext; + // Choose an appropriate configuration. We use the best format // we can find, even if it is greater than the requested format. // We try for a pbuffer that is capable of texture rendering if possible. - QEglProperties configProps; - qt_egl_set_format(configProps, QInternal::Pbuffer, f); - configProps.setRenderableType(ctx->api()); - bool ok = false; + textureFormat = EGL_NONE; + if (shareContext) { + // Use the same configuration as the widget we are sharing with. + ctx->setConfig(shareContext->config()); +#if QGL_RENDER_TEXTURE + EGLint value = EGL_FALSE; + if (ctx->configAttrib(EGL_BIND_TO_TEXTURE_RGBA, &value) && value) + textureFormat = EGL_TEXTURE_RGBA; + else if (ctx->configAttrib(EGL_BIND_TO_TEXTURE_RGB, &value) && value) + textureFormat = EGL_TEXTURE_RGB; +#endif + } else { + QEglProperties configProps; + qt_egl_set_format(configProps, QInternal::Pbuffer, f); + configProps.setRenderableType(ctx->api()); + bool ok = false; #if QGL_RENDER_TEXTURE - textureFormat = EGL_TEXTURE_RGBA; - configProps.setValue(EGL_BIND_TO_TEXTURE_RGBA, EGL_TRUE); - ok = ctx->chooseConfig(configProps, QEgl::BestPixelFormat); - if (!ok) { - // Try again with RGB texture rendering. - textureFormat = EGL_TEXTURE_RGB; - configProps.removeValue(EGL_BIND_TO_TEXTURE_RGBA); - configProps.setValue(EGL_BIND_TO_TEXTURE_RGB, EGL_TRUE); + textureFormat = EGL_TEXTURE_RGBA; + configProps.setValue(EGL_BIND_TO_TEXTURE_RGBA, EGL_TRUE); ok = ctx->chooseConfig(configProps, QEgl::BestPixelFormat); if (!ok) { - // One last try for a pbuffer with no texture rendering. - configProps.removeValue(EGL_BIND_TO_TEXTURE_RGB); - textureFormat = EGL_NONE; + // Try again with RGB texture rendering. + textureFormat = EGL_TEXTURE_RGB; + configProps.removeValue(EGL_BIND_TO_TEXTURE_RGBA); + configProps.setValue(EGL_BIND_TO_TEXTURE_RGB, EGL_TRUE); + ok = ctx->chooseConfig(configProps, QEgl::BestPixelFormat); + if (!ok) { + // One last try for a pbuffer with no texture rendering. + configProps.removeValue(EGL_BIND_TO_TEXTURE_RGB); + textureFormat = EGL_NONE; + } } - } -#else - textureFormat = EGL_NONE; #endif - if (!ok) { - if (!ctx->chooseConfig(configProps, QEgl::BestPixelFormat)) { - delete ctx; - ctx = 0; - return false; + if (!ok) { + if (!ctx->chooseConfig(configProps, QEgl::BestPixelFormat)) { + delete ctx; + ctx = 0; + return false; + } } } @@ -137,9 +153,6 @@ bool QGLPixelBufferPrivate::init(const QSize &size, const QGLFormat &f, QGLWidge } // Create a new context for the configuration. - QEglContext *shareContext = 0; - if (shareWidget && shareWidget->d_func()->glcx) - shareContext = shareWidget->d_func()->glcx->d_func()->eglContext; if (!ctx->createContext(shareContext)) { delete ctx; ctx = 0; diff --git a/src/opengl/qglpixmapfilter.cpp b/src/opengl/qglpixmapfilter.cpp index fcb0ea2..c478630 100644 --- a/src/opengl/qglpixmapfilter.cpp +++ b/src/opengl/qglpixmapfilter.cpp @@ -989,7 +989,7 @@ bool QGLPixmapDropShadowFilter::processGL(QPainter *painter, const QPointF &pos, // ensure GL_LINEAR filtering is used painter->setRenderHint(QPainter::SmoothPixmapTransform); filter->setOnPainter(painter); - engine->drawTexture(targetRect, fbo->texture(), fbo->size(), src.rect().translated(0, fbo->height() - src.height())); + engine->drawTexture(targetRect, fbo->texture(), fbo->size(), QRectF(0, fbo->height() - targetRect.height(), targetRect.width(), targetRect.height())); filter->removeFromPainter(painter); painter->restore(); diff --git a/src/openvg/qpixmapdata_vg_p.h b/src/openvg/qpixmapdata_vg_p.h index f552c7b..f6fac88 100644 --- a/src/openvg/qpixmapdata_vg_p.h +++ b/src/openvg/qpixmapdata_vg_p.h @@ -89,10 +89,10 @@ public: // Return the VGImage form of this pixmap, creating it if necessary. // This assumes that there is a VG context current. - VGImage toVGImage(); + virtual VGImage toVGImage(); // Return the VGImage form for a specific opacity setting. - VGImage toVGImage(qreal opacity); + virtual VGImage toVGImage(qreal opacity); QSize size() const { return QSize(w, h); } @@ -108,7 +108,7 @@ protected: void cleanup(); #endif -private: +protected: VGImage vgImage; VGImage vgImageOpacity; qreal cachedOpacity; diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp index c9a010f..021d52e 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp @@ -138,7 +138,7 @@ void QDirectFBWindowSurface::createWindow(const QRect &rect) DFBWindowDescription description; memset(&description, 0, sizeof(DFBWindowDescription)); - description.caps = DWCAPS_NODECORATION|DWCAPS_DOUBLEBUFFER; + description.caps = DWCAPS_NODECORATION; description.flags = DWDESC_CAPS|DWDESC_SURFACE_CAPS|DWDESC_PIXELFORMAT|DWDESC_HEIGHT|DWDESC_WIDTH|DWDESC_POSX|DWDESC_POSY; #if (Q_DIRECTFB_VERSION >= 0x010200) description.flags |= DWDESC_OPTIONS; diff --git a/src/plugins/graphicssystems/trace/qgraphicssystem_trace.cpp b/src/plugins/graphicssystems/trace/qgraphicssystem_trace.cpp index 8756ecb..fb6f5ea 100644 --- a/src/plugins/graphicssystems/trace/qgraphicssystem_trace.cpp +++ b/src/plugins/graphicssystems/trace/qgraphicssystem_trace.cpp @@ -82,6 +82,7 @@ QTraceWindowSurface::~QTraceWindowSurface() QFile outputFile(QString(QLatin1String("qtgraphics-%0.trace")).arg(winId)); if (outputFile.open(QIODevice::WriteOnly)) { QDataStream out(&outputFile); + out.writeBytes("qttrace", 7); out << *buffer << updates; } delete buffer; diff --git a/src/plugins/imageformats/jpeg/qjpeghandler.cpp b/src/plugins/imageformats/jpeg/qjpeghandler.cpp index 6b2f885..54bbcda 100644 --- a/src/plugins/imageformats/jpeg/qjpeghandler.cpp +++ b/src/plugins/imageformats/jpeg/qjpeghandler.cpp @@ -196,52 +196,52 @@ inline QRgb *QImageSmoothScaler::scanLine(const int line, const QImage *src) QImage QImageSmoothScaler::scale() { - long SCALE; - long HALFSCALE; - QRgb *xelrow = 0; - QRgb *tempxelrow = 0; - QRgb *xP; - QRgb *nxP; - int row, rowsread; - int col, needtoreadrow; - uchar maxval = 255; - qreal xscale, yscale; - long sxscale, syscale; - long fracrowtofill, fracrowleft; - long *as; - long *rs; - long *gs; - long *bs; - int rowswritten = 0; - QImage dst; + long SCALE; + long HALFSCALE; + QRgb *xelrow = 0; + QRgb *tempxelrow = 0; + QRgb *xP; + QRgb *nxP; + int row, rowsread; + int col, needtoreadrow; + uchar maxval = 255; + qreal xscale, yscale; + long sxscale, syscale; + long fracrowtofill, fracrowleft; + long *as; + long *rs; + long *gs; + long *bs; + int rowswritten = 0; + QImage dst; if (d->cols > 4096) { - SCALE = 4096; - HALFSCALE = 2048; + SCALE = 4096; + HALFSCALE = 2048; } else { - int fac = 4096; - while (d->cols * fac > 4096) { - fac /= 2; - } + int fac = 4096; + while (d->cols * fac > 4096) + fac /= 2; - SCALE = fac * d->cols; - HALFSCALE = fac * d->cols / 2; + SCALE = fac * d->cols; + HALFSCALE = fac * d->cols / 2; } - xscale = (qreal) d->newcols / (qreal) d->cols; - yscale = (qreal) d->newrows / (qreal) d->rows; + xscale = (qreal)d->newcols / (qreal)d->cols; + yscale = (qreal)d->newrows / (qreal)d->rows; sxscale = (long)(xscale * SCALE); syscale = (long)(yscale * SCALE); - if ( d->newrows != d->rows ) /* shortcut Y scaling if possible */ - tempxelrow = new QRgb[d->cols]; + // shortcut Y scaling if possible + if (d->newrows != d->rows) + tempxelrow = new QRgb[d->cols]; - if ( d->hasAlpha ) { - as = new long[d->cols]; - for ( col = 0; col < d->cols; ++col ) - as[col] = HALFSCALE; + if (d->hasAlpha) { + as = new long[d->cols]; + for (col = 0; col < d->cols; ++col) + as[col] = HALFSCALE; } else { - as = 0; + as = 0; } rs = new long[d->cols]; gs = new long[d->cols]; @@ -249,205 +249,217 @@ QImage QImageSmoothScaler::scale() rowsread = 0; fracrowleft = syscale; needtoreadrow = 1; - for ( col = 0; col < d->cols; ++col ) - rs[col] = gs[col] = bs[col] = HALFSCALE; + for (col = 0; col < d->cols; ++col) + rs[col] = gs[col] = bs[col] = HALFSCALE; fracrowtofill = SCALE; - dst = QImage( d->newcols, d->newrows, d->hasAlpha ? QImage::Format_ARGB32 : QImage::Format_RGB32 ); - - for ( row = 0; row < d->newrows; ++row ) { - /* First scale Y from xelrow into tempxelrow. */ - if ( d->newrows == d->rows ) { - /* shortcut Y scaling if possible */ - tempxelrow = xelrow = scanLine(rowsread++, d->src); - } else { - while ( fracrowleft < fracrowtofill ) { - if ( needtoreadrow && rowsread < d->rows ) { - xelrow = scanLine(rowsread++, d->src); - } - for ( col = 0, xP = xelrow; col < d->cols; ++col, ++xP ) { - if (as) { - as[col] += fracrowleft * qAlpha( *xP ); - rs[col] += fracrowleft * qRed( *xP ) * qAlpha( *xP ) / 255; - gs[col] += fracrowleft * qGreen( *xP ) * qAlpha( *xP ) / 255; - bs[col] += fracrowleft * qBlue( *xP ) * qAlpha( *xP ) / 255; - } else { - rs[col] += fracrowleft * qRed( *xP ); - gs[col] += fracrowleft * qGreen( *xP ); - bs[col] += fracrowleft * qBlue( *xP ); - } - } - fracrowtofill -= fracrowleft; - fracrowleft = syscale; - needtoreadrow = 1; - } - /* Now fracrowleft is >= fracrowtofill, so we can produce a row. */ - if ( needtoreadrow && rowsread < d->rows) { - xelrow = scanLine(rowsread++, d->src); - needtoreadrow = 0; - } - for ( col = 0, xP = xelrow, nxP = tempxelrow; - col < d->cols; ++col, ++xP, ++nxP ) - { - register long a, r, g, b; - - if ( as ) { - r = rs[col] + fracrowtofill * qRed( *xP ) * qAlpha( *xP ) / 255; - g = gs[col] + fracrowtofill * qGreen( *xP ) * qAlpha( *xP ) / 255; - b = bs[col] + fracrowtofill * qBlue( *xP ) * qAlpha( *xP ) / 255; - a = as[col] + fracrowtofill * qAlpha( *xP ); - if ( a ) { - r = r * 255 / a * SCALE; - g = g * 255 / a * SCALE; - b = b * 255 / a * SCALE; - } - } else { - r = rs[col] + fracrowtofill * qRed( *xP ); - g = gs[col] + fracrowtofill * qGreen( *xP ); - b = bs[col] + fracrowtofill * qBlue( *xP ); - a = 0; // unwarn - } - r /= SCALE; - if ( r > maxval ) r = maxval; - g /= SCALE; - if ( g > maxval ) g = maxval; - b /= SCALE; - if ( b > maxval ) b = maxval; - if ( as ) { - a /= SCALE; - if ( a > maxval ) a = maxval; - *nxP = qRgba( (int)r, (int)g, (int)b, (int)a ); - as[col] = HALFSCALE; - } else { - *nxP = qRgb( (int)r, (int)g, (int)b ); - } - rs[col] = gs[col] = bs[col] = HALFSCALE; - } - fracrowleft -= fracrowtofill; - if ( fracrowleft == 0 ) { - fracrowleft = syscale; - needtoreadrow = 1; - } - fracrowtofill = SCALE; - } + dst = QImage(d->newcols, d->newrows, d->hasAlpha ? QImage::Format_ARGB32 : QImage::Format_RGB32); - /* Now scale X from tempxelrow into dst and write it out. */ - if ( d->newcols == d->cols ) { - /* shortcut X scaling if possible */ - memcpy(dst.scanLine(rowswritten++), tempxelrow, d->newcols*4); - } else { - register long a, r, g, b; - register long fraccoltofill, fraccolleft = 0; - register int needcol; - - nxP = (QRgb*)dst.scanLine(rowswritten++); - fraccoltofill = SCALE; - a = r = g = b = HALFSCALE; - needcol = 0; - for ( col = 0, xP = tempxelrow; col < d->cols; ++col, ++xP ) { - fraccolleft = sxscale; - while ( fraccolleft >= fraccoltofill ) { - if ( needcol ) { - ++nxP; - a = r = g = b = HALFSCALE; - } - if ( as ) { - r += fraccoltofill * qRed( *xP ) * qAlpha( *xP ) / 255; - g += fraccoltofill * qGreen( *xP ) * qAlpha( *xP ) / 255; - b += fraccoltofill * qBlue( *xP ) * qAlpha( *xP ) / 255; - a += fraccoltofill * qAlpha( *xP ); - if ( a ) { - r = r * 255 / a * SCALE; - g = g * 255 / a * SCALE; - b = b * 255 / a * SCALE; - } - } else { - r += fraccoltofill * qRed( *xP ); - g += fraccoltofill * qGreen( *xP ); - b += fraccoltofill * qBlue( *xP ); - } - r /= SCALE; - if ( r > maxval ) r = maxval; - g /= SCALE; - if ( g > maxval ) g = maxval; - b /= SCALE; - if ( b > maxval ) b = maxval; - if (as) { - a /= SCALE; - if ( a > maxval ) a = maxval; - *nxP = qRgba( (int)r, (int)g, (int)b, (int)a ); - } else { - *nxP = qRgb( (int)r, (int)g, (int)b ); - } - fraccolleft -= fraccoltofill; - fraccoltofill = SCALE; - needcol = 1; - } - if ( fraccolleft > 0 ) { - if ( needcol ) { - ++nxP; - a = r = g = b = HALFSCALE; - needcol = 0; - } - if (as) { - a += fraccolleft * qAlpha( *xP ); - r += fraccolleft * qRed( *xP ) * qAlpha( *xP ) / 255; - g += fraccolleft * qGreen( *xP ) * qAlpha( *xP ) / 255; - b += fraccolleft * qBlue( *xP ) * qAlpha( *xP ) / 255; - } else { - r += fraccolleft * qRed( *xP ); - g += fraccolleft * qGreen( *xP ); - b += fraccolleft * qBlue( *xP ); - } - fraccoltofill -= fraccolleft; - } - } - if ( fraccoltofill > 0 ) { - --xP; - if (as) { - a += fraccolleft * qAlpha( *xP ); - r += fraccoltofill * qRed( *xP ) * qAlpha( *xP ) / 255; - g += fraccoltofill * qGreen( *xP ) * qAlpha( *xP ) / 255; - b += fraccoltofill * qBlue( *xP ) * qAlpha( *xP ) / 255; - if ( a ) { - r = r * 255 / a * SCALE; - g = g * 255 / a * SCALE; - b = b * 255 / a * SCALE; - } - } else { - r += fraccoltofill * qRed( *xP ); - g += fraccoltofill * qGreen( *xP ); - b += fraccoltofill * qBlue( *xP ); - } - } - if ( ! needcol ) { - r /= SCALE; - if ( r > maxval ) r = maxval; - g /= SCALE; - if ( g > maxval ) g = maxval; - b /= SCALE; - if ( b > maxval ) b = maxval; - if (as) { - a /= SCALE; - if ( a > maxval ) a = maxval; - *nxP = qRgba( (int)r, (int)g, (int)b, (int)a ); - } else { - *nxP = qRgb( (int)r, (int)g, (int)b ); - } - } - } + for (row = 0; row < d->newrows; ++row) { + // First scale Y from xelrow into tempxelrow. + if (d->newrows == d->rows) { + // shortcut Y scaling if possible + tempxelrow = xelrow = scanLine(rowsread++, d->src); + } else { + while (fracrowleft < fracrowtofill) { + if (needtoreadrow && rowsread < d->rows) + xelrow = scanLine(rowsread++, d->src); + for (col = 0, xP = xelrow; col < d->cols; ++col, ++xP) { + if (as) { + as[col] += fracrowleft * qAlpha(*xP); + rs[col] += fracrowleft * qRed(*xP) * qAlpha(*xP) / 255; + gs[col] += fracrowleft * qGreen(*xP) * qAlpha(*xP) / 255; + bs[col] += fracrowleft * qBlue(*xP) * qAlpha(*xP) / 255; + } else { + rs[col] += fracrowleft * qRed(*xP); + gs[col] += fracrowleft * qGreen(*xP); + bs[col] += fracrowleft * qBlue(*xP); + } + } + fracrowtofill -= fracrowleft; + fracrowleft = syscale; + needtoreadrow = 1; + } + // Now fracrowleft is >= fracrowtofill, so we can produce a row. + if (needtoreadrow && rowsread < d->rows) { + xelrow = scanLine(rowsread++, d->src); + needtoreadrow = 0; + } + for (col = 0, xP = xelrow, nxP = tempxelrow; col < d->cols; ++col, ++xP, ++nxP) { + register long a, r, g, b; + + if (as) { + r = rs[col] + fracrowtofill * qRed(*xP) * qAlpha(*xP) / 255; + g = gs[col] + fracrowtofill * qGreen(*xP) * qAlpha(*xP) / 255; + b = bs[col] + fracrowtofill * qBlue(*xP) * qAlpha(*xP) / 255; + a = as[col] + fracrowtofill * qAlpha(*xP); + if (a) { + r = r * 255 / a * SCALE; + g = g * 255 / a * SCALE; + b = b * 255 / a * SCALE; + } + } else { + r = rs[col] + fracrowtofill * qRed(*xP); + g = gs[col] + fracrowtofill * qGreen(*xP); + b = bs[col] + fracrowtofill * qBlue(*xP); + a = 0; // unwarn + } + r /= SCALE; + if (r > maxval) + r = maxval; + g /= SCALE; + if (g > maxval) + g = maxval; + b /= SCALE; + if (b > maxval) + b = maxval; + if (as) { + a /= SCALE; + if (a > maxval) + a = maxval; + *nxP = qRgba((int)r, (int)g, (int)b, (int)a); + as[col] = HALFSCALE; + } else { + *nxP = qRgb((int)r, (int)g, (int)b); + } + rs[col] = gs[col] = bs[col] = HALFSCALE; + } + fracrowleft -= fracrowtofill; + if (fracrowleft == 0) { + fracrowleft = syscale; + needtoreadrow = 1; + } + fracrowtofill = SCALE; + } + + // Now scale X from tempxelrow into dst and write it out. + if (d->newcols == d->cols) { + // shortcut X scaling if possible + memcpy(dst.scanLine(rowswritten++), tempxelrow, d->newcols * 4); + } else { + register long a, r, g, b; + register long fraccoltofill, fraccolleft = 0; + register int needcol; + + nxP = (QRgb *)dst.scanLine(rowswritten++); + QRgb *nxPEnd = nxP + d->newcols; + fraccoltofill = SCALE; + a = r = g = b = HALFSCALE; + needcol = 0; + for (col = 0, xP = tempxelrow; col < d->cols; ++col, ++xP) { + fraccolleft = sxscale; + while (fraccolleft >= fraccoltofill) { + if (needcol) { + ++nxP; + a = r = g = b = HALFSCALE; + } + if (as) { + r += fraccoltofill * qRed(*xP) * qAlpha(*xP) / 255; + g += fraccoltofill * qGreen(*xP) * qAlpha(*xP) / 255; + b += fraccoltofill * qBlue(*xP) * qAlpha(*xP) / 255; + a += fraccoltofill * qAlpha(*xP); + if (a) { + r = r * 255 / a * SCALE; + g = g * 255 / a * SCALE; + b = b * 255 / a * SCALE; + } + } else { + r += fraccoltofill * qRed(*xP); + g += fraccoltofill * qGreen(*xP); + b += fraccoltofill * qBlue(*xP); + } + r /= SCALE; + if (r > maxval) + r = maxval; + g /= SCALE; + if (g > maxval) + g = maxval; + b /= SCALE; + if (b > maxval) + b = maxval; + if (as) { + a /= SCALE; + if (a > maxval) + a = maxval; + *nxP = qRgba((int)r, (int)g, (int)b, (int)a); + } else { + *nxP = qRgb((int)r, (int)g, (int)b); + } + fraccolleft -= fraccoltofill; + fraccoltofill = SCALE; + needcol = 1; + } + if (fraccolleft > 0) { + if (needcol) { + ++nxP; + a = r = g = b = HALFSCALE; + needcol = 0; + } + if (as) { + a += fraccolleft * qAlpha(*xP); + r += fraccolleft * qRed(*xP) * qAlpha(*xP) / 255; + g += fraccolleft * qGreen(*xP) * qAlpha(*xP) / 255; + b += fraccolleft * qBlue(*xP) * qAlpha(*xP) / 255; + } else { + r += fraccolleft * qRed(*xP); + g += fraccolleft * qGreen(*xP); + b += fraccolleft * qBlue(*xP); + } + fraccoltofill -= fraccolleft; + } + } + if (fraccoltofill > 0) { + --xP; + if (as) { + a += fraccolleft * qAlpha(*xP); + r += fraccoltofill * qRed(*xP) * qAlpha(*xP) / 255; + g += fraccoltofill * qGreen(*xP) * qAlpha(*xP) / 255; + b += fraccoltofill * qBlue(*xP) * qAlpha(*xP) / 255; + if (a) { + r = r * 255 / a * SCALE; + g = g * 255 / a * SCALE; + b = b * 255 / a * SCALE; + } + } else { + r += fraccoltofill * qRed(*xP); + g += fraccoltofill * qGreen(*xP); + b += fraccoltofill * qBlue(*xP); + } + } + if (nxP < nxPEnd) { + r /= SCALE; + if (r > maxval) + r = maxval; + g /= SCALE; + if (g > maxval) + g = maxval; + b /= SCALE; + if (b > maxval) + b = maxval; + if (as) { + a /= SCALE; + if (a > maxval) + a = maxval; + *nxP = qRgba((int)r, (int)g, (int)b, (int)a); + } else { + *nxP = qRgb((int)r, (int)g, (int)b); + } + while (++nxP != nxPEnd) + nxP[0] = nxP[-1]; + } + } } - if ( d->newrows != d->rows && tempxelrow )// Robust, tempxelrow might be 0 1 day - delete [] tempxelrow; - if ( as ) // Avoid purify complaint - delete [] as; - if ( rs ) // Robust, rs might be 0 one day - delete [] rs; - if ( gs ) // Robust, gs might be 0 one day - delete [] gs; - if ( bs ) // Robust, bs might be 0 one day - delete [] bs; + if (d->newrows != d->rows && tempxelrow)// Robust, tempxelrow might be 0 1 day + delete [] tempxelrow; + if (as) // Avoid purify complaint + delete [] as; + if (rs) // Robust, rs might be 0 one day + delete [] rs; + if (gs) // Robust, gs might be 0 one day + delete [] gs; + if (bs) // Robust, bs might be 0 one day + delete [] bs; return dst; } diff --git a/src/plugins/imageformats/tiff/qtiffhandler.cpp b/src/plugins/imageformats/tiff/qtiffhandler.cpp index 3669be7..9538745 100644 --- a/src/plugins/imageformats/tiff/qtiffhandler.cpp +++ b/src/plugins/imageformats/tiff/qtiffhandler.cpp @@ -192,7 +192,14 @@ bool QTiffHandler::read(QImage *image) return false; } - if (photometric == PHOTOMETRIC_MINISBLACK || photometric == PHOTOMETRIC_MINISWHITE) { + uint16 bitPerSample; + if (!TIFFGetField(tiff, TIFFTAG_BITSPERSAMPLE, &bitPerSample)) { + TIFFClose(tiff); + return false; + } + + bool grayscale = photometric == PHOTOMETRIC_MINISBLACK || photometric == PHOTOMETRIC_MINISWHITE; + if (grayscale && bitPerSample == 1) { if (image->size() != QSize(width, height) || image->format() != QImage::Format_Mono) *image = QImage(width, height, QImage::Format_Mono); QVector<QRgb> colortable(2); @@ -208,42 +215,43 @@ bool QTiffHandler::read(QImage *image) if (!image->isNull()) { for (uint32 y=0; y<height; ++y) { if (TIFFReadScanline(tiff, image->scanLine(y), y, 0) < 0) { - TIFFClose(tiff); - return false; + TIFFClose(tiff); + return false; } } } } else { - uint16 bitPerSample; - if (!TIFFGetField(tiff, TIFFTAG_BITSPERSAMPLE, &bitPerSample)) { - TIFFClose(tiff); - return false; - } - if (photometric == PHOTOMETRIC_PALETTE && bitPerSample == 8) { + if ((grayscale || photometric == PHOTOMETRIC_PALETTE) && bitPerSample == 8) { if (image->size() != QSize(width, height) || image->format() != QImage::Format_Indexed8) *image = QImage(width, height, QImage::Format_Indexed8); if (!image->isNull()) { - // create the color table const uint16 tableSize = 256; - uint16 *redTable = static_cast<uint16 *>(qMalloc(tableSize * sizeof(uint16))); - uint16 *greenTable = static_cast<uint16 *>(qMalloc(tableSize * sizeof(uint16))); - uint16 *blueTable = static_cast<uint16 *>(qMalloc(tableSize * sizeof(uint16))); - if (!redTable || !greenTable || !blueTable) { - TIFFClose(tiff); - return false; - } - if (!TIFFGetField(tiff, TIFFTAG_COLORMAP, &redTable, &greenTable, &blueTable)) { - TIFFClose(tiff); - return false; - } - QVector<QRgb> qtColorTable(tableSize); - for (int i = 0; i<tableSize ;++i) { - const int red = redTable[i] / 257; - const int green = greenTable[i] / 257; - const int blue = blueTable[i] / 257; - qtColorTable[i] = qRgb(red, green, blue); + if (grayscale) { + for (int i = 0; i<tableSize; ++i) { + const int c = (photometric == PHOTOMETRIC_MINISBLACK) ? i : (255 - i); + qtColorTable[i] = qRgb(c, c, c); + } + } else { + // create the color table + uint16 *redTable = static_cast<uint16 *>(qMalloc(tableSize * sizeof(uint16))); + uint16 *greenTable = static_cast<uint16 *>(qMalloc(tableSize * sizeof(uint16))); + uint16 *blueTable = static_cast<uint16 *>(qMalloc(tableSize * sizeof(uint16))); + if (!redTable || !greenTable || !blueTable) { + TIFFClose(tiff); + return false; + } + if (!TIFFGetField(tiff, TIFFTAG_COLORMAP, &redTable, &greenTable, &blueTable)) { + TIFFClose(tiff); + return false; + } + for (int i = 0; i<tableSize ;++i) { + const int red = redTable[i] / 257; + const int green = greenTable[i] / 257; + const int blue = blueTable[i] / 257; + qtColorTable[i] = qRgb(red, green, blue); + } } image->setColorTable(qtColorTable); @@ -371,6 +379,20 @@ bool QTiffHandler::read(QImage *image) return true; } +static bool checkGrayscale(const QVector<QRgb> &colorTable) +{ + if (colorTable.size() != 256) + return false; + + const bool increasing = (colorTable.at(0) == 0xff000000); + for (int i = 0; i < 256; ++i) { + if (increasing && colorTable.at(i) != qRgb(i, i, i) + || !increasing && colorTable.at(i) != qRgb(255 - i, 255 - i, 255 - i)) + return false; + } + return true; +} + bool QTiffHandler::write(const QImage &image) { if (!device()->isWritable()) @@ -425,7 +447,8 @@ bool QTiffHandler::write(const QImage &image) if (image.colorTable().at(0) == 0xffffffff) photometric = PHOTOMETRIC_MINISWHITE; if (!TIFFSetField(tiff, TIFFTAG_PHOTOMETRIC, photometric) - || !TIFFSetField(tiff, TIFFTAG_COMPRESSION, compression == NoCompression ? COMPRESSION_NONE : COMPRESSION_CCITTRLE)) { + || !TIFFSetField(tiff, TIFFTAG_COMPRESSION, compression == NoCompression ? COMPRESSION_NONE : COMPRESSION_CCITTRLE) + || !TIFFSetField(tiff, TIFFTAG_BITSPERSAMPLE, 1)) { TIFFClose(tiff); return false; } @@ -450,43 +473,55 @@ bool QTiffHandler::write(const QImage &image) } TIFFClose(tiff); } else if (format == QImage::Format_Indexed8) { - if (!TIFFSetField(tiff, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_PALETTE) - || !TIFFSetField(tiff, TIFFTAG_COMPRESSION, compression == NoCompression ? COMPRESSION_NONE : COMPRESSION_PACKBITS) - || !TIFFSetField(tiff, TIFFTAG_BITSPERSAMPLE, 8)) { - TIFFClose(tiff); - return false; - } - //// write the color table - // allocate the color tables - uint16 *redTable = static_cast<uint16 *>(qMalloc(256 * sizeof(uint16))); - uint16 *greenTable = static_cast<uint16 *>(qMalloc(256 * sizeof(uint16))); - uint16 *blueTable = static_cast<uint16 *>(qMalloc(256 * sizeof(uint16))); - if (!redTable || !greenTable || !blueTable) { - TIFFClose(tiff); - return false; - } - - // set the color table const QVector<QRgb> colorTable = image.colorTable(); + bool isGrayscale = checkGrayscale(colorTable); + if (isGrayscale) { + uint16 photometric = PHOTOMETRIC_MINISBLACK; + if (image.colorTable().at(0) == 0xffffffff) + photometric = PHOTOMETRIC_MINISWHITE; + if (!TIFFSetField(tiff, TIFFTAG_PHOTOMETRIC, photometric) + || !TIFFSetField(tiff, TIFFTAG_COMPRESSION, compression == NoCompression ? COMPRESSION_NONE : COMPRESSION_PACKBITS) + || !TIFFSetField(tiff, TIFFTAG_BITSPERSAMPLE, 8)) { + TIFFClose(tiff); + return false; + } + } else { + if (!TIFFSetField(tiff, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_PALETTE) + || !TIFFSetField(tiff, TIFFTAG_COMPRESSION, compression == NoCompression ? COMPRESSION_NONE : COMPRESSION_PACKBITS) + || !TIFFSetField(tiff, TIFFTAG_BITSPERSAMPLE, 8)) { + TIFFClose(tiff); + return false; + } + //// write the color table + // allocate the color tables + uint16 *redTable = static_cast<uint16 *>(qMalloc(256 * sizeof(uint16))); + uint16 *greenTable = static_cast<uint16 *>(qMalloc(256 * sizeof(uint16))); + uint16 *blueTable = static_cast<uint16 *>(qMalloc(256 * sizeof(uint16))); + if (!redTable || !greenTable || !blueTable) { + TIFFClose(tiff); + return false; + } - const int tableSize = colorTable.size(); - Q_ASSERT(tableSize <= 256); - for (int i = 0; i<tableSize; ++i) { - const QRgb color = colorTable.at(i); - redTable[i] = qRed(color) * 257; - greenTable[i] = qGreen(color) * 257; - blueTable[i] = qBlue(color) * 257; - } + // set the color table + const int tableSize = colorTable.size(); + Q_ASSERT(tableSize <= 256); + for (int i = 0; i<tableSize; ++i) { + const QRgb color = colorTable.at(i); + redTable[i] = qRed(color) * 257; + greenTable[i] = qGreen(color) * 257; + blueTable[i] = qBlue(color) * 257; + } - const bool setColorTableSuccess = TIFFSetField(tiff, TIFFTAG_COLORMAP, redTable, greenTable, blueTable); + const bool setColorTableSuccess = TIFFSetField(tiff, TIFFTAG_COLORMAP, redTable, greenTable, blueTable); - qFree(redTable); - qFree(greenTable); - qFree(blueTable); + qFree(redTable); + qFree(greenTable); + qFree(blueTable); - if (!setColorTableSuccess) { - TIFFClose(tiff); - return false; + if (!setColorTableSuccess) { + TIFFClose(tiff); + return false; + } } //// write the data diff --git a/src/plugins/phonon/mmf/mmf.pro b/src/plugins/phonon/mmf/mmf.pro index ff27ea1..c070605 100644 --- a/src/plugins/phonon/mmf/mmf.pro +++ b/src/plugins/phonon/mmf/mmf.pro @@ -1,4 +1,99 @@ -TEMPLATE = subdirs -SUBDIRS = mmfphonondebug plugin +# MMF Phonon backend + +QT += phonon +TARGET = phonon_mmf +PHONON_MMF_DIR = $$QT_SOURCE_TREE/src/3rdparty/phonon/mmf + +# Uncomment the following line in order to use the CDrmPlayerUtility client +# API for audio playback, rather than CMdaAudioPlayerUtility. +#CONFIG += phonon_mmf_audio_drm + +phonon_mmf_audio_drm { + LIBS += -lDrmAudioPlayUtility + DEFINES += QT_PHONON_MMF_AUDIO_DRM +} else { + LIBS += -lmediaclientaudio +} + +# This is necessary because both epoc32/include and Phonon contain videoplayer.h. +# By making /epoc32/include the first SYSTEMINCLUDE, we ensure that +# '#include <videoplayer.h>' picks up the Symbian header, as intended. +PREPEND_INCLUDEPATH = /epoc32/include + +INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE + +HEADERS += \ + $$PHONON_MMF_DIR/abstractaudioeffect.h \ + $$PHONON_MMF_DIR/abstractmediaplayer.h \ + $$PHONON_MMF_DIR/abstractplayer.h \ + $$PHONON_MMF_DIR/ancestormovemonitor.h \ + $$PHONON_MMF_DIR/audioequalizer.h \ + $$PHONON_MMF_DIR/audiooutput.h \ + $$PHONON_MMF_DIR/audioplayer.h \ + $$PHONON_MMF_DIR/backend.h \ + $$PHONON_MMF_DIR/bassboost.h \ + $$PHONON_MMF_DIR/defs.h \ + $$PHONON_MMF_DIR/dummyplayer.h \ + $$PHONON_MMF_DIR/effectfactory.h \ + $$PHONON_MMF_DIR/mediaobject.h \ + $$PHONON_MMF_DIR/mmf_medianode.h \ + $$PHONON_MMF_DIR/mmf_videoplayer.h \ + $$PHONON_MMF_DIR/objectdump.h \ + $$PHONON_MMF_DIR/objectdump_global.h \ + $$PHONON_MMF_DIR/objecttree.h \ + $$PHONON_MMF_DIR/utils.h \ + $$PHONON_MMF_DIR/videooutput.h \ + $$PHONON_MMF_DIR/videowidget.h + +SOURCES += \ + $$PHONON_MMF_DIR/abstractaudioeffect.cpp \ + $$PHONON_MMF_DIR/abstractmediaplayer.cpp \ + $$PHONON_MMF_DIR/abstractplayer.cpp \ + $$PHONON_MMF_DIR/ancestormovemonitor.cpp \ + $$PHONON_MMF_DIR/audioequalizer.cpp \ + $$PHONON_MMF_DIR/audiooutput.cpp \ + $$PHONON_MMF_DIR/audioplayer.cpp \ + $$PHONON_MMF_DIR/backend.cpp \ + $$PHONON_MMF_DIR/bassboost.cpp \ + $$PHONON_MMF_DIR/dummyplayer.cpp \ + $$PHONON_MMF_DIR/effectfactory.cpp \ + $$PHONON_MMF_DIR/mediaobject.cpp \ + $$PHONON_MMF_DIR/mmf_medianode.cpp \ + $$PHONON_MMF_DIR/mmf_videoplayer.cpp \ + $$PHONON_MMF_DIR/objectdump.cpp \ + $$PHONON_MMF_DIR/objecttree.cpp \ + $$PHONON_MMF_DIR/utils.cpp \ + $$PHONON_MMF_DIR/videooutput.cpp \ + $$PHONON_MMF_DIR/videowidget.cpp + +HEADERS += $$PHONON_MMF_DIR/objectdump_symbian.h +SOURCES += $$PHONON_MMF_DIR/objectdump_symbian.cpp + +LIBS += -lcone +LIBS += -lws32 + +# This is only needed for debug builds, but is always linked against. +LIBS += -lhal + +TARGET.CAPABILITY = all -tcb + +LIBS += -lmediaclientvideo # For CVideoPlayerUtility +LIBS += -lcone # For CCoeEnv +LIBS += -lws32 # For RWindow +LIBS += -lefsrv # For file server +LIBS += -lapgrfx -lapmime # For recognizer +LIBS += -lmmfcontrollerframework # For CMMFMetaDataEntry + +# These are for effects. +LIBS += -lAudioEqualizerEffect -lBassBoostEffect -lDistanceAttenuationEffect -lDopplerBase -lEffectBase -lEnvironmentalReverbEffect -lListenerDopplerEffect -lListenerLocationEffect -lListenerOrientationEffect -lLocationBase -lLoudnessEffect -lOrientationBase -lSourceDopplerEffect -lSourceLocationEffect -lSourceOrientationEffect -lStereoWideningEffect + +# This is needed for having the .qtplugin file properly created on Symbian. +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/phonon_backend + +target.path = $$[QT_INSTALL_PLUGINS]/phonon_backend +INSTALLS += target + +include(../../qpluginbase.pri) + +TARGET.UID3=0x2001E629 -plugin.depends = mmfphonondebug diff --git a/src/plugins/phonon/mmf/mmfphonondebug/mmfphonondebug.pro b/src/plugins/phonon/mmf/mmfphonondebug/mmfphonondebug.pro deleted file mode 100644 index 2cfec15..0000000 --- a/src/plugins/phonon/mmf/mmfphonondebug/mmfphonondebug.pro +++ /dev/null @@ -1,31 +0,0 @@ -TEMPLATE = lib -TARGET = phonon_mmf_debug -OBJECTDUMP_DIR = $$QT_SOURCE_TREE/src/3rdparty/phonon/mmf/mmfphonondebug - -CONFIG += staticlib - -DEFINES += OBJECTDUMP_LIBRARY - -HEADERS += \ - $$OBJECTDUMP_DIR/objectdump_global.h \ - $$OBJECTDUMP_DIR/objectdump.h \ - $$OBJECTDUMP_DIR/objecttree.h - -SOURCES += \ - $$OBJECTDUMP_DIR/objectdump.cpp \ - $$OBJECTDUMP_DIR/objecttree.cpp - -symbian { - HEADERS += $$OBJECTDUMP_DIR/objectdump_symbian.h - SOURCES += $$OBJECTDUMP_DIR/objectdump_symbian.cpp - - LIBS += -lcone - LIBS += -lws32 - - TARGET.CAPABILITY = all -tcb - -} else { - SOURCES += $$OBJECTDUMP_DIR/objectdump_stub.cpp -} - -TARGET.UID3=0x2001E62A diff --git a/src/plugins/phonon/mmf/plugin/plugin.pro b/src/plugins/phonon/mmf/plugin/plugin.pro deleted file mode 100644 index 8a7de98..0000000 --- a/src/plugins/phonon/mmf/plugin/plugin.pro +++ /dev/null @@ -1,91 +0,0 @@ -# MMF Phonon backend - -QT += phonon -TARGET = phonon_mmf -PHONON_MMF_DIR = $$QT_SOURCE_TREE/src/3rdparty/phonon/mmf - -# Uncomment the following line in order to use the CDrmPlayerUtility client -# API for audio playback, rather than CMdaAudioPlayerUtility. -#CONFIG += phonon_mmf_audio_drm - -phonon_mmf_audio_drm { - LIBS += -lDrmAudioPlayUtility - DEFINES += QT_PHONON_MMF_AUDIO_DRM -} else { - LIBS += -lmediaclientaudio -} - -# This is necessary because both epoc32/include and Phonon contain videoplayer.h. -# By making /epoc32/include the first SYSTEMINCLUDE, we ensure that -# '#include <videoplayer.h>' picks up the Symbian header, as intended. -PREPEND_INCLUDEPATH = /epoc32/include - -INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE - -HEADERS += \ - $$PHONON_MMF_DIR/abstractaudioeffect.h \ - $$PHONON_MMF_DIR/abstractmediaplayer.h \ - $$PHONON_MMF_DIR/abstractplayer.h \ - $$PHONON_MMF_DIR/ancestormovemonitor.h \ - $$PHONON_MMF_DIR/audiooutput.h \ - $$PHONON_MMF_DIR/audioequalizer.h \ - $$PHONON_MMF_DIR/audioplayer.h \ - $$PHONON_MMF_DIR/backend.h \ - $$PHONON_MMF_DIR/bassboost.h \ - $$PHONON_MMF_DIR/defs.h \ - $$PHONON_MMF_DIR/dummyplayer.h \ - $$PHONON_MMF_DIR/effectfactory.h \ - $$PHONON_MMF_DIR/mmf_medianode.h \ - $$PHONON_MMF_DIR/mediaobject.h \ - $$PHONON_MMF_DIR/utils.h \ - $$PHONON_MMF_DIR/videooutput.h \ - $$PHONON_MMF_DIR/videooutputobserver.h \ - $$PHONON_MMF_DIR/mmf_videoplayer.h \ - $$PHONON_MMF_DIR/videowidget.h \ - $$PHONON_MMF_DIR/volumeobserver.h - -SOURCES += \ - $$PHONON_MMF_DIR/abstractaudioeffect.cpp \ - $$PHONON_MMF_DIR/abstractmediaplayer.cpp \ - $$PHONON_MMF_DIR/abstractplayer.cpp \ - $$PHONON_MMF_DIR/ancestormovemonitor.cpp \ - $$PHONON_MMF_DIR/audiooutput.cpp \ - $$PHONON_MMF_DIR/audioequalizer.cpp \ - $$PHONON_MMF_DIR/audioplayer.cpp \ - $$PHONON_MMF_DIR/backend.cpp \ - $$PHONON_MMF_DIR/bassboost.cpp \ - $$PHONON_MMF_DIR/dummyplayer.cpp \ - $$PHONON_MMF_DIR/effectfactory.cpp \ - $$PHONON_MMF_DIR/mmf_medianode.cpp \ - $$PHONON_MMF_DIR/mediaobject.cpp \ - $$PHONON_MMF_DIR/utils.cpp \ - $$PHONON_MMF_DIR/videooutput.cpp \ - $$PHONON_MMF_DIR/mmf_videoplayer.cpp \ - $$PHONON_MMF_DIR/videowidget.cpp - -debug { - INCLUDEPATH += $$PHONON_MMF_DIR/mmfphonondebug - LIBS += -lphonon_mmf_debug.lib - LIBS += -lhal -} - -LIBS += -lmediaclientvideo # For CVideoPlayerUtility -LIBS += -lcone # For CCoeEnv -LIBS += -lws32 # For RWindow -LIBS += -lefsrv # For file server -LIBS += -lapgrfx -lapmime # For recognizer -LIBS += -lmmfcontrollerframework # For CMMFMetaDataEntry - -# These are for effects. -LIBS += -lAudioEqualizerEffect -lBassBoostEffect -lDistanceAttenuationEffect -lDopplerBase -lEffectBase -lEnvironmentalReverbEffect -lListenerDopplerEffect -lListenerLocationEffect -lListenerOrientationEffect -lLocationBase -lLoudnessEffect -lOrientationBase -lSourceDopplerEffect -lSourceLocationEffect -lSourceOrientationEffect -lStereoWideningEffect - -# This is needed for having the .qtplugin file properly created on Symbian. -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/phonon_backend - -target.path = $$[QT_INSTALL_PLUGINS]/phonon_backend -INSTALLS += target - -include(../../../qpluginbase.pri) - -TARGET.UID3=0x2001E629 - diff --git a/src/plugins/phonon/phonon.pro b/src/plugins/phonon/phonon.pro index 814a062..803d8f9 100644 --- a/src/plugins/phonon/phonon.pro +++ b/src/plugins/phonon/phonon.pro @@ -7,4 +7,8 @@ mac:contains(QT_CONFIG, phonon-backend): SUBDIRS *= qt7 win32:!wince*:contains(QT_CONFIG, phonon-backend): SUBDIRS *= ds9 wince*:contains(QT_CONFIG, phonon-backend): SUBDIRS *= waveout wince*:contains(QT_CONFIG, directshow): SUBDIRS *= ds9 + +# Note that the MMF backend is in some scenarios an important complement to the +# Helix backend: the latter requires Symbian signed capabilities, hence MMF +# provides multimedia for self signed scenarios. symbian:contains(QT_CONFIG, phonon-backend): SUBDIRS *= mmf diff --git a/src/qbase.pri b/src/qbase.pri index 6428130..0aae24d 100644 --- a/src/qbase.pri +++ b/src/qbase.pri @@ -36,7 +36,7 @@ CONFIG += qt warn_on depend_includepath CONFIG += qmake_cache target_qt CONFIG -= fix_output_dirs win32|mac:!macx-xcode:CONFIG += debug_and_release -linux-g++*:QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF +linux*-g++*:QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols unix:contains(QT_CONFIG, reduce_relocations):CONFIG += bsymbolic_functions diff --git a/src/s60installs/bwins/QtCoreu.def b/src/s60installs/bwins/QtCoreu.def index 146d47e..1218b75 100644 --- a/src/s60installs/bwins/QtCoreu.def +++ b/src/s60installs/bwins/QtCoreu.def @@ -4384,4 +4384,7 @@ EXPORTS ?staticMetaObject@QAbstractTableModel@@2UQMetaObject@@B @ 4383 NONAME ; struct QMetaObject const QAbstractTableModel::staticMetaObject ?staticMetaObject@QFile@@2UQMetaObject@@B @ 4384 NONAME ; struct QMetaObject const QFile::staticMetaObject ?staticMetaObject@QHistoryState@@2UQMetaObject@@B @ 4385 NONAME ; struct QMetaObject const QHistoryState::staticMetaObject + ?QBasicAtomicPointer_isFetchAndAddNative@@YA_NXZ @ 4386 NONAME ; bool QBasicAtomicPointer_isFetchAndAddNative(void) + ?QBasicAtomicPointer_isFetchAndStoreNative@@YA_NXZ @ 4387 NONAME ; bool QBasicAtomicPointer_isFetchAndStoreNative(void) + ?QBasicAtomicPointer_isTestAndSetNative@@YA_NXZ @ 4388 NONAME ; bool QBasicAtomicPointer_isTestAndSetNative(void) diff --git a/src/s60installs/eabi/QtCoreu.def b/src/s60installs/eabi/QtCoreu.def index faf8b1e..99be68e 100644 --- a/src/s60installs/eabi/QtCoreu.def +++ b/src/s60installs/eabi/QtCoreu.def @@ -13,7 +13,7 @@ EXPORTS _Z11qt_int_sqrtj @ 12 NONAME _Z12noforcepointR11QTextStream @ 13 NONAME _Z12qSharedBuildv @ 14 NONAME - _Z12q_atomic_swpPVcc @ 15 NONAME + _Z12q_atomic_swpPVcc @ 15 NONAME ABSENT _Z12qt_s60GetRFsv @ 16 NONAME _Z13lowercasebaseR11QTextStream @ 17 NONAME _Z13qErrnoWarningPKcz @ 18 NONAME @@ -24,7 +24,7 @@ EXPORTS _Z15lowercasedigitsR11QTextStream @ 23 NONAME _Z15qAddPostRoutinePFvvE @ 24 NONAME _Z15qInitResourceIOv @ 25 NONAME - _Z15qt_atomic_yieldPi @ 26 NONAME + _Z15qt_atomic_yieldPi @ 26 NONAME ABSENT _Z15qt_error_stringi @ 27 NONAME _Z15uppercasedigitsR11QTextStream @ 28 NONAME _Z16qt_QString2HBufCRK7QString @ 29 NONAME @@ -706,7 +706,7 @@ EXPORTS _ZN15QAnimationGroupD0Ev @ 705 NONAME _ZN15QAnimationGroupD1Ev @ 706 NONAME _ZN15QAnimationGroupD2Ev @ 707 NONAME - _ZN15QBasicAtomicInt20fetchAndStoreOrderedEi @ 708 NONAME + _ZN15QBasicAtomicInt20fetchAndStoreOrderedEi @ 708 NONAME ABSENT _ZN15QDateTimeParser11parseFormatERK7QString @ 709 NONAME _ZN15QLinkedListData11shared_nullE @ 710 NONAME DATA 20 _ZN15QObjectUserDataD0Ev @ 711 NONAME @@ -3566,7 +3566,7 @@ EXPORTS inflateSync @ 3565 NONAME inflateSyncPoint @ 3566 NONAME qMetaTypeGuiHelper @ 3567 NONAME DATA 4 - q_atomic_lock @ 3568 NONAME DATA 1 + q_atomic_lock @ 3568 NONAME DATA 1 ABSENT qt_addObject @ 3569 NONAME qt_global_mutexpool @ 3570 NONAME DATA 4 qt_locale_initialized @ 3571 NONAME DATA 1 @@ -3612,4 +3612,11 @@ EXPORTS _ZNK13QStateMachine10isAnimatedEv @ 3611 NONAME _ZNK18QAbstractAnimation15currentLoopTimeEv @ 3612 NONAME _ZNK7QRegExp12captureCountEv @ 3613 NONAME + _Z38QBasicAtomicPointer_isTestAndSetNativev @ 3614 NONAME + _Z39QBasicAtomicPointer_isFetchAndAddNativev @ 3615 NONAME + _Z41QBasicAtomicPointer_isFetchAndStoreNativev @ 3616 NONAME + _ZN15QBasicAtomicInt18isTestAndSetNativeEv @ 3617 NONAME + _ZN15QBasicAtomicInt19isFetchAndAddNativeEv @ 3618 NONAME + _ZN15QBasicAtomicInt21isFetchAndStoreNativeEv @ 3619 NONAME + _ZN15QBasicAtomicInt25isReferenceCountingNativeEv @ 3620 NONAME diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro index 088631e..3fade73 100644 --- a/src/s60installs/s60installs.pro +++ b/src/s60installs/s60installs.pro @@ -101,12 +101,12 @@ symbian: { qtlibraries.sources += QtXmlPatterns.dll } - contains(QT_CONFIG, webkit): { - qtlibraries.sources += QtWebKit.dll + contains(QT_CONFIG, declarative): { + qtlibraries.sources += QtDeclarative.dll } - contains(QT_CONFIG, xmlpatterns): { - qtlibraries.sources += QtXmlPatterns.dll + contains(QT_CONFIG, webkit): { + qtlibraries.sources += QtWebKit.dll } contains(QT_CONFIG, declarative): { diff --git a/src/script/api/qscriptable.cpp b/src/script/api/qscriptable.cpp index c83653c..28e72c8 100644 --- a/src/script/api/qscriptable.cpp +++ b/src/script/api/qscriptable.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptable.h b/src/script/api/qscriptable.h index 7b92f74..697a271 100644 --- a/src/script/api/qscriptable.h +++ b/src/script/api/qscriptable.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptable_p.h b/src/script/api/qscriptable_p.h index b4e84f0..094950c 100644 --- a/src/script/api/qscriptable_p.h +++ b/src/script/api/qscriptable_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptclass.cpp b/src/script/api/qscriptclass.cpp index ec71d85..c982682 100644 --- a/src/script/api/qscriptclass.cpp +++ b/src/script/api/qscriptclass.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptclass.h b/src/script/api/qscriptclass.h index c416f37..df3b1a9 100644 --- a/src/script/api/qscriptclass.h +++ b/src/script/api/qscriptclass.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptclasspropertyiterator.cpp b/src/script/api/qscriptclasspropertyiterator.cpp index 14077ce..b8f278a 100644 --- a/src/script/api/qscriptclasspropertyiterator.cpp +++ b/src/script/api/qscriptclasspropertyiterator.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptclasspropertyiterator.h b/src/script/api/qscriptclasspropertyiterator.h index f8ea065..affec81 100644 --- a/src/script/api/qscriptclasspropertyiterator.h +++ b/src/script/api/qscriptclasspropertyiterator.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptcontext.cpp b/src/script/api/qscriptcontext.cpp index caa4dc2..77bac9b 100644 --- a/src/script/api/qscriptcontext.cpp +++ b/src/script/api/qscriptcontext.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptcontext.h b/src/script/api/qscriptcontext.h index 348ac9b..5284b13 100644 --- a/src/script/api/qscriptcontext.h +++ b/src/script/api/qscriptcontext.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptcontext_p.h b/src/script/api/qscriptcontext_p.h index a451103..e378b92 100644 --- a/src/script/api/qscriptcontext_p.h +++ b/src/script/api/qscriptcontext_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptcontextinfo.cpp b/src/script/api/qscriptcontextinfo.cpp index 6c34c5e..d3a15ec 100644 --- a/src/script/api/qscriptcontextinfo.cpp +++ b/src/script/api/qscriptcontextinfo.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptcontextinfo.h b/src/script/api/qscriptcontextinfo.h index 778473c..dcc57ad 100644 --- a/src/script/api/qscriptcontextinfo.h +++ b/src/script/api/qscriptcontextinfo.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp index 216f325..d519102 100644 --- a/src/script/api/qscriptengine.cpp +++ b/src/script/api/qscriptengine.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptengine.h b/src/script/api/qscriptengine.h index 7db61e1..8cacc52 100644 --- a/src/script/api/qscriptengine.h +++ b/src/script/api/qscriptengine.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptengine_p.h b/src/script/api/qscriptengine_p.h index e7cdcda..68bf8e0 100644 --- a/src/script/api/qscriptengine_p.h +++ b/src/script/api/qscriptengine_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptengineagent.cpp b/src/script/api/qscriptengineagent.cpp index 0ca7ecc..e7998b7 100644 --- a/src/script/api/qscriptengineagent.cpp +++ b/src/script/api/qscriptengineagent.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptengineagent.h b/src/script/api/qscriptengineagent.h index e260f44..37c2534 100644 --- a/src/script/api/qscriptengineagent.h +++ b/src/script/api/qscriptengineagent.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptengineagent_p.h b/src/script/api/qscriptengineagent_p.h index 86e4378..efbcb4d 100644 --- a/src/script/api/qscriptengineagent_p.h +++ b/src/script/api/qscriptengineagent_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptextensioninterface.h b/src/script/api/qscriptextensioninterface.h index 0084121..9923f4a 100644 --- a/src/script/api/qscriptextensioninterface.h +++ b/src/script/api/qscriptextensioninterface.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptextensionplugin.cpp b/src/script/api/qscriptextensionplugin.cpp index 782df58..d0c770b 100644 --- a/src/script/api/qscriptextensionplugin.cpp +++ b/src/script/api/qscriptextensionplugin.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptextensionplugin.h b/src/script/api/qscriptextensionplugin.h index 6cc1efb..e4d1da6 100644 --- a/src/script/api/qscriptextensionplugin.h +++ b/src/script/api/qscriptextensionplugin.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptprogram.cpp b/src/script/api/qscriptprogram.cpp index c30f381..deea582 100644 --- a/src/script/api/qscriptprogram.cpp +++ b/src/script/api/qscriptprogram.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptprogram.h b/src/script/api/qscriptprogram.h index de891cd..54e9f01 100644 --- a/src/script/api/qscriptprogram.h +++ b/src/script/api/qscriptprogram.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptprogram_p.h b/src/script/api/qscriptprogram_p.h index 5175079..61a5b01 100644 --- a/src/script/api/qscriptprogram_p.h +++ b/src/script/api/qscriptprogram_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptstring.cpp b/src/script/api/qscriptstring.cpp index 10fccd0..65f797d 100644 --- a/src/script/api/qscriptstring.cpp +++ b/src/script/api/qscriptstring.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptstring.h b/src/script/api/qscriptstring.h index bf5d1d5..be99f53 100644 --- a/src/script/api/qscriptstring.h +++ b/src/script/api/qscriptstring.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptstring_p.h b/src/script/api/qscriptstring_p.h index 8e344e8..cb418ad 100644 --- a/src/script/api/qscriptstring_p.h +++ b/src/script/api/qscriptstring_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptvalue.cpp b/src/script/api/qscriptvalue.cpp index d6cbb41..286230f 100644 --- a/src/script/api/qscriptvalue.cpp +++ b/src/script/api/qscriptvalue.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptvalue.h b/src/script/api/qscriptvalue.h index aba3327..0431ee5 100644 --- a/src/script/api/qscriptvalue.h +++ b/src/script/api/qscriptvalue.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptvalue_p.h b/src/script/api/qscriptvalue_p.h index c322a37..8211607 100644 --- a/src/script/api/qscriptvalue_p.h +++ b/src/script/api/qscriptvalue_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptvalueiterator.cpp b/src/script/api/qscriptvalueiterator.cpp index cf27af6..03cb695 100644 --- a/src/script/api/qscriptvalueiterator.cpp +++ b/src/script/api/qscriptvalueiterator.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/api/qscriptvalueiterator.h b/src/script/api/qscriptvalueiterator.h index 26ddbed..946a322 100644 --- a/src/script/api/qscriptvalueiterator.h +++ b/src/script/api/qscriptvalueiterator.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/bridge/qscriptactivationobject.cpp b/src/script/bridge/qscriptactivationobject.cpp index edccb3e..80f4bf1 100644 --- a/src/script/bridge/qscriptactivationobject.cpp +++ b/src/script/bridge/qscriptactivationobject.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/bridge/qscriptactivationobject_p.h b/src/script/bridge/qscriptactivationobject_p.h index f313f90..80d8c1e 100644 --- a/src/script/bridge/qscriptactivationobject_p.h +++ b/src/script/bridge/qscriptactivationobject_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/bridge/qscriptclassobject.cpp b/src/script/bridge/qscriptclassobject.cpp index 1dde98b..43ea5f9 100644 --- a/src/script/bridge/qscriptclassobject.cpp +++ b/src/script/bridge/qscriptclassobject.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/bridge/qscriptclassobject_p.h b/src/script/bridge/qscriptclassobject_p.h index 9b34244..8ebde3a 100644 --- a/src/script/bridge/qscriptclassobject_p.h +++ b/src/script/bridge/qscriptclassobject_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/bridge/qscriptdeclarativeclass.cpp b/src/script/bridge/qscriptdeclarativeclass.cpp index b5d9bf5..df00ce9 100644 --- a/src/script/bridge/qscriptdeclarativeclass.cpp +++ b/src/script/bridge/qscriptdeclarativeclass.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtDeclarative module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ @@ -354,3 +336,4 @@ QScriptContext *QScriptDeclarativeClass::context() const return d_ptr->context; } +QT_END_NAMESPACE diff --git a/src/script/bridge/qscriptdeclarativeclass_p.h b/src/script/bridge/qscriptdeclarativeclass_p.h index d0e653d..40e5051 100644 --- a/src/script/bridge/qscriptdeclarativeclass_p.h +++ b/src/script/bridge/qscriptdeclarativeclass_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtDeclarative module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/bridge/qscriptdeclarativeobject.cpp b/src/script/bridge/qscriptdeclarativeobject.cpp index 1af632d..6b4f5cb 100644 --- a/src/script/bridge/qscriptdeclarativeobject.cpp +++ b/src/script/bridge/qscriptdeclarativeobject.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtDeclarative module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/bridge/qscriptdeclarativeobject_p.h b/src/script/bridge/qscriptdeclarativeobject_p.h index 73e5527..2aa3fb0 100644 --- a/src/script/bridge/qscriptdeclarativeobject_p.h +++ b/src/script/bridge/qscriptdeclarativeobject_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtDeclarative module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/bridge/qscriptfunction.cpp b/src/script/bridge/qscriptfunction.cpp index d3767bf..e2e6120 100644 --- a/src/script/bridge/qscriptfunction.cpp +++ b/src/script/bridge/qscriptfunction.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/bridge/qscriptfunction_p.h b/src/script/bridge/qscriptfunction_p.h index bfcd703..10e3f42 100644 --- a/src/script/bridge/qscriptfunction_p.h +++ b/src/script/bridge/qscriptfunction_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/bridge/qscriptglobalobject.cpp b/src/script/bridge/qscriptglobalobject.cpp index c624a31..2217025 100644 --- a/src/script/bridge/qscriptglobalobject.cpp +++ b/src/script/bridge/qscriptglobalobject.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/bridge/qscriptglobalobject_p.h b/src/script/bridge/qscriptglobalobject_p.h index 01784c2..9909afc 100644 --- a/src/script/bridge/qscriptglobalobject_p.h +++ b/src/script/bridge/qscriptglobalobject_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/bridge/qscriptobject.cpp b/src/script/bridge/qscriptobject.cpp index 1fdf0b1..2d71c43 100644 --- a/src/script/bridge/qscriptobject.cpp +++ b/src/script/bridge/qscriptobject.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/bridge/qscriptobject_p.h b/src/script/bridge/qscriptobject_p.h index 0992eec..a4faa06 100644 --- a/src/script/bridge/qscriptobject_p.h +++ b/src/script/bridge/qscriptobject_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/bridge/qscriptqobject.cpp b/src/script/bridge/qscriptqobject.cpp index caf1018..559fcd3 100644 --- a/src/script/bridge/qscriptqobject.cpp +++ b/src/script/bridge/qscriptqobject.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/bridge/qscriptqobject_p.h b/src/script/bridge/qscriptqobject_p.h index 2d482cc..41900b5 100644 --- a/src/script/bridge/qscriptqobject_p.h +++ b/src/script/bridge/qscriptqobject_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/bridge/qscriptvariant.cpp b/src/script/bridge/qscriptvariant.cpp index 725f4e0..cc5df9a 100644 --- a/src/script/bridge/qscriptvariant.cpp +++ b/src/script/bridge/qscriptvariant.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/bridge/qscriptvariant_p.h b/src/script/bridge/qscriptvariant_p.h index 445ca69..81312e8 100644 --- a/src/script/bridge/qscriptvariant_p.h +++ b/src/script/bridge/qscriptvariant_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/util/qtscriptparser/make-parser.sh b/src/script/parser/make-parser.sh index cfe2513..d0c71fb 100644..100755 --- a/util/qtscriptparser/make-parser.sh +++ b/src/script/parser/make-parser.sh @@ -42,14 +42,12 @@ me=$(dirname $0) mkdir -p $me/out -(cd $me/out && ${QLALR-qlalr} --troll --no-lines ../qscript.g) +(cd $me/out && ../../../../util/qlalr/qlalr --qt --no-lines ../qscript.g) -for f in $me/out/*.{h,cpp}; do +for f in $me/out/*.h $me/out/*.cpp; do n=$(basename $f) - p4 open $me/../../src/script/$n - cp $f $me/../../src/script/$n + cp $f $n done -p4 revert -a $me/../../src/script/... -p4 diff -du $me/../../src/script/... +git diff . diff --git a/src/script/parser/qscript.g b/src/script/parser/qscript.g index b0b0cdf..2d61713 100644 --- a/src/script/parser/qscript.g +++ b/src/script/parser/qscript.g @@ -6,35 +6,17 @@ -- -- This file is part of the QtScript module 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. --- +-- $QT_BEGIN_LICENSE:LGPL-ONLY$ -- GNU Lesser General Public License Usage --- Alternatively, this file may be used under the terms of the GNU Lesser +-- 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$ -- ---------------------------------------------------------------------------- @@ -78,8 +60,7 @@ %start Program -/. -/**************************************************************************** +/./**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. @@ -87,12 +68,24 @@ ** ** This file is part of the QtScript module 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. -** 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. +** +** 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. @@ -108,20 +101,13 @@ ** ****************************************************************************/ +// This file was generated by qlalr - DO NOT EDIT! + + #include <QtCore/QtDebug> #include <string.h> -#include "qscriptengine.h" -#include "qscriptengine_p.h" -#include "qscriptvalueimpl_p.h" -#include "qscriptcontext_p.h" -#include "qscriptmember_p.h" -#include "qscriptobject_p.h" -#include "qscriptlexer_p.h" -#include "qscriptast_p.h" -#include "qscriptnodepool_p.h" - #define Q_SCRIPT_UPDATE_POSITION(node, startloc, endloc) do { \ node->startLine = startloc.startLine; \ node->startColumn = startloc.startColumn; \ @@ -131,8 +117,7 @@ ./ -/: -/**************************************************************************** +/:/**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. @@ -140,10 +125,25 @@ ** ** This file is part of the QtScript module 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. -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** +** 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. ** @@ -153,10 +153,14 @@ ** ** ** +** ** $QT_END_LICENSE$ ** ****************************************************************************/ +// This file was generated by qlalr - DO NOT EDIT! + + // // W A R N I N G // ------------- diff --git a/src/script/parser/qscriptast.cpp b/src/script/parser/qscriptast.cpp index 29d3557..c2ba81b 100644 --- a/src/script/parser/qscriptast.cpp +++ b/src/script/parser/qscriptast.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/parser/qscriptast_p.h b/src/script/parser/qscriptast_p.h index 5f687eb..921c9d8 100644 --- a/src/script/parser/qscriptast_p.h +++ b/src/script/parser/qscriptast_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/parser/qscriptastfwd_p.h b/src/script/parser/qscriptastfwd_p.h index 620128d..3b38303 100644 --- a/src/script/parser/qscriptastfwd_p.h +++ b/src/script/parser/qscriptastfwd_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/parser/qscriptastvisitor.cpp b/src/script/parser/qscriptastvisitor.cpp index 1e51178..256d4c3 100644 --- a/src/script/parser/qscriptastvisitor.cpp +++ b/src/script/parser/qscriptastvisitor.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/parser/qscriptastvisitor_p.h b/src/script/parser/qscriptastvisitor_p.h index dc8a76f9..9985485 100644 --- a/src/script/parser/qscriptastvisitor_p.h +++ b/src/script/parser/qscriptastvisitor_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/parser/qscriptgrammar.cpp b/src/script/parser/qscriptgrammar.cpp index cbb1ab8..03eb526 100644 --- a/src/script/parser/qscriptgrammar.cpp +++ b/src/script/parser/qscriptgrammar.cpp @@ -1,4 +1,3 @@ -// This file was generated by qlalr - DO NOT EDIT! /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). @@ -7,39 +6,22 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ +// This file was generated by qlalr - DO NOT EDIT! #include "qscriptgrammar_p.h" QT_BEGIN_NAMESPACE @@ -68,7 +50,7 @@ const char *const QScriptGrammar::spell [] = { #endif // QLALR_NO_QSCRIPTGRAMMAR_DEBUG_INFO }; -const int QScriptGrammar::lhs [] = { +const short QScriptGrammar::lhs [] = { 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 87, 87, 92, 92, 86, 86, 89, 89, 93, 93, 93, 93, 94, 94, 94, @@ -97,7 +79,7 @@ const int QScriptGrammar::lhs [] = { 163, 97, 167, 167, 164, 164, 165, 165, 168, 84, 169, 169, 170, 170, 166, 166, 88, 88, 171}; -const int QScriptGrammar:: rhs[] = { +const short QScriptGrammar::rhs [] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 5, 3, 4, 3, 2, 4, 1, 2, 0, 1, 3, 5, 1, 1, 1, 1, 1, 1, 1, @@ -429,7 +411,7 @@ const int QScriptGrammar::rule_index [] = { 803, 805, 808, 810, 812, 813, 815, 816, 818}; #endif // QLALR_NO_QSCRIPTGRAMMAR_DEBUG_INFO -const int QScriptGrammar::action_default [] = { +const short QScriptGrammar::action_default [] = { 0, 98, 165, 129, 137, 133, 173, 180, 77, 149, 179, 187, 175, 125, 0, 176, 264, 62, 177, 178, 183, 78, 141, 145, 66, 95, 76, 81, 61, 0, @@ -478,7 +460,7 @@ const int QScriptGrammar::action_default [] = { 15, 88, 86, 90, 87, 85, 89, 204, 197, 0, 205, 201, 0, 203, 193, 0, 194, 198}; -const int QScriptGrammar::goto_default [] = { +const short QScriptGrammar::goto_default [] = { 29, 28, 439, 437, 113, 112, 14, 2, 438, 111, 114, 194, 24, 17, 190, 26, 8, 201, 21, 27, 77, 25, 1, 32, 30, 270, 13, 264, 3, 260, @@ -489,7 +471,7 @@ const int QScriptGrammar::goto_default [] = { 460, 324, 395, 399, 402, 398, 397, 417, 418, 16, 100, 107, 96, 99, 106, 108, 33, 0}; -const int QScriptGrammar::action_index [] = { +const short QScriptGrammar::action_index [] = { 1318, 79, -84, 56, 39, -17, -84, -84, 169, -84, -84, -84, -84, 216, 149, -84, -84, -84, -84, -84, -84, 475, 68, 100, 180, 184, -84, -84, -84, 99, @@ -586,7 +568,7 @@ const int QScriptGrammar::action_index [] = { -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, 5, -88, -88, -56, -88, -88}; -const int QScriptGrammar::action_info [] = { +const short QScriptGrammar::action_info [] = { 305, 307, 109, 400, 400, 400, 273, 105, 416, 302, 297, 295, 293, 423, 273, 151, 313, 321, 406, 407, 424, 295, 422, 198, 420, 149, 313, 353, -47, 396, @@ -777,7 +759,7 @@ const int QScriptGrammar::action_info [] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -const int QScriptGrammar::action_check [] = { +const short QScriptGrammar::action_check [] = { 61, 60, 55, 5, 5, 5, 1, 33, 33, 61, 8, 76, 48, 29, 1, 8, 2, 29, 55, 7, 60, 76, 36, 8, 20, 7, 2, 16, 7, 33, diff --git a/src/script/parser/qscriptgrammar_p.h b/src/script/parser/qscriptgrammar_p.h index 9e0f4f8..b75ee16 100644 --- a/src/script/parser/qscriptgrammar_p.h +++ b/src/script/parser/qscriptgrammar_p.h @@ -6,44 +6,21 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ -// This file was generated by qlalr - DO NOT EDIT! - -#ifndef QSCRIPTGRAMMAR_P_H -#define QSCRIPTGRAMMAR_P_H - // // W A R N I N G // ------------- @@ -55,6 +32,10 @@ // We mean it. // +// This file was generated by qlalr - DO NOT EDIT! +#ifndef QSCRIPTGRAMMAR_P_H +#define QSCRIPTGRAMMAR_P_H + #include <QtCore/qglobal.h> QT_BEGIN_NAMESPACE @@ -159,33 +140,28 @@ public: GOTO_CHECK_OFFSET = 1562 }; - static const char *const spell []; - static const int lhs []; - static const int rhs []; + static const char *const spell []; + static const short lhs []; + static const short rhs []; #ifndef QLALR_NO_QSCRIPTGRAMMAR_DEBUG_INFO static const int rule_index []; static const int rule_info []; #endif // QLALR_NO_QSCRIPTGRAMMAR_DEBUG_INFO - static const int goto_default []; - static const int action_default []; - static const int action_index []; - static const int action_info []; - static const int action_check []; + static const short goto_default []; + static const short action_default []; + static const short action_index []; + static const short action_info []; + static const short action_check []; static inline int nt_action (int state, int nt) { - const int *const goto_index = &action_index [GOTO_INDEX_OFFSET]; - const int *const goto_check = &action_check [GOTO_CHECK_OFFSET]; - - const int yyn = goto_index [state] + nt; - - if (yyn < 0 || goto_check [yyn] != nt) + const int yyn = action_index [GOTO_INDEX_OFFSET + state] + nt; + if (yyn < 0 || action_check [GOTO_CHECK_OFFSET + yyn] != nt) return goto_default [nt]; - const int *const goto_info = &action_info [GOTO_INFO_OFFSET]; - return goto_info [yyn]; + return action_info [GOTO_INFO_OFFSET + yyn]; } static inline int t_action (int state, int token) @@ -199,6 +175,7 @@ public: } }; -QT_END_NAMESPACE +QT_END_NAMESPACE #endif // QSCRIPTGRAMMAR_P_H + diff --git a/src/script/parser/qscriptlexer.cpp b/src/script/parser/qscriptlexer.cpp index 5080d10..e62add1 100644 --- a/src/script/parser/qscriptlexer.cpp +++ b/src/script/parser/qscriptlexer.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/parser/qscriptlexer_p.h b/src/script/parser/qscriptlexer_p.h index b377767..d2096ad 100644 --- a/src/script/parser/qscriptlexer_p.h +++ b/src/script/parser/qscriptlexer_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/parser/qscriptparser.cpp b/src/script/parser/qscriptparser.cpp index 197a486..509c4b1 100644 --- a/src/script/parser/qscriptparser.cpp +++ b/src/script/parser/qscriptparser.cpp @@ -1,5 +1,3 @@ -// This file was generated by qlalr - DO NOT EDIT! - /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). @@ -8,45 +6,28 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ +// This file was generated by qlalr - DO NOT EDIT! + + #include <QtCore/QtDebug> #include <string.h> -#include "qscriptast_p.h" - #define Q_SCRIPT_UPDATE_POSITION(node, startloc, endloc) do { \ node->startLine = startloc.startLine; \ node->startColumn = startloc.startColumn; \ @@ -1136,9 +1117,9 @@ case 266: { error_message += QLatin1String (", "); first = false; - error_message += QLatin1Char('`'); + error_message += QLatin1String("`"); error_message += QLatin1String (spell [expected_tokens [s]]); - error_message += QLatin1Char('\''); + error_message += QLatin1String("'"); } } diff --git a/src/script/parser/qscriptparser_p.h b/src/script/parser/qscriptparser_p.h index 5f62db7..2a42b41 100644 --- a/src/script/parser/qscriptparser_p.h +++ b/src/script/parser/qscriptparser_p.h @@ -6,41 +6,24 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ // This file was generated by qlalr - DO NOT EDIT! + // // W A R N I N G // ------------- diff --git a/src/script/parser/qscriptsyntaxchecker.cpp b/src/script/parser/qscriptsyntaxchecker.cpp index 9256695..3503b61 100644 --- a/src/script/parser/qscriptsyntaxchecker.cpp +++ b/src/script/parser/qscriptsyntaxchecker.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/parser/qscriptsyntaxchecker_p.h b/src/script/parser/qscriptsyntaxchecker_p.h index edc4b59..1c502e9 100644 --- a/src/script/parser/qscriptsyntaxchecker_p.h +++ b/src/script/parser/qscriptsyntaxchecker_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/utils/qscriptdate.cpp b/src/script/utils/qscriptdate.cpp index 9e402b0..a6106db 100644 --- a/src/script/utils/qscriptdate.cpp +++ b/src/script/utils/qscriptdate.cpp @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/script/utils/qscriptdate_p.h b/src/script/utils/qscriptdate_p.h index 15bac00..f720527 100644 --- a/src/script/utils/qscriptdate_p.h +++ b/src/script/utils/qscriptdate_p.h @@ -6,35 +6,17 @@ ** ** This file is part of the QtScript module 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. -** +** $QT_BEGIN_LICENSE:LGPL-ONLY$ ** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser +** 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$ ** ****************************************************************************/ diff --git a/src/svg/qsvgstyle.cpp b/src/svg/qsvgstyle.cpp index f834016..57927fd 100644 --- a/src/svg/qsvgstyle.cpp +++ b/src/svg/qsvgstyle.cpp @@ -363,7 +363,10 @@ void QSvgStrokeStyle::apply(QPainter *p, const QRectF &, QSvgNode *, QSvgExtraSt if (m_strokeMiterLimitSet) pen.setMiterLimit(m_stroke.miterLimit()); - if (setDashOffsetNeeded) { + // You can have dash offset on solid strokes in SVG files, but not in Qt. + // QPen::setDashOffset() will set the pen style to Qt::CustomDashLine, + // so don't call the method if the pen is solid. + if (setDashOffsetNeeded && pen.style() != Qt::SolidLine) { qreal currentWidth = pen.widthF(); if (currentWidth == 0) currentWidth = 1; diff --git a/src/tools/bootstrap/bootstrap.pri b/src/tools/bootstrap/bootstrap.pri index b4f9b2f..b3ee948 100644 --- a/src/tools/bootstrap/bootstrap.pri +++ b/src/tools/bootstrap/bootstrap.pri @@ -38,7 +38,7 @@ DEPENDPATH += $$INCLUDEPATH \ $$QT_SOURCE_TREE/src/xml hpux-acc*|hpuxi-acc* { - LIBS += ../bootstrap/libbootstrap.a + LIBS += $$QT_BUILD_TREE/src/tools/bootstrap/libbootstrap.a } else { contains(CONFIG, debug_and_release_target) { CONFIG(debug, debug|release) { diff --git a/src/tools/bootstrap/bootstrap.pro b/src/tools/bootstrap/bootstrap.pro index 1f81a6c..722981c 100644 --- a/src/tools/bootstrap/bootstrap.pro +++ b/src/tools/bootstrap/bootstrap.pro @@ -31,6 +31,7 @@ win32:DEFINES += QT_NODLL INCLUDEPATH += $$QT_BUILD_TREE/include \ $$QT_BUILD_TREE/include/QtCore \ $$QT_BUILD_TREE/include/QtXml \ + $$QT_BUILD_TREE/src/corelib/global # qlibraryinfo.cpp includes qconfig.cpp DEPENDPATH += $$INCLUDEPATH \ ../../corelib/global \ @@ -48,10 +49,12 @@ SOURCES += \ ../../corelib/codecs/qtsciicodec.cpp \ ../../corelib/codecs/qutfcodec.cpp \ ../../corelib/global/qglobal.cpp \ + ../../corelib/global/qlibraryinfo.cpp \ ../../corelib/global/qmalloc.cpp \ ../../corelib/global/qnumeric.cpp \ ../../corelib/io/qabstractfileengine.cpp \ ../../corelib/io/qbuffer.cpp \ + ../../corelib/io/qdatastream.cpp \ ../../corelib/io/qdir.cpp \ ../../corelib/io/qdiriterator.cpp \ ../../corelib/io/qfile.cpp \ @@ -62,6 +65,7 @@ SOURCES += \ ../../corelib/io/qtemporaryfile.cpp \ ../../corelib/io/qtextstream.cpp \ ../../corelib/io/qurl.cpp \ + ../../corelib/io/qsettings.cpp \ ../../corelib/kernel/qmetatype.cpp \ ../../corelib/kernel/qvariant.cpp \ ../../corelib/tools/qbitarray.cpp \ @@ -86,11 +90,12 @@ unix:SOURCES += ../../corelib/io/qfsfileengine_unix.cpp \ ../../corelib/io/qfsfileengine_iterator_unix.cpp win32:SOURCES += ../../corelib/io/qfsfileengine_win.cpp \ - ../../corelib/io/qfsfileengine_iterator_win.cpp + ../../corelib/io/qfsfileengine_iterator_win.cpp \ + ../../corelib/io/qsettings_win.cpp macx: { QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.4 #enables weak linking for 10.4 (exported) - SOURCES += ../../corelib/kernel/qcore_mac.cpp + SOURCES += ../../corelib/kernel/qcore_mac.cpp ../../corelib/io/qsettings_mac.cpp LIBS += -framework CoreServices } diff --git a/src/tools/rcc/rcc.cpp b/src/tools/rcc/rcc.cpp index 51f850a..6b3227a 100644 --- a/src/tools/rcc/rcc.cpp +++ b/src/tools/rcc/rcc.cpp @@ -709,46 +709,6 @@ bool RCCResourceLibrary::writeHeader() { if (m_format == C_Code) { writeString("/****************************************************************************\n"); - writeString("**\n"); - writeString("** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).\n"); - writeString("** All rights reserved.\n"); - writeString("** Contact: Nokia Corporation (qt-info@nokia.com)\n"); - writeString("**\n"); - writeString("** This file is part of the tools applications of the Qt Toolkit.\n"); - writeString("**\n"); - writeString("** $QT_BEGIN_LICENSE:LGPL$\n"); - writeString("** No Commercial Usage\n"); - writeString("** This file contains pre-release code and may not be distributed.\n"); - writeString("** You may use this file in accordance with the terms and conditions\n"); - writeString("** contained in the Technology Preview License Agreement accompanying\n"); - writeString("** this package.\n"); - writeString("**\n"); - writeString("** GNU Lesser General Public License Usage\n"); - writeString("** Alternatively, this file may be used under the terms of the GNU Lesser\n"); - writeString("** General Public License version 2.1 as published by the Free Software\n"); - writeString("** Foundation and appearing in the file LICENSE.LGPL included in the\n"); - writeString("** packaging of this file. Please review the following information to\n"); - writeString("** ensure the GNU Lesser General Public License version 2.1 requirements\n"); - writeString("** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.\n"); - writeString("**\n"); - writeString("** In addition, as a special exception, Nokia gives you certain additional\n"); - writeString("** rights. These rights are described in the Nokia Qt LGPL Exception\n"); - writeString("** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.\n"); - writeString("**\n"); - writeString("** If you have questions regarding the use of this file, please contact\n"); - writeString("** Nokia at qt-info@nokia.com.\n"); - writeString("**\n"); - writeString("**\n"); - writeString("**\n"); - writeString("**\n"); - writeString("**\n"); - writeString("**\n"); - writeString("**\n"); - writeString("**\n"); - writeString("** $QT_END_LICENSE$\n"); - writeString("**\n"); - writeString("****************************************************************************/\n"); - writeString("/****************************************************************************\n"); writeString("** Resource object code\n"); writeString("**\n"); writeString("** Created: "); diff --git a/src/tools/uic/cpp/cppwriteinitialization.cpp b/src/tools/uic/cpp/cppwriteinitialization.cpp index 1690c2e..b2e8f4f 100644 --- a/src/tools/uic/cpp/cppwriteinitialization.cpp +++ b/src/tools/uic/cpp/cppwriteinitialization.cpp @@ -670,10 +670,13 @@ void WriteInitialization::acceptWidget(DomWidget *node) m_layoutWidget = false; if (className == QLatin1String("QWidget") && !node->hasAttributeNative()) { - if (m_widgetChain.top() - && m_widgetChain.top()->attributeClass() != QLatin1String("QMainWindow") - && !m_uic->isContainer(m_widgetChain.top()->attributeClass())) + if (const DomWidget* parentWidget = m_widgetChain.top()) { + const QString parentClass = parentWidget->attributeClass(); + if (parentClass != QLatin1String("QMainWindow") + && !m_uic->isCustomWidgetContainer(parentClass) + && !m_uic->isContainer(parentClass)) m_layoutWidget = true; + } } m_widgetChain.push(node); m_layoutChain.push(0); @@ -718,7 +721,7 @@ void WriteInitialization::acceptWidget(DomWidget *node) m_output << m_indent << parentWidget << "->addDockWidget(" << area << varName << ");\n"; } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QStatusBar"))) { m_output << m_indent << parentWidget << "->setStatusBar(" << varName << ");\n"; - } else if (className == QLatin1String("QWidget")) { + } else { m_output << m_indent << parentWidget << "->setCentralWidget(" << varName << ");\n"; } } diff --git a/src/tools/uic/customwidgetsinfo.cpp b/src/tools/uic/customwidgetsinfo.cpp index 70adba2..ca3fd19 100644 --- a/src/tools/uic/customwidgetsinfo.cpp +++ b/src/tools/uic/customwidgetsinfo.cpp @@ -88,6 +88,14 @@ bool CustomWidgetsInfo::extends(const QString &classNameIn, const QLatin1String return false; } +bool CustomWidgetsInfo::isCustomWidgetContainer(const QString &className) const +{ + if (const DomCustomWidget *dcw = m_customWidgets.value(className, 0)) + if (dcw->hasElementContainer()) + return dcw->elementContainer() != 0; + return false; +} + QString CustomWidgetsInfo::realClassName(const QString &className) const { if (className == QLatin1String("Line")) diff --git a/src/tools/uic/customwidgetsinfo.h b/src/tools/uic/customwidgetsinfo.h index 1471118..d5be5a2 100644 --- a/src/tools/uic/customwidgetsinfo.h +++ b/src/tools/uic/customwidgetsinfo.h @@ -78,6 +78,8 @@ public: bool extends(const QString &className, const QLatin1String &baseClassName) const; + bool isCustomWidgetContainer(const QString &className) const; + private: typedef QMap<QString, DomCustomWidget*> NameCustomWidgetMap; NameCustomWidgetMap m_customWidgets; diff --git a/src/tools/uic/uic.cpp b/src/tools/uic/uic.cpp index 32e5e3d..71b6ac1 100644 --- a/src/tools/uic/uic.cpp +++ b/src/tools/uic/uic.cpp @@ -363,6 +363,11 @@ bool Uic::isContainer(const QString &className) const || customWidgetsInfo()->extends(className, QLatin1String("QDockWidget")); } +bool Uic::isCustomWidgetContainer(const QString &className) const +{ + return customWidgetsInfo()->isCustomWidgetContainer(className); +} + bool Uic::isStatusBar(const QString &className) const { return customWidgetsInfo()->extends(className, QLatin1String("QStatusBar")); diff --git a/src/tools/uic/uic.h b/src/tools/uic/uic.h index 3e072a4..5175ea9 100644 --- a/src/tools/uic/uic.h +++ b/src/tools/uic/uic.h @@ -115,6 +115,7 @@ public: bool isStatusBar(const QString &className) const; bool isButton(const QString &className) const; bool isContainer(const QString &className) const; + bool isCustomWidgetContainer(const QString &className) const; bool isMenuBar(const QString &className) const; bool isMenu(const QString &className) const; diff --git a/src/tools/uic3/uic.cpp b/src/tools/uic3/uic.cpp index 7872866..6761eaf 100644 --- a/src/tools/uic3/uic.cpp +++ b/src/tools/uic3/uic.cpp @@ -322,6 +322,11 @@ bool Uic::isContainer(const QString &className) const || customWidgetsInfo()->extends(className, QLatin1String("QDockWidget")); } +bool Uic::isCustomWidgetContainer(const QString &className) const +{ + return customWidgetsInfo()->isCustomWidgetContainer(className); +} + bool Uic::isStatusBar(const QString &className) const { return customWidgetsInfo()->extends(className, QLatin1String("QStatusBar")); diff --git a/src/tools/uic3/uic.h b/src/tools/uic3/uic.h index 50aa71c..63a1f8d 100644 --- a/src/tools/uic3/uic.h +++ b/src/tools/uic3/uic.h @@ -114,6 +114,7 @@ public: bool isStatusBar(const QString &className) const; bool isButton(const QString &className) const; bool isContainer(const QString &className) const; + bool isCustomWidgetContainer(const QString &className) const; bool isMenuBar(const QString &className) const; bool isMenu(const QString &className) const; diff --git a/src/xmlpatterns/data/qderivedinteger_p.h b/src/xmlpatterns/data/qderivedinteger_p.h index 859e03d..19dc4c4 100644 --- a/src/xmlpatterns/data/qderivedinteger_p.h +++ b/src/xmlpatterns/data/qderivedinteger_p.h @@ -401,18 +401,18 @@ namespace QPatternist { return ValidationError::createError(QtXmlPatterns::tr( "Value %1 of type %2 exceeds maximum (%3).") - .arg(formatData(static_cast<xsInteger>(num))) + .arg(QPatternist::formatData(static_cast<xsInteger>(num))) .arg(formatType(np, itemType())) - .arg(formatData(static_cast<xsInteger>(maxInclusive)))); + .arg(QPatternist::formatData(static_cast<xsInteger>(maxInclusive)))); } else if((limitsUsage & LimitDownwards) && lessThan(num, minimum)) { return ValidationError::createError(QtXmlPatterns::tr( "Value %1 of type %2 is below minimum (%3).") - .arg(formatData(static_cast<xsInteger>(num))) + .arg(QPatternist::formatData(static_cast<xsInteger>(num))) .arg(formatType(np, itemType())) - .arg(formatData(static_cast<xsInteger>(minInclusive)))); + .arg(QPatternist::formatData(static_cast<xsInteger>(minInclusive)))); } else return AtomicValue::Ptr(new DerivedInteger(num)); diff --git a/src/xmlpatterns/functions/qcomparingaggregator.cpp b/src/xmlpatterns/functions/qcomparingaggregator.cpp index 6d07109..acda08c 100644 --- a/src/xmlpatterns/functions/qcomparingaggregator.cpp +++ b/src/xmlpatterns/functions/qcomparingaggregator.cpp @@ -195,7 +195,7 @@ ComparingAggregator<oper, result>::typeCheck(const StaticContext::Ptr &context, !BuiltinTypes::xsYearMonthDuration->xdtTypeMatches(t1)) { context->error(QtXmlPatterns::tr("The first argument to %1 cannot be of type %2.") - .arg(formatFunction(context->namePool(), signature())) + .arg(QPatternist::formatFunction(context->namePool(), signature())) .arg(formatType(context->namePool(), m_operands.first()->staticType())), ReportContext::FORG0006, this); return me; diff --git a/src/xmlpatterns/parser/querytransformparser.ypp b/src/xmlpatterns/parser/querytransformparser.ypp index 45dc773..562d245 100644 --- a/src/xmlpatterns/parser/querytransformparser.ypp +++ b/src/xmlpatterns/parser/querytransformparser.ypp @@ -870,7 +870,7 @@ static void variableUnavailable(const QXmlName &variableName, const ParserContext *const parseInfo, const YYLTYPE &location) { - parseInfo->staticContext->error(QtXmlPatterns::tr("No variable by name %1 exists") + parseInfo->staticContext->error(QtXmlPatterns::tr("No variable with name %1 exists") .arg(formatKeyword(parseInfo->staticContext->namePool(), variableName)), ReportContext::XPST0008, fromYYLTYPE(location, parseInfo)); } diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index 46f26f8..da1f7ca 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -10,7 +10,8 @@ TEMPLATE = subdirs linguist \ moc \ uic \ - uic3 + uic3 \ + guiapplauncher Q3SUBDIRS += \ q3accel \ q3action \ diff --git a/tests/auto/bic/tst_bic.cpp b/tests/auto/bic/tst_bic.cpp index 8c6056e..b7c79cf 100644 --- a/tests/auto/bic/tst_bic.cpp +++ b/tests/auto/bic/tst_bic.cpp @@ -96,6 +96,9 @@ tst_Bic::tst_Bic() /* QtOpenGL includes qt_windows.h, and some SDKs dont have these structs present */ bic.addBlacklistedClass(QLatin1String("tagTITLEBARINFO")); + bic.addBlacklistedClass(QLatin1String("tagMENUITEMINFOA")); + bic.addBlacklistedClass(QLatin1String("tagMENUITEMINFOW")); + bic.addBlacklistedClass(QLatin1String("tagENHMETAHEADER")); /* some bug in gcc also reported template instanciations */ bic.addBlacklistedClass(QLatin1String("QTypeInfo<*>")); @@ -115,6 +118,7 @@ tst_Bic::tst_Bic() bic.addBlacklistedClass(QLatin1String("QObjectData")); bic.addBlacklistedClass(QLatin1String("QAtomic")); bic.addBlacklistedClass(QLatin1String("QBasicAtomic")); + bic.addBlacklistedClass(QLatin1String("QRegion::QRegionData")); /* Jambi-related classes in Designer */ bic.addBlacklistedClass(QLatin1String("QDesignerLanguageExtension")); diff --git a/tests/auto/collections/tst_collections.cpp b/tests/auto/collections/tst_collections.cpp index f97805e..84f466b 100644 --- a/tests/auto/collections/tst_collections.cpp +++ b/tests/auto/collections/tst_collections.cpp @@ -3586,7 +3586,7 @@ void tst_Collections::alignment() #else void tst_Collections::alignment() { - QSKIP("Compiler doesn't support necessary extension keywords", SkipAll) + QSKIP("Compiler doesn't support necessary extension keywords", SkipAll); } #endif diff --git a/tests/auto/declarative/parserstress/tst_parserstress.cpp b/tests/auto/declarative/parserstress/tst_parserstress.cpp index dd8f347..e584140 100644 --- a/tests/auto/declarative/parserstress/tst_parserstress.cpp +++ b/tests/auto/declarative/parserstress/tst_parserstress.cpp @@ -115,7 +115,7 @@ void tst_parserstress::ecmascript() QString qml = "import Qt 4.6\n"; qml+= "\n"; - qml+= "Object {\n"; + qml+= "QtObject {\n"; qml+= " property int test\n"; qml+= " test: {\n"; qml+= dataStr + "\n"; diff --git a/tests/auto/declarative/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp b/tests/auto/declarative/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp index 71eefdd..92b2c1a 100644 --- a/tests/auto/declarative/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp +++ b/tests/auto/declarative/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp @@ -1,11 +1,41 @@ /**************************************************************************** ** -** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Qt Software Information (qt-info@nokia.com) +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the $MODULE$ of the Qt Toolkit. +** This file is part of the test suite of the Qt Toolkit. ** -** $TROLLTECH_DUAL_LICENSE$ +** $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$ ** ****************************************************************************/ diff --git a/tests/auto/declarative/qmlcontext/tst_qmlcontext.cpp b/tests/auto/declarative/qmlcontext/tst_qmlcontext.cpp index 3c60b2b..f82f202 100644 --- a/tests/auto/declarative/qmlcontext/tst_qmlcontext.cpp +++ b/tests/auto/declarative/qmlcontext/tst_qmlcontext.cpp @@ -244,7 +244,7 @@ private: #define TEST_CONTEXT_PROPERTY(ctxt, name, value) \ { \ QmlComponent component(&engine); \ - component.setData("import Qt 4.6; Object { property var test: " #name " }", QUrl()); \ + component.setData("import Qt 4.6; QtObject { property var test: " #name " }", QUrl()); \ \ QObject *obj = component.create(ctxt); \ \ @@ -294,7 +294,7 @@ void tst_qmlcontext::setContextProperty() // Changes in context properties { QmlComponent component(&engine); - component.setData("import Qt 4.6; Object { property var test: a }", QUrl()); + component.setData("import Qt 4.6; QtObject { property var test: a }", QUrl()); QObject *obj = component.create(&ctxt2); @@ -306,7 +306,7 @@ void tst_qmlcontext::setContextProperty() } { QmlComponent component(&engine); - component.setData("import Qt 4.6; Object { property var test: b }", QUrl()); + component.setData("import Qt 4.6; QtObject { property var test: b }", QUrl()); QObject *obj = component.create(&ctxt2); @@ -320,7 +320,7 @@ void tst_qmlcontext::setContextProperty() } { QmlComponent component(&engine); - component.setData("import Qt 4.6; Object { property var test: e.a }", QUrl()); + component.setData("import Qt 4.6; QtObject { property var test: e.a }", QUrl()); QObject *obj = component.create(&ctxt2); @@ -334,7 +334,7 @@ void tst_qmlcontext::setContextProperty() // New context properties { QmlComponent component(&engine); - component.setData("import Qt 4.6; Object { property var test: a }", QUrl()); + component.setData("import Qt 4.6; QtObject { property var test: a }", QUrl()); QObject *obj = component.create(&ctxt2); @@ -348,7 +348,7 @@ void tst_qmlcontext::setContextProperty() // Setting an object-variant context property { QmlComponent component(&engine); - component.setData("import Qt 4.6; Object { id: root; property int a: 10; property int test: ctxtProp.a; property var obj: root; }", QUrl()); + component.setData("import Qt 4.6; QtObject { id: root; property int a: 10; property int test: ctxtProp.a; property var obj: root; }", QUrl()); QmlContext ctxt(engine.rootContext()); ctxt.setContextProperty("ctxtProp", QVariant()); @@ -400,7 +400,7 @@ void tst_qmlcontext::addDefaultObject() // Changes in context properties { QmlComponent component(&engine); - component.setData("import Qt 4.6; Object { property var test: a }", QUrl()); + component.setData("import Qt 4.6; QtObject { property var test: a }", QUrl()); QObject *obj = component.create(&ctxt); diff --git a/tests/auto/declarative/qmldom/tst_qmldom.cpp b/tests/auto/declarative/qmldom/tst_qmldom.cpp index 9e1a2a8..6527b36 100644 --- a/tests/auto/declarative/qmldom/tst_qmldom.cpp +++ b/tests/auto/declarative/qmldom/tst_qmldom.cpp @@ -452,7 +452,7 @@ void tst_qmldom::loadDynamicProperty() " property date h\n" " property var i\n" " property variant j\n" - " property Object k\n" + " property QtObject k\n" "}"; QmlDomDocument document; @@ -486,7 +486,7 @@ void tst_qmldom::loadDynamicProperty() DP_TEST(7, h, QVariant::Date, 168, 15, "date"); DP_TEST(8, i, qMetaTypeId<QVariant>(), 188, 14, "var"); DP_TEST(9, j, qMetaTypeId<QVariant>(), 207, 18, "variant"); - DP_TEST(10, k, -1, 230, 17, "Object"); + DP_TEST(10, k, -1, 230, 17, "QtObject"); } { @@ -494,7 +494,7 @@ void tst_qmldom::loadDynamicProperty() "Item {\n" " property int a: 12\n" " property int b: a + 6\n" - " default property Object c\n" + " default property QtObject c\n" "}\n"; QmlDomDocument document; diff --git a/tests/auto/declarative/qmlecmascript/data/NestedTypeTransientErrors.qml b/tests/auto/declarative/qmlecmascript/data/NestedTypeTransientErrors.qml index e19bf24..7c32e56 100644 --- a/tests/auto/declarative/qmlecmascript/data/NestedTypeTransientErrors.qml +++ b/tests/auto/declarative/qmlecmascript/data/NestedTypeTransientErrors.qml @@ -1,10 +1,10 @@ import Qt 4.6 -Object { +QtObject { property int b: obj.prop.a property var prop; - prop: Object { + prop: QtObject { property int a: 10 } } diff --git a/tests/auto/declarative/qmlecmascript/data/aliasPropertyAndBinding.qml b/tests/auto/declarative/qmlecmascript/data/aliasPropertyAndBinding.qml index 6143164..7fdd8ca 100644 --- a/tests/auto/declarative/qmlecmascript/data/aliasPropertyAndBinding.qml +++ b/tests/auto/declarative/qmlecmascript/data/aliasPropertyAndBinding.qml @@ -5,7 +5,7 @@ MyQmlObject { property alias c1: MyObject.c1 property int c2: 3 property int c3: c2 - objectProperty: Object { + objectProperty: QtObject { id: MyObject property int c1 } diff --git a/tests/auto/declarative/qmlecmascript/data/extendedObjectPropertyLookup.qml b/tests/auto/declarative/qmlecmascript/data/extendedObjectPropertyLookup.qml index 8ff3aeb..ab379c1 100644 --- a/tests/auto/declarative/qmlecmascript/data/extendedObjectPropertyLookup.qml +++ b/tests/auto/declarative/qmlecmascript/data/extendedObjectPropertyLookup.qml @@ -1,7 +1,7 @@ import Qt.test 1.0 import Qt 4.6 -Object { +QtObject { property MyExtendedObject a; a: MyExtendedObject { id: Root } property int b: Math.max(Root.extendedProperty, 0) diff --git a/tests/auto/declarative/qmlecmascript/data/idShortcutInvalidates.1.qml b/tests/auto/declarative/qmlecmascript/data/idShortcutInvalidates.1.qml index ccb3a22..b377b94 100644 --- a/tests/auto/declarative/qmlecmascript/data/idShortcutInvalidates.1.qml +++ b/tests/auto/declarative/qmlecmascript/data/idShortcutInvalidates.1.qml @@ -6,7 +6,7 @@ MyQmlObject { property var obj - obj: Object { + obj: QtObject { id: OtherObject } } diff --git a/tests/auto/declarative/qmlecmascript/data/idShortcutInvalidates.qml b/tests/auto/declarative/qmlecmascript/data/idShortcutInvalidates.qml index 6c1fca6..40cacf6 100644 --- a/tests/auto/declarative/qmlecmascript/data/idShortcutInvalidates.qml +++ b/tests/auto/declarative/qmlecmascript/data/idShortcutInvalidates.qml @@ -6,7 +6,7 @@ MyQmlObject { property var obj - obj: Object { + obj: QtObject { id: OtherObject } } diff --git a/tests/auto/declarative/qmlecmascript/data/listProperties.qml b/tests/auto/declarative/qmlecmascript/data/listProperties.qml index 73a1d6f..cae1721 100644 --- a/tests/auto/declarative/qmlecmascript/data/listProperties.qml +++ b/tests/auto/declarative/qmlecmascript/data/listProperties.qml @@ -5,14 +5,14 @@ MyQmlObject { id: root objectListProperty: [ - Object { property int a: 10 }, - Object { property int a: 11 } + QtObject { property int a: 10 }, + QtObject { property int a: 11 } ] objectQmlListProperty: [ - Object { property int a: 10 }, - Object { property int a: 1 }, - Object { property int a: 39 } + QtObject { property int a: 10 }, + QtObject { property int a: 1 }, + QtObject { property int a: 39 } ] Script { diff --git a/tests/auto/declarative/qmlecmascript/data/methods.3.qml b/tests/auto/declarative/qmlecmascript/data/methods.3.qml index 2efcf6a..79efc50 100644 --- a/tests/auto/declarative/qmlecmascript/data/methods.3.qml +++ b/tests/auto/declarative/qmlecmascript/data/methods.3.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { function testFunction() { return 19; } property int test: testFunction() diff --git a/tests/auto/declarative/qmlecmascript/data/scope.2.qml b/tests/auto/declarative/qmlecmascript/data/scope.2.qml index 433a22e..8e5aa0b 100644 --- a/tests/auto/declarative/qmlecmascript/data/scope.2.qml +++ b/tests/auto/declarative/qmlecmascript/data/scope.2.qml @@ -9,17 +9,17 @@ Item { function c() { return 33; } } - Object { + QtObject { id: a property int value: 19 } - Object { + QtObject { id: c property int value: 24 } - Object { + QtObject { id: nested property int a: 1 property int test: a.value diff --git a/tests/auto/declarative/qmlecmascript/data/shutdownErrors.qml b/tests/auto/declarative/qmlecmascript/data/shutdownErrors.qml index 398489a..5a19639 100644 --- a/tests/auto/declarative/qmlecmascript/data/shutdownErrors.qml +++ b/tests/auto/declarative/qmlecmascript/data/shutdownErrors.qml @@ -5,8 +5,8 @@ Item { Item { id: myObject - property Object object; - object: Object { + property QtObject object; + object: QtObject { property int a: 10 } } diff --git a/tests/auto/declarative/qmlecmascript/data/signalTriggeredBindings.qml b/tests/auto/declarative/qmlecmascript/data/signalTriggeredBindings.qml index f65e253..7d419cd 100644 --- a/tests/auto/declarative/qmlecmascript/data/signalTriggeredBindings.qml +++ b/tests/auto/declarative/qmlecmascript/data/signalTriggeredBindings.qml @@ -6,7 +6,7 @@ MyQmlObject { property alias test1: myObject.test1 property alias test2: myObject.test2 - objectProperty: Object { + objectProperty: QtObject { id: myObject property real test1: base property real test2: Math.max(0, base) diff --git a/tests/auto/declarative/qmlecmascript/data/transientErrors.qml b/tests/auto/declarative/qmlecmascript/data/transientErrors.qml index 4e123c6..fa7e01c 100644 --- a/tests/auto/declarative/qmlecmascript/data/transientErrors.qml +++ b/tests/auto/declarative/qmlecmascript/data/transientErrors.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property var obj: nested property var obj2 diff --git a/tests/auto/declarative/qmlengine/tst_qmlengine.cpp b/tests/auto/declarative/qmlengine/tst_qmlengine.cpp index 5471691..8794af9 100644 --- a/tests/auto/declarative/qmlengine/tst_qmlengine.cpp +++ b/tests/auto/declarative/qmlengine/tst_qmlengine.cpp @@ -189,7 +189,7 @@ void tst_qmlengine::clearComponentCache() { QFile file("temp.qml"); QVERIFY(file.open(QIODevice::WriteOnly)); - file.write("import Qt 4.6\nObject {\nproperty int test: 10\n}\n"); + file.write("import Qt 4.6\nQtObject {\nproperty int test: 10\n}\n"); file.close(); } @@ -206,7 +206,7 @@ void tst_qmlengine::clearComponentCache() { QFile file("temp.qml"); QVERIFY(file.open(QIODevice::WriteOnly)); - file.write("import Qt 4.6\nObject {\nproperty int test: 11\n}\n"); + file.write("import Qt 4.6\nQtObject {\nproperty int test: 11\n}\n"); file.close(); } diff --git a/tests/auto/declarative/qmlgraphicsborderimage/tst_qmlgraphicsborderimage.cpp b/tests/auto/declarative/qmlgraphicsborderimage/tst_qmlgraphicsborderimage.cpp index b281572..f23c7d7 100644 --- a/tests/auto/declarative/qmlgraphicsborderimage/tst_qmlgraphicsborderimage.cpp +++ b/tests/auto/declarative/qmlgraphicsborderimage/tst_qmlgraphicsborderimage.cpp @@ -50,6 +50,7 @@ #include <private/qmlgraphicsimagebase_p.h> #include <private/qmlgraphicsscalegrid_p_p.h> #include <private/qmlgraphicsloader_p.h> +#include <QtDeclarative/qmlcontext.h> #include "../shared/testhttpserver.h" @@ -78,6 +79,7 @@ private slots: void noSource(); void imageSource(); void imageSource_data(); + void clearSource(); void resized(); void smooth(); void tileModes(); @@ -147,6 +149,25 @@ void tst_qmlgraphicsborderimage::imageSource() delete server; } +void tst_qmlgraphicsborderimage::clearSource() +{ + QString componentStr = "import Qt 4.6\nBorderImage { source: srcImage }"; + QmlContext *ctxt = engine.rootContext(); + ctxt->setContextProperty("srcImage", SRCDIR "/data/colors.png"); + QmlComponent component(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsBorderImage *obj = qobject_cast<QmlGraphicsBorderImage*>(component.create()); + QVERIFY(obj != 0); + QVERIFY(obj->status() == QmlGraphicsBorderImage::Ready); + QCOMPARE(obj->width(), 120.); + QCOMPARE(obj->height(), 120.); + + ctxt->setContextProperty("srcImage", ""); + QVERIFY(obj->source().isEmpty()); + QVERIFY(obj->status() == QmlGraphicsBorderImage::Null); + QCOMPARE(obj->width(), 0.); + QCOMPARE(obj->height(), 0.); +} + void tst_qmlgraphicsborderimage::imageSource_data() { QTest::addColumn<QString>("source"); diff --git a/tests/auto/declarative/qmlgraphicsgridview/tst_qmlgraphicsgridview.cpp b/tests/auto/declarative/qmlgraphicsgridview/tst_qmlgraphicsgridview.cpp index 197191e..f31ea49 100644 --- a/tests/auto/declarative/qmlgraphicsgridview/tst_qmlgraphicsgridview.cpp +++ b/tests/auto/declarative/qmlgraphicsgridview/tst_qmlgraphicsgridview.cpp @@ -394,6 +394,9 @@ void tst_QmlGraphicsGridView::removed() // let transitions settle. QTest::qWait(300); + // Setting currentIndex above shouldn't cause view to scroll + QCOMPARE(gridview->viewportY(), 120.0); + model.removeItem(1); // let transitions settle. @@ -408,6 +411,14 @@ void tst_QmlGraphicsGridView::removed() QVERIFY(item->y() == (i/3)*60); } + // Remove currentIndex + QmlGraphicsItem *oldCurrent = gridview->currentItem(); + model.removeItem(9); + QTest::qWait(500); + + QCOMPARE(gridview->currentIndex(), 9); + QVERIFY(gridview->currentItem() != oldCurrent); + gridview->setViewportY(0); // let transitions settle. QTest::qWait(300); @@ -430,6 +441,27 @@ void tst_QmlGraphicsGridView::removed() model.removeItem(30); QVERIFY(gridview->currentIndex() == 31); + // remove current item beyond visible items. + gridview->setCurrentIndex(20); + QTest::qWait(500); + gridview->setViewportY(0); + model.removeItem(20); + QTest::qWait(500); + + QCOMPARE(gridview->currentIndex(), 20); + QVERIFY(gridview->currentItem() != 0); + + // remove item before current, but visible + gridview->setCurrentIndex(8); + QTest::qWait(500); + gridview->setViewportY(240); + oldCurrent = gridview->currentItem(); + model.removeItem(6); + QTest::qWait(500); + + QCOMPARE(gridview->currentIndex(), 7); + QVERIFY(gridview->currentItem() == oldCurrent); + delete canvas; } diff --git a/tests/auto/declarative/qmlgraphicsimage/data/colors.png b/tests/auto/declarative/qmlgraphicsimage/data/colors.png Binary files differnew file mode 100644 index 0000000..dfb62f3 --- /dev/null +++ b/tests/auto/declarative/qmlgraphicsimage/data/colors.png diff --git a/tests/auto/declarative/qmlgraphicsimage/qmlgraphicsimage.pro b/tests/auto/declarative/qmlgraphicsimage/qmlgraphicsimage.pro new file mode 100644 index 0000000..b5f7f83 --- /dev/null +++ b/tests/auto/declarative/qmlgraphicsimage/qmlgraphicsimage.pro @@ -0,0 +1,9 @@ +load(qttest_p4) +contains(QT_CONFIG,declarative): QT += declarative gui network +macx:CONFIG -= app_bundle + +HEADERS += ../shared/testhttpserver.h +SOURCES += tst_qmlgraphicsimage.cpp ../shared/testhttpserver.cpp + +# Define SRCDIR equal to test's source directory +DEFINES += SRCDIR=\\\"$$PWD\\\" diff --git a/tests/auto/declarative/qmlgraphicsimage/tst_qmlgraphicsimage.cpp b/tests/auto/declarative/qmlgraphicsimage/tst_qmlgraphicsimage.cpp new file mode 100644 index 0000000..5ce5faf --- /dev/null +++ b/tests/auto/declarative/qmlgraphicsimage/tst_qmlgraphicsimage.cpp @@ -0,0 +1,206 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite 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 <qtest.h> +#include <QTextDocument> +#include <QTcpServer> +#include <QTcpSocket> +#include <QDir> + +#include <QtDeclarative/qmlengine.h> +#include <QtDeclarative/qmlcomponent.h> +#include <private/qmlgraphicsimage_p.h> +#include <private/qmlgraphicsimagebase_p.h> +#include <private/qmlgraphicsloader_p.h> +#include <QtDeclarative/qmlcontext.h> + +#include "../shared/testhttpserver.h" + + +#define SERVER_PORT 14445 +#define SERVER_ADDR "http://127.0.0.1:14445" + +#define TRY_WAIT(expr) \ + do { \ + for (int ii = 0; ii < 6; ++ii) { \ + if ((expr)) break; \ + QTest::qWait(50); \ + } \ + QVERIFY((expr)); \ + } while (false) + + +class tst_qmlgraphicsimage : public QObject + +{ + Q_OBJECT +public: + tst_qmlgraphicsimage(); + +private slots: + void noSource(); + void imageSource(); + void imageSource_data(); + void clearSource(); + void resized(); + void smooth(); + +private: + QmlEngine engine; +}; + +tst_qmlgraphicsimage::tst_qmlgraphicsimage() +{ +} + +void tst_qmlgraphicsimage::noSource() +{ + QString componentStr = "import Qt 4.6\nImage { source: \"\" }"; + QmlComponent component(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsImage *obj = qobject_cast<QmlGraphicsImage*>(component.create()); + QVERIFY(obj != 0); + QCOMPARE(obj->source(), QUrl()); + QVERIFY(obj->status() == QmlGraphicsImage::Null); + QCOMPARE(obj->width(), 0.); + QCOMPARE(obj->height(), 0.); + QCOMPARE(obj->fillMode(), QmlGraphicsImage::Stretch); + QCOMPARE(obj->progress(), 0.0); + + delete obj; +} + +void tst_qmlgraphicsimage::imageSource() +{ + QFETCH(QString, source); + QFETCH(bool, remote); + QFETCH(bool, valid); + + TestHTTPServer server(SERVER_PORT); + if (remote) { + QVERIFY(server.isValid()); + server.serveDirectory(SRCDIR "/data"); + } + + QString componentStr = "import Qt 4.6\nImage { source: \"" + source + "\" }"; + QmlComponent component(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsImage *obj = qobject_cast<QmlGraphicsImage*>(component.create()); + QVERIFY(obj != 0); + + if (remote) + TRY_WAIT(obj->status() == QmlGraphicsImage::Loading); + + QCOMPARE(obj->source(), remote ? source : QUrl::fromLocalFile(source)); + + if (valid) { + TRY_WAIT(obj->status() == QmlGraphicsImage::Ready); + QCOMPARE(obj->width(), 120.); + QCOMPARE(obj->height(), 120.); + QCOMPARE(obj->fillMode(), QmlGraphicsImage::Stretch); + QCOMPARE(obj->progress(), 1.0); + } else { + TRY_WAIT(obj->status() == QmlGraphicsImage::Error); + } + + delete obj; +} + +void tst_qmlgraphicsimage::clearSource() +{ + QString componentStr = "import Qt 4.6\nImage { source: srcImage }"; + QmlContext *ctxt = engine.rootContext(); + ctxt->setContextProperty("srcImage", SRCDIR "/data/colors.png"); + QmlComponent component(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsImage *obj = qobject_cast<QmlGraphicsImage*>(component.create()); + QVERIFY(obj != 0); + QVERIFY(obj->status() == QmlGraphicsImage::Ready); + QCOMPARE(obj->width(), 120.); + QCOMPARE(obj->height(), 120.); + QCOMPARE(obj->progress(), 1.0); + + ctxt->setContextProperty("srcImage", ""); + QVERIFY(obj->source().isEmpty()); + QVERIFY(obj->status() == QmlGraphicsImage::Null); + QCOMPARE(obj->width(), 0.); + QCOMPARE(obj->height(), 0.); + QCOMPARE(obj->progress(), 0.0); +} + +void tst_qmlgraphicsimage::imageSource_data() +{ + QTest::addColumn<QString>("source"); + QTest::addColumn<bool>("remote"); + QTest::addColumn<bool>("valid"); + + QTest::newRow("local") << SRCDIR "/data/colors.png" << false << true; + QTest::newRow("local not found") << SRCDIR "/data/no-such-file.png" << false << false; + QTest::newRow("remote") << SERVER_ADDR "/colors.png" << true << true; + QTest::newRow("remote not found") << SERVER_ADDR "/no-such-file.png" << true << false; +} + +void tst_qmlgraphicsimage::resized() +{ + QString componentStr = "import Qt 4.6\nImage { source: \"" SRCDIR "/data/colors.png\"; width: 300; height: 300 }"; + QmlComponent component(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsImage *obj = qobject_cast<QmlGraphicsImage*>(component.create()); + QVERIFY(obj != 0); + QCOMPARE(obj->width(), 300.); + QCOMPARE(obj->height(), 300.); + QCOMPARE(obj->fillMode(), QmlGraphicsImage::Stretch); + + delete obj; +} + +void tst_qmlgraphicsimage::smooth() +{ + QString componentStr = "import Qt 4.6\nImage { source: \"" SRCDIR "/data/colors.png\"; smooth: true; width: 300; height: 300 }"; + QmlComponent component(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsImage *obj = qobject_cast<QmlGraphicsImage*>(component.create()); + QVERIFY(obj != 0); + QCOMPARE(obj->width(), 300.); + QCOMPARE(obj->height(), 300.); + QCOMPARE(obj->smooth(), true); + QCOMPARE(obj->fillMode(), QmlGraphicsImage::Stretch); + + delete obj; +} + +QTEST_MAIN(tst_qmlgraphicsimage) + +#include "tst_qmlgraphicsimage.moc" diff --git a/tests/auto/declarative/qmlgraphicslistview/tst_qmlgraphicslistview.cpp b/tests/auto/declarative/qmlgraphicslistview/tst_qmlgraphicslistview.cpp index e9f785b..08043f3 100644 --- a/tests/auto/declarative/qmlgraphicslistview/tst_qmlgraphicslistview.cpp +++ b/tests/auto/declarative/qmlgraphicslistview/tst_qmlgraphicslistview.cpp @@ -70,6 +70,9 @@ private slots: void qListModelInterface_moved(); void qAbstractItemModel_moved(); + void qListModelInterface_clear(); + void qAbstractItemModel_clear(); + void itemList(); void currentIndex(); void enforceRange(); @@ -83,6 +86,7 @@ private: template <class T> void inserted(); template <class T> void removed(bool animated); template <class T> void moved(); + template <class T> void clear(); QmlView *createView(const QString &filename); template<typename T> T *findItem(QmlGraphicsItem *parent, const QString &id, int index=-1); @@ -201,6 +205,12 @@ public: emit itemsChanged(index, 1, roles()); } + void clear() { + int count = list.count(); + list.clear(); + emit itemsRemoved(0, count); + } + private: QList<QPair<QString,QString> > list; }; @@ -262,6 +272,13 @@ public: emit dataChanged(index(idx,0), index(idx,0)); } + void clear() { + int count = list.count(); + emit beginRemoveRows(QModelIndex(), 0, count-1); + list.clear(); + emit endRemoveRows(); + } + private: QList<QPair<QString,QString> > list; }; @@ -571,6 +588,15 @@ void tst_QmlGraphicsListView::removed(bool animated) QCOMPARE(item->y(),40+i*20.0); } + // Remove current index + QVERIFY(listview->currentIndex() == 9); + QmlGraphicsItem *oldCurrent = listview->currentItem(); + model.removeItem(9); + QTest::qWait(500); + + QCOMPARE(listview->currentIndex(), 9); + QVERIFY(listview->currentItem() != oldCurrent); + listview->setViewportY(40); // That's the top now // let transitions settle. QTest::qWait(500); @@ -587,6 +613,7 @@ void tst_QmlGraphicsListView::removed(bool animated) // remove current item beyond visible items. listview->setCurrentIndex(20); QTest::qWait(500); + listview->setViewportY(40); model.removeItem(20); QTest::qWait(500); @@ -596,7 +623,7 @@ void tst_QmlGraphicsListView::removed(bool animated) // remove item before current, but visible listview->setCurrentIndex(8); QTest::qWait(500); - QmlGraphicsItem *oldCurrent = listview->currentItem(); + oldCurrent = listview->currentItem(); model.removeItem(6); QTest::qWait(500); @@ -607,6 +634,43 @@ void tst_QmlGraphicsListView::removed(bool animated) } template <class T> +void tst_QmlGraphicsListView::clear() +{ + QmlView *canvas = createView(SRCDIR "/data/listview.qml"); + + T model; + for (int i = 0; i < 30; i++) + model.addItem("Item" + QString::number(i), ""); + + QmlContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("testModel", &model); + + TestObject *testObject = new TestObject; + ctxt->setContextProperty("testObject", testObject); + + canvas->execute(); + qApp->processEvents(); + + QmlGraphicsListView *listview = findItem<QmlGraphicsListView>(canvas->root(), "list"); + QVERIFY(listview != 0); + + QmlGraphicsItem *viewport = listview->viewport(); + QVERIFY(viewport != 0); + + model.clear(); + + // let transitions settle. + QTest::qWait(500); + + QVERIFY(listview->count() == 0); + QVERIFY(listview->currentItem() == 0); + QVERIFY(listview->viewportY() == 0); + + delete canvas; +} + + +template <class T> void tst_QmlGraphicsListView::moved() { QmlView *canvas = createView(SRCDIR "/data/listview.qml"); @@ -1123,6 +1187,15 @@ void tst_QmlGraphicsListView::qAbstractItemModel_moved() moved<TestModel2>(); } +void tst_QmlGraphicsListView::qListModelInterface_clear() +{ + clear<TestModel>(); +} + +void tst_QmlGraphicsListView::qAbstractItemModel_clear() +{ + clear<TestModel2>(); +} QmlView *tst_QmlGraphicsListView::createView(const QString &filename) { diff --git a/tests/auto/declarative/qmlgraphicsloader/tst_qmlgraphicsloader.cpp b/tests/auto/declarative/qmlgraphicsloader/tst_qmlgraphicsloader.cpp index a5f769e..b1e76e1 100644 --- a/tests/auto/declarative/qmlgraphicsloader/tst_qmlgraphicsloader.cpp +++ b/tests/auto/declarative/qmlgraphicsloader/tst_qmlgraphicsloader.cpp @@ -77,8 +77,9 @@ private slots: void sizeLoaderToItem(); void sizeItemToLoader(); void noResize(); - void networkRequest(); + void networkRequestUrl(); void failNetworkRequest(); +// void networkComponent(); private: QmlEngine engine; @@ -285,7 +286,7 @@ void tst_QmlGraphicsLoader::noResize() QCOMPARE(rect->height(), 60.0); } -void tst_QmlGraphicsLoader::networkRequest() +void tst_QmlGraphicsLoader::networkRequestUrl() { TestHTTPServer server(SERVER_PORT); QVERIFY(server.isValid()); @@ -304,6 +305,37 @@ void tst_QmlGraphicsLoader::networkRequest() delete loader; } +/* XXX Component waits until all dependencies are loaded. Is this actually possible? +void tst_QmlGraphicsLoader::networkComponent() +{ + TestHTTPServer server(SERVER_PORT); + QVERIFY(server.isValid()); + server.serveDirectory("slowdata", TestHTTPServer::Delay); + + QmlComponent component(&engine, QByteArray( + "import Qt 4.6\n" + "import \"http://127.0.0.1:14445/\" as NW\n" + "Item {\n" + " Component { id: comp; NW.SlowRect {} }\n" + " Loader { sourceComponent: comp } }") + , TEST_FILE("")); + + QmlGraphicsItem *item = qobject_cast<QmlGraphicsItem*>(component.create()); + QVERIFY(item); + + QmlGraphicsLoader *loader = qobject_cast<QmlGraphicsLoader*>(item->QGraphicsObject::children().at(1)); + QVERIFY(loader); + TRY_WAIT(loader->status() == QmlGraphicsLoader::Ready); + + QVERIFY(loader->item()); + QCOMPARE(loader->progress(), 1.0); + QCOMPARE(loader->status(), QmlGraphicsLoader::Ready); + QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 1); + + delete loader; +} +*/ + void tst_QmlGraphicsLoader::failNetworkRequest() { TestHTTPServer server(SERVER_PORT); diff --git a/tests/auto/declarative/qmlgraphicswebview/data/javaScript.qml b/tests/auto/declarative/qmlgraphicswebview/data/javaScript.qml index 28742f3..07eee88 100644 --- a/tests/auto/declarative/qmlgraphicswebview/data/javaScript.qml +++ b/tests/auto/declarative/qmlgraphicswebview/data/javaScript.qml @@ -3,7 +3,7 @@ import Qt 4.6 WebView { url: "javaScript.html" javaScriptWindowObjects: [ - Object { + QtObject { property string qmlprop: "qmlvalue" WebView.windowObjectName: "myjsname" } diff --git a/tests/auto/declarative/qmlinfo/data/NestedObject.qml b/tests/auto/declarative/qmlinfo/data/NestedObject.qml index ac96d20..cd5b426 100644 --- a/tests/auto/declarative/qmlinfo/data/NestedObject.qml +++ b/tests/auto/declarative/qmlinfo/data/NestedObject.qml @@ -1,8 +1,8 @@ import Qt 4.6 -Object { +QtObject { property var nested - nested: Object {} + nested: QtObject {} } diff --git a/tests/auto/declarative/qmlinfo/data/nestedQmlObject.qml b/tests/auto/declarative/qmlinfo/data/nestedQmlObject.qml index ee98354..a2ce78a 100644 --- a/tests/auto/declarative/qmlinfo/data/nestedQmlObject.qml +++ b/tests/auto/declarative/qmlinfo/data/nestedQmlObject.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property var nested nested: NestedObject { } property var nested2: nested.nested diff --git a/tests/auto/declarative/qmlinfo/data/qmlObject.qml b/tests/auto/declarative/qmlinfo/data/qmlObject.qml index b86063b..ce05f89 100644 --- a/tests/auto/declarative/qmlinfo/data/qmlObject.qml +++ b/tests/auto/declarative/qmlinfo/data/qmlObject.qml @@ -1,8 +1,8 @@ import Qt 4.6 -Object { +QtObject { property var nested - nested: Object { + nested: QtObject { } } diff --git a/tests/auto/declarative/qmllanguage/data/Alias.qml b/tests/auto/declarative/qmllanguage/data/Alias.qml index 8264e0d..af6187a 100644 --- a/tests/auto/declarative/qmllanguage/data/Alias.qml +++ b/tests/auto/declarative/qmllanguage/data/Alias.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { id: Root property int value: 1892 property alias aliasValue: Root.value diff --git a/tests/auto/declarative/qmllanguage/data/Alias2.qml b/tests/auto/declarative/qmllanguage/data/Alias2.qml index b7e81a5..6362b2d 100644 --- a/tests/auto/declarative/qmllanguage/data/Alias2.qml +++ b/tests/auto/declarative/qmllanguage/data/Alias2.qml @@ -1,7 +1,7 @@ import Test 1.0 import Qt 4.6 -Object { +QtObject { property var other other: MyTypeObject { id: obj } property alias enumAlias: obj.enumProperty; diff --git a/tests/auto/declarative/qmllanguage/data/ComponentComposite.qml b/tests/auto/declarative/qmllanguage/data/ComponentComposite.qml index f8726ef..05fbc3f 100644 --- a/tests/auto/declarative/qmllanguage/data/ComponentComposite.qml +++ b/tests/auto/declarative/qmllanguage/data/ComponentComposite.qml @@ -1,5 +1,5 @@ import Qt 4.6 Component { - Object {} + QtObject {} } diff --git a/tests/auto/declarative/qmllanguage/data/CompositeType.qml b/tests/auto/declarative/qmllanguage/data/CompositeType.qml index 8c5094b..99d010f 100644 --- a/tests/auto/declarative/qmllanguage/data/CompositeType.qml +++ b/tests/auto/declarative/qmllanguage/data/CompositeType.qml @@ -1,4 +1,4 @@ import Qt 4.6 -Object { +QtObject { } diff --git a/tests/auto/declarative/qmllanguage/data/CompositeType3.qml b/tests/auto/declarative/qmllanguage/data/CompositeType3.qml index bb5469a..d08f35b 100644 --- a/tests/auto/declarative/qmllanguage/data/CompositeType3.qml +++ b/tests/auto/declarative/qmllanguage/data/CompositeType3.qml @@ -1,5 +1,5 @@ import Qt 4.6 -Object { +QtObject { property int a } diff --git a/tests/auto/declarative/qmllanguage/data/DynamicPropertiesNestedType.qml b/tests/auto/declarative/qmllanguage/data/DynamicPropertiesNestedType.qml index 5c2edb4..aefbf9a 100644 --- a/tests/auto/declarative/qmllanguage/data/DynamicPropertiesNestedType.qml +++ b/tests/auto/declarative/qmllanguage/data/DynamicPropertiesNestedType.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property int super_a: 10 property int super_c: 14 } diff --git a/tests/auto/declarative/qmllanguage/data/NestedAlias.qml b/tests/auto/declarative/qmllanguage/data/NestedAlias.qml index 93a5454..5155612 100644 --- a/tests/auto/declarative/qmllanguage/data/NestedAlias.qml +++ b/tests/auto/declarative/qmllanguage/data/NestedAlias.qml @@ -1,13 +1,13 @@ import Qt 4.6 -Object { - property Object o1 - property Object o2 +QtObject { + property QtObject o1 + property QtObject o2 property alias a: object2.a - o1: Object { id: object1 } - o2: Object { + o1: QtObject { id: object1 } + o2: QtObject { id: object2 property int a: 1923 } diff --git a/tests/auto/declarative/qmllanguage/data/alias.1.qml b/tests/auto/declarative/qmllanguage/data/alias.1.qml index 492d99a..3ad8f38 100644 --- a/tests/auto/declarative/qmllanguage/data/alias.1.qml +++ b/tests/auto/declarative/qmllanguage/data/alias.1.qml @@ -1,7 +1,7 @@ import Test 1.0 import Qt 4.6 -Object { +QtObject { id: Root property int value: 10 property alias valueAlias: Root.value diff --git a/tests/auto/declarative/qmllanguage/data/alias.3.qml b/tests/auto/declarative/qmllanguage/data/alias.3.qml index e25fbae..fa8a253 100644 --- a/tests/auto/declarative/qmllanguage/data/alias.3.qml +++ b/tests/auto/declarative/qmllanguage/data/alias.3.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property var other other: Alias { id: MyAliasObject } diff --git a/tests/auto/declarative/qmllanguage/data/alias.5.qml b/tests/auto/declarative/qmllanguage/data/alias.5.qml index 39bfd9b..4316d0d 100644 --- a/tests/auto/declarative/qmllanguage/data/alias.5.qml +++ b/tests/auto/declarative/qmllanguage/data/alias.5.qml @@ -1,7 +1,7 @@ import Qt 4.6 import Test 1.0 -Object { +QtObject { property alias otherAlias: otherObject property var other diff --git a/tests/auto/declarative/qmllanguage/data/alias.6.qml b/tests/auto/declarative/qmllanguage/data/alias.6.qml index aac0ef3..e3af230 100644 --- a/tests/auto/declarative/qmllanguage/data/alias.6.qml +++ b/tests/auto/declarative/qmllanguage/data/alias.6.qml @@ -1,7 +1,7 @@ import Qt 4.6 -Object { - property Object o; +QtObject { + property QtObject o; property alias a: object.a o: NestedAlias { id: object } } diff --git a/tests/auto/declarative/qmllanguage/data/alias.7.qml b/tests/auto/declarative/qmllanguage/data/alias.7.qml index d3cf5fe..a9a57eb 100644 --- a/tests/auto/declarative/qmllanguage/data/alias.7.qml +++ b/tests/auto/declarative/qmllanguage/data/alias.7.qml @@ -1,14 +1,14 @@ import Qt 4.6 -Object { - property Object object +QtObject { + property QtObject object property alias aliasedObject: target.object - object: Object { + object: QtObject { id: target - property Object object - object: Object {} + property QtObject object + object: QtObject {} } } diff --git a/tests/auto/declarative/qmllanguage/data/assignCompositeToType.qml b/tests/auto/declarative/qmllanguage/data/assignCompositeToType.qml index ec2867d..f6422bd 100644 --- a/tests/auto/declarative/qmllanguage/data/assignCompositeToType.qml +++ b/tests/auto/declarative/qmllanguage/data/assignCompositeToType.qml @@ -1,11 +1,11 @@ import Qt 4.6 import Test 1.0 -Object { - property Object myProperty - property Object myProperty2 - property Object myProperty3 - property Object myProperty4 +QtObject { + property QtObject myProperty + property QtObject myProperty2 + property QtObject myProperty3 + property QtObject myProperty4 property MyQmlObject myProperty5 property MyQmlObject myProperty6 diff --git a/tests/auto/declarative/qmllanguage/data/assignObjectToVariant.qml b/tests/auto/declarative/qmllanguage/data/assignObjectToVariant.qml index 28c68c4..0ff9370 100644 --- a/tests/auto/declarative/qmllanguage/data/assignObjectToVariant.qml +++ b/tests/auto/declarative/qmllanguage/data/assignObjectToVariant.qml @@ -1,6 +1,7 @@ import Test 1.0 import Qt 4.6 -Object { + +QtObject { property var a; a: MyQmlObject {} } diff --git a/tests/auto/declarative/qmllanguage/data/attachedProperties.qml b/tests/auto/declarative/qmllanguage/data/attachedProperties.qml index fec96cc..b46ec34 100644 --- a/tests/auto/declarative/qmllanguage/data/attachedProperties.qml +++ b/tests/auto/declarative/qmllanguage/data/attachedProperties.qml @@ -2,7 +2,7 @@ import Test 1.0 import Test 1.0 as Namespace import Qt 4.6 -Object { +QtObject { MyQmlObject.value: 10 Namespace.MyQmlObject.value2: 13 } diff --git a/tests/auto/declarative/qmllanguage/data/component.2.qml b/tests/auto/declarative/qmllanguage/data/component.2.qml index 74a4f89..88e0f73 100644 --- a/tests/auto/declarative/qmllanguage/data/component.2.qml +++ b/tests/auto/declarative/qmllanguage/data/component.2.qml @@ -4,6 +4,6 @@ Item { id: myId Component { id: myId - Object {} + QtObject {} } } diff --git a/tests/auto/declarative/qmllanguage/data/component.3.qml b/tests/auto/declarative/qmllanguage/data/component.3.qml index 043cb6b..287a959 100644 --- a/tests/auto/declarative/qmllanguage/data/component.3.qml +++ b/tests/auto/declarative/qmllanguage/data/component.3.qml @@ -4,6 +4,6 @@ Item { Component { id: myId id: myId2 - Object {} + QtObject {} } } diff --git a/tests/auto/declarative/qmllanguage/data/component.4.qml b/tests/auto/declarative/qmllanguage/data/component.4.qml index 3d115ba..ab1e29b 100644 --- a/tests/auto/declarative/qmllanguage/data/component.4.qml +++ b/tests/auto/declarative/qmllanguage/data/component.4.qml @@ -1,6 +1,6 @@ import Qt 4.6 Component { - Object {} - Object {} + QtObject {} + QtObject {} } diff --git a/tests/auto/declarative/qmllanguage/data/component.5.qml b/tests/auto/declarative/qmllanguage/data/component.5.qml index ab57622..629e998 100644 --- a/tests/auto/declarative/qmllanguage/data/component.5.qml +++ b/tests/auto/declarative/qmllanguage/data/component.5.qml @@ -2,5 +2,5 @@ import Qt 4.6 Component { x: 10 - Object {} + QtObject {} } diff --git a/tests/auto/declarative/qmllanguage/data/component.6.qml b/tests/auto/declarative/qmllanguage/data/component.6.qml index 6adaf0d..2303ebf 100644 --- a/tests/auto/declarative/qmllanguage/data/component.6.qml +++ b/tests/auto/declarative/qmllanguage/data/component.6.qml @@ -1,6 +1,6 @@ import Qt 4.6 Component { - id: Object {} - Object {} + id: QtObject {} + QtObject {} } diff --git a/tests/auto/declarative/qmllanguage/data/componentCompositeType.qml b/tests/auto/declarative/qmllanguage/data/componentCompositeType.qml index 3a1b191..0a7249a 100644 --- a/tests/auto/declarative/qmllanguage/data/componentCompositeType.qml +++ b/tests/auto/declarative/qmllanguage/data/componentCompositeType.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property var test test: ComponentComposite {} diff --git a/tests/auto/declarative/qmllanguage/data/crash2.qml b/tests/auto/declarative/qmllanguage/data/crash2.qml index ae6f650..a22c776 100644 --- a/tests/auto/declarative/qmllanguage/data/crash2.qml +++ b/tests/auto/declarative/qmllanguage/data/crash2.qml @@ -1,5 +1,5 @@ import Qt 4.6 -Object { +QtObject { objectName: "Hello" + "World" } diff --git a/tests/auto/declarative/qmllanguage/data/defaultGrouped.qml b/tests/auto/declarative/qmllanguage/data/defaultGrouped.qml index 39ac5e0..532b2bb 100644 --- a/tests/auto/declarative/qmllanguage/data/defaultGrouped.qml +++ b/tests/auto/declarative/qmllanguage/data/defaultGrouped.qml @@ -4,7 +4,7 @@ import Qt 4.6 MyTypeObject { grouped { script: print(1921) - Object {} + QtObject {} } } diff --git a/tests/auto/declarative/qmllanguage/data/dynamicObjectProperties.qml b/tests/auto/declarative/qmllanguage/data/dynamicObjectProperties.qml index e69ccee..c80a7c0 100644 --- a/tests/auto/declarative/qmllanguage/data/dynamicObjectProperties.qml +++ b/tests/auto/declarative/qmllanguage/data/dynamicObjectProperties.qml @@ -2,10 +2,10 @@ import Test 1.0 import Qt 4.6 import Qt 4.6 as Qt -Object { - property Object objectProperty - property Object objectProperty2 - objectProperty2: Object {} +QtObject { + property QtObject objectProperty + property QtObject objectProperty2 + objectProperty2: QtObject {} property MyComponent myComponentProperty property MyComponent myComponentProperty2 diff --git a/tests/auto/declarative/qmllanguage/data/dynamicProperties.qml b/tests/auto/declarative/qmllanguage/data/dynamicProperties.qml index 17fa974..aef3269 100644 --- a/tests/auto/declarative/qmllanguage/data/dynamicProperties.qml +++ b/tests/auto/declarative/qmllanguage/data/dynamicProperties.qml @@ -1,6 +1,6 @@ import Test 1.0 import Qt 4.6 -Object { +QtObject { default property int intProperty : 10 property bool boolProperty: false property double doubleProperty: -10.1 diff --git a/tests/auto/declarative/qmllanguage/data/dynamicSignalsAndSlots.qml b/tests/auto/declarative/qmllanguage/data/dynamicSignalsAndSlots.qml index 72ec218..737681e 100644 --- a/tests/auto/declarative/qmllanguage/data/dynamicSignalsAndSlots.qml +++ b/tests/auto/declarative/qmllanguage/data/dynamicSignalsAndSlots.qml @@ -1,5 +1,5 @@ import Qt 4.6 -Object { +QtObject { signal signal1 function slot1() {} signal signal2 diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.1.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.1.qml index e99c635..324f79c 100644 --- a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.1.qml +++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.1.qml @@ -1,7 +1,7 @@ import Test 1.0 import Qt 4.6 -Object { +QtObject { MyQmlObject.foo: 10 } diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.10.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.10.qml index 8f987ce..b768e9f 100644 --- a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.10.qml +++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.10.qml @@ -1,6 +1,6 @@ import Test 1.0 as Namespace import Qt 4.6 -Object { +QtObject { Namespace.MadeUpClass.foo: 10 } diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.11.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.11.qml index 18770fc..7b782be 100644 --- a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.11.qml +++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.11.qml @@ -1,7 +1,7 @@ import Test 1.0 as Namespace import Qt 4.6 -Object { +QtObject { Namespace.madeUpClass.foo: 10 } diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.2.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.2.qml index 3c9ae5b..1f47c61 100644 --- a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.2.qml +++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.2.qml @@ -1,6 +1,6 @@ import Test 1.0 as Namespace import Qt 4.6 -Object { +QtObject { Namespace.MyQmlObject.foo: 10 } diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.3.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.3.qml index e9405a4..79c2981 100644 --- a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.3.qml +++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.3.qml @@ -1,7 +1,7 @@ import Test 1.0 import Qt 4.6 -Object { +QtObject { MyQmlObject: 10 } diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.4.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.4.qml index 6fbf718..af0be80 100644 --- a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.4.qml +++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.4.qml @@ -1,7 +1,7 @@ import Test 1.0 as Namespace import Qt 4.6 -Object { +QtObject { Namespace.MyQmlObject: 10 } diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.5.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.5.qml index 1827a16..0546322 100644 --- a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.5.qml +++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.5.qml @@ -1,7 +1,7 @@ import Test 1.0 import Qt 4.6 -Object { - MyQmlObject: Object {} +QtObject { + MyQmlObject: QtObject {} } diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.6.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.6.qml index 5c7f0ec..108109a 100644 --- a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.6.qml +++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.6.qml @@ -1,7 +1,7 @@ import Test 1.0 import Qt 4.6 -Object { - Test.MyQmlObject: Object {} +QtObject { + Test.MyQmlObject: QtObject {} } diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.7.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.7.qml index 841cc08..ccf0353 100644 --- a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.7.qml +++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.7.qml @@ -1,6 +1,6 @@ import Test 1.0 import Qt 4.6 -Object { +QtObject { MyTypeObject.foo: 10 } diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.8.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.8.qml index f1b4b96..e736379 100644 --- a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.8.qml +++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.8.qml @@ -1,6 +1,6 @@ import Test 1.0 as Namespace import Qt 4.6 -Object { +QtObject { Namespace.MyTypeObject.foo: 10 } diff --git a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.9.qml b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.9.qml index 99c4a5c..a095229 100644 --- a/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.9.qml +++ b/tests/auto/declarative/qmllanguage/data/invalidAttachedProperty.9.qml @@ -1,7 +1,7 @@ import Test 1.0 import Qt 4.6 -Object { +QtObject { MadeUpClass.foo: 10 } diff --git a/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.1.qml b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.1.qml index 5e95c48..1167e39 100644 --- a/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.1.qml +++ b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.1.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property var o; o.blah: 10 } diff --git a/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.2.qml b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.2.qml index b11d34c..a0c8306 100644 --- a/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.2.qml +++ b/tests/auto/declarative/qmllanguage/data/invalidGroupedProperty.2.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property int o; o.blah: 10 } diff --git a/tests/auto/declarative/qmllanguage/data/invalidImportID.qml b/tests/auto/declarative/qmllanguage/data/invalidImportID.qml index 75aa06d..30d88d5 100644 --- a/tests/auto/declarative/qmllanguage/data/invalidImportID.qml +++ b/tests/auto/declarative/qmllanguage/data/invalidImportID.qml @@ -1,4 +1,4 @@ import Qt 4.6 import Qt 4.6 as qt -Object {} +QtObject {} diff --git a/tests/auto/declarative/qmllanguage/data/listProperties.qml b/tests/auto/declarative/qmllanguage/data/listProperties.qml index c39ceae..ba9e37c 100644 --- a/tests/auto/declarative/qmllanguage/data/listProperties.qml +++ b/tests/auto/declarative/qmllanguage/data/listProperties.qml @@ -1,9 +1,9 @@ import Qt 4.6 -Object { - property list<Object> listProperty +QtObject { + property list<QtObject> listProperty property int test: listProperty.length - listProperty: [ Object{}, Object {} ] + listProperty: [ QtObject{}, QtObject {} ] } diff --git a/tests/auto/declarative/qmllanguage/data/missingSignal.qml b/tests/auto/declarative/qmllanguage/data/missingSignal.qml index fd489ca..8a87437 100644 --- a/tests/auto/declarative/qmllanguage/data/missingSignal.qml +++ b/tests/auto/declarative/qmllanguage/data/missingSignal.qml @@ -1,5 +1,5 @@ import Test 1.0 import Qt 4.6 -Object { +QtObject { onClicked: print("Hello world!") } diff --git a/tests/auto/declarative/qmllanguage/data/property.1.qml b/tests/auto/declarative/qmllanguage/data/property.1.qml index 62178e5..cadc39a 100644 --- a/tests/auto/declarative/qmllanguage/data/property.1.qml +++ b/tests/auto/declarative/qmllanguage/data/property.1.qml @@ -1,5 +1,5 @@ import Qt 4.6 -Object { +QtObject { property blah a; } diff --git a/tests/auto/declarative/qmllanguage/data/property.2.qml b/tests/auto/declarative/qmllanguage/data/property.2.qml index 1d6d015..e810c6c 100644 --- a/tests/auto/declarative/qmllanguage/data/property.2.qml +++ b/tests/auto/declarative/qmllanguage/data/property.2.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property invalidmodifier<int> a; } diff --git a/tests/auto/declarative/qmllanguage/data/property.3.qml b/tests/auto/declarative/qmllanguage/data/property.3.qml index 1b14b86..04147c2 100644 --- a/tests/auto/declarative/qmllanguage/data/property.3.qml +++ b/tests/auto/declarative/qmllanguage/data/property.3.qml @@ -1,7 +1,7 @@ import Qt 4.6 -Object { - property invalidmodifier<Object> a; +QtObject { + property invalidmodifier<QtObject> a; } diff --git a/tests/auto/declarative/qmllanguage/data/property.4.qml b/tests/auto/declarative/qmllanguage/data/property.4.qml index d256c96..b2ec482 100644 --- a/tests/auto/declarative/qmllanguage/data/property.4.qml +++ b/tests/auto/declarative/qmllanguage/data/property.4.qml @@ -1,5 +1,5 @@ import Qt 4.6 -Object { +QtObject { readonly property int a } diff --git a/tests/auto/declarative/qmllanguage/data/property.5.qml b/tests/auto/declarative/qmllanguage/data/property.5.qml index c3aaf5e..65fafbb 100644 --- a/tests/auto/declarative/qmllanguage/data/property.5.qml +++ b/tests/auto/declarative/qmllanguage/data/property.5.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { readonly property int a: value } diff --git a/tests/auto/declarative/qmllanguage/data/qmlAttachedPropertiesObjectMethod.1.qml b/tests/auto/declarative/qmllanguage/data/qmlAttachedPropertiesObjectMethod.1.qml index 99a9746..429c327 100644 --- a/tests/auto/declarative/qmllanguage/data/qmlAttachedPropertiesObjectMethod.1.qml +++ b/tests/auto/declarative/qmllanguage/data/qmlAttachedPropertiesObjectMethod.1.qml @@ -1,5 +1,5 @@ import Test 1.0 import Qt 4.6 -Object { +QtObject { } diff --git a/tests/auto/declarative/qmllanguage/data/qmlAttachedPropertiesObjectMethod.2.qml b/tests/auto/declarative/qmllanguage/data/qmlAttachedPropertiesObjectMethod.2.qml index 8179dbd..0f57b61 100644 --- a/tests/auto/declarative/qmllanguage/data/qmlAttachedPropertiesObjectMethod.2.qml +++ b/tests/auto/declarative/qmllanguage/data/qmlAttachedPropertiesObjectMethod.2.qml @@ -1,6 +1,6 @@ import Test 1.0 import Qt 4.6 -Object { +QtObject { MyQmlObject.value: 10 } diff --git a/tests/auto/declarative/qmllanguage/data/script.11.qml b/tests/auto/declarative/qmllanguage/data/script.11.qml index d8313a3..6d2d598 100644 --- a/tests/auto/declarative/qmllanguage/data/script.11.qml +++ b/tests/auto/declarative/qmllanguage/data/script.11.qml @@ -1,7 +1,7 @@ import Qt 4.6 -Object { +QtObject { Script { - Object {} + QtObject {} } } diff --git a/tests/auto/declarative/qmllanguage/data/script.12.qml b/tests/auto/declarative/qmllanguage/data/script.12.qml index ea6c482..9ecb5d9 100644 --- a/tests/auto/declarative/qmllanguage/data/script.12.qml +++ b/tests/auto/declarative/qmllanguage/data/script.12.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { var a } diff --git a/tests/auto/declarative/qmllanguage/data/script.2.qml b/tests/auto/declarative/qmllanguage/data/script.2.qml index 18bb7c8..dce1a41 100644 --- a/tests/auto/declarative/qmllanguage/data/script.2.qml +++ b/tests/auto/declarative/qmllanguage/data/script.2.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { Script { id: myScript } diff --git a/tests/auto/declarative/qmllanguage/data/script.3.qml b/tests/auto/declarative/qmllanguage/data/script.3.qml index c2296ff..8621a9a 100644 --- a/tests/auto/declarative/qmllanguage/data/script.3.qml +++ b/tests/auto/declarative/qmllanguage/data/script.3.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { Script { hello: world } diff --git a/tests/auto/declarative/qmllanguage/data/script.4.qml b/tests/auto/declarative/qmllanguage/data/script.4.qml index 08115c2..d89817c 100644 --- a/tests/auto/declarative/qmllanguage/data/script.4.qml +++ b/tests/auto/declarative/qmllanguage/data/script.4.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { Script { source: 10 } diff --git a/tests/auto/declarative/qmllanguage/data/script.5.qml b/tests/auto/declarative/qmllanguage/data/script.5.qml index a3b1a15..8986b3b 100644 --- a/tests/auto/declarative/qmllanguage/data/script.5.qml +++ b/tests/auto/declarative/qmllanguage/data/script.5.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { Script { source: "hello" + ".js" } diff --git a/tests/auto/declarative/qmllanguage/data/script.6.qml b/tests/auto/declarative/qmllanguage/data/script.6.qml index e578629..07e9d78 100644 --- a/tests/auto/declarative/qmllanguage/data/script.6.qml +++ b/tests/auto/declarative/qmllanguage/data/script.6.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { Script { source: "test.js" function helloWorld() {} diff --git a/tests/auto/declarative/qmllanguage/data/script.7.qml b/tests/auto/declarative/qmllanguage/data/script.7.qml index 6bee3f9..fa905e6 100644 --- a/tests/auto/declarative/qmllanguage/data/script.7.qml +++ b/tests/auto/declarative/qmllanguage/data/script.7.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { Script { var a = 10; } diff --git a/tests/auto/declarative/qmllanguage/data/script.8.qml b/tests/auto/declarative/qmllanguage/data/script.8.qml index 55bc05c..f600c88 100644 --- a/tests/auto/declarative/qmllanguage/data/script.8.qml +++ b/tests/auto/declarative/qmllanguage/data/script.8.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { Script { source: "test.js" source: "test2.js" diff --git a/tests/auto/declarative/qmllanguage/data/signal.1.qml b/tests/auto/declarative/qmllanguage/data/signal.1.qml index d0ad155..fbaf017 100644 --- a/tests/auto/declarative/qmllanguage/data/signal.1.qml +++ b/tests/auto/declarative/qmllanguage/data/signal.1.qml @@ -1,5 +1,5 @@ import Qt 4.6 -Object { +QtObject { signal mySignal(nontype a) } diff --git a/tests/auto/declarative/qmllanguage/data/signal.2.qml b/tests/auto/declarative/qmllanguage/data/signal.2.qml index aa45ae9..5049192 100644 --- a/tests/auto/declarative/qmllanguage/data/signal.2.qml +++ b/tests/auto/declarative/qmllanguage/data/signal.2.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { signal mySignal(,) } diff --git a/tests/auto/declarative/qmllanguage/data/signal.3.qml b/tests/auto/declarative/qmllanguage/data/signal.3.qml index f38ccc5..9dd4cc7 100644 --- a/tests/auto/declarative/qmllanguage/data/signal.3.qml +++ b/tests/auto/declarative/qmllanguage/data/signal.3.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { signal mySignal(a) } diff --git a/tests/auto/declarative/qmlqt/data/closestangle.qml b/tests/auto/declarative/qmlqt/data/closestangle.qml index 8f999e3..b5f7fc6 100644 --- a/tests/auto/declarative/qmlqt/data/closestangle.qml +++ b/tests/auto/declarative/qmlqt/data/closestangle.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property var testSame: Qt.closestAngle(0,1) property var testLess: Qt.closestAngle(0,-359) property var testMore: Qt.closestAngle(0,361) diff --git a/tests/auto/declarative/qmlqt/data/createComponent.qml b/tests/auto/declarative/qmlqt/data/createComponent.qml index 57f50d8..d9b70ec 100644 --- a/tests/auto/declarative/qmlqt/data/createComponent.qml +++ b/tests/auto/declarative/qmlqt/data/createComponent.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool incorrectArgCount1: false property bool incorrectArgCount2: false property bool emptyArg: false diff --git a/tests/auto/declarative/qmlqt/data/createComponentData.qml b/tests/auto/declarative/qmlqt/data/createComponentData.qml index 145fe78..a5e99a0 100644 --- a/tests/auto/declarative/qmlqt/data/createComponentData.qml +++ b/tests/auto/declarative/qmlqt/data/createComponentData.qml @@ -1,5 +1,5 @@ import Qt 4.6 -Object { +QtObject { property int test: 1913 } diff --git a/tests/auto/declarative/qmlqt/data/createQmlObject.qml b/tests/auto/declarative/qmlqt/data/createQmlObject.qml index 8e8919a..9150782 100644 --- a/tests/auto/declarative/qmlqt/data/createQmlObject.qml +++ b/tests/auto/declarative/qmlqt/data/createQmlObject.qml @@ -16,14 +16,14 @@ Item { Component.onCompleted: { // errors incorrectArgCount1 = (createQmlObject() == null); - incorrectArgCount2 = (createQmlObject("import Qt 4.6\nObject{}", root, "main.qml", 10) == null); + incorrectArgCount2 = (createQmlObject("import Qt 4.6\nQtObject{}", root, "main.qml", 10) == null); emptyArg = (createQmlObject("", root) == null); - errors = (createQmlObject("import Qt 4.6\nObject{\nproperty int test: 13\nproperty int test: 13\n}", root, "main.qml") == null); - noParent = (createQmlObject("import Qt 4.6\nObject{\nproperty int test: 13}", 0) == null); - notReady = (createQmlObject("import Qt 4.6\nObject{\nBlah{}\n}", root, "http://www.example.com/main.qml") == null); - runtimeError = (createQmlObject("import Qt 4.6\nObject{property int test\nonTestChanged: Object{}\n}", root) == null); + errors = (createQmlObject("import Qt 4.6\nQtObject{\nproperty int test: 13\nproperty int test: 13\n}", root, "main.qml") == null); + noParent = (createQmlObject("import Qt 4.6\nQtObject{\nproperty int test: 13}", 0) == null); + notReady = (createQmlObject("import Qt 4.6\nQtObject{\nBlah{}\n}", root, "http://www.example.com/main.qml") == null); + runtimeError = (createQmlObject("import Qt 4.6\nQtObject{property int test\nonTestChanged: QtObject{}\n}", root) == null); - var o = createQmlObject("import Qt 4.6\nObject{\nproperty int test: 13\n}", root); + var o = createQmlObject("import Qt 4.6\nQtObject{\nproperty int test: 13\n}", root); success = (o.test == 13); createQmlObject("import Qt 4.6\nItem {}\n", root); diff --git a/tests/auto/declarative/qmlqt/data/darker.qml b/tests/auto/declarative/qmlqt/data/darker.qml index 96ffa77..2df067e 100644 --- a/tests/auto/declarative/qmlqt/data/darker.qml +++ b/tests/auto/declarative/qmlqt/data/darker.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property var test1: Qt.darker(Qt.rgba(1, 0.8, 0.3)) property var test2: Qt.darker() property var test3: Qt.darker(Qt.rgba(1, 0.8, 0.3), 10) diff --git a/tests/auto/declarative/qmlqt/data/enums.qml b/tests/auto/declarative/qmlqt/data/enums.qml index f87886e..1efa6f5 100644 --- a/tests/auto/declarative/qmlqt/data/enums.qml +++ b/tests/auto/declarative/qmlqt/data/enums.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property int test1: Qt.Key_Escape property int test2: Qt.DescendingOrder property int test3: Qt.ElideMiddle diff --git a/tests/auto/declarative/qmlqt/data/hsla.qml b/tests/auto/declarative/qmlqt/data/hsla.qml index fedb56a..df51ccd 100644 --- a/tests/auto/declarative/qmlqt/data/hsla.qml +++ b/tests/auto/declarative/qmlqt/data/hsla.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property color test1: Qt.hsla(1, 0, 0, 0.8); property color test2: Qt.hsla(1, 0.5, 0.3); property color test3: Qt.hsla(1, 1); diff --git a/tests/auto/declarative/qmlqt/data/lighter.qml b/tests/auto/declarative/qmlqt/data/lighter.qml index 2e9fdc8..4e0c431 100644 --- a/tests/auto/declarative/qmlqt/data/lighter.qml +++ b/tests/auto/declarative/qmlqt/data/lighter.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property var test1: Qt.lighter(Qt.rgba(1, 0.8, 0.3)) property var test2: Qt.lighter() property var test3: Qt.lighter(Qt.rgba(1, 0.8, 0.3), 10) diff --git a/tests/auto/declarative/qmlqt/data/md5.qml b/tests/auto/declarative/qmlqt/data/md5.qml index 3c96a6b..c474b71 100644 --- a/tests/auto/declarative/qmlqt/data/md5.qml +++ b/tests/auto/declarative/qmlqt/data/md5.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string test1: Qt.md5() property string test2: Qt.md5("Hello World") } diff --git a/tests/auto/declarative/qmlqt/data/point.qml b/tests/auto/declarative/qmlqt/data/point.qml index 582cb00..c383beb 100644 --- a/tests/auto/declarative/qmlqt/data/point.qml +++ b/tests/auto/declarative/qmlqt/data/point.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property var test1: Qt.point(19, 34); property var test2: Qt.point(-3, 109.2); property var test3: Qt.point(-3); diff --git a/tests/auto/declarative/qmlqt/data/rect.qml b/tests/auto/declarative/qmlqt/data/rect.qml index 53d8c38..82b6428 100644 --- a/tests/auto/declarative/qmlqt/data/rect.qml +++ b/tests/auto/declarative/qmlqt/data/rect.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property var test1: Qt.rect(10, 13, 100, 109) property var test2: Qt.rect(-10, 13, 100, 109.6) property var test3: Qt.rect(10, 13); diff --git a/tests/auto/declarative/qmlqt/data/rgba.qml b/tests/auto/declarative/qmlqt/data/rgba.qml index 3fdfe2c..6dd6565 100644 --- a/tests/auto/declarative/qmlqt/data/rgba.qml +++ b/tests/auto/declarative/qmlqt/data/rgba.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property color test1: Qt.rgba(1, 0, 0, 0.8); property color test2: Qt.rgba(1, 0.5, 0.3); property color test3: Qt.rgba(1, 1); diff --git a/tests/auto/declarative/qmlqt/data/size.qml b/tests/auto/declarative/qmlqt/data/size.qml index f0d2e81..05b0317 100644 --- a/tests/auto/declarative/qmlqt/data/size.qml +++ b/tests/auto/declarative/qmlqt/data/size.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property var test1: Qt.size(19, 34); property var test2: Qt.size(3, 109.2); property var test3: Qt.size(-3, 10); diff --git a/tests/auto/declarative/qmlqt/data/tint.qml b/tests/auto/declarative/qmlqt/data/tint.qml index 31e67ba..da8afe2 100644 --- a/tests/auto/declarative/qmlqt/data/tint.qml +++ b/tests/auto/declarative/qmlqt/data/tint.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property color test1: Qt.tint("red", "blue"); property color test2: Qt.tint(Qt.rgba(1, 0, 0), Qt.rgba(0, 0, 0, 0)); property color test3: Qt.tint("red", Qt.rgba(0, 0, 1, 0.5)); // XXX - what should this be? diff --git a/tests/auto/declarative/qmlqt/data/vector.qml b/tests/auto/declarative/qmlqt/data/vector.qml index b879bd6..a471c7a 100644 --- a/tests/auto/declarative/qmlqt/data/vector.qml +++ b/tests/auto/declarative/qmlqt/data/vector.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property var test1: Qt.vector3d(1, 0, 0.9); property var test2: Qt.vector3d(102, -10, -982.1); property var test3: Qt.vector3d(102, -10); diff --git a/tests/auto/declarative/states/tst_states.cpp b/tests/auto/declarative/states/tst_states.cpp index 92d278a..a4da1f1 100644 --- a/tests/auto/declarative/states/tst_states.cpp +++ b/tests/auto/declarative/states/tst_states.cpp @@ -68,6 +68,7 @@ private slots: void restoreEntryValues(); void explicitChanges(); void propertyErrors(); + void incorrectRestoreBug(); }; void tst_states::basicChanges() @@ -711,6 +712,32 @@ void tst_states::propertyErrors() rect->setState("blue"); } +void tst_states::incorrectRestoreBug() +{ + QmlEngine engine; + + QmlComponent rectComponent(&engine, SRCDIR "/data/basicChanges.qml"); + QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create()); + QVERIFY(rect != 0); + + QCOMPARE(rect->color(),QColor("red")); + + rect->setState("blue"); + QCOMPARE(rect->color(),QColor("blue")); + + rect->setState(""); + QCOMPARE(rect->color(),QColor("red")); + + // make sure if we change the base state value, we then restore to it correctly + rect->setColor(QColor("green")); + + rect->setState("blue"); + QCOMPARE(rect->color(),QColor("blue")); + + rect->setState(""); + QCOMPARE(rect->color(),QColor("green")); +} + QTEST_MAIN(tst_states) #include "tst_states.moc" diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.1.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.1.png Binary files differindex c59b816..d4dbc70 100644 --- a/tests/auto/declarative/visual/Package_Views/data/packageviews.1.png +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.1.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.10.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.10.png Binary files differindex 3e79d41..ed9d345 100644 --- a/tests/auto/declarative/visual/Package_Views/data/packageviews.10.png +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.10.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.11.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.11.png Binary files differindex 276e6c8..ed9d345 100644 --- a/tests/auto/declarative/visual/Package_Views/data/packageviews.11.png +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.11.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.12.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.12.png Binary files differindex 276e6c8..45ee400 100644 --- a/tests/auto/declarative/visual/Package_Views/data/packageviews.12.png +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.12.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.13.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.13.png Binary files differindex 1c1f438..c73e158 100644 --- a/tests/auto/declarative/visual/Package_Views/data/packageviews.13.png +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.13.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.14.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.14.png Binary files differindex 1c1f438..e2fff6d 100644 --- a/tests/auto/declarative/visual/Package_Views/data/packageviews.14.png +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.14.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.15.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.15.png Binary files differnew file mode 100644 index 0000000..d7a13df --- /dev/null +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.15.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.16.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.16.png Binary files differnew file mode 100644 index 0000000..beb3094 --- /dev/null +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.16.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.17.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.17.png Binary files differnew file mode 100644 index 0000000..beb3094 --- /dev/null +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.17.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.18.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.18.png Binary files differnew file mode 100644 index 0000000..beb3094 --- /dev/null +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.18.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.19.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.19.png Binary files differnew file mode 100644 index 0000000..d3a2650 --- /dev/null +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.19.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.2.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.2.png Binary files differindex c59b816..a09dd28 100644 --- a/tests/auto/declarative/visual/Package_Views/data/packageviews.2.png +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.2.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.20.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.20.png Binary files differnew file mode 100644 index 0000000..600462a --- /dev/null +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.20.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.21.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.21.png Binary files differnew file mode 100644 index 0000000..6defca0 --- /dev/null +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.21.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.22.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.22.png Binary files differnew file mode 100644 index 0000000..91967e1 --- /dev/null +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.22.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.3.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.3.png Binary files differindex 2b54c1b..d099a79 100644 --- a/tests/auto/declarative/visual/Package_Views/data/packageviews.3.png +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.3.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.4.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.4.png Binary files differindex 346e6eb..385efc8 100644 --- a/tests/auto/declarative/visual/Package_Views/data/packageviews.4.png +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.4.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.5.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.5.png Binary files differindex b7b0cfa..25a7c3c 100644 --- a/tests/auto/declarative/visual/Package_Views/data/packageviews.5.png +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.5.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.6.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.6.png Binary files differindex 3e79d41..25a7c3c 100644 --- a/tests/auto/declarative/visual/Package_Views/data/packageviews.6.png +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.6.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.7.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.7.png Binary files differindex db23a20..7a24f51 100644 --- a/tests/auto/declarative/visual/Package_Views/data/packageviews.7.png +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.7.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.8.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.8.png Binary files differindex 3e79d41..7a24f51 100644 --- a/tests/auto/declarative/visual/Package_Views/data/packageviews.8.png +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.8.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.9.png b/tests/auto/declarative/visual/Package_Views/data/packageviews.9.png Binary files differindex 82a3a0f..45ee400 100644 --- a/tests/auto/declarative/visual/Package_Views/data/packageviews.9.png +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.9.png diff --git a/tests/auto/declarative/visual/Package_Views/data/packageviews.qml b/tests/auto/declarative/visual/Package_Views/data/packageviews.qml index e2323a6..d062667 100644 --- a/tests/auto/declarative/visual/Package_Views/data/packageviews.qml +++ b/tests/auto/declarative/visual/Package_Views/data/packageviews.qml @@ -348,137 +348,217 @@ VisualTest { msec: 1376 hash: "a327426c93b523526f993b5271ab4501" } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 57; y: 164 + modifiers: 0 + sendToViewport: true + } Frame { msec: 1392 hash: "a327426c93b523526f993b5271ab4501" } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 57; y: 162 + modifiers: 0 + sendToViewport: true + } Frame { msec: 1408 hash: "a327426c93b523526f993b5271ab4501" } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 57; y: 159 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 57; y: 156 + modifiers: 0 + sendToViewport: true + } Frame { msec: 1424 hash: "a327426c93b523526f993b5271ab4501" } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 56; y: 152 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 56; y: 147 + modifiers: 0 + sendToViewport: true + } Frame { msec: 1440 - hash: "a327426c93b523526f993b5271ab4501" + hash: "87b7cacfb2d9e8ad916e331b2cf1f13e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 55; y: 141 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 133 + modifiers: 0 + sendToViewport: true } Frame { msec: 1456 - hash: "a327426c93b523526f993b5271ab4501" + hash: "34290c1435c1a96d08152479d2d1334e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 126 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 54; y: 126 + modifiers: 0 + sendToViewport: true } Frame { msec: 1472 - hash: "a327426c93b523526f993b5271ab4501" + hash: "ef5fb09ec8fb4b0d97c864618d6f6231" } Frame { msec: 1488 - hash: "a327426c93b523526f993b5271ab4501" + hash: "d5b4c2e1d4b0bc877c99739a67b4a4fb" } Frame { msec: 1504 - hash: "a327426c93b523526f993b5271ab4501" + hash: "a3623a3f253590d51ee03b6849e88edb" } Frame { msec: 1520 - hash: "a327426c93b523526f993b5271ab4501" + hash: "4c1115f1041629b7c37cf4ae001fd7d3" } Frame { msec: 1536 - hash: "a327426c93b523526f993b5271ab4501" + hash: "845bb3d1f52bee4a469fb12d6875a323" } Frame { msec: 1552 - hash: "a327426c93b523526f993b5271ab4501" + hash: "eb08b5a671149005dbafc8507bb78b18" } Frame { msec: 1568 - hash: "a327426c93b523526f993b5271ab4501" + hash: "16744a5b90b29954faf0710010ac6369" } Frame { msec: 1584 - hash: "a327426c93b523526f993b5271ab4501" + hash: "322bbe367fbbf0bf07f9153da652a5fc" } Frame { msec: 1600 - hash: "a327426c93b523526f993b5271ab4501" + hash: "257769f7c3e24bb2d0cd674dfbe42913" } Frame { msec: 1616 - hash: "a327426c93b523526f993b5271ab4501" + hash: "8e299cbcaeae4d53d0fc05e03d36e0d9" } Frame { msec: 1632 - hash: "a327426c93b523526f993b5271ab4501" + hash: "f3fb7f30336045abb4557247aab5bde1" } Frame { msec: 1648 - hash: "a327426c93b523526f993b5271ab4501" + hash: "468400fb4e9bfa454ea00f19aa5d77b5" } Frame { msec: 1664 - hash: "a327426c93b523526f993b5271ab4501" + hash: "429cc820ada7a515b2cb71f133320949" } Frame { msec: 1680 - hash: "a327426c93b523526f993b5271ab4501" + hash: "721ec7594d8f815e5648eb8d570d1179" } Frame { msec: 1696 - hash: "a327426c93b523526f993b5271ab4501" + hash: "9bc4105a0456c36738c435323e690db1" } Frame { msec: 1712 - hash: "a327426c93b523526f993b5271ab4501" + hash: "e54a84718dbdc45dd814089051772585" } Frame { msec: 1728 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2c969450ede6b6ea7e0e68ee54d02aaa" } Frame { msec: 1744 - hash: "a327426c93b523526f993b5271ab4501" + hash: "c2015dd1d4bd223a7fe1df03027af2f3" } Frame { msec: 1760 - hash: "a327426c93b523526f993b5271ab4501" + hash: "74108fedfb0967adea181893834bcd9b" } Frame { msec: 1776 - hash: "a327426c93b523526f993b5271ab4501" + hash: "b04a22f1cfde6ede57117992cd97dc1c" } Frame { msec: 1792 - hash: "a327426c93b523526f993b5271ab4501" + hash: "271d71cb03dd38100812466a973b79ef" } Frame { msec: 1808 - hash: "a327426c93b523526f993b5271ab4501" + hash: "130709eecd8eca395085020a83e7553a" } Frame { msec: 1824 - hash: "a327426c93b523526f993b5271ab4501" + hash: "a0e5e187ed5245fd766803d266195e6b" } Frame { msec: 1840 - hash: "a327426c93b523526f993b5271ab4501" + hash: "d29c145f3ba39a7c2c6ac54b27f9cea1" } Frame { msec: 1856 - hash: "a327426c93b523526f993b5271ab4501" + hash: "6e41349b4adb6e37a2f9f2482c0aa5b1" } Frame { msec: 1872 - hash: "a327426c93b523526f993b5271ab4501" + hash: "c02c52d3c87c6befb65f3bf392981cd5" } Frame { msec: 1888 - hash: "a327426c93b523526f993b5271ab4501" + hash: "ec48d113c8468bd1e1b465e248eecaee" } Frame { msec: 1904 - hash: "a327426c93b523526f993b5271ab4501" + hash: "a2c9b917d1f0cff0e088d3b624d9eeb8" } Frame { msec: 1920 @@ -486,239 +566,255 @@ VisualTest { } Frame { msec: 1936 - hash: "a327426c93b523526f993b5271ab4501" + hash: "c4d4f8a351316b4a33f42f5fb030f304" } Frame { msec: 1952 - hash: "a327426c93b523526f993b5271ab4501" + hash: "1baee6be1da687309d84a992e430c915" } Frame { msec: 1968 - hash: "a327426c93b523526f993b5271ab4501" + hash: "4245f02817f7a674c34c581cbd9e1181" } Frame { msec: 1984 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2000 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2016 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2032 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2048 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2064 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2080 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2096 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2112 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2128 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2144 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2160 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2176 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2192 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2208 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2224 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2240 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2256 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2272 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2288 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 70; y: 89 + modifiers: 0 + sendToViewport: true } Frame { msec: 2304 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2320 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2336 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2352 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 70; y: 89 + modifiers: 0 + sendToViewport: true } Frame { msec: 2368 - hash: "a327426c93b523526f993b5271ab4501" + hash: "2fa6bb20f29467713c94886c6fffe5e3" } Frame { msec: 2384 - hash: "a327426c93b523526f993b5271ab4501" + hash: "3b9a75225adddb01e92286463e15bf98" } Frame { msec: 2400 - hash: "a327426c93b523526f993b5271ab4501" + hash: "32f99602756898b4ec607d4124b5120f" } Frame { msec: 2416 - hash: "a327426c93b523526f993b5271ab4501" + hash: "60007f14752d2d87ba6e335ad596f1ad" } Frame { msec: 2432 - hash: "a327426c93b523526f993b5271ab4501" + hash: "dcfad2407f53f83964fa7be762a137bd" } Frame { msec: 2448 - hash: "a327426c93b523526f993b5271ab4501" + hash: "fcc1a30a33bec046868734014132eb70" } Frame { msec: 2464 - hash: "a327426c93b523526f993b5271ab4501" + hash: "f60592829a2765b3cd3a0cecb9c45426" } Frame { msec: 2480 - hash: "a327426c93b523526f993b5271ab4501" + hash: "a0e26063acd1b53b5eeeb31187f38336" } Frame { msec: 2496 - hash: "a327426c93b523526f993b5271ab4501" + hash: "d7f3e776038bd479db292bcba3a65fc7" } Frame { msec: 2512 - hash: "a327426c93b523526f993b5271ab4501" + hash: "4af31954235ab8a7cf8462eaa64d7dda" } Frame { msec: 2528 - hash: "a327426c93b523526f993b5271ab4501" + hash: "aff3f287c07f546e0d3e9e68731d82fe" } Frame { msec: 2544 - hash: "a327426c93b523526f993b5271ab4501" + hash: "75fbc4e26466e8a1f66503addfcbb525" } Frame { msec: 2560 - hash: "a327426c93b523526f993b5271ab4501" + hash: "cb4c91f725ec46dd066475efc2bc2d65" } Frame { msec: 2576 - hash: "a327426c93b523526f993b5271ab4501" + hash: "106434203ccc2fd8246c56520095a473" } Frame { msec: 2592 - hash: "a327426c93b523526f993b5271ab4501" + hash: "129ced0e7fc406e81b1ced72397adc5c" } Frame { msec: 2608 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2624 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2640 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2656 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2672 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2688 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2704 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2720 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2736 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2752 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2768 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2784 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2800 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2816 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2832 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2848 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2864 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2880 @@ -726,255 +822,311 @@ VisualTest { } Frame { msec: 2896 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2912 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2928 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2944 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2960 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2976 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 2992 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3008 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3024 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3040 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3056 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3072 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3088 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3104 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3120 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3136 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3152 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3168 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3184 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3200 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3216 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3232 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3248 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3264 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3280 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3296 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3312 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3328 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3344 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3360 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3376 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3392 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 49; y: 162 + modifiers: 0 + sendToViewport: true } Frame { msec: 3408 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" } Frame { msec: 3424 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: 161 + modifiers: 0 + sendToViewport: true } Frame { msec: 3440 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: 159 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 157 + modifiers: 0 + sendToViewport: true } Frame { msec: 3456 - hash: "a327426c93b523526f993b5271ab4501" + hash: "49903693b112d5f35c4e877bef6bbdb0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 153 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: 149 + modifiers: 0 + sendToViewport: true } Frame { msec: 3472 - hash: "a327426c93b523526f993b5271ab4501" + hash: "1c84452b0ce90ae6f136f5bcce408220" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: 144 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: 138 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 50; y: 138 + modifiers: 0 + sendToViewport: true } Frame { msec: 3488 - hash: "a327426c93b523526f993b5271ab4501" + hash: "4c77d402b995297dadb5e671f071605f" } Frame { msec: 3504 - hash: "a327426c93b523526f993b5271ab4501" + hash: "babd28626a81bd48b39b56f8da69c360" } Frame { msec: 3520 - hash: "a327426c93b523526f993b5271ab4501" + hash: "71654a76f9b94fafaf3767003598fb96" } Frame { msec: 3536 - hash: "a327426c93b523526f993b5271ab4501" + hash: "87ad69a660e072e71f940db93be3a949" } Frame { msec: 3552 - hash: "a327426c93b523526f993b5271ab4501" + hash: "147f7f3f1913bc5ac5889c1a4daa8026" } Frame { msec: 3568 - hash: "a327426c93b523526f993b5271ab4501" + hash: "9c26b3ad7a5dacd56028afa7bf4deef6" } Frame { msec: 3584 - hash: "a327426c93b523526f993b5271ab4501" + hash: "18611ff90e5af36c9b6396c3df4cd646" } Frame { msec: 3600 - hash: "a327426c93b523526f993b5271ab4501" + hash: "84701fd73ed8e1951bd4c806b70654ac" } Frame { msec: 3616 - hash: "a327426c93b523526f993b5271ab4501" + hash: "42b40f1683beb23f4fe5ade066c0626f" } Frame { msec: 3632 - hash: "a327426c93b523526f993b5271ab4501" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 177; y: 29 - modifiers: 0 - sendToViewport: true + hash: "8c6aeefaa6f36cdffcf7bdb1597c6fbe" } Frame { msec: 3648 - hash: "a327426c93b523526f993b5271ab4501" + hash: "731cea2e0d8fb8aac6ae919b23b89b87" } Frame { msec: 3664 - hash: "a327426c93b523526f993b5271ab4501" + hash: "d4dc70a8e09e7ec03e7c1f5123b7abef" } Frame { msec: 3680 - hash: "a327426c93b523526f993b5271ab4501" + hash: "5246e2f52aa104e8030eef105a5b5a7c" } Frame { msec: 3696 - hash: "a327426c93b523526f993b5271ab4501" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 177; y: 29 - modifiers: 0 - sendToViewport: true + hash: "a9c3d0034c09ba81d19d57ff550d7b4f" } Frame { msec: 3712 - hash: "a327426c93b523526f993b5271ab4501" + hash: "e9092b1be19273f1f29912cd493dd238" } Frame { msec: 3728 - hash: "39ed6105057543d350665c46abd08eea" + hash: "c2b19c7b818c94e932558676a026f049" } Frame { msec: 3744 - hash: "d7a9b575f3a792de5e1717cb85ee3b5d" + hash: "6627c4d6daab8e6500dbd0d921bc1ebd" } Frame { msec: 3760 - hash: "2a848259290f6654c1ae18cad3449fe2" + hash: "45c584ca18e8bfd6aa495c16a977662a" } Frame { msec: 3776 - hash: "873e4ef69a8d6a5615576680e49a77b7" + hash: "de79039a8bb623f7d48afe1549ae23e0" } Frame { msec: 3792 - hash: "63a588428459dbeaac87799f34bf6c82" + hash: "076d29278466038071095093266553f5" } Frame { msec: 3808 - hash: "87da56ad18ba4a5992898947f6720132" + hash: "73ed162dc5f9983bf22446f63691f7e4" } Frame { msec: 3824 - hash: "45262c15160d8b4dfe72f44b1756ccf4" + hash: "4cc3648635884a69191f0cfe2051f621" } Frame { msec: 3840 @@ -982,239 +1134,335 @@ VisualTest { } Frame { msec: 3856 - hash: "c595d69c44d217cb38091d44b27f147d" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 3872 - hash: "9a508ec7a226a8020985e2c601cff282" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 3888 - hash: "909e57750bc392e5246d691e11efb6d4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 3904 - hash: "cafd51b43b7b73e85dcf6e263f5e4b7e" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 3920 - hash: "27a245e5592a39815c443cd5e493f540" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 3936 - hash: "17a57ba0abcfa57efc7d72fc92f9e60b" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 3952 - hash: "ad207c4e6403840433c00f1e76ad90e5" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 3968 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 3984 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4000 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4016 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4032 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4048 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4064 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4080 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4096 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4112 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4128 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4144 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4160 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4176 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4192 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4208 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4224 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4240 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4256 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4272 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4288 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4304 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4320 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4336 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4352 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" } Frame { msec: 4368 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 151; y: 170 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 151; y: 168 + modifiers: 0 + sendToViewport: true } Frame { msec: 4384 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 152; y: 166 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 153; y: 163 + modifiers: 0 + sendToViewport: true } Frame { msec: 4400 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 154; y: 160 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 155; y: 154 + modifiers: 0 + sendToViewport: true } Frame { msec: 4416 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "ac75b9adaecd10206c4daa07c93adb27" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 155; y: 148 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 156; y: 141 + modifiers: 0 + sendToViewport: true } Frame { msec: 4432 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "539ec244fd42801cfcf97adc12f48786" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 160; y: 121 + modifiers: 0 + sendToViewport: true } Frame { msec: 4448 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "7d7bc6f7d2ff1da352ddab0d679906e7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 162; y: 101 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 83 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 166; y: 83 + modifiers: 0 + sendToViewport: true } Frame { msec: 4464 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "4b508eb55971a03c6dc8a50d0244fa21" } Frame { msec: 4480 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "2ceb497ca10e6448a019b62a225a72e4" } Frame { msec: 4496 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1fd9b89ebcb8e707c9b1b13ba64061b4" } Frame { msec: 4512 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "24a3a48843860f643e55ca6dfec84f98" } Frame { msec: 4528 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "48ea9398101f44a707c44ee1c5102d0c" } Frame { msec: 4544 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d8f2cebcdb542e75bbbaa4391ca881b8" } Frame { msec: 4560 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "df35827ac111c67588922aadd45b3c85" } Frame { msec: 4576 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "c1e612548c8d5c2f844e94ad4c0f1db4" } Frame { msec: 4592 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "c298bccebeb1f4528c935e5fd256479c" } Frame { msec: 4608 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "4c01d969eba4eca32b8a3b7f6f9c99f0" } Frame { msec: 4624 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "66c783ae698cb91195088591a9bd67c1" } Frame { msec: 4640 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "5419f6889162fb0db6b8c9e521f57f4f" } Frame { msec: 4656 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d153dbf30acf36145d7fcb8e37dd5c6d" } Frame { msec: 4672 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "ffbf186683dc979ef29cdd5ff50296fc" } Frame { msec: 4688 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "ddcedde95d1ebcafe5b73924ecfa047a" } Frame { msec: 4704 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d94b9e92f2c1a5e0ea2f8dd21a905517" } Frame { msec: 4720 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "92c27d497128ccdcbfe8224a0f55a302" } Frame { msec: 4736 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "7146017581b03e6551822653e54d5001" } Frame { msec: 4752 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "a39567e01b8963d3b71f5f525d1582d4" } Frame { msec: 4768 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "842654ef5a24143e41412b2450b6024c" } Frame { msec: 4784 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "c2a002588b4b3f89806d6d283c39ea54" } Frame { msec: 4800 @@ -1222,343 +1470,239 @@ VisualTest { } Frame { msec: 4816 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "2bea5cc22ea4989f8f07fbf62d09880b" } Frame { msec: 4832 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "b8326b959b75b05c050ff91f0c34fa55" } Frame { msec: 4848 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d5f2e63bd18b2067221ec80764c7500d" } Frame { msec: 4864 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "157f93ebaa95664965539237ba121265" } Frame { msec: 4880 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "5bda47a6295e500f24b6ba7bf04e9282" } Frame { msec: 4896 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "0134d543cfbf085eb4b5ea4a0f5ae32f" } Frame { msec: 4912 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d27f2ad3bd9817c23caf01ba64335776" } Frame { msec: 4928 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "4dd96288601f4481a24b75afedd34599" } Frame { msec: 4944 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d5ebfbd190fe2482af54004ad9434818" } Frame { msec: 4960 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "6a8c5c64228b3be521407e00c2b6a1de" } Frame { msec: 4976 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "645219e7aa6761bef1b11ac8f17f1f42" } Frame { msec: 4992 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "54fff3170fa43d99eca2c87381ecaf1e" } Frame { msec: 5008 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "54fff3170fa43d99eca2c87381ecaf1e" } Frame { msec: 5024 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "00c3c11b9b266504b8cdbdf4edcc3a98" } Frame { msec: 5040 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "00c3c11b9b266504b8cdbdf4edcc3a98" } Frame { msec: 5056 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "00c3c11b9b266504b8cdbdf4edcc3a98" } Frame { msec: 5072 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "54fff3170fa43d99eca2c87381ecaf1e" } Frame { msec: 5088 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "6a8c5c64228b3be521407e00c2b6a1de" } Frame { msec: 5104 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "f91cea801322d1bc6ac1b9eeae96c704" } Frame { msec: 5120 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d27f2ad3bd9817c23caf01ba64335776" } Frame { msec: 5136 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "5bda47a6295e500f24b6ba7bf04e9282" } Frame { msec: 5152 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "d5f2e63bd18b2067221ec80764c7500d" } Frame { msec: 5168 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "b10145c10c2bc9d01ec6a49a399f728e" } Frame { msec: 5184 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "f0b759a49bf21b0c9b311a1dd02d7807" } Frame { msec: 5200 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1c5546c3ddbde95d10921c8c32fd2d67" } Frame { msec: 5216 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "c2a002588b4b3f89806d6d283c39ea54" } Frame { msec: 5232 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5248 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5264 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5280 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5296 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5312 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5328 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5344 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5360 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5376 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5392 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5408 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5424 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5440 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5456 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5472 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5488 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5504 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5520 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5536 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5552 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5568 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5584 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5600 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5616 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 53; y: 171 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 53; y: 170 - modifiers: 0 - sendToViewport: true + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5632 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 53; y: 168 - modifiers: 0 - sendToViewport: true + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5648 - hash: "ff7eb2fc2731ffd5ee96eb24696ffaf4" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 54; y: 165 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 55; y: 162 - modifiers: 0 - sendToViewport: true + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5664 - hash: "1a95eb98d66c2169674c70d35a5ceba1" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 55; y: 157 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 55; y: 150 - modifiers: 0 - sendToViewport: true + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5680 - hash: "985e040417d2bf2cb2f4f59ec0df6b4f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 55; y: 143 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 55; y: 137 - modifiers: 0 - sendToViewport: true + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5696 - hash: "72d3b6286138d30fd6cfe6e8eb04d79a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 56; y: 132 - modifiers: 0 - sendToViewport: true + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5712 - hash: "e3fea4dd47d0c9d18b75c2300a8ab9bf" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 59; y: 128 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 62; y: 123 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 62; y: 123 - modifiers: 0 - sendToViewport: true + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5728 - hash: "e017f31e4d30f60eae5abfcf9cbe954a" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5744 - hash: "27188a640e20aca2013b7b6b72fda89c" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5760 @@ -1566,239 +1710,263 @@ VisualTest { } Frame { msec: 5776 - hash: "e5f56ee86145c107644d8b97dce91085" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5792 - hash: "0b959b652850085da5d0911804913891" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5808 - hash: "a1e49cb952b3c476a5fedea5082c5c0a" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5824 - hash: "4983768fa165f2e9e55e48c78c6f8dea" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5840 - hash: "9714a821c76a41fd7d5e0439f47854d2" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5856 - hash: "e5db5d7c1a6c692af9e292ac4b3dbc32" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5872 - hash: "0a69dfa9e6f056343651e2a2c067286b" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5888 - hash: "64faabf715d912b5abc8e86b91f68558" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5904 - hash: "b61b51a773a36e739322aa7301a4fb38" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5920 - hash: "0214367822797dcbe83e694addeafd33" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5936 - hash: "bc30176481cc47d6242ff21e037e4db9" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5952 - hash: "24eb0a98d26e88e4f39de2f6b2cd8ca5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5968 - hash: "b5c4c8778820be865cb8372d716c9d2d" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 5984 - hash: "228ac20aa0331c3ddeac862f01097742" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6000 - hash: "05e50f9ef2829b9a3d703d20b2588747" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6016 - hash: "b0738bf4dffd1e65f63204f1db4329a7" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6032 - hash: "b54b343a4905746297b4a150924477f4" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6048 - hash: "05cc4965322ff085c66953c1d39c46b6" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6064 - hash: "caf0233a179d83e8c1e0b26ec0a4f77d" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6080 - hash: "1a2a719be8cb1f9aad8c3f7fead652ae" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6096 - hash: "18438e347c4246fbfffd5401fc9915b3" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6112 - hash: "18438e347c4246fbfffd5401fc9915b3" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6128 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6144 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6160 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6176 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6192 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6208 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6224 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6240 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6256 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6272 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6288 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6304 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6320 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6336 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6352 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6368 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6384 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6400 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6416 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6432 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6448 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6464 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6480 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6496 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6512 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 177; y: 168 + modifiers: 0 + sendToViewport: true } Frame { msec: 6528 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6544 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6560 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6576 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 178; y: 168 + modifiers: 0 + sendToViewport: true } Frame { msec: 6592 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 178; y: 168 + modifiers: 0 + sendToViewport: true } Frame { msec: 6608 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6624 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6640 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6656 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6672 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6688 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6704 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6720 @@ -1806,255 +1974,327 @@ VisualTest { } Frame { msec: 6736 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6752 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6768 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6784 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1eb5d2140ff3c71d55a6e5338dd2853e" } Frame { msec: 6800 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "f6de07972a225d276b4b5c424dc490ef" } Frame { msec: 6816 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "d8c400ca33d590a9b4d9b179b5634d94" } Frame { msec: 6832 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "21ec87c22e52b3daa78bd94b771a105c" } Frame { msec: 6848 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "19a3667f4051e40e944ec58abb16846a" } Frame { msec: 6864 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 6880 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 6896 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 6912 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 6928 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 6944 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 6960 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 6976 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 6992 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7008 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7024 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7040 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7056 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7072 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7088 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7104 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7120 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7136 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7152 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7168 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7184 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7200 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7216 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7232 - hash: "f0eb6047898c866e8852242a672c79b5" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 167; y: 169 - modifiers: 0 - sendToViewport: true + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7248 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7264 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7280 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7296 - hash: "f0eb6047898c866e8852242a672c79b5" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 167; y: 169 - modifiers: 0 - sendToViewport: true + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7312 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7328 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7344 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7360 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7376 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7392 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7408 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 157; y: 37 + modifiers: 0 + sendToViewport: true } Frame { msec: 7424 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" } Frame { msec: 7440 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 157; y: 39 + modifiers: 0 + sendToViewport: true } Frame { msec: 7456 - hash: "79a4237bc56d77b719d8472831f20a90" + hash: "08369a783b1f1f4e64da7dab40df6ef3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 157; y: 44 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 157; y: 51 + modifiers: 0 + sendToViewport: true } Frame { msec: 7472 - hash: "df2eebdf2a8ce789a2429b40693eb82e" + hash: "e8ad02d4c2429a03ff0686888e4038bf" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 157; y: 59 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 158; y: 67 + modifiers: 0 + sendToViewport: true } Frame { msec: 7488 - hash: "a22f0abb89b5cfa85e01ed4db150eda7" + hash: "43dcc86aeff3b8b74ae1b87e735e8963" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 158; y: 87 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 158; y: 96 + modifiers: 0 + sendToViewport: true } Frame { msec: 7504 - hash: "9364b1c7f3a15aad1a3f8e9e95cdb3a3" + hash: "96e10ce9e5a80caf626213e5c696d84d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 160; y: 116 + modifiers: 0 + sendToViewport: true } Frame { msec: 7520 - hash: "43b8da45116dd87b8f044e698c7ea437" + hash: "3b34cb99481d5418136840afd649807d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 164; y: 134 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 164; y: 134 + modifiers: 0 + sendToViewport: true } Frame { msec: 7536 - hash: "10f0779a2d0cb5ccb879f0065eea70a3" + hash: "494cf05eb3d8eb221d0e3c233c936e87" } Frame { msec: 7552 - hash: "bd0c8df943774bbce144f745cbf9c6b9" + hash: "e0d5f3aab9fbfac1de47f42202dbeb79" } Frame { msec: 7568 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "8cd6919e15ea4320e00e79d43596ea80" } Frame { msec: 7584 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "395a63aa12928a6b597eabd74f019a03" } Frame { msec: 7600 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "16d4ccbda396a9afcaeac4ddca733012" } Frame { msec: 7616 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "71955518b68a9817a41d5d0f63adcc57" } Frame { msec: 7632 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "152f2569fe8849d5c4289699dba2ee32" } Frame { msec: 7648 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "a1de2cb5acc31a9d73e005c3a44cee4f" } Frame { msec: 7664 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "96ceaad68263b5165a65f557ae19d9cd" } Frame { msec: 7680 @@ -2062,255 +2302,239 @@ VisualTest { } Frame { msec: 7696 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "9ff5d2774820dac56655a44d965c7742" } Frame { msec: 7712 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "79cdbfb2f93a35680eab38f0df2eaf66" } Frame { msec: 7728 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "19896d510a27871fc589579e27adc0dc" } Frame { msec: 7744 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "71b62e488897345eebf8d9640d50585f" } Frame { msec: 7760 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "4853b95a3f1ae0ebbd468dff3605d595" } Frame { msec: 7776 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "a8030aa0aede17d91758af08256cf39d" } Frame { msec: 7792 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "a2a5e71349060ae262d337d9aa33b549" } Frame { msec: 7808 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "7b5f32f0e53ab102ef6f1eca7da016dd" } Frame { msec: 7824 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "7b5f32f0e53ab102ef6f1eca7da016dd" } Frame { msec: 7840 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "25908df38057c7394135108d9618e28d" } Frame { msec: 7856 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "d3b3ab6e43eef22ca71fc35c36b1f50d" } Frame { msec: 7872 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "c25759db4e12acbe8e4701c7c86d1957" } Frame { msec: 7888 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "fe67a155ead8495d646fa7bbcf5db6b4" } Frame { msec: 7904 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "34e2877a8b84e53e5c85fb1b25d57e2b" } Frame { msec: 7920 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "2fc6c5a0e9bb80e3c8f12553e7e96d02" } Frame { msec: 7936 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "b5122a2530e21a01e93862bd8060e320" } Frame { msec: 7952 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "9c55e0c920bcf5189fb24e1765d221db" } Frame { msec: 7968 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "1106703562135e36ae62130200960fc8" } Frame { msec: 7984 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "c24b57dbf01d2646fbbeb3e66636e220" } Frame { msec: 8000 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "71663a05c04bb77c2e25299a9c6dd9ce" } Frame { msec: 8016 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8032 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8048 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8064 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8080 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8096 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8112 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8128 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8144 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8160 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8176 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8192 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8208 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8224 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8240 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8256 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8272 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8288 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8304 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8320 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8336 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8352 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8368 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8384 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8400 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8416 - hash: "787eda91c0d26d7d81b853338dff0ae5" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 173; y: 165 - modifiers: 0 - sendToViewport: true + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8432 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8448 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8464 - hash: "787eda91c0d26d7d81b853338dff0ae5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8480 - hash: "787eda91c0d26d7d81b853338dff0ae5" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 173; y: 165 - modifiers: 0 - sendToViewport: true + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8496 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8512 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8528 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8544 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8560 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8576 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8592 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8608 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8624 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8640 @@ -2318,255 +2542,327 @@ VisualTest { } Frame { msec: 8656 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8672 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8688 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "dd6caf22c0cacf5c34686785072da5f7" } Frame { msec: 8704 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 46; y: 147 + modifiers: 0 + sendToViewport: true } Frame { msec: 8720 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 146 + modifiers: 0 + sendToViewport: true } Frame { msec: 8736 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 145 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 143 + modifiers: 0 + sendToViewport: true } Frame { msec: 8752 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 141 + modifiers: 0 + sendToViewport: true } Frame { msec: 8768 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "dd6caf22c0cacf5c34686785072da5f7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 138 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 134 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: 129 + modifiers: 0 + sendToViewport: true } Frame { msec: 8784 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "7b1354e70befc84c343145987c81562f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: 122 + modifiers: 0 + sendToViewport: true } Frame { msec: 8800 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "6107f00c6472d877b5c109dd58d73145" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: 115 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 45; y: 115 + modifiers: 0 + sendToViewport: true } Frame { msec: 8816 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "47288701643899e26b53d28595d59b29" } Frame { msec: 8832 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "a3b4b613d19c8f21ec1b75c1c660ed1d" } Frame { msec: 8848 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "7a5d9fe471eb673f68b77d97f9108bac" } Frame { msec: 8864 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "20a09795ffcf05276d7a5be24b33e207" } Frame { msec: 8880 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "225e529ac77f225fc8b84ed71cdcd70f" } Frame { msec: 8896 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "e4188406a3d3d1f1b83547d362a187f8" } Frame { msec: 8912 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "82707040aad297885ba1c8c6672dc017" } Frame { msec: 8928 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "a369118e98e2bd67dc4242c5e8c86cb8" } Frame { msec: 8944 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "001ef50f7d2b7db7e0db8d2190137d0c" } Frame { msec: 8960 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "2db473b2bd9fd602ed0298501752dae9" } Frame { msec: 8976 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "f9cdbb4e515abf23721627e3f2748960" } Frame { msec: 8992 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "cbc072c5b117ce156a4d6661ae488a77" } Frame { msec: 9008 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "79acb38cec803e6ebeb570dc4d7bbb30" } Frame { msec: 9024 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "848014437545fc8d2e454a774586a8ca" } Frame { msec: 9040 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "0836f3a48355f6384c6b3f452df1e7d6" } Frame { msec: 9056 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "b3da223cdf138e915fcb424cf9181d6b" } Frame { msec: 9072 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "1a7cf7e7ddaac64eeff0d23997580b8c" } Frame { msec: 9088 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "cfbd055b2f905db503250b49120948db" } Frame { msec: 9104 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "c5b8a4ce51ec806f0ce654a8977fb17d" } Frame { msec: 9120 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "d09ba0ea9e7fed2f50d6463ac74da470" } Frame { msec: 9136 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "47ec5bab098fd88ef5be3703c316717a" } Frame { msec: 9152 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "3ea8c442ed43bd3a2aebc9cc2aacfc01" } Frame { msec: 9168 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "f016f14b0b21781924ac2afe146b1b97" } Frame { msec: 9184 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "7b7b6954cce0ca202585310520bbb3e3" } Frame { msec: 9200 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "b0de94ee3b0ce4845101606d2d512426" } Frame { msec: 9216 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "8dc56bcb2313bd8dd9ef0cbc098b80e5" } Frame { msec: 9232 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "a1692b26fb73ade5a05e03de3f4a8dbe" } Frame { msec: 9248 - hash: "f0eb6047898c866e8852242a672c79b5" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 131; y: 159 - modifiers: 0 - sendToViewport: true + hash: "672dd46e629475d823b182104f15aa24" } Frame { msec: 9264 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "2859e53d63c20af7891efc99d5e515b5" } Frame { msec: 9280 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "b44b1c4eaa33fbd09c8e59c1bf2a8f2a" } Frame { msec: 9296 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "d520fa81032ca25ec2cb6c358488049d" } Frame { msec: 9312 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "3676c00bd5c3e9af8c4092afd80f58c2" } Frame { msec: 9328 - hash: "f0eb6047898c866e8852242a672c79b5" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 131; y: 159 - modifiers: 0 - sendToViewport: true + hash: "6be4d4c35aba5a8d32a28dd88f32acd1" } Frame { msec: 9344 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "375473d4d838ef937c3164e7451d9391" } Frame { msec: 9360 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "610253e766974af4958c3623547deebd" } Frame { msec: 9376 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "20b79be381a95930c924240815cc63f4" } Frame { msec: 9392 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "88130d7132f472ff8495d640adf290cc" } Frame { msec: 9408 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "2e81f4c9a0221708146adcb508eb2d30" } Frame { msec: 9424 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "977f52ed922ba5db66440f115f7484a2" } Frame { msec: 9440 - hash: "3a8f58987c5a6197579217854ae1752e" + hash: "706f99c32d00be14ae67b4866fee0cd9" } Frame { msec: 9456 - hash: "1617b7cdd44fe79dbdf4cb3a9d4683f3" + hash: "210231604091497b510c4a1d42295574" } Frame { msec: 9472 - hash: "401fce6c56951704dc0993345ea931f5" + hash: "210231604091497b510c4a1d42295574" } Frame { msec: 9488 - hash: "26fc730a372dc62e37dee377a91b390e" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9504 - hash: "9b1c2ddc3df2f7e890e37291c71254ff" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9520 - hash: "4ab79e1d14cc42f0958fac6e7a9f0a7d" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9536 - hash: "cc0f70388def738d2e6c044810b51d76" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9552 - hash: "d5fdd502b988ce596775ec10cf8c847e" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9568 - hash: "22398208dee9f63b16392fe0296d96a2" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9584 - hash: "6159fdeefda4c1514eb4cdc139f5db0d" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9600 @@ -2574,255 +2870,255 @@ VisualTest { } Frame { msec: 9616 - hash: "b5c261081134314705594b3349cb4f53" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9632 - hash: "b5c261081134314705594b3349cb4f53" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9648 - hash: "b5c261081134314705594b3349cb4f53" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9664 - hash: "b5c261081134314705594b3349cb4f53" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9680 - hash: "b5c261081134314705594b3349cb4f53" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9696 - hash: "b5c261081134314705594b3349cb4f53" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9712 - hash: "b5c261081134314705594b3349cb4f53" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9728 - hash: "b5c261081134314705594b3349cb4f53" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9744 - hash: "b5c261081134314705594b3349cb4f53" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9760 - hash: "b5c261081134314705594b3349cb4f53" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9776 - hash: "b5c261081134314705594b3349cb4f53" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9792 - hash: "b5c261081134314705594b3349cb4f53" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 131; y: 159 - modifiers: 0 - sendToViewport: true + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9808 - hash: "b5c261081134314705594b3349cb4f53" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9824 - hash: "b5c261081134314705594b3349cb4f53" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9840 - hash: "b5c261081134314705594b3349cb4f53" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9856 - hash: "b5c261081134314705594b3349cb4f53" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9872 - hash: "b5c261081134314705594b3349cb4f53" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9888 - hash: "b5c261081134314705594b3349cb4f53" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 131; y: 159 - modifiers: 0 - sendToViewport: true + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9904 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9920 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9936 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9952 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9968 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 9984 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 10000 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 10016 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 10032 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 10048 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 10064 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 10080 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 10096 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 10112 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 10128 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 10144 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 10160 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 10176 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 48; y: 137 + modifiers: 0 + sendToViewport: true } Frame { msec: 10192 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 10208 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 10224 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 10240 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 10256 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 48; y: 137 + modifiers: 0 + sendToViewport: true } Frame { msec: 10272 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 10288 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "c54f97c72088b6319efba3c79bbef0fa" } Frame { msec: 10304 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "3627adf820bc44f99cca852096f337a0" } Frame { msec: 10320 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "48c0f775534ff9bbe9227e60ad9a3622" } Frame { msec: 10336 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "da5c6fd80ee0dc20e81031c84ede20cf" } Frame { msec: 10352 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "ce7595da55b274259771eb99a42df454" } Frame { msec: 10368 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "c2dd2aa17b9508477699fefe55bfbd06" } Frame { msec: 10384 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "4ee897ddfec1081eef8bc5d799774f82" } Frame { msec: 10400 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "f4da67964a175acf4cde4a24b054c24c" } Frame { msec: 10416 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "e3da951dad465f1a69d8d7c08e888f02" } Frame { msec: 10432 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "ff862073eada170a07d209048367b823" } Frame { msec: 10448 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "cb61d5a89c1acc2b646f3c07214bea4a" } Frame { msec: 10464 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "15d842ac551c15a136c7598adf2fe2b1" } Frame { msec: 10480 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "04b9e85f7418bbc402e51e0ce8149180" } Frame { msec: 10496 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "455dff37edfac66f5e4ae78e10b93cf9" } Frame { msec: 10512 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10528 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10544 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10560 @@ -2830,335 +3126,247 @@ VisualTest { } Frame { msec: 10576 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10592 - hash: "f0eb6047898c866e8852242a672c79b5" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10608 - hash: "f0eb6047898c866e8852242a672c79b5" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 59; y: 159 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 59; y: 158 - modifiers: 0 - sendToViewport: true + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10624 - hash: "f0eb6047898c866e8852242a672c79b5" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 60; y: 156 - modifiers: 0 - sendToViewport: true + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10640 - hash: "f0eb6047898c866e8852242a672c79b5" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 61; y: 154 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 63; y: 151 - modifiers: 0 - sendToViewport: true + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10656 - hash: "f0eb6047898c866e8852242a672c79b5" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 64; y: 147 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 65; y: 143 - modifiers: 0 - sendToViewport: true + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10672 - hash: "4d932a26e4c9b1653468a27dfc3d6b85" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 65; y: 137 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 65; y: 131 - modifiers: 0 - sendToViewport: true + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10688 - hash: "a8cb864554c2b99580e2f8117dea075b" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 64; y: 125 - modifiers: 0 - sendToViewport: true + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10704 - hash: "9f9b0514c3e9c527e65e595e7e1dc387" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 63; y: 119 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 63; y: 119 - modifiers: 0 - sendToViewport: true + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10720 - hash: "98b2701acdafcdc2400ebae72e619e5c" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10736 - hash: "8f1931199a51b4f8bc6f9a909c6de4e4" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10752 - hash: "54cd80bc91c526fb3889eb9534f7d572" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10768 - hash: "86c73e42f723a19a7f22f2ff17fc8323" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10784 - hash: "094cc9f26672919260acd6009d73b867" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10800 - hash: "0985b09c5623c486d7c39b37dfe00035" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10816 - hash: "0643039f9dc9b28a5dc728d3c42f675c" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10832 - hash: "6a814bf21ed200673809707de8ec9f03" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10848 - hash: "5d211606c6e53e18bce07d4024f07757" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10864 - hash: "cefcd9532017d873070889e4cc097879" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10880 - hash: "088117e4c32bd5d9dc3387c941e1fcdc" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10896 - hash: "05c9a90ba3b8d0ea5f775c6ca9f145f6" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10912 - hash: "0b440555c55aa67cccfce02a98b53748" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10928 - hash: "12fa35ebaf85d57be38984ceea2bdbae" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10944 - hash: "86b9ad23b79062a97f29c861333660fc" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10960 - hash: "45787d249a82149cf1f45756eb58751f" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10976 - hash: "de12cea0ebe645e365d2141e82eb107c" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 10992 - hash: "41171745747d2a03d33c0ab59bfe0b5d" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11008 - hash: "5b9abaf20116ddd0142ee28ca3887ea6" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11024 - hash: "a4fc0dbc0ebe550f5aa3a91350bbbf3f" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11040 - hash: "27b4322efdced9061d32f476086231c1" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11056 - hash: "8492670b7505eb5c6b9acf39ba2b96e8" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11072 - hash: "9f9578af5ec2d369ffbcb00b8092f816" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11088 - hash: "edb2ed0102298e92709e3f675e5d6f8b" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11104 - hash: "c54b45e02ce8ecc579060f49c5d1b715" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11120 - hash: "83bbe328ab7d39f413f6fdfc2e0eef81" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11136 - hash: "17596f573f81638c65da199cc0928bd9" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11152 - hash: "53a28dea1aa35151f6c14cf035fb0952" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11168 - hash: "3067ef8ee153feb13003208a8c77418d" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11184 - hash: "e799a252b5c293969b4c361e1c63131b" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11200 - hash: "348df3e3d388361a10339dd42507b4da" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11216 - hash: "915373dd891ef82d4c84177e6e7d395b" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11232 - hash: "426ff6e7e067fc009df9110c703dfcf3" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11248 - hash: "c5aa16682be21fa95a7873f2538d5a86" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11264 - hash: "53a8b0560be8f94f6ae37f49e8a05d5a" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11280 - hash: "a867d7a0640771dc72f5c3de2c715f6c" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11296 - hash: "7393b53dfe72a957d98151ab7437fc3b" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11312 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11328 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11344 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11360 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11376 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11392 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11408 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11424 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11440 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11456 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11472 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11488 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11504 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 47; y: 141 + modifiers: 0 + sendToViewport: true } Frame { msec: 11520 @@ -3166,239 +3374,247 @@ VisualTest { } Frame { msec: 11536 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11552 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11568 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "259e9da7c3b8738db1762128f2c8d4b0" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 47; y: 141 + modifiers: 0 + sendToViewport: true } Frame { msec: 11584 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11600 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "259e9da7c3b8738db1762128f2c8d4b0" } Frame { msec: 11616 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "cf515f316c197a307a7fb8373df3b107" } Frame { msec: 11632 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "927379ba611284d5c98a3eb5aca04f7c" } Frame { msec: 11648 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "387ad2042589de0a19cb13aa0cac8872" } Frame { msec: 11664 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "6536ad87d1f04b13c28c43ae0fed984f" } Frame { msec: 11680 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "38d77d6610739614e95c70f32736f238" } Frame { msec: 11696 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "9a6c3a95b61d3b9b787417600123b6d8" } Frame { msec: 11712 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "782d907d7d170108beb030c93d9a4d94" } Frame { msec: 11728 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "646ee08d1ffe676ca0363f70e14c2ed6" } Frame { msec: 11744 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "830730ed9990c8f96fa5c7e6b4228884" } Frame { msec: 11760 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "2e678862f358814278d38950c7c5765b" } Frame { msec: 11776 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "c656eb6ace9caf86d417d79452c4ea34" } Frame { msec: 11792 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "227a9bb3644c26622ef654ba2c61ddad" } Frame { msec: 11808 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "bc8188bf8be749bfb28fc64bb5773922" } Frame { msec: 11824 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "f1e90cfd466bdc26ba98632fe1e5360c" } Frame { msec: 11840 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 11856 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 11872 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 11888 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 11904 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 11920 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 11936 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 11952 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 11968 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 11984 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12000 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12016 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12032 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12048 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12064 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12080 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12096 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12112 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12128 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12144 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12160 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12176 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12192 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12208 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12224 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12240 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12256 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12272 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12288 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12304 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12320 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12336 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12352 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12368 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12384 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12400 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12416 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12432 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12448 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12464 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12480 @@ -3406,530 +3622,130 @@ VisualTest { } Frame { msec: 12496 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12512 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12528 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12544 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12560 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12576 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12592 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12608 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12624 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12640 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12656 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12672 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12688 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12704 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12720 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12736 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12752 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12768 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12784 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12800 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12816 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12832 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12848 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12864 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12880 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12896 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12912 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12928 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12944 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12960 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12976 - hash: "c7379955d31f2585fa4a10e3777f9554" + hash: "81795ee4213ac62e073d811aaf6b580c" } Frame { msec: 12992 - hash: "c7379955d31f2585fa4a10e3777f9554" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 170; y: 27 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 13008 - hash: "c7379955d31f2585fa4a10e3777f9554" - } - Frame { - msec: 13024 - hash: "c7379955d31f2585fa4a10e3777f9554" - } - Frame { - msec: 13040 - hash: "c7379955d31f2585fa4a10e3777f9554" - } - Frame { - msec: 13056 - hash: "c7379955d31f2585fa4a10e3777f9554" - } - Frame { - msec: 13072 - hash: "c7379955d31f2585fa4a10e3777f9554" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 170; y: 27 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 13088 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13104 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13120 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13136 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13152 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13168 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13184 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13200 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13216 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13232 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13248 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13264 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13280 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13296 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13312 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13328 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13344 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13360 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13376 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13392 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13408 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13424 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13440 - image: "packageviews.13.png" - } - Frame { - msec: 13456 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13472 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13488 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13504 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13520 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13536 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13552 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13568 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13584 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13600 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13616 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13632 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13648 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13664 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13680 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13696 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13712 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13728 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13744 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13760 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13776 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13792 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13808 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13824 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13840 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13856 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13872 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13888 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13904 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13920 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13936 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13952 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13968 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 13984 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14000 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14016 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14032 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14048 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14064 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14080 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14096 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14112 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14128 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14144 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14160 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14176 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14192 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14208 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14224 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14240 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14256 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14272 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14288 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14304 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14320 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14336 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14352 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14368 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14384 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14400 - image: "packageviews.14.png" - } - Frame { - msec: 14416 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14432 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14448 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14464 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14480 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14496 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14512 - hash: "4e2bea533c32eb60ce28494b71fa7fea" - } - Frame { - msec: 14528 - hash: "4e2bea533c32eb60ce28494b71fa7fea" + hash: "81795ee4213ac62e073d811aaf6b580c" } } diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.0.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.0.png Binary files differindex 99b43db..18fef53 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.0.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.0.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.1.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.1.png Binary files differindex 35c18f0..18fef53 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.1.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.1.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.10.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.10.png Binary files differindex 1296fc3..b352c68 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.10.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.10.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.11.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.11.png Binary files differindex 99b43db..ce7ee68 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.11.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.11.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.12.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.12.png Binary files differindex 882b363..d8cdacf 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.12.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.12.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.13.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.13.png Binary files differindex 99b43db..0c2fa7b 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.13.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.13.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.14.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.14.png Binary files differindex 882b363..e9b3028 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.14.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.14.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.15.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.15.png Binary files differindex 5a4e37a..2186a8b 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.15.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.15.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.16.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.16.png Binary files differindex accb73b..b4590af 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.16.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.16.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.17.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.17.png Binary files differindex 40bb4f9..fe29f19 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.17.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.17.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.18.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.18.png Binary files differindex 40bb4f9..fe29f19 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.18.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.18.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.19.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.19.png Binary files differindex d107b90..4f8587f 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.19.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.19.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.2.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.2.png Binary files differindex cb425f3..0a7cc03 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.2.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.2.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.20.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.20.png Binary files differindex 3520d5a..4f8587f 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.20.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.20.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.21.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.21.png Binary files differindex 3520d5a..c0b0bdf 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.21.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.21.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.22.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.22.png Binary files differindex 64e568d..4168c3b 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.22.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.22.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.23.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.23.png Binary files differindex 9291ce8..18fef53 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.23.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.23.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.24.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.24.png new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.24.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.3.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.3.png Binary files differindex aab5b5f..fc6669d 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.3.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.3.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.4.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.4.png Binary files differindex aab5b5f..c0b0bdf 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.4.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.4.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.5.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.5.png Binary files differindex aab5b5f..2ffa96e 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.5.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.5.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.6.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.6.png Binary files differindex aab5b5f..f550b89 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.6.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.6.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.7.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.7.png Binary files differindex 99b43db..f550b89 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.7.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.7.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.8.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.8.png Binary files differindex 99b43db..f550b89 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.8.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.8.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.9.png b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.9.png Binary files differindex 99b43db..f550b89 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.9.png +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.9.png diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.qml b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.qml index 0314ebe..c376e39 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.qml +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/data/flickable-vertical.qml @@ -6,239 +6,239 @@ VisualTest { } Frame { msec: 16 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 32 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 48 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 64 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 80 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 96 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 112 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 128 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 144 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 160 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 176 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 192 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 208 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 224 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 240 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 256 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 272 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 288 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 304 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 320 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 336 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 352 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 368 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 384 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 400 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 416 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 432 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 448 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 464 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 480 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 496 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 512 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 528 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 544 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 560 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 576 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 592 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 608 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 624 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 640 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 656 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 672 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 688 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 704 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 720 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 736 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 752 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 768 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 784 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 800 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 816 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 832 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 848 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 864 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 880 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 896 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 912 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 928 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 944 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 960 @@ -246,727 +246,239 @@ VisualTest { } Frame { msec: 976 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 221; y: 77 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 992 - hash: "a21953e303c729e343b70e567652267f" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1008 - hash: "a21953e303c729e343b70e567652267f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 221; y: 79 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1024 - hash: "a21953e303c729e343b70e567652267f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 220; y: 82 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1040 - hash: "a21953e303c729e343b70e567652267f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 220; y: 87 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 219; y: 94 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1056 - hash: "4fa69d7744b3e3a0a4451ce4e99ee7ba" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 218; y: 108 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1072 - hash: "1792514181c6c6c8f32b1742ddabb2b7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 218; y: 116 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 218; y: 123 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1088 - hash: "cc69f85e8d89cfa028b9a32cc7d96503" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 218; y: 129 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1104 - hash: "ad8d39426f0cacd8d60b629474acfd94" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 215; y: 141 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 214; y: 146 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1120 - hash: "8690767f68cf00e781344705ca344ae4" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 214; y: 150 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1136 - hash: "f07c2539d2cfec230edac4ea3515d302" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 213; y: 155 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1152 - hash: "a0388eed4adcc65893165d39c8c80322" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 212; y: 165 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1168 - hash: "3ae7f7600c1e5ae2649c168d69415565" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 209; y: 176 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 209; y: 181 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1184 - hash: "bcc7886c9b8e48a12015aa7ecc5acb4a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 208; y: 186 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1200 - hash: "f6e8438e8e20fdd3b08b9cfeef7a2241" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 206; y: 191 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 204; y: 195 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1216 - hash: "e547206745aa4bce1246335d2679673f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 202; y: 201 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1232 - hash: "ebbe77d2d1ec79cb533c4d2967765456" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 199; y: 212 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1248 - hash: "88257d803c4c27514702ae6d68bdaa18" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 198; y: 219 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 197; y: 225 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1264 - hash: "4570e05efaa527df3be45da376fed489" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 195; y: 237 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1280 - hash: "bc1be718a11be962187cfacb6a27a09a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 194; y: 243 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1296 - hash: "2596464bcba93fa5050056591ebf3335" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 192; y: 254 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1312 - hash: "486e7624796535f7662b62153a7be7b2" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 191; y: 260 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 190; y: 266 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1328 - hash: "ca6812f8046668c78db553b0309f87e1" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 189; y: 278 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1344 - hash: "a6319e4141c209daa5278d83b9086761" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 189; y: 284 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1360 - hash: "cc5b71a3ea11ee8fc5dfc8adc6d86978" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 189; y: 296 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1376 - hash: "85a69cf964300b9b30bacdd69e6053e0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 188; y: 302 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 187; y: 307 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1392 - hash: "d2ed43e72b36ac6fcad6b1ee0644e3bc" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 186; y: 311 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 185; y: 316 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1408 - hash: "d1a1ea725f220dec1bfac9f8bf285f4c" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 184; y: 325 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1424 - hash: "f5647888d12e295fef9a9c41f9322984" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 184; y: 329 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1440 - hash: "b9bb7509bedcdeb120014d51041dc58b" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 184; y: 337 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1456 - hash: "449c14c71c15fba352bfa4005758fc29" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 184; y: 341 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 184; y: 345 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1472 - hash: "c43ff533f6d85d1c2818a244e6bc2517" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 184; y: 351 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1488 - hash: "3400145519929b2bc5eb7b026c15cf5e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 184; y: 355 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1504 - hash: "e322b1ec455897e15a36d16c297b127a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 362 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 366 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1520 - hash: "255fbbb5098a93d1bc1073ed71bd694e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 369 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1536 - hash: "092e88e5f2227842138b2241fedf209b" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 373 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 377 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1552 - hash: "39e99216c54a7890d372b86075e93e7b" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 379 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 383 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1568 - hash: "b876e1a14b9ef0636bdb61ec1a3f02bc" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 386 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 390 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1584 - hash: "4cded582d5864999fe4cd9ddd80616f6" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 393 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1600 - hash: "b5f5c98b122247d2f660141dc927707d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 397 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 401 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1616 - hash: "3e7c7e1ead94817d9bffca7d41e65c45" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 409 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1632 - hash: "70b52be0c8c5b28e63d70c69ee3a8acc" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 412 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 415 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1648 - hash: "1fafe3e3ebbf5f21a0f87fc3c8208cc6" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 417 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 419 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1664 - hash: "7d089bd188e2ee63bdb34266a6623a31" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 184; y: 420 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1680 - hash: "851a7f3a4eac2adbfc60511519f37f9a" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1696 - hash: "851a7f3a4eac2adbfc60511519f37f9a" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1712 - hash: "851a7f3a4eac2adbfc60511519f37f9a" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1728 - hash: "851a7f3a4eac2adbfc60511519f37f9a" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1744 - hash: "851a7f3a4eac2adbfc60511519f37f9a" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1760 - hash: "851a7f3a4eac2adbfc60511519f37f9a" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1776 - hash: "851a7f3a4eac2adbfc60511519f37f9a" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1792 - hash: "851a7f3a4eac2adbfc60511519f37f9a" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1808 - hash: "851a7f3a4eac2adbfc60511519f37f9a" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 184; y: 420 - modifiers: 0 - sendToViewport: true + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1824 - hash: "851a7f3a4eac2adbfc60511519f37f9a" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1840 - hash: "15cfb157c4a8484884055e577912a8ba" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1856 - hash: "da2f61c0263a2c7f3474bbb45af23038" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1872 - hash: "e25ab8b97e0e1fa2d4b9eaa9ec4ea486" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1888 - hash: "d9b67b282f095e31bc7ef9ab9cc6d3cb" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1904 - hash: "667bcc36f63d6dc5052e2b6ad4f6c58a" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1920 @@ -974,209 +486,145 @@ VisualTest { } Frame { msec: 1936 - hash: "91ec48828922eb02e933279940214fe2" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1952 - hash: "35c74206a260e7ca56f7340f67663f00" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1968 - hash: "6546dce3f25a520bd853292c4c2cb0c2" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 1984 - hash: "63a5aa4ffe674e8ce3078fabb5cba9f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2000 - hash: "b854043648a91a9263d01bfbafc3b93e" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2016 - hash: "42c178c49c25385531d978d32433144b" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2032 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2048 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2064 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2080 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2096 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2112 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2128 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2144 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2160 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2176 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2192 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2208 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2224 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2240 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2256 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2272 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2288 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2304 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2320 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2336 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2352 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { msec: 2368 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Frame { - msec: 2384 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Frame { - msec: 2400 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Frame { - msec: 2416 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Frame { - msec: 2432 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Frame { - msec: 2448 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Frame { - msec: 2464 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Frame { - msec: 2480 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Frame { - msec: 2496 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Frame { - msec: 2512 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Frame { - msec: 2528 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Frame { - msec: 2544 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Frame { - msec: 2560 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Frame { - msec: 2576 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Frame { - msec: 2592 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Frame { - msec: 2608 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "8443c45791c906a9fe23831844f48a1c" } Mouse { type: 2 button: 1 buttons: 1 - x: 205; y: 461 + x: 143; y: 387 modifiers: 0 sendToViewport: true } Frame { - msec: 2624 - hash: "c7587682b1aa4ad2e2320e784117bcf8" - } - Frame { - msec: 2640 - hash: "c7587682b1aa4ad2e2320e784117bcf8" + msec: 2384 + hash: "a21e65718bc7a0cdcbeb058d0cbd2977" } Mouse { type: 5 button: 0 buttons: 1 - x: 204; y: 460 + x: 144; y: 386 modifiers: 0 sendToViewport: true } Frame { - msec: 2656 - hash: "c7587682b1aa4ad2e2320e784117bcf8" + msec: 2400 + hash: "a21e65718bc7a0cdcbeb058d0cbd2977" } Mouse { type: 5 button: 0 buttons: 1 - x: 203; y: 457 + x: 145; y: 386 modifiers: 0 sendToViewport: true } @@ -1184,71 +632,63 @@ VisualTest { type: 5 button: 0 buttons: 1 - x: 203; y: 452 + x: 147; y: 380 modifiers: 0 sendToViewport: true } Frame { - msec: 2672 - hash: "a7677d62a890d5647b9d2c6b72525ad0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 203; y: 443 - modifiers: 0 - sendToViewport: true + msec: 2416 + hash: "a21e65718bc7a0cdcbeb058d0cbd2977" } Mouse { type: 5 button: 0 buttons: 1 - x: 205; y: 419 + x: 151; y: 372 modifiers: 0 sendToViewport: true } Frame { - msec: 2688 - hash: "359270139e6ac777ed0caf37b3dd3cff" + msec: 2432 + hash: "90d9c65705a006741671657d00ab9dba" } Mouse { type: 5 button: 0 buttons: 1 - x: 211; y: 389 + x: 159; y: 346 modifiers: 0 sendToViewport: true } + Frame { + msec: 2448 + hash: "8c6301fb7409a22fda85072d48e838c8" + } Mouse { type: 5 button: 0 buttons: 1 - x: 219; y: 351 + x: 161; y: 328 modifiers: 0 sendToViewport: true } - Frame { - msec: 2704 - hash: "550b38f128bacb6e5df730998c82cef9" - } Mouse { type: 5 button: 0 buttons: 1 - x: 225; y: 309 + x: 161; y: 304 modifiers: 0 sendToViewport: true } Frame { - msec: 2720 - hash: "e4b912372c1c194ae51e4e7c6ae8eb46" + msec: 2464 + hash: "f5121fd6b0f20844d13cd8625a1a5047" } Mouse { type: 5 button: 0 buttons: 1 - x: 233; y: 267 + x: 159; y: 276 modifiers: 0 sendToViewport: true } @@ -1256,45 +696,109 @@ VisualTest { type: 3 button: 1 buttons: 0 - x: 233; y: 267 + x: 159; y: 276 modifiers: 0 sendToViewport: true } Frame { + msec: 2480 + hash: "0d64b804b3b7e3ee052395f612d62bcf" + } + Frame { + msec: 2496 + hash: "17b68429dfaf80bb3313e78bb01d6c4e" + } + Frame { + msec: 2512 + hash: "e86ea3b103a7d9f95f7484f3579a95b5" + } + Frame { + msec: 2528 + hash: "884d3842f4aa2a38ff73511b143789a0" + } + Frame { + msec: 2544 + hash: "646d1dd3003ccac06b7251e8ce1beb2f" + } + Frame { + msec: 2560 + hash: "ff66db77c56bf6830bc39211b3441e69" + } + Frame { + msec: 2576 + hash: "8ff9c081cf823adaf6b17014fc582f12" + } + Frame { + msec: 2592 + hash: "7b1563aed6f030003e04f19bb6e91a51" + } + Frame { + msec: 2608 + hash: "3661b26f082e44cbc38e6033c28e99cb" + } + Frame { + msec: 2624 + hash: "8e0f117dc1f2527d6b2b3f0c849fbda1" + } + Frame { + msec: 2640 + hash: "5a13b0045bc132ec6c917a6d7ddf9c7a" + } + Frame { + msec: 2656 + hash: "06f332d287ed14b29dd0a252d59565a2" + } + Frame { + msec: 2672 + hash: "7b1512aabac1fb17ecc8e0c771e2477f" + } + Frame { + msec: 2688 + hash: "22b62a7b42df6bbafad76d99001616c7" + } + Frame { + msec: 2704 + hash: "0f6588fc79fa06097b2ba9bf6b1d6d14" + } + Frame { + msec: 2720 + hash: "c7849941c7572b3581a7eb9423838d90" + } + Frame { msec: 2736 - hash: "5a639e2054b0f1a72183e3513d95f4a9" + hash: "8ddd8e9dc33698ecca6e19f2318e1c2e" } Frame { msec: 2752 - hash: "41c761e4563988970c37675c2f52ec4c" + hash: "1606eb49c73e60445d9eca11e23a33f9" } Frame { msec: 2768 - hash: "3b410e852e07a8ee26413315b80ce7e2" + hash: "6a7e58d27492742bf3d853ee37144dae" } Frame { msec: 2784 - hash: "bf5d7b4c19c2254a65416162a5148fd9" + hash: "a55ba5b7ccdabd39385c6cb32e8e1b26" } Frame { msec: 2800 - hash: "3f7ea4933a8942e1824f757ae94306b5" + hash: "afe5705e8ebc240babee4a88a4321189" } Frame { msec: 2816 - hash: "6a589d7ed6d3e1119c224a1f2abd46cc" + hash: "807d92ab4b8d2295f3abfd3508258dd5" } Frame { msec: 2832 - hash: "eba3a081fe301200b43ccce6206a92ed" + hash: "ae95ed79eee246c74535d9ca97878ce6" } Frame { msec: 2848 - hash: "55e67d774f3e51aea8c6876393e16826" + hash: "c8cf5d07a06646552d5595603532b786" } Frame { msec: 2864 - hash: "d2f9ef765f81a45509baf5ae0ab65d11" + hash: "45971fd130662a263fcd86513aee222d" } Frame { msec: 2880 @@ -1302,239 +806,239 @@ VisualTest { } Frame { msec: 2896 - hash: "107d7b76a733574c393cbec5d4fff7b4" + hash: "8e78a9098ebd02cc828b76609c58d6b9" } Frame { msec: 2912 - hash: "8f4aaac0499081f4957e0fd1075a68ca" + hash: "7f4d7a1c8e0a5494bf7f37a0a165d02b" } Frame { msec: 2928 - hash: "909fef1094aed8a3ed74335675bcb266" + hash: "881ed825133259e731b71cf6251ed862" } Frame { msec: 2944 - hash: "3ea0c2483cfa240764f8adb0b48562fd" + hash: "8fb86c54b4e0280de18eb2d4f1c55e68" } Frame { msec: 2960 - hash: "60e27414cf16c7823324a6a10d604d35" + hash: "58ad7494c0bddc0de86bfd041f45a5d3" } Frame { msec: 2976 - hash: "9b7faf303926e3b7c8aa2dde69cc9d32" + hash: "87489ba1390ee152a7de023e8ba25c72" } Frame { msec: 2992 - hash: "b946b87938ff1bbae3084a9ab9a50192" + hash: "b1f06b26110799e88837781cdf4688a7" } Frame { msec: 3008 - hash: "269085e56504ed6417bf1c96a66cc8ca" + hash: "d23e94ef53ce3b8143a716028ab729f9" } Frame { msec: 3024 - hash: "a2e89e546b5b936e1fb87c88f06c66f4" + hash: "1c5fdf8d85537836b698a50fcab58a4e" } Frame { msec: 3040 - hash: "5dc2cd9a79af41ebcf6b15e5ce674030" + hash: "bd9c6ea06278efa4d491519734d0032f" } Frame { msec: 3056 - hash: "6f61e5dc76fa32335bd57cff79ed9955" + hash: "b533e6543ca4efb34e187d540e4ed7e0" } Frame { msec: 3072 - hash: "4f39ae8d60c7a5a7c695c31fe02bf206" + hash: "65f4ff7328ce366671436512da44a094" } Frame { msec: 3088 - hash: "c2ed03f04865f16bc2d9461b36855408" + hash: "e7afcc4c29cd1868bcf1ebea1d19fca1" } Frame { msec: 3104 - hash: "8d5bd45263d4f85132454a2fc6e20fef" + hash: "ddaf80f4b1d98b07fe4bf8282e13b2a8" } Frame { msec: 3120 - hash: "728886730bfc38160e8cce425064e018" + hash: "d4888df20b11e30a7d613a32e603cea5" } Frame { msec: 3136 - hash: "59eff952f129286a40a3debd9b3ea269" + hash: "ac74be483173b08cb41b8d63e3e4d073" } Frame { msec: 3152 - hash: "5e1118637b42b5f4ebf945b0388e8ab7" + hash: "35c65757fe27f68e35c438269c00ba53" } Frame { msec: 3168 - hash: "cbf5ff7e3c06691457acad7edf17c4b8" + hash: "b8a28356b50362f2dabd0ab4a0d1d621" } Frame { msec: 3184 - hash: "7f60b6837035950be7502218ff28623f" + hash: "71205ebfcce9e3a018fe2c30f7f3ee92" } Frame { msec: 3200 - hash: "019c05fc357d37af18e76eff3cb2f3c5" + hash: "0ef526ebcc23342ba4b8dfa8ed41e7de" } Frame { msec: 3216 - hash: "8c67afde829ec90a31977b8716e751be" + hash: "9caaec9ca80b5da75e5e1231635c2f37" } Frame { msec: 3232 - hash: "99df28bf3d053c8844998039ce62691a" + hash: "bb6b951e8c2252d873828e9ef1c9b625" } Frame { msec: 3248 - hash: "8b185f6aa311bf5df013638877986f90" + hash: "15faa58fbb91f80a8c1256e5627e7777" } Frame { msec: 3264 - hash: "d22036ffc0620faca6837b2c58a7e4dc" + hash: "bf2d0f512ade00ee44adb6624573daf9" } Frame { msec: 3280 - hash: "2fb5a3b005f4a3c3eca0849152675a75" + hash: "5af713203ef673d40c69b014dcaf242f" } Frame { msec: 3296 - hash: "d9b7f8d8b67f4db3bde22b7d28e21645" + hash: "970972470176fbd64208a3b25d4f5f65" } Frame { msec: 3312 - hash: "eb775352b91ea637d8aee11b7c93f984" + hash: "135a4356d91e594ee2b71132ecf9a606" } Frame { msec: 3328 - hash: "bca1df4d66a5fc01b6428484a2bd43be" + hash: "8a6364c0e033d517180ec287e61b3c9d" } Frame { msec: 3344 - hash: "d504ecda86d091899d0c0555520146f7" + hash: "71c7d7eddd49b77e8f96f3b7a6e8470f" } Frame { msec: 3360 - hash: "834da75a058a80316a9dd37cf0543e98" + hash: "59667814b3e1a2d832b895235a9cdaf6" } Frame { msec: 3376 - hash: "a50152047924c711cb8bebfd23d49ef0" + hash: "a324de5e8d115862b9908aba881df913" } Frame { msec: 3392 - hash: "57fdad444d56b4147138c30002ba7337" + hash: "300902de67507207465a74bf6404c1c4" } Frame { msec: 3408 - hash: "a50152047924c711cb8bebfd23d49ef0" + hash: "63f40e307d9f0c14bab111e833047ee1" } Frame { msec: 3424 - hash: "63a9c0dfc85f674a4f49a3f447893d1b" + hash: "53f54f5a4745043ef616ac21583416ef" } Frame { msec: 3440 - hash: "d504ecda86d091899d0c0555520146f7" + hash: "851e6eebe48034d3185674f6908932af" } Frame { msec: 3456 - hash: "704fbf5166135ecb1f613363dfeabb1a" + hash: "06ef04a044394ab55fe2806a50db2abf" } Frame { msec: 3472 - hash: "905425a1a3705d32fc3040f678971e6c" + hash: "88c82d8bb518b18a174f55c647395de1" } Frame { msec: 3488 - hash: "1726c699e9a338e20dcdcee27df6d36e" + hash: "e62b84c87e1d73028305b9038915c53d" } Frame { msec: 3504 - hash: "0633173ebc978d1010bdeb6d6237e31c" + hash: "fdb38aa631cd6967585dd23e20f866a9" } Frame { msec: 3520 - hash: "eb6715844e2024cff9e78a2bb717036b" + hash: "edabcd9bee25b1abcabced3b0b3dff1e" } Frame { msec: 3536 - hash: "2ebaa6268d60f3005fc3be36ae945273" + hash: "6f0a2dc3151c018846b13fd2e11d0fab" } Frame { msec: 3552 - hash: "c2b37324a1d8f2c45e03707dd7c36da7" + hash: "5101944e7867260ffdd3134436c6373a" } Frame { msec: 3568 - hash: "218f6bf5c3106bf54069a25def6fb1e4" + hash: "a04f231f840571734f8dab609b2f82fd" } Frame { msec: 3584 - hash: "218f6bf5c3106bf54069a25def6fb1e4" + hash: "87c22f82c659b405fd4e81640ce0b166" } Frame { msec: 3600 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "2273564228baea48cac343a4f30d6a59" } Frame { msec: 3616 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "8a4d1fc12743e6153c0f47e1fce9d55f" } Frame { msec: 3632 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "944cd812097868935a686211551ccd35" } Frame { msec: 3648 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a2f1a14510a1cfe3c2c45fa10b0442b4" } Frame { msec: 3664 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "d754cc64c12ef8cc2db0ddf99381e88c" } Frame { msec: 3680 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "168487c8ca6f3463b3aa4433cfc99792" } Frame { msec: 3696 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "67a82c1516b0d8d953c7055f07a9fdc7" } Frame { msec: 3712 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "0df1592631b8cc1986f905a049b40bf0" } Frame { msec: 3728 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "8677472d35e17d7bd5fe40f7841bb01d" } Frame { msec: 3744 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "4472a8412e41377e0795d51706fb9180" } Frame { msec: 3760 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "84533717ec1419617895f2ec646fb1c0" } Frame { msec: 3776 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "ad50bd7708be94c6b8e63077e589ae48" } Frame { msec: 3792 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a37fb5d7cec3fbff8e12157c88e08833" } Frame { msec: 3808 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "df1ca02b5bb76338ff24a561876f89f2" } Frame { msec: 3824 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "df1ca02b5bb76338ff24a561876f89f2" } Frame { msec: 3840 @@ -1542,255 +1046,239 @@ VisualTest { } Frame { msec: 3856 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a37fb5d7cec3fbff8e12157c88e08833" } Frame { msec: 3872 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "3c8a94d2e139a9e84eaa6bf522250756" } Frame { msec: 3888 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "23647f577ee83bc500ca1078eea2be90" } Frame { msec: 3904 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "c1a52221113c162e963a2a165b8d08a5" } Frame { msec: 3920 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "993c57d4ed9026f8615c68ef5d8c5c16" } Frame { msec: 3936 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "3d843eac108e047b6fe9ac21d8866fdd" } Frame { msec: 3952 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "5be1fa7cb99fda017cd5cdcf91a18525" } Frame { msec: 3968 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "c68ef5177f4568eb77c0f4135ba65e44" } Frame { msec: 3984 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "f047939a56a0ecee5deefcd3d2bf1710" } Frame { msec: 4000 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "4af748f59c6a62156a228ae635ec2d9c" } Frame { msec: 4016 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "b69b045557a8eada80a24eb4caa7ea4e" } Frame { msec: 4032 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4048 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4064 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4080 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4096 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4112 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4128 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4144 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4160 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4176 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4192 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4208 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4224 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4240 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4256 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4272 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4288 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4304 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4320 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4336 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4352 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4368 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4384 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4400 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4416 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4432 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4448 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4464 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4480 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4496 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4512 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4528 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4544 - hash: "17b446f9af5b673e3d2462c8fb821836" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 77; y: 565 - modifiers: 0 - sendToViewport: true + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4560 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4576 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4592 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4608 - hash: "17b446f9af5b673e3d2462c8fb821836" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 77; y: 565 - modifiers: 0 - sendToViewport: true + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4624 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4640 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4656 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4672 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4688 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4704 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4720 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4736 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4752 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4768 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4784 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4800 @@ -1798,141 +1286,153 @@ VisualTest { } Frame { msec: 4816 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4832 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4848 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4864 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4880 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4896 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4912 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4928 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4944 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4960 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4976 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 4992 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 5008 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 5024 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 5040 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 5056 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 5072 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 5088 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 5104 - hash: "17b446f9af5b673e3d2462c8fb821836" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 100; y: 154 - modifiers: 0 - sendToViewport: true + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 5120 - hash: "2998725eb185ddf87bab87dc3fc3bbfa" + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { msec: 5136 - hash: "2998725eb185ddf87bab87dc3fc3bbfa" + hash: "a76f069dfcb1af0794999c34507e190e" } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 100; y: 155 - modifiers: 0 - sendToViewport: true + Frame { + msec: 5152 + hash: "a76f069dfcb1af0794999c34507e190e" } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 100; y: 160 - modifiers: 0 - sendToViewport: true + Frame { + msec: 5168 + hash: "a76f069dfcb1af0794999c34507e190e" } Frame { - msec: 5152 - hash: "2998725eb185ddf87bab87dc3fc3bbfa" + msec: 5184 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 5200 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 5216 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 5232 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 5248 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 5264 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 5280 + hash: "a76f069dfcb1af0794999c34507e190e" } Mouse { - type: 5 - button: 0 + type: 2 + button: 1 buttons: 1 - x: 100; y: 168 + x: 173; y: 85 modifiers: 0 sendToViewport: true } + Frame { + msec: 5296 + hash: "06472b42bc00fcaf7f84cd4ac613bbd2" + } Mouse { type: 5 button: 0 buttons: 1 - x: 100; y: 177 + x: 173; y: 86 modifiers: 0 sendToViewport: true } Frame { - msec: 5168 - hash: "2998725eb185ddf87bab87dc3fc3bbfa" + msec: 5312 + hash: "06472b42bc00fcaf7f84cd4ac613bbd2" } Mouse { type: 5 button: 0 buttons: 1 - x: 100; y: 205 + x: 173; y: 89 modifiers: 0 sendToViewport: true } @@ -1940,71 +1440,71 @@ VisualTest { type: 5 button: 0 buttons: 1 - x: 102; y: 235 + x: 173; y: 101 modifiers: 0 sendToViewport: true } Frame { - msec: 5184 - hash: "2998725eb185ddf87bab87dc3fc3bbfa" + msec: 5328 + hash: "0031f6edee383e97a3a31fe4268ff778" } Mouse { type: 5 button: 0 buttons: 1 - x: 102; y: 267 + x: 175; y: 117 modifiers: 0 sendToViewport: true } - Frame { - msec: 5200 - hash: "2998725eb185ddf87bab87dc3fc3bbfa" - } Mouse { type: 5 button: 0 buttons: 1 - x: 102; y: 301 + x: 179; y: 137 modifiers: 0 sendToViewport: true } + Frame { + msec: 5344 + hash: "e594c62fe10165ae08e3dd8b33b9f584" + } Mouse { type: 5 button: 0 buttons: 1 - x: 102; y: 333 + x: 183; y: 159 modifiers: 0 sendToViewport: true } - Frame { - msec: 5216 - hash: "2998725eb185ddf87bab87dc3fc3bbfa" - } Mouse { type: 5 button: 0 buttons: 1 - x: 102; y: 363 + x: 185; y: 183 modifiers: 0 sendToViewport: true } + Frame { + msec: 5360 + hash: "dd61c97aafee69eb7c54a47dceea5810" + } Mouse { type: 5 button: 0 buttons: 1 - x: 102; y: 391 + x: 185; y: 207 modifiers: 0 sendToViewport: true } Frame { - msec: 5232 - hash: "2998725eb185ddf87bab87dc3fc3bbfa" + msec: 5376 + hash: "29d06473d4aac07c89041b4413ce421f" } Mouse { type: 5 button: 0 buttons: 1 - x: 106; y: 411 + x: 185; y: 227 modifiers: 0 sendToViewport: true } @@ -2012,19 +1512,19 @@ VisualTest { type: 5 button: 0 buttons: 1 - x: 114; y: 427 + x: 185; y: 243 modifiers: 0 sendToViewport: true } Frame { - msec: 5248 - hash: "2998725eb185ddf87bab87dc3fc3bbfa" + msec: 5392 + hash: "7843b1bdb9efdbee0e6dd39ef8f1078a" } Mouse { type: 5 button: 0 buttons: 1 - x: 122; y: 439 + x: 185; y: 253 modifiers: 0 sendToViewport: true } @@ -2032,133 +1532,97 @@ VisualTest { type: 3 button: 1 buttons: 0 - x: 122; y: 439 + x: 185; y: 253 modifiers: 0 sendToViewport: true } Frame { - msec: 5264 - hash: "17b446f9af5b673e3d2462c8fb821836" - } - Frame { - msec: 5280 - hash: "17b446f9af5b673e3d2462c8fb821836" - } - Frame { - msec: 5296 - hash: "17b446f9af5b673e3d2462c8fb821836" - } - Frame { - msec: 5312 - hash: "17b446f9af5b673e3d2462c8fb821836" - } - Frame { - msec: 5328 - hash: "17b446f9af5b673e3d2462c8fb821836" - } - Frame { - msec: 5344 - hash: "17b446f9af5b673e3d2462c8fb821836" - } - Frame { - msec: 5360 - hash: "17b446f9af5b673e3d2462c8fb821836" - } - Frame { - msec: 5376 - hash: "17b446f9af5b673e3d2462c8fb821836" - } - Frame { - msec: 5392 - hash: "17b446f9af5b673e3d2462c8fb821836" - } - Frame { msec: 5408 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "f609350d3c3041998340c9a6ded9baec" } Frame { msec: 5424 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "53b559ea9764ad466a0ffc1c55a596c2" } Frame { msec: 5440 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "8ac64c07cb29adff5d8510f956f3c35d" } Frame { msec: 5456 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "cb7ab2e7af067f1493197731515462fa" } Frame { msec: 5472 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a0509acbb96bb3ced08a7c968836bd69" } Frame { msec: 5488 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "e4c5e681a275b4eff49eed39a6b544d6" } Frame { msec: 5504 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "4403e91762ff703eb12dee1b47f4072c" } Frame { msec: 5520 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "9f548a31dea71208c9f465e37bafc589" } Frame { msec: 5536 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "c86dd18e63508adfdbd5b3b891fd0d99" } Frame { msec: 5552 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "b182070ff0c1b579a9fd16d39f950079" } Frame { msec: 5568 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "4308c4d6346e20ed89026c0ec216ae89" } Frame { msec: 5584 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "2da84d83767e5ac1f7ce361bdcebe9c8" } Frame { msec: 5600 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a3ce932ebf10147f79a183e44a6f6eb7" } Frame { msec: 5616 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "f5907789e23150c8dd0858d7c5098907" } Frame { msec: 5632 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "98b76cfad574957f5b7633390c6788c8" } Frame { msec: 5648 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "8c58d6511a7077cc386216a6227e8b52" } Frame { msec: 5664 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "2ca5e16bfd83f933f32367aa49db0e1d" } Frame { msec: 5680 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "ba387d0ab480eb9eaf6993c2ad168350" } Frame { msec: 5696 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "ae9f3b3245ccf921967a178712566b55" } Frame { msec: 5712 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "32cf742724558260447f61da03d5f321" } Frame { msec: 5728 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "ad21273f37c1abac0719f532dd5530ac" } Frame { msec: 5744 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "50e43629e0b8d0d651b9670241354cb1" } Frame { msec: 5760 @@ -2166,255 +1630,239 @@ VisualTest { } Frame { msec: 5776 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "e4f0192406831c8e0abe1b561120b9c0" } Frame { msec: 5792 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "4c98e619b487d67d114ed0d7800f157e" } Frame { msec: 5808 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "11ed6dc9464396eb790db236f3713164" } Frame { msec: 5824 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "908febb1e344d6972d6df611e82792bd" } Frame { msec: 5840 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "03536bb4d6ff84bf75d9ec3574bb7361" } Frame { msec: 5856 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "f9946a44c2d4e91a947e6bda7415cf9b" } Frame { msec: 5872 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "0e63e4b9dd6bc7d7b684cb461c6257bf" } Frame { msec: 5888 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "1ffe88b771bed2aa27aafe6853b67c7a" } Frame { msec: 5904 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "ff1b78113a710481273ecf01cc978a46" } Frame { msec: 5920 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "e381553fa74436ca4b0d166bdca78cf7" } Frame { msec: 5936 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "d9a6f9bfc011edb7da23091fe24e2717" } Frame { msec: 5952 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "bd137e8b15f5c485d10b83461dedc67f" } Frame { msec: 5968 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "8f5b5e19845aa537790b683ef37c8626" } Frame { msec: 5984 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "5abbf0dccef8a3bb7b090a24d715a25f" } Frame { msec: 6000 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "bf924dd11e226022c9c812b5c7e8229e" } Frame { msec: 6016 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "c47b59ff7f3c4acfb296959f6eb14801" } Frame { msec: 6032 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "b5c0ac4514d44a651a4ab817646f1d88" } Frame { msec: 6048 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "86a9fba0e2ca761a4fb71e5edbf34cab" } Frame { msec: 6064 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "5bf43304399bdc979afd2580b922fd30" } Frame { msec: 6080 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "3696756d6250f23b1122d314df08b936" } Frame { msec: 6096 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "49c7b24b1655a1b5a9b4cc2187f7cc58" } Frame { msec: 6112 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a387dce727804fb4ca1c3378ba130d08" } Frame { msec: 6128 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "505150386afee9c5d89566c90778cf58" } Frame { msec: 6144 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a00ecae0150a069d306127ed54c4921f" } Frame { msec: 6160 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "e556bfca052e4d8922a4b85d6e94a22a" } Frame { msec: 6176 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "ac710b4796de4d0b7d275c5fffcefe1f" } Frame { msec: 6192 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "2f0475e842083c93b0fa0b8a8a33117a" } Frame { msec: 6208 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "6de0e820748df06e702a82f127d9f635" } Frame { msec: 6224 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "b3748d7a26ea8289e2faa9dd624b23a3" } Frame { msec: 6240 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "52be51e9a5bf6e6d0c2e64e584a4bf11" } Frame { msec: 6256 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "9c4a08a51556d56f2809d27a1de0aae3" } Frame { msec: 6272 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "4a151e94a39b68a47374cc45cb8969df" } Frame { msec: 6288 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "a2c2926224103d6e0a679b891451f791" } Frame { msec: 6304 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "c192adca5c3cf3741f6e7b33d53a722a" } Frame { msec: 6320 - hash: "17b446f9af5b673e3d2462c8fb821836" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 59; y: 575 - modifiers: 0 - sendToViewport: true + hash: "8fa9d85c213243e0709e3e32f03cebd9" } Frame { msec: 6336 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "20f516aa2c4ebc239a283176d83ade6f" } Frame { msec: 6352 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "ac8ace61348c5500dd6e2d1f3b4b174b" } Frame { msec: 6368 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "39cc6b136e17283ddc65425150cec7be" } Frame { msec: 6384 - hash: "17b446f9af5b673e3d2462c8fb821836" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 59; y: 575 - modifiers: 0 - sendToViewport: true + hash: "b250cb3fd5a7ab5c76ae15d5a500a894" } Frame { msec: 6400 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "f07e4f8b61c0ce514364e062867687a2" } Frame { msec: 6416 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "caed510a4edc2830f885f9a8ff98c072" } Frame { msec: 6432 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "2cfba2b8cd1cbc260edf390e17532afa" } Frame { msec: 6448 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "f1d705e01521261f22b89aeefb146c7a" } Frame { msec: 6464 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "9508799a0e28e60a65925b7c10fa2874" } Frame { msec: 6480 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "accdad5176a0cdce92ed07a7ae818a13" } Frame { msec: 6496 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "2748258d00cf2f0e5f94c94f97ed95ae" } Frame { msec: 6512 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "994897c0842947675e2e2df4021c1b5e" } Frame { msec: 6528 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "22936773b2fc5c555f14a8375da2a7a4" } Frame { msec: 6544 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "22936773b2fc5c555f14a8375da2a7a4" } Frame { msec: 6560 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "b58badc862e394bf5374554e019f90c0" } Frame { msec: 6576 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "b58badc862e394bf5374554e019f90c0" } Frame { msec: 6592 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "b58badc862e394bf5374554e019f90c0" } Frame { msec: 6608 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6624 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6640 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6656 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6672 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6688 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6704 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6720 @@ -2422,319 +1870,343 @@ VisualTest { } Frame { msec: 6736 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6752 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6768 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "679369b924d719ae309a45034bdba40d" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 31; y: 575 + modifiers: 0 + sendToViewport: true } Frame { msec: 6784 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6800 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6816 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6832 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6848 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6864 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "679369b924d719ae309a45034bdba40d" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 31; y: 575 + modifiers: 0 + sendToViewport: true } Frame { msec: 6880 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6896 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6912 - hash: "17b446f9af5b673e3d2462c8fb821836" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6928 - hash: "17b446f9af5b673e3d2462c8fb821836" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 100; y: 70 - modifiers: 0 - sendToViewport: true + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6944 - hash: "b1554d72ff557a525fb45bca3a8ebaa2" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6960 - hash: "b1554d72ff557a525fb45bca3a8ebaa2" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6976 - hash: "b1554d72ff557a525fb45bca3a8ebaa2" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 100; y: 71 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 100; y: 76 - modifiers: 0 - sendToViewport: true + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 6992 - hash: "b1554d72ff557a525fb45bca3a8ebaa2" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 100; y: 85 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 94; y: 115 - modifiers: 0 - sendToViewport: true + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7008 - hash: "0281ac6c22c8bc087d6ce8d37f4a5364" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 86; y: 159 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 76; y: 203 - modifiers: 0 - sendToViewport: true + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7024 - hash: "b768dcca0e28103ab8bd5f9a0930fda2" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 64; y: 259 - modifiers: 0 - sendToViewport: true + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7040 - hash: "4c1a15218521d77a94f16eae543a38f7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 74; y: 353 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 74; y: 353 - modifiers: 0 - sendToViewport: true + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7056 - hash: "45069d76b316dc40e9d0c92fc4f7773f" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7072 - hash: "207c1c5b9e8cdfc3d52569050425bba5" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7088 - hash: "3fb69f3d8cfd264ac6b0f67a0bb87712" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7104 - hash: "4aa2738dd4b7ce882061d90e547ecd39" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7120 - hash: "c0d8c31967423e28828e8c55f9a1b09b" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7136 - hash: "2067afa33d39a69faf536c9658b524c3" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7152 - hash: "096bd7c3d35be3604c8a7d35852e735c" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7168 - hash: "8a18377e214ad471421d87b5167fb008" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7184 - hash: "9028ba1b8a25b0874953c4dd1f14846b" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7200 - hash: "5924c95d879b2ce7fada031ac57cb3ae" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7216 - hash: "d06e46245845efd09ae5f939cb2c2dcc" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7232 - hash: "3a3e04081958955caa431ac95be6c881" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7248 - hash: "ada179b9e63c6aa5974f4688bbdc700d" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7264 - hash: "de1cf10adf5c99341084b08c45553d67" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7280 - hash: "f900f7aaa158f915c66c9d92aa07d076" + hash: "679369b924d719ae309a45034bdba40d" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 156; y: 403 + modifiers: 0 + sendToViewport: true } Frame { msec: 7296 - hash: "25fa04edc2f864bf89f78f9bf31ad995" + hash: "843453070c3ac1bf26cfd84d3ab151eb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 156; y: 402 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 158; y: 396 + modifiers: 0 + sendToViewport: true } Frame { msec: 7312 - hash: "9f12bae409bf0dc9ac418ed2f1d05b79" + hash: "843453070c3ac1bf26cfd84d3ab151eb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 158; y: 386 + modifiers: 0 + sendToViewport: true } Frame { msec: 7328 - hash: "83e7877f8fb36340321eb95d63b794d1" + hash: "843453070c3ac1bf26cfd84d3ab151eb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 158; y: 376 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 158; y: 360 + modifiers: 0 + sendToViewport: true } Frame { msec: 7344 - hash: "b139ebb635b9213ff2ee541c3c96a349" + hash: "843453070c3ac1bf26cfd84d3ab151eb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 158; y: 344 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 160; y: 322 + modifiers: 0 + sendToViewport: true } Frame { msec: 7360 - hash: "aaa68176709d00af06435f595128a05e" + hash: "843453070c3ac1bf26cfd84d3ab151eb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 164; y: 298 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 168; y: 278 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 168; y: 278 + modifiers: 0 + sendToViewport: true } Frame { msec: 7376 - hash: "64c8523d5bf29e749d66fb29b1114f12" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7392 - hash: "2e41827446d5ca510b1b94b373a51dda" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7408 - hash: "62aa4fcc1e601e792f4ba0bebb6627bf" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7424 - hash: "3bb7daec0a3d60f7c0f77e56eb8f8445" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7440 - hash: "77bcef4234a4b48657c6d86b4822062c" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7456 - hash: "367ee09837f5f9e01d204203b24c8e0e" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7472 - hash: "eb100ec01acd73314294a4c70c1e86b3" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7488 - hash: "eaa6704efd38e8aa0786e3b05a5d36d0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7504 - hash: "d556d865bfc26e86a56d30895f7b8464" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7520 - hash: "5ba0ea619303b2f63c959057b0648d91" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7536 - hash: "24b628da9b51f3419d120457d54d5935" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7552 - hash: "61642066a0fddd35df7cff532bc4e6b4" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7568 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7584 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7600 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7616 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7632 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7648 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7664 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7680 @@ -2742,239 +2214,359 @@ VisualTest { } Frame { msec: 7696 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7712 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7728 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7744 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7760 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7776 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7792 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7808 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 154; y: 161 + modifiers: 0 + sendToViewport: true } Frame { msec: 7824 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "16eef219cc7d4e7589ea59ebc349973c" } Frame { msec: 7840 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "16eef219cc7d4e7589ea59ebc349973c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 154; y: 162 + modifiers: 0 + sendToViewport: true } Frame { msec: 7856 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "16eef219cc7d4e7589ea59ebc349973c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 154; y: 164 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 154; y: 167 + modifiers: 0 + sendToViewport: true } Frame { msec: 7872 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "16eef219cc7d4e7589ea59ebc349973c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 154; y: 177 + modifiers: 0 + sendToViewport: true } Frame { msec: 7888 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "16eef219cc7d4e7589ea59ebc349973c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 150; y: 189 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 146; y: 207 + modifiers: 0 + sendToViewport: true } Frame { msec: 7904 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "16eef219cc7d4e7589ea59ebc349973c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 144; y: 229 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 140; y: 255 + modifiers: 0 + sendToViewport: true } Frame { msec: 7920 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "16eef219cc7d4e7589ea59ebc349973c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 134; y: 281 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 132; y: 313 + modifiers: 0 + sendToViewport: true } Frame { msec: 7936 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "16eef219cc7d4e7589ea59ebc349973c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 128; y: 343 + modifiers: 0 + sendToViewport: true } Frame { msec: 7952 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "16eef219cc7d4e7589ea59ebc349973c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 126; y: 373 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 126; y: 397 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 126; y: 397 + modifiers: 0 + sendToViewport: true } Frame { msec: 7968 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 7984 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8000 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8016 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8032 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8048 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8064 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8080 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8096 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8112 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8128 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8144 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8160 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8176 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8192 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8208 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8224 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8240 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8256 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8272 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8288 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8304 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8320 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8336 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8352 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8368 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8384 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8400 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8416 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8432 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8448 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8464 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8480 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8496 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8512 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8528 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8544 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8560 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8576 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8592 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8608 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8624 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8640 @@ -2982,967 +2574,831 @@ VisualTest { } Frame { msec: 8656 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8672 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8688 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8704 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8720 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8736 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8752 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8768 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8784 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8800 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8816 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8832 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8848 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8864 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8880 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8896 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8912 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8928 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8944 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8960 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8976 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 8992 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9008 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9024 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9040 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9056 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9072 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9088 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9104 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Frame { - msec: 9120 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Mouse { type: 2 button: 1 buttons: 1 - x: 124; y: 571 + x: 44; y: 574 modifiers: 0 sendToViewport: true } Frame { + msec: 9120 + hash: "679369b924d719ae309a45034bdba40d" + } + Frame { msec: 9136 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9152 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 44; y: 574 + modifiers: 0 + sendToViewport: true } Frame { msec: 9168 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9184 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9200 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 124; y: 571 - modifiers: 0 - sendToViewport: true + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9216 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9232 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9248 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9264 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9280 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9296 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9312 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9328 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9344 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9360 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9376 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9392 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9408 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9424 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9440 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9456 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9472 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9488 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9504 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9520 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9536 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9552 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9568 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9584 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "679369b924d719ae309a45034bdba40d" } Frame { msec: 9600 image: "flickable-vertical.9.png" } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 152; y: 444 + modifiers: 0 + sendToViewport: true + } Frame { msec: 9616 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "843453070c3ac1bf26cfd84d3ab151eb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 152; y: 442 + modifiers: 0 + sendToViewport: true } Frame { msec: 9632 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "843453070c3ac1bf26cfd84d3ab151eb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 152; y: 440 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 152; y: 438 + modifiers: 0 + sendToViewport: true } Frame { msec: 9648 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "843453070c3ac1bf26cfd84d3ab151eb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 154; y: 429 + modifiers: 0 + sendToViewport: true } Frame { msec: 9664 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "3b0e0ed925b1c197cd94afd3d1a6d572" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 156; y: 421 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 158; y: 413 + modifiers: 0 + sendToViewport: true } Frame { msec: 9680 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d7b3838ee1219816b76224c29c7ba2e1" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 160; y: 403 + modifiers: 0 + sendToViewport: true } Frame { msec: 9696 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "9835b420f0c40a03f8f9fafe39e209f1" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 162; y: 393 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 162; y: 393 + modifiers: 0 + sendToViewport: true } Frame { msec: 9712 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "46fb2005a813fc2c278f1bfe83801c0e" } Frame { msec: 9728 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "81dd9308e475548db21474c37cb9a5b0" } Frame { msec: 9744 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "10043d74eef240abd2360d45845dd51e" } Frame { msec: 9760 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "0f83b8f23ba42b22c10a2b68227db64e" } Frame { msec: 9776 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "7a296e3702c9fef25cb53ac04053853b" } Frame { msec: 9792 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "ae439daa32f76a368ab314c86c55a378" } Frame { msec: 9808 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "42ac3503dfa462bf0b5d8c15f6f3b143" } Frame { msec: 9824 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "b8bb92eb2de7ca0f5924b09f380f47db" } Frame { msec: 9840 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "994e314d2d38005b6006e81468f10efa" } Frame { msec: 9856 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "be6a32f3c82aeccebc7778ff5646637f" } Frame { msec: 9872 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "2fb196f53d5e785e04a14d98d9dab8a1" } Frame { msec: 9888 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "0926f8209f4f35f6e6fa92935d7408e4" } Frame { msec: 9904 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "780450301d37ea2b94eb9386e7e5294c" } Frame { msec: 9920 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "cd4e9629c767813c9a2a2fa30dc5114b" } Frame { msec: 9936 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "409630d7b9c3c4231bccf74f7453f0af" } Frame { msec: 9952 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4c98e619b487d67d114ed0d7800f157e" } Frame { msec: 9968 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "0a8157dc45764ab8e0e0b89e5c73a76b" } Frame { msec: 9984 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "ecfc611b58e000df9f608c8889a2a84f" } Frame { msec: 10000 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "5c6bc246446c75d57bcd40e86041892b" } Frame { msec: 10016 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "fe1a3e688da126861b29a94b676b68f7" } Frame { msec: 10032 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "f5feef892bf013916bacb63ff6460cb7" } Frame { msec: 10048 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "665018efd991cab3acb4b80005fc2bd3" } Frame { msec: 10064 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "bc7614e4a0e0724a9cb0981f09f8a7f6" } Frame { msec: 10080 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "463a6da452a5a6267240992ad5284e89" } Frame { msec: 10096 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "eca3f146e0143856f58b4f7aee42e6f8" } Frame { msec: 10112 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "dec9b9845509c4d28d7faae043b292d1" } Frame { msec: 10128 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "49452842cb2429cd465e40478638e0e3" } Frame { msec: 10144 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "a7029d0090d3620ee21b9e3d55eefe78" } Frame { msec: 10160 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "1041b18d422acba0b9a45ca89856e493" } Frame { msec: 10176 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d53038b688b920715b196dd4cc2b2587" } Frame { msec: 10192 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "da59ffebb491ab5fa98429117c3bb8ac" } Frame { msec: 10208 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "602269f78eaf0df36c66de72e005989a" } Frame { msec: 10224 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "a311b6b35feb4096b0d01753a6695210" } Frame { msec: 10240 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "cd303e8850c6aac58fcf2a98db418f1b" } Frame { msec: 10256 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6e9132dd840a136cc688676bce7640de" } Frame { msec: 10272 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "a3818492bb4ebd91ce86675d34731c58" } Frame { msec: 10288 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "b85a127895713234028641787312b717" } Frame { msec: 10304 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "a030dc1543e84d8a0ec9f77fd6325060" } Frame { msec: 10320 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "669cd28abe17d419e9cabe4d796a38c3" } Frame { msec: 10336 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "bfdd15cf058050203561b5f935106263" } Frame { msec: 10352 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "a39abc94fee93175a6a37b402750e4f7" } Frame { msec: 10368 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "0c65e19e12d95ec8ee253219b0c3e472" } Frame { msec: 10384 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "15debc234e70765a4510bfbda886a2c9" } Frame { msec: 10400 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "9566a87437cb6e9025f9a3881a620823" } Frame { msec: 10416 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "b66d89244cba537a21901dcb11387bf7" } Frame { msec: 10432 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 166; y: 303 - modifiers: 0 - sendToViewport: true + hash: "03347ce314393bd84873026cd01c562f" } Frame { msec: 10448 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 167; y: 304 - modifiers: 0 - sendToViewport: true + hash: "458fab2449dba089ae6f1e78a230564b" } Frame { msec: 10464 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 167; y: 307 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 168; y: 312 - modifiers: 0 - sendToViewport: true + hash: "7115f27574bfc68ff58a2e4fb65107dd" } Frame { msec: 10480 - hash: "27d56f205f5a268c358327acd6b4a43e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 169; y: 317 - modifiers: 0 - sendToViewport: true + hash: "66260c030dddda4b086bc98982a11934" } Frame { msec: 10496 - hash: "0fe0f653d7ab548cac68991bbe8baf37" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 170; y: 322 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 170; y: 328 - modifiers: 0 - sendToViewport: true + hash: "d5790ee5eb8ecf249cb1dcf58aefa4ee" } Frame { msec: 10512 - hash: "52d19b9eff39f3f559cfb0cc3d60c59e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 170; y: 340 - modifiers: 0 - sendToViewport: true + hash: "6bec07ba1e2ac637aab7a9038cbacc93" } Frame { msec: 10528 - hash: "7eb2b02c979c9db2e14cde9634288984" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 172; y: 346 - modifiers: 0 - sendToViewport: true + hash: "a72f36cc18c8620a2bd85bac49f6771a" } Frame { msec: 10544 - hash: "1543f3a4b4075ad4da18696fa43146a5" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 175; y: 372 - modifiers: 0 - sendToViewport: true + hash: "65b178ae559ab0ba9c568718f287ff68" } Frame { msec: 10560 image: "flickable-vertical.10.png" } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 179; y: 388 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 180; y: 396 - modifiers: 0 - sendToViewport: true - } Frame { msec: 10576 - hash: "47473f70bef55eece502a388d87cb72e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 181; y: 404 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 411 - modifiers: 0 - sendToViewport: true + hash: "b35a8e33f876921d477809b5adb7a201" } Frame { msec: 10592 - hash: "f2f36f41015e76f22550c36bd3d4767f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 417 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 184; y: 421 - modifiers: 0 - sendToViewport: true + hash: "057b69ef8137f38c596432da547f1ead" } Frame { msec: 10608 - hash: "e547206745aa4bce1246335d2679673f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 184; y: 424 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 184; y: 427 - modifiers: 0 - sendToViewport: true + hash: "62f76f46857106010c2e862ed19baeea" } Frame { msec: 10624 - hash: "ebbe77d2d1ec79cb533c4d2967765456" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 184; y: 430 - modifiers: 0 - sendToViewport: true + hash: "fbfc73e1b20b79d71953c298ca095047" } Frame { msec: 10640 - hash: "d4490e43fbf8db3d9c3c5fbe5f158693" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 184; y: 432 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 184; y: 434 - modifiers: 0 - sendToViewport: true + hash: "aea78988f875083660dd46d6afc71683" } Frame { msec: 10656 - hash: "5c3afd41f387928a7dc57e19d2871126" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 436 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 437 - modifiers: 0 - sendToViewport: true + hash: "60d8decd7ded420433256a94f1bf954f" } Frame { msec: 10672 - hash: "ccd233880fd63a326a07668452bb85f7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 438 - modifiers: 0 - sendToViewport: true + hash: "221f72cdf18e0b33e7f6a65356fcc61b" } Frame { msec: 10688 - hash: "88257d803c4c27514702ae6d68bdaa18" + hash: "221f72cdf18e0b33e7f6a65356fcc61b" } Frame { msec: 10704 - hash: "88257d803c4c27514702ae6d68bdaa18" + hash: "c2eac9c0d84c6b2f133d8751ac5f265f" } Frame { msec: 10720 - hash: "88257d803c4c27514702ae6d68bdaa18" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 439 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 440 - modifiers: 0 - sendToViewport: true + hash: "c2eac9c0d84c6b2f133d8751ac5f265f" } Frame { msec: 10736 - hash: "ae204c0695881c7dd262e612d76b6226" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 441 - modifiers: 0 - sendToViewport: true + hash: "c2eac9c0d84c6b2f133d8751ac5f265f" } Frame { msec: 10752 - hash: "ae204c0695881c7dd262e612d76b6226" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 442 - modifiers: 0 - sendToViewport: true + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 10768 - hash: "2b09fb2bf91d7bdfa7690eb99f8bf5b7" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 10784 - hash: "2b09fb2bf91d7bdfa7690eb99f8bf5b7" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 10800 - hash: "2b09fb2bf91d7bdfa7690eb99f8bf5b7" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 10816 - hash: "2b09fb2bf91d7bdfa7690eb99f8bf5b7" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 10832 - hash: "2b09fb2bf91d7bdfa7690eb99f8bf5b7" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 10848 - hash: "2b09fb2bf91d7bdfa7690eb99f8bf5b7" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 10864 - hash: "2b09fb2bf91d7bdfa7690eb99f8bf5b7" + hash: "28a06534a2e35250c67112dfb6c05095" + } + Frame { + msec: 10880 + hash: "28a06534a2e35250c67112dfb6c05095" } Mouse { - type: 3 + type: 2 button: 1 - buttons: 0 - x: 183; y: 442 + buttons: 1 + x: 98; y: 573 modifiers: 0 sendToViewport: true } Frame { - msec: 10880 - hash: "2b09fb2bf91d7bdfa7690eb99f8bf5b7" - } - Frame { msec: 10896 - hash: "ae204c0695881c7dd262e612d76b6226" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 10912 - hash: "1c96c0685a777decc9da50c464b89dc2" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 10928 - hash: "dbcec09675b2830d88d7c2076af09bc4" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 10944 - hash: "e74b2e9591c6bc3f35b05784954cb9db" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 10960 - hash: "a4088aa1d8537ca903fb04eb64c23b74" + hash: "28a06534a2e35250c67112dfb6c05095" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 98; y: 573 + modifiers: 0 + sendToViewport: true } Frame { msec: 10976 - hash: "6e2c28acb7703d064ed7f1a22dcfad01" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 10992 - hash: "aa0ba180a153757808e5af373f446ac3" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11008 - hash: "7449e88e2224ec597953f6b7faedadad" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11024 - hash: "16f64ee0d584480a4f1c00449f20f224" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11040 - hash: "0540d7bf226e000a13a092f05792f1da" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11056 - hash: "7907dc2792769959f516355407b59c28" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11072 - hash: "11f3f5a71db17ea6e94bce81e2155e69" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11088 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11104 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11120 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11136 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11152 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11168 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11184 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11200 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11216 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11232 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11248 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11264 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11280 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11296 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11312 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11328 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11344 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11360 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11376 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11392 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11408 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11424 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11440 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11456 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11472 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11488 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11504 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11520 @@ -3950,495 +3406,799 @@ VisualTest { } Frame { msec: 11536 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11552 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11568 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11584 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11600 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11616 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11632 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11648 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11664 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11680 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11696 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11712 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11728 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 170; y: 335 + modifiers: 0 + sendToViewport: true } Frame { msec: 11744 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Frame { msec: 11760 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 170; y: 336 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 170; y: 338 + modifiers: 0 + sendToViewport: true } Frame { msec: 11776 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "28a06534a2e35250c67112dfb6c05095" } Mouse { - type: 2 - button: 1 + type: 5 + button: 0 buttons: 1 - x: 173; y: 330 + x: 170; y: 346 modifiers: 0 sendToViewport: true } Frame { msec: 11792 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "12040d4dd56848fc93d6390005045188" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 170; y: 359 + modifiers: 0 + sendToViewport: true } Frame { msec: 11808 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "caa70db5f31eb607c2de39734a42796c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 168; y: 367 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 379 + modifiers: 0 + sendToViewport: true } Frame { msec: 11824 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "ca45ab832b5a8b041ba8bea1185a2b38" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 393 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 164; y: 407 + modifiers: 0 + sendToViewport: true } Frame { msec: 11840 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "188042b1a045dc96a65a7fc0e90568c3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 164; y: 419 + modifiers: 0 + sendToViewport: true } Frame { msec: 11856 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "714a3cf591beeeddbdc2df94f5cedef1" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 164; y: 443 + modifiers: 0 + sendToViewport: true } Frame { msec: 11872 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "e9978c24eef649d01cb2245f783cb562" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 164; y: 461 + modifiers: 0 + sendToViewport: true } Frame { msec: 11888 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "bc8f32062afdfe33da7c99ee867bc2a3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 467 + modifiers: 0 + sendToViewport: true } Frame { msec: 11904 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d788c09f4acba8197b2d8fef2e8ece51" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 168; y: 470 + modifiers: 0 + sendToViewport: true } Frame { msec: 11920 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "b0a383eb416727c22451a30a997f48f1" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 169; y: 472 + modifiers: 0 + sendToViewport: true } Frame { msec: 11936 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 11952 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 11968 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 11984 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12000 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12016 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12032 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12048 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12064 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 169; y: 472 + modifiers: 0 + sendToViewport: true } Frame { msec: 12080 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12096 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12112 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12128 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12144 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12160 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12176 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12192 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12208 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12224 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12240 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12256 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12272 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12288 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12304 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12320 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12336 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12352 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12368 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12384 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12400 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12416 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "6b81b365eb057ffa32d89e564bc92949" } Frame { msec: 12432 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "6b81b365eb057ffa32d89e564bc92949" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 171; y: 452 + modifiers: 0 + sendToViewport: true } Frame { msec: 12448 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "6b81b365eb057ffa32d89e564bc92949" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 172; y: 450 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 173; y: 448 + modifiers: 0 + sendToViewport: true } Frame { msec: 12464 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "6b81b365eb057ffa32d89e564bc92949" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 175; y: 434 + modifiers: 0 + sendToViewport: true } Frame { msec: 12480 image: "flickable-vertical.12.png" } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 175; y: 431 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 177; y: 423 + modifiers: 0 + sendToViewport: true + } Frame { msec: 12496 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "7e760a017ab10fe920074405248d1473" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 177; y: 415 + modifiers: 0 + sendToViewport: true } Frame { msec: 12512 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "eab43f1c2b6fb79aad578a164b8b7b28" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 181; y: 395 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 183; y: 383 + modifiers: 0 + sendToViewport: true } Frame { msec: 12528 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "a5446ca4c6650ffc9812845bdb8db088" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 185; y: 371 + modifiers: 0 + sendToViewport: true } Frame { msec: 12544 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "71cb7dc7f9dbb9e17d7f44885ec71bdb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 187; y: 357 + modifiers: 0 + sendToViewport: true } Frame { msec: 12560 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "ccf0908d968f658311a9787182de498a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 187; y: 329 + modifiers: 0 + sendToViewport: true } Frame { msec: 12576 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "26b9c6379590bbda24d129bd4f19f7d3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 187; y: 303 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 187; y: 293 + modifiers: 0 + sendToViewport: true } Frame { msec: 12592 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "6c88a02ffdffee6d615ddc6a11c1b698" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 187; y: 283 + modifiers: 0 + sendToViewport: true } Frame { msec: 12608 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "38175cb09b6e63353b478635b22dbb5b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 187; y: 280 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 187; y: 277 + modifiers: 0 + sendToViewport: true } Frame { msec: 12624 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "5084910bf204e8b688de31d4f9018a57" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 187; y: 275 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 187; y: 273 + modifiers: 0 + sendToViewport: true } Frame { msec: 12640 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "e984565312571ec144a1cd4cc11253e8" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 187; y: 272 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 187; y: 271 + modifiers: 0 + sendToViewport: true } Frame { msec: 12656 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 12672 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 12688 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 12704 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 12720 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 12736 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 12752 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 12768 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 187; y: 271 + modifiers: 0 + sendToViewport: true } Frame { msec: 12784 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 12800 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 12816 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 12832 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 12848 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 12864 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 12880 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 12896 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 12912 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 12928 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 12944 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 12960 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 12976 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 12992 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 13008 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13024 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13040 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13056 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13072 - hash: "625d8b5be69a87f4c15e70829a415639" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 173; y: 330 - modifiers: 0 - sendToViewport: true + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13088 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13104 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13120 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13136 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13152 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13168 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13184 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13200 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13216 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13232 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13248 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13264 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13280 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13296 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13312 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13328 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13344 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 181; y: 242 + modifiers: 0 + sendToViewport: true } Frame { msec: 13360 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13376 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13392 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13408 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13424 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 181; y: 242 + modifiers: 0 + sendToViewport: true } Frame { msec: 13440 @@ -4446,247 +4206,247 @@ VisualTest { } Frame { msec: 13456 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13472 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13488 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13504 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13520 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13536 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13552 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13568 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13584 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13600 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13616 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13632 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13648 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13664 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13680 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13696 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13712 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13728 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13744 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13760 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13776 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13792 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13808 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13824 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13840 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13856 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13872 - hash: "787c2122d18e19a5f63f38a87151e5f0" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 183; y: 301 - modifiers: 0 - sendToViewport: true + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13888 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13904 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13920 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13936 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 181; y: 242 + modifiers: 0 + sendToViewport: true } Frame { msec: 13952 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13968 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 13984 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 14000 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 14016 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 14032 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 14048 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 14064 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 14080 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 14096 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "4b86de37ae9bc630a2f3440811087617" } Frame { msec: 14112 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 14128 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 14144 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 14160 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 14176 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 14192 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 14208 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 14224 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 14240 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 14256 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 14272 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 14288 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 14304 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 14320 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 14336 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 14352 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 14368 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 14384 - hash: "787c2122d18e19a5f63f38a87151e5f0" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 14400 @@ -4694,97 +4454,589 @@ VisualTest { } Frame { msec: 14416 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 14432 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "d96fb1b387b34f41f80e98c1feb05303" } Frame { msec: 14448 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" } Frame { msec: 14464 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" } Frame { msec: 14480 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" } Frame { msec: 14496 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" } Frame { msec: 14512 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" } Frame { msec: 14528 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" } Frame { msec: 14544 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" } Frame { msec: 14560 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" } Frame { msec: 14576 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" } Frame { msec: 14592 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" } Frame { msec: 14608 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" } Frame { msec: 14624 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" } Frame { msec: 14640 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "53a0e69fe4816e6eed0b4e795bf90e19" } Frame { msec: 14656 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "53a0e69fe4816e6eed0b4e795bf90e19" } Frame { msec: 14672 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "53a0e69fe4816e6eed0b4e795bf90e19" } Frame { msec: 14688 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "53a0e69fe4816e6eed0b4e795bf90e19" } Frame { msec: 14704 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "53a0e69fe4816e6eed0b4e795bf90e19" } Frame { msec: 14720 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "53a0e69fe4816e6eed0b4e795bf90e19" } Frame { msec: 14736 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "53a0e69fe4816e6eed0b4e795bf90e19" } Frame { msec: 14752 - hash: "625d8b5be69a87f4c15e70829a415639" + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 14768 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 14784 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 14800 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 14816 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 14832 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 14848 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 14864 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 14880 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 14896 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 14912 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 14928 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 14944 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 14960 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 14976 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 14992 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 15008 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 15024 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 15040 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 181; y: 242 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 15056 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15072 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15088 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15104 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15120 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15136 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15152 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15168 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15184 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15200 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15216 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15232 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15248 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15264 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15280 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15296 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15312 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15328 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15344 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15360 + image: "flickable-vertical.15.png" + } + Frame { + msec: 15376 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15392 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15408 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15424 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15440 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15456 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15472 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15488 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15504 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15520 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15536 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15552 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15568 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15584 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15600 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15616 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15632 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15648 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15664 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15680 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15696 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15712 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 192; y: 218 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 15728 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15744 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15760 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15776 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15792 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15808 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15824 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15840 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15856 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15872 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15888 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15904 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15920 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15936 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15952 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15968 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 15984 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 16000 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 16016 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 16032 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 16048 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 16064 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 16080 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 16096 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 16112 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 16128 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 16144 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 16160 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 16176 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 16192 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 16208 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 16224 + hash: "e3069d9d3cbcd845b1e4763b0759dc38" + } + Frame { + msec: 16240 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16256 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16272 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16288 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16304 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16320 + image: "flickable-vertical.16.png" + } + Frame { + msec: 16336 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16352 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16368 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16384 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16400 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16416 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16432 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16448 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16464 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16480 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16496 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16512 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16528 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16544 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16560 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16576 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16592 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16608 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16624 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16640 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" + } + Frame { + msec: 16656 + hash: "53a0e69fe4816e6eed0b4e795bf90e19" } Mouse { type: 5 button: 0 buttons: 1 - x: 184; y: 300 + x: 198; y: 222 modifiers: 0 sendToViewport: true } @@ -4792,151 +5044,167 @@ VisualTest { type: 5 button: 0 buttons: 1 - x: 184; y: 298 + x: 198; y: 224 modifiers: 0 sendToViewport: true } Frame { - msec: 14768 - hash: "32db754da44af126363a8c6e6526d738" + msec: 16672 + hash: "c30bea2a73a8b5af4565ef3996f29416" } Mouse { type: 5 button: 0 buttons: 1 - x: 184; y: 295 + x: 198; y: 228 modifiers: 0 sendToViewport: true } - Frame { - msec: 14784 - hash: "fe98ffacfc980fc428964e074d5275d0" - } Mouse { type: 5 button: 0 buttons: 1 - x: 185; y: 290 + x: 198; y: 230 modifiers: 0 sendToViewport: true } + Frame { + msec: 16688 + hash: "9612c176ec3ecf76a367728f451522a4" + } Mouse { type: 5 button: 0 buttons: 1 - x: 186; y: 289 + x: 198; y: 233 modifiers: 0 sendToViewport: true } Frame { - msec: 14800 - hash: "2ef4ba85535e27bac93401a99bd6d2b2" + msec: 16704 + hash: "24f6feeeb1ff82c8d4262f74e4656602" } Mouse { type: 5 button: 0 buttons: 1 - x: 186; y: 287 + x: 198; y: 238 modifiers: 0 sendToViewport: true } Frame { - msec: 14816 - hash: "1e61ca333203eefc11738fe9c05c313c" + msec: 16720 + hash: "5823b56f1e362fdfc216a82e2dcdec61" } Mouse { type: 5 button: 0 buttons: 1 - x: 186; y: 285 + x: 198; y: 241 modifiers: 0 sendToViewport: true } + Frame { + msec: 16736 + hash: "4ee243b91e847dabaceb21b5540c2a6d" + } Mouse { type: 5 button: 0 buttons: 1 - x: 186; y: 284 + x: 198; y: 245 modifiers: 0 sendToViewport: true } Frame { - msec: 14832 - hash: "a6eb7e0fe1946bbdf5c126d7b3264741" + msec: 16752 + hash: "87f1dc2238577fc5be6b1bd941226f3e" } Mouse { type: 5 button: 0 buttons: 1 - x: 187; y: 282 + x: 198; y: 251 modifiers: 0 sendToViewport: true } Frame { - msec: 14848 - hash: "51cffd058dcc2373e0d95155ba253d9a" + msec: 16768 + hash: "480c6fcf1b3862a41a7225c35d8080c3" } Mouse { type: 5 button: 0 buttons: 1 - x: 187; y: 279 + x: 198; y: 256 modifiers: 0 sendToViewport: true } Frame { - msec: 14864 - hash: "bc0074e08ac9019740c840623c3da2eb" + msec: 16784 + hash: "0ac819bd8e6ce19553bd954e466e7ac0" } Mouse { type: 5 button: 0 buttons: 1 - x: 187; y: 276 + x: 199; y: 258 modifiers: 0 sendToViewport: true } Frame { - msec: 14880 - hash: "fbac5ea2b658b5669f637c2b7a206af0" + msec: 16800 + hash: "0636dd7c4eb0b56697fb59fb46f47f9c" } Mouse { type: 5 button: 0 buttons: 1 - x: 187; y: 275 + x: 201; y: 267 modifiers: 0 sendToViewport: true } + Frame { + msec: 16816 + hash: "62f76f46857106010c2e862ed19baeea" + } Mouse { type: 5 button: 0 buttons: 1 - x: 188; y: 274 + x: 203; y: 276 modifiers: 0 sendToViewport: true } Frame { - msec: 14896 - hash: "d16da8a012d6d58c18c35b16bbf9d5b2" + msec: 16832 + hash: "26b9c6379590bbda24d129bd4f19f7d3" } Mouse { type: 5 button: 0 buttons: 1 - x: 188; y: 270 + x: 203; y: 279 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 203; y: 280 modifiers: 0 sendToViewport: true } Frame { - msec: 14912 - hash: "69927e2ef5938faa51d27e382e55dc6c" + msec: 16848 + hash: "21baf0596553627c8e683a31c2e6d04f" } Mouse { type: 5 button: 0 buttons: 1 - x: 189; y: 269 + x: 203; y: 281 modifiers: 0 sendToViewport: true } @@ -4944,155 +5212,1383 @@ VisualTest { type: 5 button: 0 buttons: 1 - x: 189; y: 267 + x: 203; y: 282 modifiers: 0 sendToViewport: true } Frame { - msec: 14928 - hash: "2f6efb49298c5e24d9213eb7b596c5f4" + msec: 16864 + hash: "036679da5def5e696361f2373172a3f4" } Mouse { type: 5 button: 0 buttons: 1 - x: 189; y: 265 + x: 203; y: 283 modifiers: 0 sendToViewport: true } Frame { - msec: 14944 - hash: "d1c73a74c0bce818ca1cf3c86f0f4e60" + msec: 16880 + hash: "e3fc6101bc6cccf309b3df6b194820ea" } Mouse { type: 5 button: 0 buttons: 1 - x: 189; y: 262 + x: 203; y: 285 modifiers: 0 sendToViewport: true } Frame { - msec: 14960 - hash: "117ed3a57bbc11758273caf72b7dec8e" + msec: 16896 + hash: "d9ee6d0a7455cfd724c1856549100756" } Mouse { type: 5 button: 0 buttons: 1 - x: 189; y: 259 + x: 203; y: 286 modifiers: 0 sendToViewport: true } + Frame { + msec: 16912 + hash: "caa70db5f31eb607c2de39734a42796c" + } Mouse { type: 5 button: 0 buttons: 1 - x: 189; y: 257 + x: 203; y: 287 modifiers: 0 sendToViewport: true } Frame { - msec: 14976 - hash: "e1ae42b159f4fc2cd064d62af15d9d69" + msec: 16928 + hash: "e2dc88b454e69cf92d6887a2f0629a94" + } + Frame { + msec: 16944 + hash: "e2dc88b454e69cf92d6887a2f0629a94" } Mouse { type: 5 button: 0 buttons: 1 - x: 189; y: 255 + x: 203; y: 288 modifiers: 0 sendToViewport: true } Frame { - msec: 14992 - hash: "c14d81071770ee56c7eae401190afb4e" + msec: 16960 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 16976 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 16992 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17008 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17024 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17040 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17056 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17072 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17088 + hash: "fac8455a2707b04aabff25723375a78b" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 203; y: 288 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 17104 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17120 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17136 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17152 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17168 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17184 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17200 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17216 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17232 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17248 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17264 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17280 + image: "flickable-vertical.17.png" + } + Frame { + msec: 17296 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17312 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17328 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17344 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17360 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17376 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17392 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17408 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17424 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17440 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17456 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17472 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17488 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17504 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17520 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17536 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17552 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17568 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17584 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17600 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17616 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17632 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17648 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17664 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17680 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17696 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17712 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17728 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17744 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17760 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17776 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17792 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17808 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17824 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17840 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17856 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17872 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17888 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17904 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17920 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17936 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17952 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17968 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 17984 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18000 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18016 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18032 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18048 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18064 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18080 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18096 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18112 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18128 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18144 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18160 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18176 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18192 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18208 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18224 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18240 + image: "flickable-vertical.18.png" + } + Frame { + msec: 18256 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18272 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18288 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18304 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18320 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18336 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18352 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18368 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18384 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18400 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18416 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18432 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18448 + hash: "fac8455a2707b04aabff25723375a78b" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 102; y: 575 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 18464 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18480 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18496 + hash: "fac8455a2707b04aabff25723375a78b" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 102; y: 575 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 18512 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18528 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18544 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18560 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18576 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18592 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18608 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18624 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18640 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18656 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18672 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18688 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18704 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18720 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18736 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18752 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18768 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18784 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18800 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18816 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18832 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18848 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18864 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18880 + hash: "fac8455a2707b04aabff25723375a78b" + } + Frame { + msec: 18896 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 18912 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 18928 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 18944 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 18960 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 18976 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 18992 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19008 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19024 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19040 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19056 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19072 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19088 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19104 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19120 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19136 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19152 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19168 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19184 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19200 + image: "flickable-vertical.19.png" + } + Frame { + msec: 19216 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19232 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19248 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19264 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 164; y: 571 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 19280 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19296 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19312 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19328 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 164; y: 571 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 19344 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19360 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19376 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19392 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19408 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19424 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19440 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19456 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19472 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19488 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19504 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19520 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19536 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19552 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19568 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19584 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19600 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19616 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19632 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19648 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19664 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19680 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19696 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19712 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19728 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19744 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19760 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19776 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19792 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19808 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19824 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19840 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19856 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19872 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19888 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19904 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19920 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19936 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19952 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19968 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 19984 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 20000 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 20016 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 20032 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 20048 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 20064 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 20080 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 20096 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 20112 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 20128 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 20144 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 20160 + image: "flickable-vertical.20.png" + } + Frame { + msec: 20176 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 20192 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 20208 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Frame { + msec: 20224 + hash: "cce4177eb20b7aa43a7383a16c43f473" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 170; y: 450 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 20240 + hash: "b8e7a053fc023be42ab5136f6e7305fd" + } + Frame { + msec: 20256 + hash: "b8e7a053fc023be42ab5136f6e7305fd" } Mouse { type: 5 button: 0 buttons: 1 - x: 189; y: 251 + x: 170; y: 448 modifiers: 0 sendToViewport: true } Frame { - msec: 15008 - hash: "aac2872f8296ce46f6a81ae55638bff0" + msec: 20272 + hash: "b8e7a053fc023be42ab5136f6e7305fd" } Mouse { type: 5 button: 0 buttons: 1 - x: 189; y: 250 + x: 172; y: 438 modifiers: 0 sendToViewport: true } + Frame { + msec: 20288 + hash: "40cf6e4567c796d6ad83778fb1959d8a" + } Mouse { type: 5 button: 0 buttons: 1 - x: 189; y: 249 + x: 176; y: 410 modifiers: 0 sendToViewport: true } Frame { - msec: 15024 - hash: "358195120a5c86f1fcc2453f23e27d1b" + msec: 20304 + hash: "9914584daf02407c1edc3b6a38b8302d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 176; y: 388 + modifiers: 0 + sendToViewport: true } Mouse { type: 5 button: 0 buttons: 1 - x: 189; y: 247 + x: 176; y: 366 modifiers: 0 sendToViewport: true } Frame { - msec: 15040 - hash: "2f8d1a869dabb26adda2488e52f1e43f" + msec: 20320 + hash: "5aff2316a5e34f5e15b7cb36257a3d72" } Mouse { type: 5 button: 0 buttons: 1 - x: 189; y: 245 + x: 176; y: 342 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 176; y: 342 modifiers: 0 sendToViewport: true } Frame { - msec: 15056 - hash: "dc9d14bc6a507d488cb72637cd3fb5ba" + msec: 20336 + hash: "de1f9ff1abfa8cdc760bc84129fab40d" + } + Frame { + msec: 20352 + hash: "032c4fd62a0a611207262d317d4ea103" + } + Frame { + msec: 20368 + hash: "1db8a7b3899f5efea25ccf93285ee6bd" + } + Frame { + msec: 20384 + hash: "3c106f68b755862346cddd21d75c0caf" + } + Frame { + msec: 20400 + hash: "41d025dfe037b9cebe84e4c7200e9d15" + } + Frame { + msec: 20416 + hash: "f347687313c88150a6f977ae8b1620fc" + } + Frame { + msec: 20432 + hash: "4bb30faaec54e2a47dfd2b2988a6c231" + } + Frame { + msec: 20448 + hash: "fede02600e790d4b6eb1f85563b37cbc" + } + Frame { + msec: 20464 + hash: "0a949f7150b3709b9eda62c98f98fc62" + } + Frame { + msec: 20480 + hash: "214e571c2346b0d6b5d1220e856a8e67" + } + Frame { + msec: 20496 + hash: "f84207d20cfff984d1c79654a1074d02" + } + Frame { + msec: 20512 + hash: "7dc3592294dcd88fbfff2f984fd2d4c3" + } + Frame { + msec: 20528 + hash: "42829e78f62e692a093df267d2b673e2" + } + Frame { + msec: 20544 + hash: "d264570c78e7d1ea283c72191953a2ce" + } + Frame { + msec: 20560 + hash: "b69b045557a8eada80a24eb4caa7ea4e" + } + Frame { + msec: 20576 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20592 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20608 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20624 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20640 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20656 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20672 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20688 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20704 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20720 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20736 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20752 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20768 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20784 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20800 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20816 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20832 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20848 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20864 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20880 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20896 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20912 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20928 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20944 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20960 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20976 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 20992 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21008 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21024 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21040 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21056 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21072 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21088 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21104 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21120 + image: "flickable-vertical.21.png" + } + Frame { + msec: 21136 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21152 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21168 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21184 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21200 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21216 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21232 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21248 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21264 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21280 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21296 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21312 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21328 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21344 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21360 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21376 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21392 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21408 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21424 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21440 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21456 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21472 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21488 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21504 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21520 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21536 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21552 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21568 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Frame { + msec: 21584 + hash: "a76f069dfcb1af0794999c34507e190e" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 197; y: 124 + modifiers: 0 + sendToViewport: true } Mouse { type: 5 button: 0 buttons: 1 - x: 189; y: 243 + x: 197; y: 132 modifiers: 0 sendToViewport: true } Frame { - msec: 15072 - hash: "0e61e11399483608dae3a698d927cdd6" + msec: 21600 + hash: "06472b42bc00fcaf7f84cd4ac613bbd2" } Mouse { type: 5 button: 0 buttons: 1 - x: 189; y: 241 + x: 197; y: 146 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 197; y: 164 modifiers: 0 sendToViewport: true } Frame { - msec: 15088 - hash: "41da079a95997938cdff4f93708db0a3" + msec: 21616 + hash: "463fce69afc3dec181425c9adaa3e77c" } Mouse { type: 5 button: 0 buttons: 1 - x: 189; y: 239 + x: 197; y: 190 modifiers: 0 sendToViewport: true } @@ -5100,336 +6596,442 @@ VisualTest { type: 5 button: 0 buttons: 1 - x: 189; y: 237 + x: 195; y: 218 modifiers: 0 sendToViewport: true } Frame { - msec: 15104 - hash: "aca5a9eb3cc6867a8a7bbf8e6c1526fa" + msec: 21632 + hash: "9af34ff618e277eafad32e0377ecc94b" } Mouse { type: 5 button: 0 buttons: 1 - x: 189; y: 236 + x: 187; y: 250 modifiers: 0 sendToViewport: true } Frame { - msec: 15120 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 21648 + hash: "db4b2333630ccc4a7982361609a12837" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 183; y: 284 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 183; y: 284 + modifiers: 0 + sendToViewport: true } Frame { - msec: 15136 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 21664 + hash: "50335b19a1e210f87924d01bb343a0e0" } Frame { - msec: 15152 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 21680 + hash: "59b4f80a7cd6b732eb26f3b4147efe7e" } Frame { - msec: 15168 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 21696 + hash: "b99cc1f07bcb0480801d4d5403372525" } Frame { - msec: 15184 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 21712 + hash: "871040b0f921646609b79828bab38949" } Frame { - msec: 15200 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 21728 + hash: "2acb3d19eed000313872d5cd66765b53" } Frame { - msec: 15216 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 21744 + hash: "b5431a2d2e856a726ceac2066b128f8f" } Frame { - msec: 15232 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 21760 + hash: "04047c917a95a2a3df30c14bb20601dd" } Frame { - msec: 15248 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 21776 + hash: "fea7ac3d26975f438129e394c667e628" } Frame { - msec: 15264 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 21792 + hash: "4db41ff05865cabc4ef288478254e633" } Frame { - msec: 15280 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 21808 + hash: "e0d3737effd817a8f603eb393677b8b6" } Frame { - msec: 15296 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 21824 + hash: "d4f06941d213544ddcae714ddc0b47e9" } Frame { - msec: 15312 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 21840 + hash: "dbb21caf4a4c9b88563f1d0aad35f3d3" } Frame { - msec: 15328 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 21856 + hash: "eb9a052219c3f955f2c036834990089b" } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 189; y: 236 - modifiers: 0 - sendToViewport: true + Frame { + msec: 21872 + hash: "40090a35caf674ed9c4bf1d10f9209ea" } Frame { - msec: 15344 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 21888 + hash: "064de0abec66d1ddcf0f6073ce7d91ef" } Frame { - msec: 15360 - image: "flickable-vertical.15.png" + msec: 21904 + hash: "f407334d0b63a34657dc1306fd67aeb7" } Frame { - msec: 15376 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 21920 + hash: "1c0744be97c65c68ca92bd86d42c7b0e" } Frame { - msec: 15392 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 21936 + hash: "7469d4a06c5df073e22db3c905baefc1" } Frame { - msec: 15408 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 21952 + hash: "35912a7e2ecc0c387fc9fb9da7201bfd" } Frame { - msec: 15424 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 21968 + hash: "9f835091374f0d0d9a6996e6dad10e19" } Frame { - msec: 15440 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 21984 + hash: "afade1ecbaf5f920880eaff3b3de606e" } Frame { - msec: 15456 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 22000 + hash: "9c70e8a020c8c1101b9884529cb4527f" } Frame { - msec: 15472 - hash: "d5993f0307db451bf4c7595fea737f35" + msec: 22016 + hash: "3e7d4dc75f85dfeb065da18ef1c102c1" } Frame { - msec: 15488 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22032 + hash: "16852d62a77eefccea9497ae1b09842d" } Frame { - msec: 15504 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22048 + hash: "ea8afda6d837a98f408a7aa133494575" } Frame { - msec: 15520 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22064 + hash: "666435dccf30c53eb09ea7ad8b5264a1" } Frame { - msec: 15536 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22080 + image: "flickable-vertical.22.png" } Frame { - msec: 15552 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22096 + hash: "2e959bf0470bac84e2220d9e8a8bbb97" } Frame { - msec: 15568 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22112 + hash: "595b6cfd559f8362b010616de4947ec6" } Frame { - msec: 15584 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22128 + hash: "976dd345cc7cb4e3c09a288530d3c8af" } Frame { - msec: 15600 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22144 + hash: "9493e425d5cd3f9eef904a1be63f45f1" } Frame { - msec: 15616 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22160 + hash: "0a2013afebb5e09d82633c8d8a393f01" } Frame { - msec: 15632 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22176 + hash: "d8377c464bc59d95e0670d697888d804" } Frame { - msec: 15648 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22192 + hash: "52f9416973da953bd6fe55b2fe22786a" } Frame { - msec: 15664 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22208 + hash: "23b9af0f371b7817e9ceaa1a83995d35" } Frame { - msec: 15680 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22224 + hash: "34b0e0333c91bc4533e0c01eaeb3d3f9" } Frame { - msec: 15696 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22240 + hash: "1597b86afe2841c3bb77bb5dd6aa6803" } Frame { - msec: 15712 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22256 + hash: "d74111814ff259fea47e1eb3b36e174b" } Frame { - msec: 15728 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22272 + hash: "c64c46fe9cd75afbf2385241ea8e55d4" } Frame { - msec: 15744 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22288 + hash: "1e8740a104643fe30b0e874bbbed44ab" } Frame { - msec: 15760 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22304 + hash: "ef669a8d142947463084383a6c7c7f85" } Frame { - msec: 15776 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22320 + hash: "2314c42b5994bdbfd73eb2c3ea54626b" } Frame { - msec: 15792 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22336 + hash: "53a0694d8eee91b968bd43efe43f2c9e" } Frame { - msec: 15808 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22352 + hash: "be4772528f30c18193e49ae04a290af8" } Frame { - msec: 15824 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22368 + hash: "a0b0877ab92a0323e35fdb7beb602dee" } Frame { - msec: 15840 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22384 + hash: "a0e299fb4ba811a0b22fb62c222cb86c" } Frame { - msec: 15856 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22400 + hash: "2562bc9c9aa60a48b6ca00333f60d163" } Frame { - msec: 15872 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22416 + hash: "486b45c385d88d6f054fa6308b55f2ac" } Frame { - msec: 15888 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22432 + hash: "86502af668ed6336dce8fe329e3408a6" } Frame { - msec: 15904 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22448 + hash: "2a79a6530a07f00810310117d00d28ed" } Frame { - msec: 15920 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22464 + hash: "94a5fce3e0c3b219e0d807bfcade11e8" } Frame { - msec: 15936 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22480 + hash: "94a5fce3e0c3b219e0d807bfcade11e8" } Frame { - msec: 15952 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22496 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 15968 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22512 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 15984 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22528 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16000 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22544 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16016 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22560 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16032 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22576 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16048 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22592 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16064 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22608 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16080 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22624 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16096 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22640 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16112 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22656 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16128 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22672 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16144 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22688 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16160 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22704 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16176 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22720 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16192 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22736 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16208 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22752 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16224 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22768 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16240 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22784 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16256 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22800 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16272 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22816 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16288 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22832 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16304 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22848 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16320 - image: "flickable-vertical.16.png" + msec: 22864 + hash: "8443c45791c906a9fe23831844f48a1c" } Frame { - msec: 16336 - hash: "98cbdfc57b4c33ef53c00ad4e71bfaaa" + msec: 22880 + hash: "8443c45791c906a9fe23831844f48a1c" } -} + Frame { + msec: 22896 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 22912 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 22928 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 22944 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 22960 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 22976 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 22992 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 23008 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 23024 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 23040 + image: "flickable-vertical.23.png" + } + Frame { + msec: 23056 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 23072 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 23088 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 23104 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 23120 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 23136 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 23152 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 23168 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 23184 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 23200 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 23216 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 23232 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 23248 + hash: "8443c45791c906a9fe23831844f48a1c" + } + Frame { + msec: 23264 + hash: "8443c45791c906a9fe23831844f48a1c
\ No newline at end of file diff --git a/tests/auto/declarative/visual/qmlgraphicsflickable/flickable-vertical.qml b/tests/auto/declarative/visual/qmlgraphicsflickable/flickable-vertical.qml index 287815f..e9aae61 100644 --- a/tests/auto/declarative/visual/qmlgraphicsflickable/flickable-vertical.qml +++ b/tests/auto/declarative/visual/qmlgraphicsflickable/flickable-vertical.qml @@ -45,7 +45,7 @@ Rectangle { // click to toggle interactive flag Rectangle { - width: 98 + width: 64 height: 48 y: parent.height - 50 color: "red" @@ -57,9 +57,9 @@ Rectangle { // click to toggle click delay Rectangle { - width: 98 + width: 64 height: 48 - x: 100 + x: 66 y: parent.height - 50 color: "green" MouseRegion { @@ -68,6 +68,19 @@ Rectangle { } } + // click to toggle overshoot + Rectangle { + width: 64 + height: 48 + x: 130 + y: parent.height - 50 + color: "yellow" + MouseRegion { + anchors.fill: parent + onClicked: Flick.overShoot = Flick.overShoot > 0 ? 0 : 30 + } + } + Rectangle { width: Math.abs(Flick.verticalVelocity)/100 height: 50 diff --git a/tests/auto/declarative/visual/webview/javascript/evaluateJavaScript.qml b/tests/auto/declarative/visual/webview/javascript/evaluateJavaScript.qml index d3cf578..78d5cfc 100644 --- a/tests/auto/declarative/visual/webview/javascript/evaluateJavaScript.qml +++ b/tests/auto/declarative/visual/webview/javascript/evaluateJavaScript.qml @@ -7,7 +7,7 @@ Column { height: 200 url: "test-objects.html" javaScriptWindowObjects: - Object { + QtObject { property string text: btntext.text WebView.windowObjectName: "qmltext" onTextChanged: { diff --git a/tests/auto/declarative/visual/webview/javascript/windowObjects.qml b/tests/auto/declarative/visual/webview/javascript/windowObjects.qml index f1d4097..a41de9a 100644 --- a/tests/auto/declarative/visual/webview/javascript/windowObjects.qml +++ b/tests/auto/declarative/visual/webview/javascript/windowObjects.qml @@ -6,7 +6,7 @@ Column { height: 200 url: "test-objects.html" javaScriptWindowObjects: - Object { + QtObject { property string text: btntext.text WebView.windowObjectName: "qmltext" } diff --git a/tests/auto/declarative/xmlhttprequest/data/abort.qml b/tests/auto/declarative/xmlhttprequest/data/abort.qml index 132eb96..d7b9266 100644 --- a/tests/auto/declarative/xmlhttprequest/data/abort.qml +++ b/tests/auto/declarative/xmlhttprequest/data/abort.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string urlDummy property string url diff --git a/tests/auto/declarative/xmlhttprequest/data/abort_opened.qml b/tests/auto/declarative/xmlhttprequest/data/abort_opened.qml index 9c7449f..72a45e7 100644 --- a/tests/auto/declarative/xmlhttprequest/data/abort_opened.qml +++ b/tests/auto/declarative/xmlhttprequest/data/abort_opened.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string url: "testdocument.html" property bool readyState: false diff --git a/tests/auto/declarative/xmlhttprequest/data/abort_unsent.qml b/tests/auto/declarative/xmlhttprequest/data/abort_unsent.qml index 4bc479e..aa78cde 100644 --- a/tests/auto/declarative/xmlhttprequest/data/abort_unsent.qml +++ b/tests/auto/declarative/xmlhttprequest/data/abort_unsent.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string url: "testdocument.html" property bool readyState: false diff --git a/tests/auto/declarative/xmlhttprequest/data/attr.qml b/tests/auto/declarative/xmlhttprequest/data/attr.qml index d0ee720..9049fc7 100644 --- a/tests/auto/declarative/xmlhttprequest/data/attr.qml +++ b/tests/auto/declarative/xmlhttprequest/data/attr.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool xmlTest: false property bool dataOK: false diff --git a/tests/auto/declarative/xmlhttprequest/data/cdata.qml b/tests/auto/declarative/xmlhttprequest/data/cdata.qml index 5faa359..b2d0209 100644 --- a/tests/auto/declarative/xmlhttprequest/data/cdata.qml +++ b/tests/auto/declarative/xmlhttprequest/data/cdata.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool xmlTest: false property bool dataOK: false diff --git a/tests/auto/declarative/xmlhttprequest/data/constructor.qml b/tests/auto/declarative/xmlhttprequest/data/constructor.qml index 4b9e9ce..93e44fd 100644 --- a/tests/auto/declarative/xmlhttprequest/data/constructor.qml +++ b/tests/auto/declarative/xmlhttprequest/data/constructor.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool calledAsConstructor property bool calledAsFunction diff --git a/tests/auto/declarative/xmlhttprequest/data/defaultState.qml b/tests/auto/declarative/xmlhttprequest/data/defaultState.qml index 5cc2971..4dcf6f9 100644 --- a/tests/auto/declarative/xmlhttprequest/data/defaultState.qml +++ b/tests/auto/declarative/xmlhttprequest/data/defaultState.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property int readyState property bool statusIsException: false property bool statusTextIsException: false diff --git a/tests/auto/declarative/xmlhttprequest/data/document.qml b/tests/auto/declarative/xmlhttprequest/data/document.qml index ce9e35f..e372361 100644 --- a/tests/auto/declarative/xmlhttprequest/data/document.qml +++ b/tests/auto/declarative/xmlhttprequest/data/document.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool xmlTest: false property bool dataOK: false diff --git a/tests/auto/declarative/xmlhttprequest/data/domExceptionCodes.qml b/tests/auto/declarative/xmlhttprequest/data/domExceptionCodes.qml index a4ab66c..de5ee4f 100644 --- a/tests/auto/declarative/xmlhttprequest/data/domExceptionCodes.qml +++ b/tests/auto/declarative/xmlhttprequest/data/domExceptionCodes.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property int index_size_err: DOMException.INDEX_SIZE_ERR property int domstring_size_err: DOMException.DOMSTRING_SIZE_ERR property int hierarchy_request_err: DOMException.HIERARCHY_REQUEST_ERR diff --git a/tests/auto/declarative/xmlhttprequest/data/element.qml b/tests/auto/declarative/xmlhttprequest/data/element.qml index 228db18..78c0374 100644 --- a/tests/auto/declarative/xmlhttprequest/data/element.qml +++ b/tests/auto/declarative/xmlhttprequest/data/element.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool xmlTest: false property bool dataOK: false diff --git a/tests/auto/declarative/xmlhttprequest/data/getAllResponseHeaders.qml b/tests/auto/declarative/xmlhttprequest/data/getAllResponseHeaders.qml index 0bee7ad..02a8083 100644 --- a/tests/auto/declarative/xmlhttprequest/data/getAllResponseHeaders.qml +++ b/tests/auto/declarative/xmlhttprequest/data/getAllResponseHeaders.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string url property bool unsentException: false diff --git a/tests/auto/declarative/xmlhttprequest/data/getAllResponseHeaders_args.qml b/tests/auto/declarative/xmlhttprequest/data/getAllResponseHeaders_args.qml index c2cf898..37124c7 100644 --- a/tests/auto/declarative/xmlhttprequest/data/getAllResponseHeaders_args.qml +++ b/tests/auto/declarative/xmlhttprequest/data/getAllResponseHeaders_args.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool exceptionThrown: false Component.onCompleted: { diff --git a/tests/auto/declarative/xmlhttprequest/data/getAllResponseHeaders_sent.qml b/tests/auto/declarative/xmlhttprequest/data/getAllResponseHeaders_sent.qml index 9583f9d..505e4b1 100644 --- a/tests/auto/declarative/xmlhttprequest/data/getAllResponseHeaders_sent.qml +++ b/tests/auto/declarative/xmlhttprequest/data/getAllResponseHeaders_sent.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool test: false Component.onCompleted: { diff --git a/tests/auto/declarative/xmlhttprequest/data/getAllResponseHeaders_unsent.qml b/tests/auto/declarative/xmlhttprequest/data/getAllResponseHeaders_unsent.qml index fac5259..20fb040 100644 --- a/tests/auto/declarative/xmlhttprequest/data/getAllResponseHeaders_unsent.qml +++ b/tests/auto/declarative/xmlhttprequest/data/getAllResponseHeaders_unsent.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool test: false Component.onCompleted: { diff --git a/tests/auto/declarative/xmlhttprequest/data/getResponseHeader.qml b/tests/auto/declarative/xmlhttprequest/data/getResponseHeader.qml index 798b346..2f949e1 100644 --- a/tests/auto/declarative/xmlhttprequest/data/getResponseHeader.qml +++ b/tests/auto/declarative/xmlhttprequest/data/getResponseHeader.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string url property bool unsentException: false diff --git a/tests/auto/declarative/xmlhttprequest/data/getResponseHeader_args.qml b/tests/auto/declarative/xmlhttprequest/data/getResponseHeader_args.qml index ca7aed8..d5aa4b1 100644 --- a/tests/auto/declarative/xmlhttprequest/data/getResponseHeader_args.qml +++ b/tests/auto/declarative/xmlhttprequest/data/getResponseHeader_args.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool exceptionThrown: false Component.onCompleted: { diff --git a/tests/auto/declarative/xmlhttprequest/data/getResponseHeader_sent.qml b/tests/auto/declarative/xmlhttprequest/data/getResponseHeader_sent.qml index 148a19c..7538ffd 100644 --- a/tests/auto/declarative/xmlhttprequest/data/getResponseHeader_sent.qml +++ b/tests/auto/declarative/xmlhttprequest/data/getResponseHeader_sent.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool test: false Component.onCompleted: { diff --git a/tests/auto/declarative/xmlhttprequest/data/getResponseHeader_unsent.qml b/tests/auto/declarative/xmlhttprequest/data/getResponseHeader_unsent.qml index 5abdf0a..3b55802 100644 --- a/tests/auto/declarative/xmlhttprequest/data/getResponseHeader_unsent.qml +++ b/tests/auto/declarative/xmlhttprequest/data/getResponseHeader_unsent.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool test: false Component.onCompleted: { diff --git a/tests/auto/declarative/xmlhttprequest/data/instanceStateValues.qml b/tests/auto/declarative/xmlhttprequest/data/instanceStateValues.qml index ab3064f..b8d01c4 100644 --- a/tests/auto/declarative/xmlhttprequest/data/instanceStateValues.qml +++ b/tests/auto/declarative/xmlhttprequest/data/instanceStateValues.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property int unsent property int opened property int headers_received diff --git a/tests/auto/declarative/xmlhttprequest/data/invalidMethodUsage.qml b/tests/auto/declarative/xmlhttprequest/data/invalidMethodUsage.qml index 893eb8b..b30989b 100644 --- a/tests/auto/declarative/xmlhttprequest/data/invalidMethodUsage.qml +++ b/tests/auto/declarative/xmlhttprequest/data/invalidMethodUsage.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool onreadystatechange: false property bool readyState: false property bool status: false diff --git a/tests/auto/declarative/xmlhttprequest/data/open.qml b/tests/auto/declarative/xmlhttprequest/data/open.qml index 7729bab..c06bae3 100644 --- a/tests/auto/declarative/xmlhttprequest/data/open.qml +++ b/tests/auto/declarative/xmlhttprequest/data/open.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string url property bool readyState: false diff --git a/tests/auto/declarative/xmlhttprequest/data/open_arg_count.1.qml b/tests/auto/declarative/xmlhttprequest/data/open_arg_count.1.qml index 74f13ba..b6d4c32 100644 --- a/tests/auto/declarative/xmlhttprequest/data/open_arg_count.1.qml +++ b/tests/auto/declarative/xmlhttprequest/data/open_arg_count.1.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool exceptionThrown: false Component.onCompleted: { diff --git a/tests/auto/declarative/xmlhttprequest/data/open_arg_count.2.qml b/tests/auto/declarative/xmlhttprequest/data/open_arg_count.2.qml index 35dce9f..8c86c20 100644 --- a/tests/auto/declarative/xmlhttprequest/data/open_arg_count.2.qml +++ b/tests/auto/declarative/xmlhttprequest/data/open_arg_count.2.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool exceptionThrown: false Component.onCompleted: { diff --git a/tests/auto/declarative/xmlhttprequest/data/open_invalid_method.qml b/tests/auto/declarative/xmlhttprequest/data/open_invalid_method.qml index 7fb1a4c..69f79ae 100644 --- a/tests/auto/declarative/xmlhttprequest/data/open_invalid_method.qml +++ b/tests/auto/declarative/xmlhttprequest/data/open_invalid_method.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool exceptionThrown: false Component.onCompleted: { diff --git a/tests/auto/declarative/xmlhttprequest/data/open_sync.qml b/tests/auto/declarative/xmlhttprequest/data/open_sync.qml index 7133e81..1477279 100644 --- a/tests/auto/declarative/xmlhttprequest/data/open_sync.qml +++ b/tests/auto/declarative/xmlhttprequest/data/open_sync.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool exceptionThrown: false Component.onCompleted: { diff --git a/tests/auto/declarative/xmlhttprequest/data/open_user.qml b/tests/auto/declarative/xmlhttprequest/data/open_user.qml index cc90433..19e37fa 100644 --- a/tests/auto/declarative/xmlhttprequest/data/open_user.qml +++ b/tests/auto/declarative/xmlhttprequest/data/open_user.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string url property bool readyState: false diff --git a/tests/auto/declarative/xmlhttprequest/data/open_username.qml b/tests/auto/declarative/xmlhttprequest/data/open_username.qml index c38110c..983ea14 100644 --- a/tests/auto/declarative/xmlhttprequest/data/open_username.qml +++ b/tests/auto/declarative/xmlhttprequest/data/open_username.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string url property bool readyState: false diff --git a/tests/auto/declarative/xmlhttprequest/data/responseText.qml b/tests/auto/declarative/xmlhttprequest/data/responseText.qml index 0bb8659..4bb3a7a 100644 --- a/tests/auto/declarative/xmlhttprequest/data/responseText.qml +++ b/tests/auto/declarative/xmlhttprequest/data/responseText.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string url property string expectedText diff --git a/tests/auto/declarative/xmlhttprequest/data/responseXML_invalid.qml b/tests/auto/declarative/xmlhttprequest/data/responseXML_invalid.qml index 4fc4fe5..63f288e 100644 --- a/tests/auto/declarative/xmlhttprequest/data/responseXML_invalid.qml +++ b/tests/auto/declarative/xmlhttprequest/data/responseXML_invalid.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool xmlNull: false property bool dataOK: false diff --git a/tests/auto/declarative/xmlhttprequest/data/send_alreadySent.qml b/tests/auto/declarative/xmlhttprequest/data/send_alreadySent.qml index 4598169..0bad7df 100644 --- a/tests/auto/declarative/xmlhttprequest/data/send_alreadySent.qml +++ b/tests/auto/declarative/xmlhttprequest/data/send_alreadySent.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool dataOK: false property bool test: false diff --git a/tests/auto/declarative/xmlhttprequest/data/send_data.1.qml b/tests/auto/declarative/xmlhttprequest/data/send_data.1.qml index c0b5bf8..03543a9 100644 --- a/tests/auto/declarative/xmlhttprequest/data/send_data.1.qml +++ b/tests/auto/declarative/xmlhttprequest/data/send_data.1.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string url property bool dataOK: false diff --git a/tests/auto/declarative/xmlhttprequest/data/send_data.2.qml b/tests/auto/declarative/xmlhttprequest/data/send_data.2.qml index 8a8c375..79a27b6 100644 --- a/tests/auto/declarative/xmlhttprequest/data/send_data.2.qml +++ b/tests/auto/declarative/xmlhttprequest/data/send_data.2.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string url property bool dataOK: false diff --git a/tests/auto/declarative/xmlhttprequest/data/send_data.3.qml b/tests/auto/declarative/xmlhttprequest/data/send_data.3.qml index ae5731f..e048769 100644 --- a/tests/auto/declarative/xmlhttprequest/data/send_data.3.qml +++ b/tests/auto/declarative/xmlhttprequest/data/send_data.3.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string url property bool dataOK: false diff --git a/tests/auto/declarative/xmlhttprequest/data/send_data.4.qml b/tests/auto/declarative/xmlhttprequest/data/send_data.4.qml index 4705007..7ab0b27 100644 --- a/tests/auto/declarative/xmlhttprequest/data/send_data.4.qml +++ b/tests/auto/declarative/xmlhttprequest/data/send_data.4.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string url property bool dataOK: false diff --git a/tests/auto/declarative/xmlhttprequest/data/send_data.5.qml b/tests/auto/declarative/xmlhttprequest/data/send_data.5.qml index eca1676..29bf2c2 100644 --- a/tests/auto/declarative/xmlhttprequest/data/send_data.5.qml +++ b/tests/auto/declarative/xmlhttprequest/data/send_data.5.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string url property bool dataOK: false diff --git a/tests/auto/declarative/xmlhttprequest/data/send_data.6.qml b/tests/auto/declarative/xmlhttprequest/data/send_data.6.qml index 0bc2e35..135f45c 100644 --- a/tests/auto/declarative/xmlhttprequest/data/send_data.6.qml +++ b/tests/auto/declarative/xmlhttprequest/data/send_data.6.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string url property bool dataOK: false diff --git a/tests/auto/declarative/xmlhttprequest/data/send_data.7.qml b/tests/auto/declarative/xmlhttprequest/data/send_data.7.qml index 3a2ba56..4a09527 100644 --- a/tests/auto/declarative/xmlhttprequest/data/send_data.7.qml +++ b/tests/auto/declarative/xmlhttprequest/data/send_data.7.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string url property bool dataOK: false diff --git a/tests/auto/declarative/xmlhttprequest/data/send_ignoreData.qml b/tests/auto/declarative/xmlhttprequest/data/send_ignoreData.qml index 6f33eef..dd5fa46 100644 --- a/tests/auto/declarative/xmlhttprequest/data/send_ignoreData.qml +++ b/tests/auto/declarative/xmlhttprequest/data/send_ignoreData.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string reqType property string url diff --git a/tests/auto/declarative/xmlhttprequest/data/send_unsent.qml b/tests/auto/declarative/xmlhttprequest/data/send_unsent.qml index 76c26a3..7f51ecf 100644 --- a/tests/auto/declarative/xmlhttprequest/data/send_unsent.qml +++ b/tests/auto/declarative/xmlhttprequest/data/send_unsent.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool test: false Component.onCompleted: { diff --git a/tests/auto/declarative/xmlhttprequest/data/setRequestHeader.qml b/tests/auto/declarative/xmlhttprequest/data/setRequestHeader.qml index 8ea587a..b0723aa 100644 --- a/tests/auto/declarative/xmlhttprequest/data/setRequestHeader.qml +++ b/tests/auto/declarative/xmlhttprequest/data/setRequestHeader.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string url property bool dataOK: false diff --git a/tests/auto/declarative/xmlhttprequest/data/setRequestHeader_args.qml b/tests/auto/declarative/xmlhttprequest/data/setRequestHeader_args.qml index 6824af2..8305ae1 100644 --- a/tests/auto/declarative/xmlhttprequest/data/setRequestHeader_args.qml +++ b/tests/auto/declarative/xmlhttprequest/data/setRequestHeader_args.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool exceptionThrown: false Component.onCompleted: { diff --git a/tests/auto/declarative/xmlhttprequest/data/setRequestHeader_illegalName.qml b/tests/auto/declarative/xmlhttprequest/data/setRequestHeader_illegalName.qml index 8029bc4..bf31eca 100644 --- a/tests/auto/declarative/xmlhttprequest/data/setRequestHeader_illegalName.qml +++ b/tests/auto/declarative/xmlhttprequest/data/setRequestHeader_illegalName.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string url property string header diff --git a/tests/auto/declarative/xmlhttprequest/data/setRequestHeader_sent.qml b/tests/auto/declarative/xmlhttprequest/data/setRequestHeader_sent.qml index b637f17..c2bbc6e 100644 --- a/tests/auto/declarative/xmlhttprequest/data/setRequestHeader_sent.qml +++ b/tests/auto/declarative/xmlhttprequest/data/setRequestHeader_sent.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string url property bool test: false diff --git a/tests/auto/declarative/xmlhttprequest/data/setRequestHeader_unsent.qml b/tests/auto/declarative/xmlhttprequest/data/setRequestHeader_unsent.qml index 4e89abf..30bc93e 100644 --- a/tests/auto/declarative/xmlhttprequest/data/setRequestHeader_unsent.qml +++ b/tests/auto/declarative/xmlhttprequest/data/setRequestHeader_unsent.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool test: false Component.onCompleted: { diff --git a/tests/auto/declarative/xmlhttprequest/data/staticStateValues.qml b/tests/auto/declarative/xmlhttprequest/data/staticStateValues.qml index aaaadad..ec1c5d8 100644 --- a/tests/auto/declarative/xmlhttprequest/data/staticStateValues.qml +++ b/tests/auto/declarative/xmlhttprequest/data/staticStateValues.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property int unsent: XMLHttpRequest.UNSENT property int opened: XMLHttpRequest.OPENED property int headers_received: XMLHttpRequest.HEADERS_RECEIVED diff --git a/tests/auto/declarative/xmlhttprequest/data/status.qml b/tests/auto/declarative/xmlhttprequest/data/status.qml index 7b2e8d0..04202c4 100644 --- a/tests/auto/declarative/xmlhttprequest/data/status.qml +++ b/tests/auto/declarative/xmlhttprequest/data/status.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string url property int expectedStatus diff --git a/tests/auto/declarative/xmlhttprequest/data/statusText.qml b/tests/auto/declarative/xmlhttprequest/data/statusText.qml index 00d8fdc..8becc3b 100644 --- a/tests/auto/declarative/xmlhttprequest/data/statusText.qml +++ b/tests/auto/declarative/xmlhttprequest/data/statusText.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property string url property string expectedStatus diff --git a/tests/auto/declarative/xmlhttprequest/data/text.qml b/tests/auto/declarative/xmlhttprequest/data/text.qml index 8c97504..4615a07 100644 --- a/tests/auto/declarative/xmlhttprequest/data/text.qml +++ b/tests/auto/declarative/xmlhttprequest/data/text.qml @@ -1,6 +1,6 @@ import Qt 4.6 -Object { +QtObject { property bool xmlTest: false property bool dataOK: false diff --git a/tests/auto/guiapplauncher/README.txt b/tests/auto/guiapplauncher/README.txt new file mode 100644 index 0000000..317f9d0 --- /dev/null +++ b/tests/auto/guiapplauncher/README.txt @@ -0,0 +1,14 @@ +This test launches gui applications (tools, demos and prominent examples), +keeps them running a while (grabbing their top level from the window manager) +and sends them a Close event via window manager. + +It checks that they do not crash nor produce unexpected error output. + +Note: Do not play with the machine while it is running as otherwise +the top-level find algorithm might get confused (especially on Windows). + +Environment variables are checked to turned off some tests (see code). + +It is currently implemented for X11 (Skips unless DISPLAY is set) and +Windows, pending an implementation of the WindowManager class and deployment +on the other platforms. diff --git a/tests/auto/guiapplauncher/guiapplauncher.pro b/tests/auto/guiapplauncher/guiapplauncher.pro new file mode 100644 index 0000000..27c3553 --- /dev/null +++ b/tests/auto/guiapplauncher/guiapplauncher.pro @@ -0,0 +1,20 @@ +# ------------------------------------------------- +# Project created by QtCreator 2009-11-10T14:39:06 +# ------------------------------------------------- + +# Link against gui for X11,etc. + +DEFINES += SRCDIR=\\\"$$PWD/\\\" +TARGET = tst_guiapplauncher +CONFIG += console +CONFIG -= app_bundle +CONFIG += qtestlib +TEMPLATE = app +SOURCES += tst_guiapplauncher.cpp \ + windowmanager.cpp +HEADERS += windowmanager.h + +win32 { + # process enumeration,etc. + LIBS+=user32.lib +} diff --git a/tests/auto/guiapplauncher/test.ts b/tests/auto/guiapplauncher/test.ts new file mode 100644 index 0000000..79c9c76 --- /dev/null +++ b/tests/auto/guiapplauncher/test.ts @@ -0,0 +1,973 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="de"> +<context> + <name>AssistantServer</name> + <message> + <location filename="../tools/assistant/compat/main.cpp" line="+225"/> + <source>Qt Assistant</source> + <translation>Qt Assistant</translation> + </message> + <message> + <location line="+1"/> + <source>Failed to bind to port %1</source> + <translation>Kann Port %1 nicht binden</translation> + </message> +</context> +<context> + <name>FontPanel</name> + <message> + <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="+63"/> + <source>Font</source> + <translation>Schrift</translation> + </message> + <message> + <location line="+11"/> + <source>&Writing system</source> + <translation>S&kript</translation> + </message> + <message> + <location line="+3"/> + <source>&Family</source> + <translation>&Schriftart</translation> + </message> + <message> + <location line="+4"/> + <source>&Style</source> + <translation>S&chriftschnitt</translation> + </message> + <message> + <location line="+4"/> + <source>&Point size</source> + <translation>Schriftg&rad</translation> + </message> +</context> +<context> + <name>FontSettingsDialog</name> + <message> + <location filename="../tools/assistant/compat/fontsettingsdialog.cpp" line="+63"/> + <source>Font Settings</source> + <translation>Schriftart</translation> + </message> + <message> + <location line="+7"/> + <source>Font settings for:</source> + <translation>Schriftart für:</translation> + </message> + <message> + <location line="+4"/> + <source>Browser</source> + <translation>Hilfeseiten</translation> + </message> + <message> + <location line="+1"/> + <source>Application</source> + <translation>Anwendung</translation> + </message> + <message> + <location line="+6"/> + <source>Use custom settings</source> + <translation>Erweitere Einstellungen nutzen</translation> + </message> +</context> +<context> + <name>HelpDialog</name> + <message> + <location filename="../tools/assistant/compat/helpdialog.ui"/> + <source>Con&tents</source> + <translation>Inhal&t</translation> + </message> + <message> + <location filename="../tools/assistant/compat/helpdialog.cpp" line="+376"/> + <location line="+16"/> + <location line="+661"/> + <source>Qt Assistant</source> + <translation>Qt Assistant</translation> + </message> + <message> + <location line="-771"/> + <source>Open Link in New Window</source> + <translation>Öffne Link in neuem Fenster</translation> + </message> + <message> + <location line="+76"/> + <location line="+82"/> + <source>Prepare...</source> + <translation>Initialisiere...</translation> + </message> + <message> + <location line="-47"/> + <source>Cannot open the index file %1</source> + <translation>Kann Indexdatei %1 nicht öffnen</translation> + </message> + <message> + <location line="+58"/> + <location line="+124"/> + <location line="+8"/> + <source>Warning</source> + <translation>Warnung</translation> + </message> + <message> + <location line="-131"/> + <location line="+124"/> + <source>Documentation file %1 does not exist! +Skipping file.</source> + <translation>Dokumentation %1 existiert nicht! +Überspringe Datei.</translation> + </message> + <message> + <location line="-112"/> + <location line="+133"/> + <source>Parse Error</source> + <translation>Syntaxfehler</translation> + </message> + <message> + <location line="+35"/> + <location line="+469"/> + <source>Done</source> + <translation>Fertig</translation> + </message> + <message> + <location line="-18"/> + <source>Indexing files...</source> + <translation>Indiziere Dokumentation...</translation> + </message> + <message> + <location line="+15"/> + <source>Reading dictionary...</source> + <translation>Lese Suchindex...</translation> + </message> + <message> + <location line="+46"/> + <location line="+9"/> + <source>Full Text Search</source> + <translation>Volltextsuche</translation> + </message> + <message> + <location line="-8"/> + <source>Using a wildcard within phrases is not allowed.</source> + <translation>Wildcards innerhalb von Phrasen sind nicht zugelassen.</translation> + </message> + <message> + <location line="+9"/> + <source>The closing quotation mark is missing.</source> + <translation>Das schließende Anführungszeichen fehlt.</translation> + </message> + <message numerus="yes"> + <location line="+7"/> + <source>%n document(s) found.</source> + <translation> + <numerusform>%n Dokumente gefunden.</numerusform> + <numerusform></numerusform> + </translation> + </message> + <message> + <location line="-882"/> + <source>Open Link in Current Tab</source> + <translation>Link im Aktuellen Tab öffnen</translation> + </message> + <message> + <location line="+6"/> + <source>Open Link in New Tab</source> + <translation>Link in einem neuen Tab öffnen</translation> + </message> + <message> + <location line="+91"/> + <source>Failed to load keyword index file +Assistant will not work!</source> + <translation>Die Indexdatei konnte nicht geladen werden. +Der Assistent ist nicht einsatzbereit!</translation> + </message> + <message> + <location line="+208"/> + <source>Documentation file %1 is not compatible! +Skipping file.</source> + <translation>Dokumentation %1 ist nicht kompatibel! Datei wird übersprungen.</translation> + </message> + <message> + <location line="+470"/> + <source>Failed to save fulltext search index +Assistant will not work!</source> + <translation>Der Index für die Volltextsuche konnte nicht gespeichert werden. +Assistent ist nicht einsatzbereit!</translation> + </message> + <message> + <location filename="../tools/assistant/compat/helpdialog.ui"/> + <source>Help</source> + <translation>Hilfe</translation> + </message> + <message> + <location/> + <source><b>Help</b><p>Choose the topic you want help on from the contents list, or search the index for keywords.</p></source> + <translation><b>Hilfe</b><p>Wählen Sie ein Hilfethema aus dem Inhalt oder suchen Sie im Index nach Schlüsselwörtern.</p></translation> + </message> + <message> + <location/> + <source>Displays help topics organized by category, index or bookmarks. Another tab inherits the full text search.</source> + <translation>Zeigt Hilfethemen geordnet nach Kategorie, Index oder Lesezeichen an. Ein weiterer Abschnitt enthält die Volltextsuche.</translation> + </message> + <message> + <location/> + <source><b>Help topics organized by category.</b><p>Double-click an item to see the topics in that category. To view a topic, just double-click it.</p></source> + <translation><b>Hilfethemen geordnet nach Kategorie.</b><p>Doppelklicken Sie einen Eintrag, um die Themen dieser Kategorie zu sehen. Doppelklicken Sie ein Thema, um es angezeigt zu bekommen.</p></translation> + </message> + <message> + <location/> + <source>column 1</source> + <translation>Spalte 1</translation> + </message> + <message> + <location/> + <source>&Index</source> + <translation>&Index</translation> + </message> + <message> + <location/> + <source>&Look For:</source> + <translation>Suchen &nach:</translation> + </message> + <message> + <location/> + <source>Enter keyword</source> + <translation>Geben Sie ein Schlüsselwort ein</translation> + </message> + <message> + <location/> + <source><b>Enter a keyword.</b><p>The list will select an item that matches the entered string best.</p></source> + <translation><b>Geben Sie ein Schlüsselwort ein.</b><p>Es wird dann der Eintrag aus der Liste ausgewählt, der am besten mit dem eingegebenen Begriff übereinstimmt.</p></translation> + </message> + <message> + <location/> + <source><b>List of available help topics.</b><p>Double-click on an item to open its help page. If more than one is found, you must specify which page you want.</p></source> + <translation><b>Liste aller verfügbaren Hilfethemen.</b><p>Doppelklicken Sie auf einen Eintrag, um die Hilfe zu öffnen. Wenn mehr als eine Seite gefunden wurde, wählen Sie die gewünschte Seite aus.</p></translation> + </message> + <message> + <location/> + <source>&Bookmarks</source> + <translation>L&esezeichen</translation> + </message> + <message> + <location/> + <source>Displays the list of bookmarks.</source> + <translation>Zeigt alle Lesezeichen an.</translation> + </message> + <message> + <location/> + <source>Add new bookmark</source> + <translation>Füge neues Lesezeichen hinzu</translation> + </message> + <message> + <location/> + <source>Add the currently displayed page as a new bookmark.</source> + <translation>Füge aktuelle Seite zu den Lesezeichen hinzu.</translation> + </message> + <message> + <location/> + <source>&New</source> + <translation>&Neu</translation> + </message> + <message> + <location/> + <source>Delete bookmark</source> + <translation>Lösche Lesezeichen</translation> + </message> + <message> + <location/> + <source>Delete the selected bookmark.</source> + <translation>Lösche markiertes Lesezeichen.</translation> + </message> + <message> + <location/> + <source>&Delete</source> + <translation>&Löschen</translation> + </message> + <message> + <location/> + <source>&Search</source> + <translation>&Suche</translation> + </message> + <message> + <location/> + <source>Searching f&or:</source> + <translation>Suche &nach:</translation> + </message> + <message> + <location/> + <source><b>Enter search word(s).</b><p>Enter here the word(s) you are looking for. The words may contain wildcards (*). For a sequence of words quote them.</p></source> + <translation><b>Geben Sie Suchbegriffe ein.</b><p>Geben Sie hier die gesuchten Begriffe ein. Die Begriffe können Wildcards (*) enthalten. Eine Phrase muß in Anführungszeichen stehen.</p></translation> + </message> + <message> + <location/> + <source><b>Found documents</b><p>This list contains all found documents from the last search. The documents are ordered, i.e. the first document has the most matches.</p></source> + <translation><b>Gefundene Dokumente</b><p>Diese Liste beinhaltet alle gefundenen Dokumente der letzten Suche. Die Dokumente sind nach der Häufigkeit der Treffer geordnet.</p></translation> + </message> + <message> + <location/> + <source>Found &Documents:</source> + <translation>Gefundene &Dokumente:</translation> + </message> + <message> + <location/> + <source>Display the help page for the full text search.</source> + <translation>Zeigt die Hilfeseite für die Volltextsuche an.</translation> + </message> + <message> + <location/> + <source>He&lp</source> + <translation>Hi&lfe</translation> + </message> + <message> + <location/> + <source>Pressing this button starts the search.</source> + <translation>Startet die Suche.</translation> + </message> + <message> + <location/> + <source>Preparing...</source> + <translation>Initialisiere...</translation> + </message> + <message> + <location/> + <source>Enter searchword(s)</source> + <translation>Geben Sie Suchbegriffe ein</translation> + </message> + <message> + <location/> + <source>Display the help page</source> + <translation>Hilfeseite anzeigen</translation> + </message> + <message> + <location/> + <source>Start searching</source> + <translation>Suche beginnen</translation> + </message> +</context> +<context> + <name>HelpWindow</name> + <message> + <location filename="../tools/assistant/compat/helpwindow.cpp" line="+97"/> + <source>Help</source> + <translation>Hilfe</translation> + </message> + <message> + <location line="+93"/> + <source>Open Link in New Window Shift+LMB</source> + <translation>Öffne Link in neuem Fenster</translation> + </message> + <message> + <location line="-2"/> + <source>Open Link in New Tab</source> + <translation>Link in einem neuen Tab öffnen</translation> + </message> + <message> + <location line="-90"/> + <source>Unable to launch web browser. +</source> + <translation>Der Webbrowser konnte nicht gestartet werden. +</translation> + </message> + <message> + <location line="+1"/> + <source>OK</source> + <translation>OK</translation> + </message> + <message> + <location line="+27"/> + <source>Failed to open link: '%1'</source> + <translation>Der Link '%1' konnte nicht geöffnet werden</translation> + </message> + <message> + <location line="+1"/> + <source><div align="center"><h1>The page could not be found</h1><br><h3>'%1'</h3></div></source> + <translation><div align="center"><h1>Die Seite wurde nicht gefunden</h1><br><h3>'%1'</h3></div></translation> + </message> + <message> + <location line="+2"/> + <source>Error...</source> + <translation>Fehler ...</translation> + </message> + <message> + <location line="+56"/> + <source>Copy &Link Location</source> + <translation>Link-Adresse kopieren</translation> + </message> +</context> +<context> + <name>Index</name> + <message> + <location filename="../tools/assistant/compat/index.cpp" line="+385"/> + <source>Untitled</source> + <translation>Unbenannt</translation> + </message> +</context> +<context> + <name>MainWindow</name> + <message> + <location filename="../tools/assistant/compat/mainwindow.ui"/> + <source>Toolbar</source> + <translation>Werkzeugleiste</translation> + </message> + <message> + <location/> + <source>&Print...</source> + <translation>&Drucken...</translation> + </message> + <message> + <location/> + <source>E&xit</source> + <translation>&Beenden</translation> + </message> + <message> + <location/> + <source>&Copy</source> + <translation>&Kopieren</translation> + </message> + <message> + <location/> + <source>&Find in Text...</source> + <translation>Text&suche...</translation> + </message> + <message> + <location/> + <source>&Home</source> + <translation>St&artseite</translation> + </message> + <message> + <location/> + <source>&Previous</source> + <translation>&Vorherige</translation> + </message> + <message> + <location/> + <source>&Next</source> + <translation>&Nächste</translation> + </message> + <message> + <location/> + <source>About Qt</source> + <translation>Über Qt</translation> + </message> + <message> + <location/> + <source>Zoom &in</source> + <translation>Vergrößern</translation> + </message> + <message> + <location/> + <source>Zoom &out</source> + <translation>Ver&kleinern</translation> + </message> + <message> + <location/> + <source>New Window</source> + <translation>Neues Fenster...</translation> + </message> + <message> + <location filename="../tools/assistant/compat/mainwindow.cpp" line="+198"/> + <source>Ctrl+T</source> + <translation>Strg+T +</translation> + </message> + <message> + <location line="+1"/> + <source>Ctrl+I</source> + <translation>Strg+I</translation> + </message> + <message> + <location line="+1"/> + <source>Ctrl+B</source> + <translation>Strg+E</translation> + </message> + <message> + <location line="+129"/> + <location line="+1"/> + <source>Qt Assistant</source> + <translation>Qt Assistant</translation> + </message> + <message> + <location filename="../tools/assistant/compat/mainwindow.ui"/> + <source>&Add Bookmark</source> + <translation>&Füge Lesezeichen hinzu</translation> + </message> + <message> + <location/> + <source>&File</source> + <translation>&Datei</translation> + </message> + <message> + <location/> + <source>&Edit</source> + <translation>&Bearbeiten</translation> + </message> + <message> + <location/> + <source>&View</source> + <translation>&Ansicht</translation> + </message> + <message> + <location/> + <source>&Go</source> + <translation>&Gehe zu</translation> + </message> + <message> + <location/> + <source>Boo&kmarks</source> + <translation>&Lesezeichen</translation> + </message> + <message> + <location/> + <source>Qt Assistant by Nokia</source> + <translation>Qt Assistant von Nokia</translation> + </message> + <message> + <location/> + <source>&Help</source> + <translation>&Hilfe</translation> + </message> + <message> + <location/> + <source>Print the currently displayed page.</source> + <translation>Drucke aktuelle Seite.</translation> + </message> + <message> + <location/> + <source>Ctrl+P</source> + <translation>Strg+P</translation> + </message> + <message> + <location/> + <source>Quit Qt Assistant.</source> + <translation>Qt Assistant beenden.</translation> + </message> + <message> + <location/> + <source>Ctrl+Q</source> + <translation>Strg+Q</translation> + </message> + <message> + <location/> + <source>Copy the selected text to the clipboard.</source> + <translation>Den markierten Text in die Zwischenablage kopieren.</translation> + </message> + <message> + <location/> + <source>Ctrl+C</source> + <translation>Strg+C</translation> + </message> + <message> + <location/> + <source>Open the Find dialog. Qt Assistant will search the currently displayed page for the text you enter.</source> + <translation>Den Suchdialog öffnen. Qt Assistant sucht in der aktuellen Seite nach dem eingegebenen Text.</translation> + </message> + <message> + <location/> + <source>Ctrl+F</source> + <translation>Strg+F</translation> + </message> + <message> + <location/> + <source>Go to the home page. Qt Assistant's home page is the Qt Reference Documentation.</source> + <translation>Zur Startseite gehen. Startseite im Qt Assistant ist die Qt-Referenzdokumentation.</translation> + </message> + <message> + <location/> + <source>Ctrl+Home</source> + <translation>Strg+Pos1</translation> + </message> + <message> + <location/> + <source>Go to the previous page.</source> + <translation>Gehe zur vorherigen Seite.</translation> + </message> + <message> + <location/> + <source>Alt+Left</source> + <translation>Alt+Links</translation> + </message> + <message> + <location/> + <source>Go to the next page.</source> + <translation>Gehe zur nächsten Seite.</translation> + </message> + <message> + <location/> + <source>Alt+Right</source> + <translation>Alt+Rechts</translation> + </message> + <message> + <location/> + <source>Display further information about Qt Assistant.</source> + <translation>Zeigt das Handbuch zum Qt Designer an.</translation> + </message> + <message> + <location/> + <source>Zoom in on the document, i.e. increase the font size.</source> + <translation>Vergrößert die Schrift.</translation> + </message> + <message> + <location/> + <source>Ctrl++</source> + <translation>Strg++</translation> + </message> + <message> + <location/> + <source>Zoom out on the document, i.e. decrease the font size.</source> + <translation>Verkleinert die Schrift.</translation> + </message> + <message> + <location/> + <source>Ctrl+-</source> + <translation>Strg+-</translation> + </message> + <message> + <location/> + <source>Open a new window.</source> + <translation>Öffnet ein neues Fenster.</translation> + </message> + <message> + <location/> + <source>Ctrl+N</source> + <translation>Strg+N</translation> + </message> + <message> + <location/> + <source>&Close</source> + <translation>&Schließen</translation> + </message> + <message> + <location/> + <source>Close the current window.</source> + <translation>Schließt das aktuelle Fenster.</translation> + </message> + <message> + <location/> + <source>Qt Assistant Manual</source> + <translation>Handbuch zu Qt Assistant</translation> + </message> + <message> + <location/> + <source>F1</source> + <translation>F1</translation> + </message> + <message> + <location/> + <source>Add the currently displayed page as a new bookmark.</source> + <translation>Aktuelle Seite zu den Lesezeichen hinzufügen.</translation> + </message> + <message> + <location/> + <source>What's This?</source> + <translation>Direkthilfe</translation> + </message> + <message> + <location/> + <source>"What's This?" context sensitive help.</source> + <translation>Kontextbezogene Direkthilfe.</translation> + </message> + <message> + <location/> + <source>Shift+F1</source> + <translation>Umschalt+F1</translation> + </message> + <message> + <location filename="../tools/assistant/compat/mainwindow.cpp" line="-129"/> + <source>Ctrl+S</source> + <translation>Strg+S</translation> + </message> + <message> + <location line="-33"/> + <source>Initializing Qt Assistant...</source> + <translation>Qt Assistant wird initialisiert...</translation> + </message> + <message> + <location filename="../tools/assistant/compat/mainwindow.ui"/> + <source>Go</source> + <translation>Gehe zu</translation> + </message> + <message> + <location/> + <source>Find &Next</source> + <translation>Weitersuchen</translation> + </message> + <message> + <location/> + <source>F3</source> + <translation>F3</translation> + </message> + <message> + <location/> + <source>Find &Previous</source> + <translation>Vorheriges suchen</translation> + </message> + <message> + <location/> + <source>Shift+F3</source> + <translation>Umschalt+F3</translation> + </message> + <message> + <location/> + <source>About Qt Assistant</source> + <translation>Über Qt Assistent</translation> + </message> + <message> + <location/> + <source>Add Tab</source> + <translation>Tab einfügen</translation> + </message> + <message> + <location/> + <source>Ctrl+Alt+N</source> + <translation></translation> + </message> + <message> + <location/> + <source>Next Tab</source> + <translation>Nächster Tab</translation> + </message> + <message> + <location/> + <source>Ctrl+Alt+Right</source> + <translation></translation> + </message> + <message> + <location/> + <source>Previous Tab</source> + <translation>Voriger Tab</translation> + </message> + <message> + <location/> + <source>Ctrl+Alt+Left</source> + <translation></translation> + </message> + <message> + <location/> + <source>Close Tab</source> + <translation>Tab schließen</translation> + </message> + <message> + <location/> + <source>Ctrl+Alt+Q</source> + <translation></translation> + </message> + <message> + <location filename="../tools/assistant/compat/mainwindow.cpp" line="+181"/> + <source>Failed to open about application contents in file: '%1'</source> + <translation>Fehler beim Öffnen des Inhalts in Datei: '%1'</translation> + </message> + <message> + <location line="-246"/> + <source>Sidebar</source> + <translation>Sidebar</translation> + </message> + <message> + <location line="+18"/> + <source>&Window</source> + <translation>&Fenster</translation> + </message> + <message> + <location line="+2"/> + <source>Minimize</source> + <translation>Minimieren</translation> + </message> + <message> + <location line="+1"/> + <source>Ctrl+M</source> + <translation>Strg+M</translation> + </message> + <message> + <location line="+70"/> + <source>SHIFT+CTRL+=</source> + <translation>Umschalt+Strg+=</translation> + </message> + <message> + <location filename="../tools/assistant/compat/mainwindow.ui"/> + <source>Ctrl+W</source> + <translation>Strg+W</translation> + </message> + <message> + <location filename="../tools/assistant/compat/mainwindow.cpp" line="+8"/> + <source>Ctrl+]</source> + <translation>Strg+AltGr+]</translation> + </message> + <message> + <location line="+1"/> + <source>Ctrl+[</source> + <translation>Strg+AltGr+[</translation> + </message> + <message> + <location line="+7"/> + <source>Views</source> + <translation>Menüleisten/Sidebar</translation> + </message> + <message> + <location line="+80"/> + <source>Displays the main page of a specific documentation set.</source> + <translation>Zeigt die Hauptseite eines Dokumentensets an.</translation> + </message> + <message> + <location line="+262"/> + <source>...</source> + <translation>...</translation> + </message> + <message> + <location line="+238"/> + <location line="+6"/> + <source>Save Page</source> + <translation>Seite speichern</translation> + </message> + <message> + <location line="+0"/> + <source>Cannot open file for writing!</source> + <translation>Die Datei konnte nicht zum Schreiben geöffnet werden.</translation> + </message> + <message> + <location filename="../tools/assistant/compat/mainwindow.ui"/> + <source>Save Page As...</source> + <translation>Seite speichern als...</translation> + </message> + <message> + <location/> + <source>Ctrl+Alt+S</source> + <translation>Strg+Alt+S</translation> + </message> + <message> + <location/> + <source>Sync with Table of Contents</source> + <translation>Seite mit Inhalt-Tab syncronisieren</translation> + </message> + <message> + <location/> + <source>Select the page in contents tab.</source> + <translation>Wählt die Seite im Inhalt-Tab aus.</translation> + </message> + <message> + <location/> + <source>Font Settings...</source> + <translation>Schriftart...</translation> + </message> +</context> +<context> + <name>QObject</name> + <message> + <location filename="../tools/assistant/compat/config.cpp" line="+350"/> + <source>Qt Assistant by Nokia</source> + <translation>Qt Assistant von Nokia</translation> + </message> +</context> +<context> + <name>TabbedBrowser</name> + <message> + <location filename="../tools/assistant/compat/tabbedbrowser.ui"/> + <source>TabbedBrowser</source> + <translation></translation> + </message> + <message> + <location/> + <source>Untitled</source> + <translation>Unbenannt</translation> + </message> + <message> + <location filename="../tools/assistant/compat/tabbedbrowser.cpp" line="+235"/> + <source>Add page</source> + <translation>Seite einfügen</translation> + </message> + <message> + <location line="+9"/> + <source>Close page</source> + <translation>Seite schließen</translation> + </message> + <message> + <location line="-95"/> + <source>...</source> + <translation>...</translation> + </message> + <message> + <location line="+338"/> + <source>New Tab</source> + <translation>Neuer Tab</translation> + </message> + <message> + <location line="+1"/> + <source>Close Tab</source> + <translation>Tab schließen</translation> + </message> + <message> + <location line="+1"/> + <source>Close Other Tabs</source> + <translation>Andere Tabs schließen</translation> + </message> + <message> + <location filename="../tools/assistant/compat/tabbedbrowser.ui"/> + <source>Previous</source> + <translation>Vorheriger</translation> + </message> + <message> + <location/> + <source>Next</source> + <translation>Nächster</translation> + </message> + <message> + <location/> + <source>Case Sensitive</source> + <translation>Groß-/Kleinschreibung beachten</translation> + </message> + <message> + <location/> + <source>Whole words</source> + <translation>Ganze Wörter</translation> + </message> + <message> + <location/> + <source><img src=":/trolltech/assistant/images/wrap.png">&nbsp;Search wrapped</source> + <translation><img src=":/trolltech/assistant/images/wrap.png">&nbsp;Seitenende</translation> + </message> +</context> +<context> + <name>TopicChooser</name> + <message> + <location filename="../tools/assistant/compat/topicchooser.cpp" line="+56"/> + <source>Choose a topic for <b>%1</b></source> + <translation>Wählen Sie ein Thema für <b>%1</b></translation> + </message> + <message> + <location filename="../tools/assistant/compat/topicchooser.ui"/> + <source>Choose Topic</source> + <translation>Thema wählen</translation> + </message> + <message> + <location/> + <source>Select a topic from the list and click the <b>Display</b>-button to open the online help.</source> + <translation>Wählen Sie ein Thema aus der Liste aus und klicken Sie <b>Anzeigen</b> um die Hilfe zu öffnen.</translation> + </message> + <message> + <location/> + <source>&Topics</source> + <translation>&Themen</translation> + </message> + <message> + <location/> + <source>Displays a list of available help topics for the keyword.</source> + <translation>Zeigt eine Liste der verfügbaren Hilfethemen für diesen Begriff an.</translation> + </message> + <message> + <location/> + <source>&Display</source> + <translation>&Anzeigen</translation> + </message> + <message> + <location/> + <source>Open the topic selected in the list.</source> + <translation>Öffne das gewählte Thema aus der Liste.</translation> + </message> + <message> + <location/> + <source>&Close</source> + <translation>&Schließen</translation> + </message> + <message> + <location/> + <source>Close the Dialog.</source> + <translation>Schließt den Dialog.</translation> + </message> +</context> +</TS> diff --git a/tests/auto/guiapplauncher/test.ui b/tests/auto/guiapplauncher/test.ui new file mode 100644 index 0000000..02efcd4 --- /dev/null +++ b/tests/auto/guiapplauncher/test.ui @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>MainWindow</class> + <widget class="QMainWindow" name="MainWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>800</width> + <height>600</height> + </rect> + </property> + <property name="windowTitle"> + <string>MainWindow</string> + </property> + <widget class="QWidget" name="centralwidget"> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QPlainTextEdit" name="plainTextEdit"/> + </item> + </layout> + </widget> + <widget class="QMenuBar" name="menubar"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>800</width> + <height>23</height> + </rect> + </property> + <widget class="QMenu" name="menuFile"> + <property name="title"> + <string>File</string> + </property> + <addaction name="actionExit"/> + </widget> + <addaction name="menuFile"/> + </widget> + <widget class="QStatusBar" name="statusbar"/> + <action name="actionExit"> + <property name="text"> + <string>Exit</string> + </property> + </action> + </widget> + <resources/> + <connections> + <connection> + <sender>actionExit</sender> + <signal>triggered()</signal> + <receiver>MainWindow</receiver> + <slot>close()</slot> + <hints> + <hint type="sourcelabel"> + <x>-1</x> + <y>-1</y> + </hint> + <hint type="destinationlabel"> + <x>399</x> + <y>299</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/tests/auto/guiapplauncher/tst_guiapplauncher.cpp b/tests/auto/guiapplauncher/tst_guiapplauncher.cpp new file mode 100644 index 0000000..a61bd5e --- /dev/null +++ b/tests/auto/guiapplauncher/tst_guiapplauncher.cpp @@ -0,0 +1,526 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite 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 "windowmanager.h" + +#include <QtCore/QDir> +#include <QtCore/QString> +#include <QtTest/QtTest> +#include <QtCore/QProcess> +#include <QtCore/QByteArray> +#include <QtCore/QLibraryInfo> +#include <QtCore/QVariant> +#include <QtCore/QDateTime> +#include <QtCore/QMap> + +// AppLaunch: Launch gui applications, keep them running a while +// (grabbing their top level from the window manager) and send +// them a Close event via window manager. Verify that they do not +// not crash nor produces unexpected error output. +// Note: Do not play with the machine while it is running as otherwise +// the top-level find algorithm might get confused (especially on Windows). +// Environment variables are checked to turned off some tests +// It is currently implemented for X11 and Windows, pending an +// implementation of the WindowManager class and deployment on +// the other platforms. + +enum { defaultUpTimeMS = 3000, defaultTopLevelWindowTimeoutMS = 30000, + defaultTerminationTimeoutMS = 35000 }; + +// List the examples to test (Gui examples only). +struct Example { + const char *name; + const char *directory; + const char *binary; + unsigned priority; // 0-highest + int upTimeMS; +}; + +const struct Example examples[] = { + {"animation/animatedtiles Example", "animation/animatedtiles", "animatedtiles", 0, -1}, + {"animation/appchooser Example", "animation/appchooser", "appchooser", 10, -1}, + {"animation/easing Example", "animation/easing", "easing", 10, -1}, + {"animation/moveblocks Example", "animation/moveblocks", "moveblocks", 10, -1}, + {"animation/states Example", "animation/states", "states", 10, -1}, + {"animation/stickman Example", "animation/stickman", "stickman", 10, -1}, + {"designer/calculatorbuilder Example", "designer/calculatorbuilder", "calculatorbuilder", 10, -1}, + {"dialogs/standarddialogs Example", "dialogs/standarddialogs", "standarddialogs", 10, -1}, + {"draganddrop/dropsite Example", "draganddrop/dropsite", "dropsite", 10, -1}, + {"draganddrop/fridgemagnets Example", "draganddrop/fridgemagnets", "fridgemagnets", 10, -1}, + {"draganddrop/puzzle Example", "draganddrop/puzzle", "puzzle", 10, -1}, + {"effects/blurpicker Example", "effects/blurpicker", "blurpicker", 10, -1}, + {"effects/customshader Example", "effects/customshader", "customshader", 10, -1}, + {"effects/fademessage Example", "effects/fademessage", "fademessage", 10, -1}, + {"effects/lighting Example", "effects/lighting", "lighting", 10, -1}, + {"graphicsview/anchorlayout Example", "graphicsview/anchorlayout", "anchorlayout", 10, -1}, + {"graphicsview/basicgraphicslayouts Example", "graphicsview/basicgraphicslayouts", "basicgraphicslayouts", 0, -1}, + {"graphicsview/collidingmice Example", "graphicsview/collidingmice", "collidingmice", 10, -1}, + {"graphicsview/diagramscene Example", "graphicsview/diagramscene", "diagramscene", 10, -1}, + {"graphicsview/dragdroprobot Example", "graphicsview/dragdroprobot", "dragdroprobot", 10, -1}, + {"graphicsview/elasticnodes Example", "graphicsview/elasticnodes", "elasticnodes", 10, -1}, + {"graphicsview/flowlayout Example", "graphicsview/flowlayout", "flowlayout", 10, -1}, + {"graphicsview/padnavigator Example", "graphicsview/padnavigator", "padnavigator", 0, -1}, + {"graphicsview/portedasteroids Example", "graphicsview/portedasteroids", "portedasteroids", 10, -1}, + {"graphicsview/portedcanvas Example", "graphicsview/portedcanvas", "portedcanvas", 10, -1}, + {"graphicsview/weatheranchorlayout Example", "graphicsview/weatheranchorlayout", "weatheranchorlayout", 10, -1}, + {"itemviews/addressbook Example", "itemviews/addressbook", "addressbook", 0, -1}, + {"itemviews/basicsortfiltermodel Example", "itemviews/basicsortfiltermodel", "basicsortfiltermodel", 10, -1}, + {"itemviews/chart Example", "itemviews/chart", "chart", 0, -1}, + {"itemviews/coloreditorfactory Example", "itemviews/coloreditorfactory", "coloreditorfactory", 10, -1}, + {"itemviews/combowidgetmapper Example", "itemviews/combowidgetmapper", "combowidgetmapper", 6, -1}, + {"itemviews/customsortfiltermodel Example", "itemviews/customsortfiltermodel", "customsortfiltermodel", 6, -1}, + {"itemviews/dirview Example", "itemviews/dirview", "dirview", 0, -1}, + {"itemviews/editabletreemodel Example", "itemviews/editabletreemodel", "editabletreemodel", 0, -1}, + {"itemviews/fetchmore Example", "itemviews/fetchmore", "fetchmore", 10, -1}, + {"itemviews/frozencolumn Example", "itemviews/frozencolumn", "frozencolumn", 10, -1}, + {"itemviews/pixelator Example", "itemviews/pixelator", "pixelator", 10, -1}, + {"itemviews/puzzle Example", "itemviews/puzzle", "puzzle", 10, -1}, + {"itemviews/simpledommodel Example", "itemviews/simpledommodel", "simpledommodel", 10, -1}, + {"itemviews/simpletreemodel Example", "itemviews/simpletreemodel", "simpletreemodel", 10, -1}, + {"itemviews/simplewidgetmapper Example", "itemviews/simplewidgetmapper", "simplewidgetmapper", 10, -1}, + {"itemviews/spinboxdelegate Example", "itemviews/spinboxdelegate", "spinboxdelegate", 0, -1}, + {"itemviews/stardelegate Example", "itemviews/stardelegate", "stardelegate", 10, -1}, + {"layouts/basiclayouts Example", "layouts/basiclayouts", "basiclayouts", 0, -1}, + {"layouts/borderlayout Example", "layouts/borderlayout", "borderlayout", 10, -1}, + {"layouts/dynamiclayouts Example", "layouts/dynamiclayouts", "dynamiclayouts", 10, -1}, + {"layouts/flowlayout Example", "layouts/flowlayout", "flowlayout", 10, -1}, + {"mainwindows/application Example", "mainwindows/application", "application", 6, -1}, + {"mainwindows/dockwidgets Example", "mainwindows/dockwidgets", "dockwidgets", 0, -1}, + {"mainwindows/mdi Example", "mainwindows/mdi", "mdi", 0, -1}, + {"mainwindows/menus Example", "mainwindows/menus", "menus", 10, -1}, + {"mainwindows/recentfiles Example", "mainwindows/recentfiles", "recentfiles", 10, -1}, + {"mainwindows/sdi Example", "mainwindows/sdi", "sdi", 10, -1}, + {"multitouch/dials Example", "multitouch/dials", "dials", 10, -1}, + {"multitouch/fingerpaint Example", "multitouch/fingerpaint", "fingerpaint", 10, -1}, + {"multitouch/knobs Example", "multitouch/knobs", "knobs", 10, -1}, + {"multitouch/pinchzoom Example", "multitouch/pinchzoom", "pinchzoom", 10, -1}, + {"opengl/2dpainting Example", "opengl/2dpainting", "2dpainting", 10, -1}, + {"opengl/grabber Example", "opengl/grabber", "grabber", 10, -1}, + {"opengl/hellogl Example", "opengl/hellogl", "hellogl", 10, -1}, + {"opengl/overpainting Example", "opengl/overpainting", "overpainting", 10, -1}, + {"opengl/samplebuffers Example", "opengl/samplebuffers", "samplebuffers", 10, -1}, + {"opengl/textures Example", "opengl/textures", "textures", 10, -1}, + {"painting/basicdrawing Example", "painting/basicdrawing", "basicdrawing", 10, -1}, + {"painting/concentriccircles Example", "painting/concentriccircles", "concentriccircles", 0, -1}, + {"painting/fontsampler Example", "painting/fontsampler", "fontsampler", 0, -1}, + {"painting/imagecomposition Example", "painting/imagecomposition", "imagecomposition", 10, -1}, + {"painting/painterpaths Example", "painting/painterpaths", "painterpaths", 10, -1}, + {"painting/svggenerator Example", "painting/svggenerator", "svggenerator", 10, -1}, + {"painting/svgviewer Example", "painting/svgviewer", "svgviewer", 0, -1}, + {"painting/transformations Example", "painting/transformations", "transformations", 0, -1}, + {"qtconcurrent/imagescaling Example", "qtconcurrent/imagescaling", "imagescaling", 10, -1}, + {"richtext/calendar Example", "richtext/calendar", "calendar", 0, -1}, + {"richtext/orderform Example", "richtext/orderform", "orderform", 10, -1}, + {"richtext/syntaxhighlighter Example", "richtext/syntaxhighlighter", "syntaxhighlighter", 0, -1}, + {"richtext/textobject Example", "richtext/textobject", "textobject", 10, -1}, + {"script/calculator Example", "script/calculator", "calculator", 6, -1}, + {"script/qstetrix Example", "script/qstetrix", "qstetrix", 0, -1}, + {"statemachine/eventtransitions Example", "statemachine/eventtransitions", "eventtransitions", 10, -1}, + {"statemachine/rogue Example", "statemachine/rogue", "rogue", 10, -1}, + {"statemachine/trafficlight Example", "statemachine/trafficlight", "trafficlight", 0, -1}, + {"statemachine/twowaybutton Example", "statemachine/twowaybutton", "twowaybutton", 10, -1}, + {"tutorials/addressbook/part7 Example", "tutorials/addressbook/part7", "part7", 0, -1}, + {"webkit/fancybrowser Example", "webkit/fancybrowser", "fancybrowser", 0, 7000}, + {"widgets/analogclock Example", "widgets/analogclock", "analogclock", 6, -1}, + {"widgets/calculator Example", "widgets/calculator", "calculator", 6, -1}, + {"widgets/calendarwidget Example", "widgets/calendarwidget", "calendarwidget", 10, -1}, + {"widgets/charactermap Example", "widgets/charactermap", "charactermap", 10, -1}, + {"widgets/codeeditor Example", "widgets/codeeditor", "codeeditor", 0, -1}, + {"widgets/digitalclock Example", "widgets/digitalclock", "digitalclock", 10, -1}, + {"widgets/groupbox Example", "widgets/groupbox", "groupbox", 10, -1}, + {"widgets/icons Example", "widgets/icons", "icons", 10, -1}, + {"widgets/imageviewer Example", "widgets/imageviewer", "imageviewer", 10, -1}, + {"widgets/lineedits Example", "widgets/lineedits", "lineedits", 10, -1}, + {"widgets/scribble Example", "widgets/scribble", "scribble", 10, -1}, + {"widgets/sliders Example", "widgets/sliders", "sliders", 10, -1}, + {"widgets/spinboxes Example", "widgets/spinboxes", "spinboxes", 10, -1}, + {"widgets/styles Example", "widgets/styles", "styles", 0, -1}, + {"widgets/stylesheet Example", "widgets/stylesheet", "stylesheet", 0, -1}, + {"widgets/tablet Example", "widgets/tablet", "tablet", 10, -1}, + {"widgets/tetrix Example", "widgets/tetrix", "tetrix", 0, -1}, + {"widgets/tooltips Example", "widgets/tooltips", "tooltips", 10, -1}, + {"widgets/validators Example", "widgets/validators", "validators", 10, -1}, + {"widgets/wiggly Example", "widgets/wiggly", "wiggly", 10, -1} +}; + +const struct Example demos[] = { + {"Affine Demo", "affine", "affine", 0, -1}, + {"Books Demo", "books", "books", 0, -1}, + {"Browser Demo", "browser", "browser", 0, 0000}, + {"Chip Demo", "chip", "chip", 0, -1}, + {"Composition Demo", "composition", "composition", 0, -1}, + {"Deform Demo", "deform", "deform", 0, -1}, + {"Embeddeddialogs Demo", "embeddeddialogs", "embeddeddialogs", 0, -1}, + {"Gradients Demo", "gradients", "gradients", 0, -1}, + {"Interview Demo", "interview", "interview", 0, -1}, + {"Mainwindow Demo", "mainwindow", "mainwindow", 0, -1}, + {"PathStroke Demo", "pathstroke", "pathstroke", 0, -1}, + {"Spreadsheet Demo", "spreadsheet", "spreadsheet", 0, -1}, + {"Sub-Attac Demo", "sub-attaq", "sub-attaq", 0, -1}, + {"TextEdit Demo", "textedit", "textedit", 0, -1}, + {"Undo Demo", "undo", "undo", 0, -1} +}; + +// Data struct used in tests, specifying paths and timeouts +struct AppLaunchData { + AppLaunchData(); + void clear(); + + QString binary; + QStringList args; + QString workingDirectory; + int upTimeMS; + int topLevelWindowTimeoutMS; + int terminationTimeoutMS; + bool splashScreen; +}; + +AppLaunchData::AppLaunchData() : + upTimeMS(defaultUpTimeMS), + topLevelWindowTimeoutMS(defaultTopLevelWindowTimeoutMS), + terminationTimeoutMS(defaultTerminationTimeoutMS), + splashScreen(false) +{ +} + +void AppLaunchData::clear() +{ + binary.clear(); + args.clear(); + workingDirectory.clear(); + upTimeMS = defaultUpTimeMS; + topLevelWindowTimeoutMS = defaultTopLevelWindowTimeoutMS; + terminationTimeoutMS = defaultTerminationTimeoutMS; + splashScreen = false; +} + +Q_DECLARE_METATYPE(AppLaunchData) + + +class tst_GuiAppLauncher : public QObject +{ + Q_OBJECT + +public: + // Test name (static const char title!) + data + typedef QPair<const char*, AppLaunchData> TestDataEntry; + typedef QList<TestDataEntry> TestDataEntries; + + enum { TestTools = 0x1, TestDemo = 0x2, TestExamples = 0x4, + TestAll = TestTools|TestDemo|TestExamples }; + + tst_GuiAppLauncher(); + +private Q_SLOTS: + void initTestCase(); + + void run(); + void run_data(); + + void cleanupTestCase(); + +private: + QString workingDir() const; + +private: + bool runApp(const AppLaunchData &data, QString *errorMessage) const; + TestDataEntries testData() const; + + const unsigned m_testMask; + const unsigned m_examplePriority; + const QString m_dir; + const QSharedPointer<WindowManager> m_wm; +}; + +// Test mask from enviroment as test lib does not allow options. +static inline unsigned testMask() +{ + unsigned testMask = tst_GuiAppLauncher::TestAll; + if (!qgetenv("QT_TEST_NOTOOLS").isEmpty()) + testMask &= ~ tst_GuiAppLauncher::TestTools; + if (!qgetenv("QT_TEST_NOEXAMPLES").isEmpty()) + testMask &= ~tst_GuiAppLauncher::TestExamples; + if (!qgetenv("QT_TEST_NODEMOS").isEmpty()) + testMask &= ~tst_GuiAppLauncher::TestDemo; + return testMask; +} + +static inline unsigned testExamplePriority() +{ + const QByteArray priorityD = qgetenv("QT_TEST_EXAMPLE_PRIORITY"); + if (!priorityD.isEmpty()) { + bool ok; + const unsigned rc = priorityD.toUInt(&ok); + if (ok) + return rc; + } + return 5; +} + +tst_GuiAppLauncher::tst_GuiAppLauncher() : + m_testMask(testMask()), + m_examplePriority(testExamplePriority()), + m_dir(QLatin1String(SRCDIR)), + m_wm(WindowManager::create()) +{ +} + +void tst_GuiAppLauncher::initTestCase() +{ + QString message = QString::fromLatin1("### App Launcher test on %1 in %2 (%3)"). + arg(QDateTime::currentDateTime().toString(), QDir::currentPath()). + arg(QLibraryInfo::buildKey()); + qDebug("%s", qPrintable(message)); + qWarning("### PLEASE LEAVE THE MACHINE UNATTENDED WHILE THIS TEST IS RUNNING\n"); + + // Does a window manager exist on the platform? + if (!m_wm->openDisplay(&message)) { + QSKIP(message.toLatin1().constData(), SkipAll); + } + + // Paranoia: Do we have our test file? + const QDir workDir(m_dir); + if (!workDir.exists()) { + message = QString::fromLatin1("Invalid working directory %1").arg(m_dir); + QFAIL(message.toLocal8Bit().constData()); + } +} + +void tst_GuiAppLauncher::run() +{ + QString errorMessage; + QFETCH(AppLaunchData, data); + const bool rc = runApp(data, &errorMessage); + if (!rc) // Wait for windows to disappear after kill + WindowManager::sleepMS(500); + QVERIFY2(rc, qPrintable(errorMessage)); +} + +// Cross platform galore! +static inline QString guiBinary(QString in) +{ +#ifdef Q_OS_MAC + return in + QLatin1String(".app/Contents/MacOS/") + in; +#endif + in[0] = in.at(0).toLower(); +#ifdef Q_OS_WIN + in += QLatin1String(".exe"); +#endif + return in; +} + +void tst_GuiAppLauncher::run_data() +{ + QTest::addColumn<AppLaunchData>("data"); + foreach(const TestDataEntry &data, testData()) + QTest::newRow(data.first) << data.second; +} + +// Read out the examples array structures and convert to test data. +static tst_GuiAppLauncher::TestDataEntries exampleData(unsigned priority, + const QString &path, + bool debug, + const Example *exArray, + unsigned n) +{ + Q_UNUSED(debug) + tst_GuiAppLauncher::TestDataEntries rc; + const QChar slash = QLatin1Char('/'); + AppLaunchData data; + for (unsigned e = 0; e < n; e++) { + const Example &example = exArray[e]; + if (example.priority <= priority) { + data.clear(); + const QString examplePath = path + slash + QLatin1String(example.directory); + data.binary = examplePath + slash; +#ifdef Q_OS_WIN + data.binary += debug? QLatin1String("debug/") : QLatin1String("release/"); +#endif + data.binary += guiBinary(QLatin1String(example.binary)); + data.workingDirectory = examplePath; + if (example.upTimeMS > 0) + data.upTimeMS = example.upTimeMS; + rc.append(tst_GuiAppLauncher::TestDataEntry(example.name, data)); + } + } + return rc; +} + +tst_GuiAppLauncher::TestDataEntries tst_GuiAppLauncher::testData() const +{ + TestDataEntries rc; + const QChar slash = QLatin1Char('/'); + const QString binPath = QLibraryInfo::location(QLibraryInfo::BinariesPath) + slash; + const bool debug = QLibraryInfo::buildKey().contains(QLatin1String("debug")); + Q_UNUSED(debug) + + AppLaunchData data; + + if (m_testMask & TestTools) { + data.binary = binPath + guiBinary(QLatin1String("Designer")); + data.args.append(m_dir + QLatin1String("test.ui")); + rc.append(TestDataEntry("Qt Designer", data)); + + data.clear(); + data.binary = binPath + guiBinary(QLatin1String("Linguist")); + data.splashScreen = true; + data.upTimeMS = 5000; // Slow loading + data.args.append(m_dir + QLatin1String("test.ts")); + rc.append(TestDataEntry("Qt Linguist", data)); + } + + if (m_testMask & TestDemo) { + data.clear(); + data.upTimeMS = 5000; // Startup animation + data.binary = binPath + guiBinary(QLatin1String("qtdemo")); + rc.append(TestDataEntry("Qt Demo", data)); + + const QString demosPath = QLibraryInfo::location(QLibraryInfo::DemosPath); + if (!demosPath.isEmpty()) + rc += exampleData(m_examplePriority, demosPath, debug, demos, sizeof(demos)/sizeof(Example)); + } + + if (m_testMask & TestExamples) { + const QString examplesPath = QLibraryInfo::location(QLibraryInfo::ExamplesPath); + if (!examplesPath.isEmpty()) + rc += exampleData(m_examplePriority, examplesPath, debug, examples, sizeof(examples)/sizeof(Example)); + } + qDebug("Running %d tests...", rc.size()); + return rc; +} + +static inline void ensureTerminated(QProcess *p) +{ + if (p->state() != QProcess::Running) + return; + p->terminate(); + if (p->waitForFinished(300)) + return; + p->kill(); + if (!p->waitForFinished(500)) + qWarning("Unable to terminate process"); +} + +static const QStringList &stderrWhiteList() +{ + static QStringList rc; + if (rc.empty()) { + rc << QLatin1String("QPainter::begin: Paint device returned engine == 0, type: 2") + << QLatin1String("QPainter::setRenderHint: Painter must be active to set rendering hints") + << QLatin1String("QPainter::setPen: Painter not active") + << QLatin1String("QPainter::setBrush: Painter not active") + << QLatin1String("QPainter::end: Painter not active, aborted"); + } + return rc; +} + +bool tst_GuiAppLauncher::runApp(const AppLaunchData &data, QString *errorMessage) const +{ + qDebug("Launching: %s\n", qPrintable(data.binary)); + QProcess process; + process.setProcessChannelMode(QProcess::MergedChannels); + if (!data.workingDirectory.isEmpty()) + process.setWorkingDirectory(data.workingDirectory); + process.start(data.binary, data.args); + process.closeWriteChannel(); + if (!process.waitForStarted()) { + *errorMessage = QString::fromLatin1("Unable to execute %1: %2").arg(data.binary, process.errorString()); + return false; + } + // Get window id. + const QString winId = m_wm->waitForTopLevelWindow(data.splashScreen ? 2 : 1, process.pid(), data.topLevelWindowTimeoutMS, errorMessage); + if (winId.isEmpty()) { + ensureTerminated(&process); + return false; + } + qDebug("Window: %s\n", qPrintable(winId)); + // Wait a bit, then send close + WindowManager::sleepMS(data.upTimeMS); + if (m_wm->sendCloseEvent(winId, process.pid(), errorMessage)) { + qDebug("Sent close to window: %s\n", qPrintable(winId)); + } else { + ensureTerminated(&process); + return false; + } + // Terminate + if (!process.waitForFinished(data.terminationTimeoutMS)) { + *errorMessage = QString::fromLatin1("%1: Timeout %2ms").arg(data.binary).arg(data.terminationTimeoutMS); + ensureTerminated(&process); + return false; + } + if (process.exitStatus() != QProcess::NormalExit) { + *errorMessage = QString::fromLatin1("%1: Startup crash").arg(data.binary); + return false; + } + + const int exitCode = process.exitCode(); + // check stderr + const QStringList stderrOutput = QString::fromLocal8Bit(process.readAllStandardOutput()).split(QLatin1Char('\n')); + foreach(const QString &stderrLine, stderrOutput) { + // Skip expected QPainter warnings from oxygen. + if (stderrWhiteList().contains(stderrLine)) { + qWarning("%s: stderr: %s\n", qPrintable(data.binary), qPrintable(stderrLine)); + } else { + if (!stderrLine.isEmpty()) { // Split oddity gives empty messages + *errorMessage = QString::fromLatin1("%1: Unexpected output (ex=%2): '%3'").arg(data.binary).arg(exitCode).arg(stderrLine); + return false; + } + } + } + + if (exitCode != 0) { + *errorMessage = QString::fromLatin1("%1: Exit code %2").arg(data.binary).arg(exitCode); + return false; + } + return true; +} + +void tst_GuiAppLauncher::cleanupTestCase() +{ +} + +#if defined(Q_OS_WINCE) || defined(Q_OS_SYMBIAN) +QTEST_NOOP_MAIN +#else +QTEST_APPLESS_MAIN(tst_GuiAppLauncher) +#endif + +#include "tst_guiapplauncher.moc" diff --git a/tests/auto/guiapplauncher/windowmanager.cpp b/tests/auto/guiapplauncher/windowmanager.cpp new file mode 100644 index 0000000..758a14e --- /dev/null +++ b/tests/auto/guiapplauncher/windowmanager.cpp @@ -0,0 +1,508 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite 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 "windowmanager.h" +#include <QtCore/QTime> +#include <QtCore/QThread> +#include <QtCore/QDebug> +#include <QtCore/QTextStream> + +#ifdef Q_WS_X11 +# include <string.h> // memset +# include <X11/Xlib.h> +# include <X11/Xatom.h> // XA_WM_STATE +# include <X11/Xutil.h> +# include <X11/Xmd.h> // CARD32 +#endif + +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +# include <windows.h> +#endif + +// Export the sleep function +class FriendlySleepyThread : public QThread { +public: + static void sleepMS(int milliSeconds) { msleep(milliSeconds); } +}; + +#ifdef Q_WS_X11 +// X11 Window manager + +// Register our own error handler to prevent the defult crashing +// behaviour. It simply counts errors in global variables that +// can be checked after calls. + +static unsigned x11ErrorCount = 0; +static const char *currentX11Function = 0; + +int xErrorHandler(Display *, XErrorEvent *e) +{ + x11ErrorCount++; + + QString msg; + QTextStream str(&msg); + str << "An X11 error (#" << x11ErrorCount<< ") occurred: "; + if (currentX11Function) + str << ' ' << currentX11Function << "()"; + str << " code: " << e->error_code; + str.setIntegerBase(16); + str << " resource: 0x" << e->resourceid; + qWarning("%s", qPrintable(msg)); + + return 0; +} + +static bool isMapped(Display *display, Atom xa_wm_state, Window window, bool *isMapped) +{ + Atom actual_type; + int actual_format; + unsigned long nitems; + unsigned long bytes_after; + unsigned char *prop; + + *isMapped = false; + currentX11Function = "XGetWindowProperty"; + const int retv = XGetWindowProperty(display, window, xa_wm_state, 0L, 1L, False, xa_wm_state, + &actual_type, &actual_format, &nitems, &bytes_after, &prop); + + if (retv != Success || actual_type == None || actual_type != xa_wm_state + || nitems != 1 || actual_format != 32) + return false; + + const CARD32 state = * reinterpret_cast<CARD32 *>(prop); + + switch ((int) state) { + case WithdrawnState: + *isMapped = false; + break; + case NormalState: + case IconicState: + *isMapped = true; + break; + default: + *isMapped = true; + break; + } + return true; +} + +// Wait until a X11 top level has been mapped, courtesy of xtoolwait. +static Window waitForTopLevelMapped(Display *display, unsigned count, int timeOutMS, QString * errorMessage) +{ + unsigned mappingsCount = count; + Atom xa_wm_state; + XEvent event; + + // Discard all pending events + currentX11Function = "XSync"; + XSync(display, True); + + // Listen for top level creation + currentX11Function = "XSelectInput"; + XSelectInput(display, DefaultRootWindow(display), SubstructureNotifyMask); + + /* We assume that the window manager provides the WM_STATE property on top-level + * windows, as required by ICCCM 2.0. + * If the window manager has not yet completed its initialisation, the WM_STATE atom + * might not exist, in which case we create it. */ + +#ifdef XA_WM_STATE /* probably in X11R7 */ + xa_wm_state = XA_WM_STATE; +#else + xa_wm_state = XInternAtom(display, "WM_STATE", False); +#endif + + QTime elapsedTime; + elapsedTime.start(); + while (mappingsCount) { + if (elapsedTime.elapsed() > timeOutMS) { + *errorMessage = QString::fromLatin1("X11: Timed out waiting for toplevel %1ms").arg(timeOutMS); + return 0; + } + currentX11Function = "XNextEvent"; + unsigned errorCount = x11ErrorCount; + XNextEvent(display, &event); + if (x11ErrorCount > errorCount) { + *errorMessage = QString::fromLatin1("X11: Error in XNextEvent"); + return 0; + } + switch (event.type) { + case CreateNotify: + // Window created, listen for its mapping now + if (!event.xcreatewindow.send_event && !event.xcreatewindow.override_redirect) + XSelectInput(display, event.xcreatewindow.window, PropertyChangeMask); + break; + case PropertyNotify: + // Watch for map + if (!event.xproperty.send_event && event.xproperty.atom == xa_wm_state) { + bool mapped; + if (isMapped(display, xa_wm_state, event.xproperty.window, &mapped)) { + if (mapped && --mappingsCount == 0) + return event.xproperty.window; + // Past splash screen, listen for next window to be created + XSelectInput(display, DefaultRootWindow(display), SubstructureNotifyMask); + } else { + // Some temporary window disappeared. Listen for next creation + XSelectInput(display, DefaultRootWindow(display), SubstructureNotifyMask); + } + // Main app window opened? + } + break; + default: + break; + } + } + *errorMessage = QString::fromLatin1("X11: Timed out waiting for toplevel %1ms").arg(timeOutMS); + return 0; +} + + +class X11_WindowManager : public WindowManager +{ +public: + X11_WindowManager(); + ~X11_WindowManager(); + +protected: + virtual bool isDisplayOpenImpl() const; + virtual bool openDisplayImpl(QString *errorMessage); + virtual QString waitForTopLevelWindowImpl(unsigned count, Q_PID, int timeOutMS, QString *errorMessage); + virtual bool sendCloseEventImpl(const QString &winId, Q_PID pid, QString *errorMessage); + +private: + Display *m_display; + const QByteArray m_displayVariable; + XErrorHandler m_oldErrorHandler; +}; + +X11_WindowManager::X11_WindowManager() : + m_display(0), + m_displayVariable(qgetenv("DISPLAY")), + m_oldErrorHandler(0) +{ +} + +X11_WindowManager::~X11_WindowManager() +{ + if (m_display) { + XSetErrorHandler(m_oldErrorHandler); + XCloseDisplay(m_display); + } +} + +bool X11_WindowManager::isDisplayOpenImpl() const +{ + return m_display != 0; +} + +bool X11_WindowManager::openDisplayImpl(QString *errorMessage) +{ + if (m_displayVariable.isEmpty()) { + *errorMessage = QLatin1String("X11: Display not set"); + return false; + } + m_display = XOpenDisplay(NULL); + if (!m_display) { + *errorMessage = QString::fromLatin1("X11: Cannot open display %1.").arg(QString::fromLocal8Bit(m_displayVariable)); + return false; + } + + m_oldErrorHandler = XSetErrorHandler(xErrorHandler); + return true; +} + +QString X11_WindowManager::waitForTopLevelWindowImpl(unsigned count, Q_PID, int timeOutMS, QString *errorMessage) +{ + const Window w = waitForTopLevelMapped(m_display, count, timeOutMS, errorMessage); + if (w == 0) + return QString(); + return QLatin1String("0x") + QString::number(w, 16); +} + + bool X11_WindowManager::sendCloseEventImpl(const QString &winId, Q_PID, QString *errorMessage) + { + // Get win id + bool ok; + const Window window = winId.toULong(&ok, 16); + if (!ok) { + *errorMessage = QString::fromLatin1("Invalid win id %1.").arg(winId); + return false; + } + // Send a window manager close event + XEvent ev; + memset(&ev, 0, sizeof (ev)); + ev.xclient.type = ClientMessage; + ev.xclient.window = window; + ev.xclient.message_type = XInternAtom(m_display, "WM_PROTOCOLS", true); + ev.xclient.format = 32; + ev.xclient.data.l[0] = XInternAtom(m_display, "WM_DELETE_WINDOW", false); + ev.xclient.data.l[1] = CurrentTime; + // Window disappeared or some error triggered? + unsigned errorCount = x11ErrorCount; + currentX11Function = "XSendEvent"; + XSendEvent(m_display, window, False, NoEventMask, &ev); + if (x11ErrorCount > errorCount) { + *errorMessage = QString::fromLatin1("Error sending event to win id %1.").arg(winId); + return false; + } + currentX11Function = "XSync"; + errorCount = x11ErrorCount; + XSync(m_display, False); + if (x11ErrorCount > errorCount) { + *errorMessage = QString::fromLatin1("Error sending event to win id %1 (XSync).").arg(winId); + return false; + } + return true; + } + +#endif + +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) +// Windows + + QString winErrorMessage(unsigned long error) +{ + QString rc = QString::fromLatin1("#%1: ").arg(error); + ushort *lpMsgBuf; + + const int len = FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, error, 0, (LPTSTR)&lpMsgBuf, 0, NULL); + if (len) { + rc = QString::fromUtf16(lpMsgBuf, len); + LocalFree(lpMsgBuf); + } else { + rc += QString::fromLatin1("<unknown error>"); + } + return rc; +} + + class Win_WindowManager : public WindowManager + { + public: + Win_WindowManager() {} + + protected: + virtual bool isDisplayOpenImpl() const; + virtual bool openDisplayImpl(QString *errorMessage); + virtual QString waitForTopLevelWindowImpl(unsigned count, Q_PID, int timeOutMS, QString *errorMessage); + virtual bool sendCloseEventImpl(const QString &winId, Q_PID pid, QString *errorMessage); + + private: + }; + +bool Win_WindowManager::isDisplayOpenImpl() const +{ + return true; +} + +bool Win_WindowManager::openDisplayImpl(QString *) +{ + return true; +} + +// Enumerate window looking for toplevel of process id +struct FindProcessWindowEnumContext { + FindProcessWindowEnumContext(DWORD pid) : window(0),processId(pid) {} + + HWND window; + DWORD processId; +}; + +/* Check for the active main window of the Application + * of class QWidget. */ +static inline bool isQtMainWindow(HWND hwnd) +{ + static char buffer[MAX_PATH]; + if (!GetClassNameA(hwnd, buffer, MAX_PATH) || qstrcmp(buffer, "QWidget")) + return false; + WINDOWINFO windowInfo; + if (!GetWindowInfo(hwnd, &windowInfo)) + return false; + if (!(windowInfo.dwWindowStatus & WS_ACTIVECAPTION)) + return false; + // Check the style for a real mainwindow + const DWORD excluded = WS_DISABLED | WS_POPUP; + const DWORD required = WS_CAPTION | WS_SYSMENU | WS_VISIBLE; + return (windowInfo.dwStyle & excluded) == 0 + && (windowInfo.dwStyle & required) == required; +} + +static BOOL CALLBACK findProcessWindowEnumWindowProc(HWND hwnd, LPARAM lParam) +{ + DWORD processId = 0; + FindProcessWindowEnumContext *context= reinterpret_cast<FindProcessWindowEnumContext *>(lParam); + GetWindowThreadProcessId(hwnd, &processId); + if (context->processId == processId && isQtMainWindow(hwnd)) { + context->window = hwnd; + return FALSE; + } + return TRUE; +} + +QString Win_WindowManager::waitForTopLevelWindowImpl(unsigned /* count */, Q_PID pid, int timeOutMS, QString *errorMessage) +{ + QTime elapsed; + elapsed.start(); + // First, wait until the application is up + if (WaitForInputIdle(pid->hProcess, timeOutMS) != 0) { + *errorMessage = QString::fromLatin1("WaitForInputIdle time out after %1ms").arg(timeOutMS); + return QString(); + } + // Try to locate top level app window. App still might be in splash screen or initialization + // phase. + const int remainingMilliSeconds = qMax(timeOutMS - elapsed.elapsed(), 500); + const int attempts = 10; + const int intervalMilliSeconds = remainingMilliSeconds / attempts; + for (int a = 0; a < attempts; a++) { + FindProcessWindowEnumContext context(pid->dwProcessId); + EnumWindows(findProcessWindowEnumWindowProc, reinterpret_cast<LPARAM>(&context)); + if (context.window) + return QLatin1String("0x") + QString::number(reinterpret_cast<quintptr>(context.window), 16); + sleepMS(intervalMilliSeconds); + } + *errorMessage = QString::fromLatin1("Unable to find toplevel of process %1 after %2ms.").arg(pid->dwProcessId).arg(timeOutMS); + return QString(); +} + +bool Win_WindowManager::sendCloseEventImpl(const QString &winId, Q_PID, QString *errorMessage) +{ + // Convert window back. + quintptr winIdIntPtr; + QTextStream str(const_cast<QString*>(&winId), QIODevice::ReadOnly); + str.setIntegerBase(16); + str >> winIdIntPtr; + if (str.status() != QTextStream::Ok) { + *errorMessage = QString::fromLatin1("Invalid win id %1.").arg(winId); + return false; + } + if (!PostMessage(reinterpret_cast<HWND>(winIdIntPtr), WM_CLOSE, 0, 0)) { + *errorMessage = QString::fromLatin1("Cannot send event to 0x%1: %2").arg(winIdIntPtr, 0, 16).arg(winErrorMessage(GetLastError())); + return false; + } + return true; +} +#endif + +// ------- Default implementation + +WindowManager::WindowManager() +{ +} + +WindowManager::~WindowManager() +{ +} + +QSharedPointer<WindowManager> WindowManager::create() +{ +#ifdef Q_WS_X11 + return QSharedPointer<WindowManager>(new X11_WindowManager); +#endif +#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) + return QSharedPointer<WindowManager>(new Win_WindowManager); +#else + return QSharedPointer<WindowManager>(new WindowManager); +#endif +} + +static inline QString msgNoDisplayOpen() { return QLatin1String("No display opened."); } + +bool WindowManager::openDisplay(QString *errorMessage) +{ + if (isDisplayOpen()) + return true; + return openDisplayImpl(errorMessage); +} + +bool WindowManager::isDisplayOpen() const +{ + return isDisplayOpenImpl(); +} + + + +QString WindowManager::waitForTopLevelWindow(unsigned count, Q_PID pid, int timeOutMS, QString *errorMessage) +{ + if (!isDisplayOpen()) { + *errorMessage = msgNoDisplayOpen(); + return QString(); + } + return waitForTopLevelWindowImpl(count, pid, timeOutMS, errorMessage); +} + +bool WindowManager::sendCloseEvent(const QString &winId, Q_PID pid, QString *errorMessage) +{ + if (!isDisplayOpen()) { + *errorMessage = msgNoDisplayOpen(); + return false; + } + return sendCloseEventImpl(winId, pid, errorMessage); +} + +// Default Implementation +bool WindowManager::openDisplayImpl(QString *errorMessage) +{ + *errorMessage = QLatin1String("Not implemented."); + return false; +} + +bool WindowManager::isDisplayOpenImpl() const +{ + return false; +} + +QString WindowManager::waitForTopLevelWindowImpl(unsigned, Q_PID, int, QString *errorMessage) +{ + *errorMessage = QLatin1String("Not implemented."); + return QString(); +} + +bool WindowManager::sendCloseEventImpl(const QString &, Q_PID, QString *errorMessage) +{ + *errorMessage = QLatin1String("Not implemented."); + return false; +} + +void WindowManager::sleepMS(int milliSeconds) +{ + FriendlySleepyThread::sleepMS(milliSeconds); +} diff --git a/tests/auto/guiapplauncher/windowmanager.h b/tests/auto/guiapplauncher/windowmanager.h new file mode 100644 index 0000000..56e2eb9 --- /dev/null +++ b/tests/auto/guiapplauncher/windowmanager.h @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite 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 WINDOWMANAGER_H +#define WINDOWMANAGER_H + +#include <QtCore/QSharedPointer> +#include <QtCore/QString> +#include <QtCore/QProcess> + +/* WindowManager: Provides functions to retrieve the top level window of + * an application and send it a close event. */ + +class WindowManager +{ + Q_DISABLE_COPY(WindowManager) +public: + static QSharedPointer<WindowManager> create(); + + virtual ~WindowManager(); + + bool openDisplay(QString *errorMessage); + bool isDisplayOpen() const; + + // Count: Number of toplevels, 1 for normal apps, 2 for apps with a splash screen + QString waitForTopLevelWindow(unsigned count, Q_PID pid, int timeOutMS, QString *errorMessage); + bool sendCloseEvent(const QString &winId, Q_PID pid, QString *errorMessage); + + static void sleepMS(int milliSeconds); + +protected: + WindowManager(); + + virtual bool openDisplayImpl(QString *errorMessage); + virtual bool isDisplayOpenImpl() const; + virtual QString waitForTopLevelWindowImpl(unsigned count, Q_PID pid, int timeOutMS, QString *errorMessage); + virtual bool sendCloseEventImpl(const QString &winId, Q_PID pid, QString *errorMessage); +}; + +#endif // WINDOWMANAGER_H diff --git a/tests/auto/headers/tst_headers.cpp b/tests/auto/headers/tst_headers.cpp index d4f2ff4..36d25fe 100644 --- a/tests/auto/headers/tst_headers.cpp +++ b/tests/auto/headers/tst_headers.cpp @@ -77,7 +77,7 @@ private: tst_Headers::tst_Headers() : copyrightPattern("\\*\\* Copyright \\(C\\) 20[0-9][0-9] Nokia Corporation and/or its subsidiary\\(-ies\\)."), - licensePattern("\\*\\* \\$QT_BEGIN_LICENSE:(LGPL|BSD|3RDPARTY)\\$"), + licensePattern("\\*\\* \\$QT_BEGIN_LICENSE:(LGPL|BSD|3RDPARTY|LGPL-ONLY)\\$"), moduleTest(QLatin1String("\\*\\* This file is part of the .+ of the Qt Toolkit.")) { } diff --git a/tests/auto/linguist/lconvert/tst_lconvert.cpp b/tests/auto/linguist/lconvert/tst_lconvert.cpp index e38e22c..10098a4 100644 --- a/tests/auto/linguist/lconvert/tst_lconvert.cpp +++ b/tests/auto/linguist/lconvert/tst_lconvert.cpp @@ -105,7 +105,7 @@ void tst_lconvert::doCompare(QIODevice *actualDev, const QString &expectedFn) QList<QByteArray> actual = actualDev->readAll().split('\n'); QFile file(expectedFn); - QVERIFY(file.open(QIODevice::ReadOnly)); + QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text)); QList<QByteArray> expected = file.readAll().split('\n'); int i = 0, ei = expected.size(), gi = actual.size(); @@ -179,7 +179,7 @@ void tst_lconvert::convertChain(const QString &_inFileName, const QString &_outF if (!argList.isEmpty()) args += argList[i]; args << "-if" << stations[i] << "-i" << "-" << "-of" << stations[i + 1]; - cvts.at(i)->start(binDir + "/lconvert", args); + cvts.at(i)->start(binDir + "/lconvert", args, QIODevice::ReadWrite | QIODevice::Text); } int st = 0; foreach (QProcess *cvt, cvts) @@ -243,7 +243,9 @@ void tst_lconvert::converts() QString outFileNameFq = dataDir + outFileName; QProcess cvt; - cvt.start(binDir + "/lconvert", QStringList() << "-i" << (dataDir + inFileName) << "-of" << format); + cvt.start(binDir + "/lconvert", + QStringList() << "-i" << (dataDir + inFileName) << "-of" << format, + QIODevice::ReadWrite | QIODevice::Text); doWait(&cvt, 0); if (QTest::currentTestFailed()) return; diff --git a/tests/auto/linguist/lrelease/tst_lrelease.cpp b/tests/auto/linguist/lrelease/tst_lrelease.cpp index 93cb97c..c9e774f 100644 --- a/tests/auto/linguist/lrelease/tst_lrelease.cpp +++ b/tests/auto/linguist/lrelease/tst_lrelease.cpp @@ -72,8 +72,8 @@ private: void tst_lrelease::doCompare(const QStringList &actual, const QString &expectedFn) { QFile file(expectedFn); - QVERIFY(file.open(QIODevice::ReadOnly)); - QStringList expected = QString(file.readAll()).trimmed().remove('\r').split('\n'); + QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text)); + QStringList expected = QString(file.readAll()).trimmed().split('\n'); int i = 0, ei = expected.size(), gi = actual.size(); for (; ; i++) { @@ -226,10 +226,10 @@ void tst_lrelease::markuntranslated() void tst_lrelease::dupes() { QProcess proc; - proc.start(binDir + "/lrelease testdata/dupes.ts"); + proc.start(binDir + "/lrelease testdata/dupes.ts", QIODevice::ReadWrite | QIODevice::Text); QVERIFY(proc.waitForFinished()); QVERIFY(proc.exitStatus() == QProcess::NormalExit); - doCompare(QString(proc.readAllStandardError()).trimmed().remove('\r').split('\n'), "testdata/dupes.errors"); + doCompare(QString(proc.readAllStandardError()).trimmed().split('\n'), "testdata/dupes.errors"); } QTEST_MAIN(tst_lrelease) diff --git a/tests/auto/linguist/lupdate/testlupdate.cpp b/tests/auto/linguist/lupdate/testlupdate.cpp index 8e57323..d43fbc4 100644 --- a/tests/auto/linguist/lupdate/testlupdate.cpp +++ b/tests/auto/linguist/lupdate/testlupdate.cpp @@ -98,9 +98,9 @@ bool TestLUpdate::runChild( bool showOutput, const QString &program, const QStri connect(childProc, SIGNAL(finished(int)), this, SLOT(childReady(int))); childProc->setProcessChannelMode(QProcess::MergedChannels); if (argList.isEmpty()) { - childProc->start( program ); + childProc->start( program, QIODevice::ReadWrite | QIODevice::Text ); } else { - childProc->start( program, argList ); + childProc->start( program, argList, QIODevice::ReadWrite | QIODevice::Text ); } bool ok; diff --git a/tests/auto/linguist/lupdate/tst_lupdate.cpp b/tests/auto/linguist/lupdate/tst_lupdate.cpp index 230392c..7140ede 100644 --- a/tests/auto/linguist/lupdate/tst_lupdate.cpp +++ b/tests/auto/linguist/lupdate/tst_lupdate.cpp @@ -80,8 +80,8 @@ private: void tst_lupdate::doCompare(const QStringList &actual, const QString &expectedFn, bool err) { QFile file(expectedFn); - QVERIFY(file.open(QIODevice::ReadOnly)); - QStringList expected = QString(file.readAll()).trimmed().remove('\r').split('\n'); + QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text)); + QStringList expected = QString(file.readAll()).trimmed().split('\n'); int i = 0, ei = expected.size(), gi = actual.size(); for (; ; i++) { @@ -141,8 +141,8 @@ void tst_lupdate::doCompare(const QStringList &actual, const QString &expectedFn void tst_lupdate::doCompare(const QString &actualFn, const QString &expectedFn, bool err) { QFile afile(actualFn); - QVERIFY(afile.open(QIODevice::ReadOnly)); - QStringList actual = QString(afile.readAll()).trimmed().remove('\r').split('\n'); + QVERIFY(afile.open(QIODevice::ReadOnly | QIODevice::Text)); + QStringList actual = QString(afile.readAll()).trimmed().split('\n'); doCompare(actual, expectedFn, err); } @@ -180,7 +180,7 @@ void tst_lupdate::good() QString lupdatecmd; QFile file(dir + "/lupdatecmd"); if (file.exists()) { - QVERIFY(file.open(QIODevice::ReadOnly)); + QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text)); while (!file.atEnd()) { QByteArray cmdstring = file.readLine().simplified(); if (cmdstring.startsWith('#')) @@ -226,7 +226,7 @@ void tst_lupdate::output_ts() QString lupdatecmd; QFile file(dir + "/lupdatecmd"); if (file.exists()) { - QVERIFY(file.open(QIODevice::ReadOnly)); + QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text)); while (!file.atEnd()) { QByteArray cmdstring = file.readLine().simplified(); if (cmdstring.startsWith('#')) diff --git a/tests/auto/networkselftest/tst_networkselftest.cpp b/tests/auto/networkselftest/tst_networkselftest.cpp index a09d998..f13bcad 100644 --- a/tests/auto/networkselftest/tst_networkselftest.cpp +++ b/tests/auto/networkselftest/tst_networkselftest.cpp @@ -80,6 +80,9 @@ private slots: void httpProxyNtlmAuth(); void socks5Proxy(); void socks5ProxyAuth(); + + // ssl supported test + void supportsSsl(); }; class Chat @@ -717,5 +720,14 @@ void tst_NetworkSelfTest::socks5ProxyAuth() ); } +void tst_NetworkSelfTest::supportsSsl() +{ +#ifdef QT_NO_OPENSSL + QFAIL("SSL not compiled in"); +#else + QVERIFY(QSslSocket::supportsSsl()); +#endif +} + QTEST_MAIN(tst_NetworkSelfTest) #include "tst_networkselftest.moc" diff --git a/tests/auto/qabstractitemmodel/tst_qabstractitemmodel.cpp b/tests/auto/qabstractitemmodel/tst_qabstractitemmodel.cpp index bdc31af..413419d 100644 --- a/tests/auto/qabstractitemmodel/tst_qabstractitemmodel.cpp +++ b/tests/auto/qabstractitemmodel/tst_qabstractitemmodel.cpp @@ -865,15 +865,22 @@ void tst_QAbstractItemModel::testMoveSameParentDown_data() QTest::addColumn<int>("startRow"); QTest::addColumn<int>("endRow"); QTest::addColumn<int>("destRow"); + // We can't put the actual parent index for the move in here because m_model is not defined until init() is run. + QTest::addColumn<bool>("topLevel"); // Move from the start to the middle - QTest::newRow("move01") << 0 << 2 << 8; + QTest::newRow("move01") << 0 << 2 << 8 << true; // Move from the start to the end - QTest::newRow("move02") << 0 << 2 << 10; + QTest::newRow("move02") << 0 << 2 << 10 << true; // Move from the middle to the middle - QTest::newRow("move03") << 3 << 5 << 8; + QTest::newRow("move03") << 3 << 5 << 8 << true; // Move from the middle to the end - QTest::newRow("move04") << 3 << 5 << 10; + QTest::newRow("move04") << 3 << 5 << 10 << true; + + QTest::newRow("move05") << 0 << 2 << 8 << false; + QTest::newRow("move06") << 0 << 2 << 10 << false; + QTest::newRow("move07") << 3 << 5 << 8 << false; + QTest::newRow("move08") << 3 << 5 << 10 << false; } void tst_QAbstractItemModel::testMoveSameParentDown() @@ -881,6 +888,9 @@ void tst_QAbstractItemModel::testMoveSameParentDown() QFETCH( int, startRow); QFETCH( int, endRow); QFETCH( int, destRow); + QFETCH( bool, topLevel); + + QModelIndex moveParent = topLevel ? QModelIndex() : m_model->index(5, 0); QList<QPersistentModelIndex> persistentList; QModelIndexList indexList; @@ -913,33 +923,37 @@ void tst_QAbstractItemModel::testMoveSameParentDown() ModelMoveCommand *moveCommand = new ModelMoveCommand(m_model, this); moveCommand->setNumCols(4); + if (!topLevel) + moveCommand->setAncestorRowNumbers(QList<int>() << 5); moveCommand->setStartRow(startRow); moveCommand->setEndRow(endRow); moveCommand->setDestRow(destRow); + if (!topLevel) + moveCommand->setDestAncestors(QList<int>() << 5); moveCommand->doCommand(); QVariantList beforeSignal = beforeSpy.takeAt(0); QVariantList afterSignal = afterSpy.takeAt(0); QCOMPARE(beforeSignal.size(), 5); - QCOMPARE(beforeSignal.at(0).value<QModelIndex>(), QModelIndex()); + QCOMPARE(beforeSignal.at(0).value<QModelIndex>(), moveParent); QCOMPARE(beforeSignal.at(1).toInt(), startRow); QCOMPARE(beforeSignal.at(2).toInt(), endRow); - QCOMPARE(beforeSignal.at(3).value<QModelIndex>(), QModelIndex()); + QCOMPARE(beforeSignal.at(3).value<QModelIndex>(), moveParent); QCOMPARE(beforeSignal.at(4).toInt(), destRow); QCOMPARE(afterSignal.size(), 5); - QCOMPARE(afterSignal.at(0).value<QModelIndex>(), QModelIndex()); + QCOMPARE(afterSignal.at(0).value<QModelIndex>(), moveParent); QCOMPARE(afterSignal.at(1).toInt(), startRow); QCOMPARE(afterSignal.at(2).toInt(), endRow); - QCOMPARE(afterSignal.at(3).value<QModelIndex>(), QModelIndex()); + QCOMPARE(afterSignal.at(3).value<QModelIndex>(), moveParent); QCOMPARE(afterSignal.at(4).toInt(), destRow); for (int i = 0; i < indexList.size(); i++) { QModelIndex idx = indexList.at(i); QModelIndex persistentIndex = persistentList.at(i); - if (idx.parent() == QModelIndex()) + if (idx.parent() == moveParent) { int row = idx.row(); if ( row >= startRow) @@ -976,15 +990,21 @@ void tst_QAbstractItemModel::testMoveSameParentUp_data() QTest::addColumn<int>("startRow"); QTest::addColumn<int>("endRow"); QTest::addColumn<int>("destRow"); + QTest::addColumn<bool>("topLevel"); // Move from the middle to the start - QTest::newRow("move01") << 5 << 7 << 0; + QTest::newRow("move01") << 5 << 7 << 0 << true; // Move from the end to the start - QTest::newRow("move02") << 8 << 9 << 0; + QTest::newRow("move02") << 8 << 9 << 0 << true; // Move from the middle to the middle - QTest::newRow("move03") << 5 << 7 << 2; + QTest::newRow("move03") << 5 << 7 << 2 << true; // Move from the end to the middle - QTest::newRow("move04") << 8 << 9 << 5; + QTest::newRow("move04") << 8 << 9 << 5 << true; + + QTest::newRow("move05") << 5 << 7 << 0 << false; + QTest::newRow("move06") << 8 << 9 << 0 << false; + QTest::newRow("move07") << 5 << 7 << 2 << false; + QTest::newRow("move08") << 8 << 9 << 5 << false; } void tst_QAbstractItemModel::testMoveSameParentUp() @@ -993,6 +1013,9 @@ void tst_QAbstractItemModel::testMoveSameParentUp() QFETCH( int, startRow); QFETCH( int, endRow); QFETCH( int, destRow); + QFETCH( bool, topLevel); + + QModelIndex moveParent = topLevel ? QModelIndex() : m_model->index(5, 0); QList<QPersistentModelIndex> persistentList; QModelIndexList indexList; @@ -1026,26 +1049,30 @@ void tst_QAbstractItemModel::testMoveSameParentUp() ModelMoveCommand *moveCommand = new ModelMoveCommand(m_model, this); moveCommand->setNumCols(4); + if (!topLevel) + moveCommand->setAncestorRowNumbers(QList<int>() << 5); moveCommand->setStartRow(startRow); moveCommand->setEndRow(endRow); moveCommand->setDestRow(destRow); + if (!topLevel) + moveCommand->setDestAncestors(QList<int>() << 5); moveCommand->doCommand(); QVariantList beforeSignal = beforeSpy.takeAt(0); QVariantList afterSignal = afterSpy.takeAt(0); QCOMPARE(beforeSignal.size(), 5); - QCOMPARE(beforeSignal.at(0).value<QModelIndex>(), QModelIndex()); + QCOMPARE(beforeSignal.at(0).value<QModelIndex>(), moveParent); QCOMPARE(beforeSignal.at(1).toInt(), startRow); QCOMPARE(beforeSignal.at(2).toInt(), endRow); - QCOMPARE(beforeSignal.at(3).value<QModelIndex>(), QModelIndex()); + QCOMPARE(beforeSignal.at(3).value<QModelIndex>(), moveParent); QCOMPARE(beforeSignal.at(4).toInt(), destRow); QCOMPARE(afterSignal.size(), 5); - QCOMPARE(afterSignal.at(0).value<QModelIndex>(), QModelIndex()); + QCOMPARE(afterSignal.at(0).value<QModelIndex>(), moveParent); QCOMPARE(afterSignal.at(1).toInt(), startRow); QCOMPARE(afterSignal.at(2).toInt(), endRow); - QCOMPARE(afterSignal.at(3).value<QModelIndex>(), QModelIndex()); + QCOMPARE(afterSignal.at(3).value<QModelIndex>(), moveParent); QCOMPARE(afterSignal.at(4).toInt(), destRow); @@ -1053,7 +1080,7 @@ void tst_QAbstractItemModel::testMoveSameParentUp() { QModelIndex idx = indexList.at(i); QModelIndex persistentIndex = persistentList.at(i); - if (idx.parent() == QModelIndex()) + if (idx.parent() == moveParent) { int row = idx.row(); if ( row >= destRow) diff --git a/tests/auto/qabstractscrollarea/tst_qabstractscrollarea.cpp b/tests/auto/qabstractscrollarea/tst_qabstractscrollarea.cpp index 5033a50..99a263b 100644 --- a/tests/auto/qabstractscrollarea/tst_qabstractscrollarea.cpp +++ b/tests/auto/qabstractscrollarea/tst_qabstractscrollarea.cpp @@ -71,6 +71,8 @@ private slots: void viewportCrash(); void task214488_layoutDirection_data(); void task214488_layoutDirection(); + void wheelEvent_data(); + void wheelEvent(); }; tst_QAbstractScrollArea::tst_QAbstractScrollArea() @@ -296,10 +298,10 @@ public: setAttribute(Qt::WA_DropSiteRegistered, true); - startTimer(2000); + startTimer(200); } - void timerEvent(QTimerEvent *event) + void timerEvent(QTimerEvent *) { // should not crash. (void)new QScrollArea(this); @@ -385,5 +387,96 @@ 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 d9574df..ee1ba19 100644 --- a/tests/auto/qabstractslider/tst_qabstractslider.cpp +++ b/tests/auto/qabstractslider/tst_qabstractslider.cpp @@ -742,11 +742,9 @@ void tst_QAbstractSlider::wheelEvent_data() << 1 // delta << int(Qt::Horizontal) // orientation of slider << int(Qt::Vertical) // orientation of wheel - << 0 // expected position after + << 1 // expected position after << QPoint(1,1); - // Scrolling in a slider of a different orientation than the wheel works - // if the mouse pointer is within the widget's rect QTest::newRow("Different orientation2")<< 0 // initial position << 0 // minimum << 100 // maximum diff --git a/tests/auto/qcalendarwidget/tst_qcalendarwidget.cpp b/tests/auto/qcalendarwidget/tst_qcalendarwidget.cpp index 381f46f..a57c1d6 100644 --- a/tests/auto/qcalendarwidget/tst_qcalendarwidget.cpp +++ b/tests/auto/qcalendarwidget/tst_qcalendarwidget.cpp @@ -75,6 +75,8 @@ private slots: void resetTextFormat(); void setWeekdayFormat(); + void showPrevNext_data(); + void showPrevNext(); }; // Testing get/set functions @@ -293,5 +295,73 @@ void tst_QCalendarWidget::cleanup() { } + +typedef void (QCalendarWidget::*ShowFunc)(); +Q_DECLARE_METATYPE(ShowFunc) + +void tst_QCalendarWidget::showPrevNext_data() +{ + QTest::addColumn<ShowFunc>("function"); + QTest::addColumn<QDate>("dateOrigin"); + QTest::addColumn<QDate>("expectedDate"); + + QTest::newRow("showNextMonth") << &QCalendarWidget::showNextMonth << QDate(1984,7,30) << QDate(1984,8,30); + QTest::newRow("showPrevMonth") << &QCalendarWidget::showPreviousMonth << QDate(1984,7,30) << QDate(1984,6,30); + QTest::newRow("showNextYear") << &QCalendarWidget::showNextYear << QDate(1984,7,30) << QDate(1985,7,30); + QTest::newRow("showPrevYear") << &QCalendarWidget::showPreviousYear << QDate(1984,7,30) << QDate(1983,7,30); + + QTest::newRow("showNextMonth limit") << &QCalendarWidget::showNextMonth << QDate(2007,12,4) << QDate(2008,1,4); + QTest::newRow("showPreviousMonth limit") << &QCalendarWidget::showPreviousMonth << QDate(2006,1,23) << QDate(2005,12,23); + + QTest::newRow("showNextMonth now") << &QCalendarWidget::showNextMonth << QDate() << QDate::currentDate().addMonths(1); + QTest::newRow("showNextYear now") << &QCalendarWidget::showNextYear << QDate() << QDate::currentDate().addYears(1); + QTest::newRow("showPrevieousMonth now") << &QCalendarWidget::showPreviousMonth << QDate() << QDate::currentDate().addMonths(-1); + QTest::newRow("showPreviousYear now") << &QCalendarWidget::showPreviousYear << QDate() << QDate::currentDate().addYears(-1); + + QTest::newRow("showToday now") << &QCalendarWidget::showToday << QDate(2000,1,31) << QDate::currentDate(); + QTest::newRow("showNextMonth 31") << &QCalendarWidget::showNextMonth << QDate(2000,1,31) << QDate(2000,2,28); + QTest::newRow("selectedDate") << &QCalendarWidget::showSelectedDate << QDate(2008,2,29) << QDate(2008,2,29); + +} + +void tst_QCalendarWidget::showPrevNext() +{ + QFETCH(ShowFunc, function); + QFETCH(QDate, dateOrigin); + QFETCH(QDate, expectedDate); + + QCalendarWidget calWidget; + calWidget.show(); + QTest::qWaitForWindowShown(&calWidget); + if(!dateOrigin.isNull()) { + calWidget.setSelectedDate(dateOrigin); + calWidget.setCurrentPage(dateOrigin.year(), dateOrigin.month()); + + QCOMPARE(calWidget.yearShown(), dateOrigin.year()); + QCOMPARE(calWidget.monthShown(), dateOrigin.month()); + } else { + QCOMPARE(calWidget.yearShown(), QDate::currentDate().year()); + QCOMPARE(calWidget.monthShown(), QDate::currentDate().month()); + } + + (calWidget.*function)(); + + QCOMPARE(calWidget.yearShown(), expectedDate.year()); + QCOMPARE(calWidget.monthShown(), expectedDate.month()); + + // QTBUG-4058 + QTest::qWait(20); + QToolButton *button = qFindChild<QToolButton *>(&calWidget, "qt_calendar_prevmonth"); + QTest::mouseClick(button, Qt::LeftButton); + expectedDate = expectedDate.addMonths(-1); + QCOMPARE(calWidget.yearShown(), expectedDate.year()); + QCOMPARE(calWidget.monthShown(), expectedDate.month()); + + if(!dateOrigin.isNull()) { + //the selectedDate should not have changed + QCOMPARE(calWidget.selectedDate(), dateOrigin); + } +} + QTEST_MAIN(tst_QCalendarWidget) #include "tst_qcalendarwidget.moc" diff --git a/tests/auto/qcombobox/tst_qcombobox.cpp b/tests/auto/qcombobox/tst_qcombobox.cpp index cc59b62..e903ab5 100644 --- a/tests/auto/qcombobox/tst_qcombobox.cpp +++ b/tests/auto/qcombobox/tst_qcombobox.cpp @@ -2479,6 +2479,10 @@ void tst_QComboBox::keyBoardNavigationWithMouse() QCOMPARE(combo.currentText(), QLatin1String("0")); +#ifdef Q_OS_WINCE + QSKIP("When calling cursor function, Windows CE responds with: This function is not supported on this system.", SkipAll); +#endif + QCursor::setPos(combo.view()->mapToGlobal(combo.view()->rect().center())); QTest::qWait(200); diff --git a/tests/auto/qcoreapplication/tst_qcoreapplication.cpp b/tests/auto/qcoreapplication/tst_qcoreapplication.cpp index c5f06e2..3c61f81 100644 --- a/tests/auto/qcoreapplication/tst_qcoreapplication.cpp +++ b/tests/auto/qcoreapplication/tst_qcoreapplication.cpp @@ -58,6 +58,7 @@ private slots: #endif void applicationPid(); void globalPostedEventsCount(); + void processEventsAlwaysSendsPostedEvents(); }; class EventSpy : public QObject @@ -488,5 +489,40 @@ void tst_QCoreApplication::globalPostedEventsCount() QCOMPARE(x.globalPostedEventsCount, expected); } +class ProcessEventsAlwaysSendsPostedEventsObject : public QObject +{ +public: + int counter; + + inline ProcessEventsAlwaysSendsPostedEventsObject() + : counter(0) + { } + + bool event(QEvent *event) + { + if (event->type() == QEvent::User) + ++counter; + return QObject::event(event); + } +}; + +void tst_QCoreApplication::processEventsAlwaysSendsPostedEvents() +{ + int argc = 1; + char *argv[] = { "tst_qcoreapplication" }; + QCoreApplication app(argc, argv); + + ProcessEventsAlwaysSendsPostedEventsObject object; + QTime t; + t.start(); + int i = 1; + do { + QCoreApplication::postEvent(&object, new QEvent(QEvent::User)); + QCoreApplication::processEvents(); + QCOMPARE(object.counter, i); + ++i; + } while (t.elapsed() < 3000); +} + QTEST_APPLESS_MAIN(tst_QCoreApplication) #include "tst_qcoreapplication.moc" diff --git a/tests/auto/qdbusabstractinterface/tst_qdbusabstractinterface.cpp b/tests/auto/qdbusabstractinterface/tst_qdbusabstractinterface.cpp index 91050f5..a2c4758 100644 --- a/tests/auto/qdbusabstractinterface/tst_qdbusabstractinterface.cpp +++ b/tests/auto/qdbusabstractinterface/tst_qdbusabstractinterface.cpp @@ -133,7 +133,7 @@ tst_QDBusAbstractInterface::tst_QDBusAbstractInterface() void tst_QDBusAbstractInterface::initTestCase() { // enable debugging temporarily: - putenv("QDBUS_DEBUG=1"); + //putenv("QDBUS_DEBUG=1"); // register the object QDBusConnection con = QDBusConnection::sessionBus(); @@ -465,6 +465,7 @@ void tst_QDBusAbstractInterface::followSignal() QDBusConnectionInterface::DontAllowReplacement); QVERIFY(r.isValid() && r.value() == QDBusConnectionInterface::ServiceRegistered); QVERIFY(con.interface()->isServiceRegistered(serviceToFollow)); + QCoreApplication::instance()->processEvents(); // emit the signal again: emit targetObj.voidSignal(); diff --git a/tests/auto/qdbusinterface/tst_qdbusinterface.cpp b/tests/auto/qdbusinterface/tst_qdbusinterface.cpp index 62d6342..bcd5bd9 100644 --- a/tests/auto/qdbusinterface/tst_qdbusinterface.cpp +++ b/tests/auto/qdbusinterface/tst_qdbusinterface.cpp @@ -234,6 +234,7 @@ void tst_QDBusInterface::notValid() void tst_QDBusInterface::invalidAfterServiceOwnerChanged() { + // this test is technically the same as tst_QDBusAbstractInterface::followSignal QDBusConnection conn = QDBusConnection::sessionBus(); QDBusConnectionInterface *connIface = conn.interface(); @@ -249,7 +250,7 @@ void tst_QDBusInterface::invalidAfterServiceOwnerChanged() QTestEventLoop::instance().enterLoop(5); QVERIFY(!QTestEventLoop::instance().timeout()); - QVERIFY(!invalidInterface.isValid()); + QVERIFY(invalidInterface.isValid()); } void tst_QDBusInterface::introspect() diff --git a/tests/auto/qdbusperformance/tst_qdbusperformance.cpp b/tests/auto/qdbusperformance/tst_qdbusperformance.cpp index 7227d5d..066b5b2 100644 --- a/tests/auto/qdbusperformance/tst_qdbusperformance.cpp +++ b/tests/auto/qdbusperformance/tst_qdbusperformance.cpp @@ -80,6 +80,14 @@ Q_DECLARE_METATYPE(QVariant) void tst_QDBusPerformance::initTestCase() { + QDBusConnection con = QDBusConnection::sessionBus(); + QVERIFY(con.isConnected()); + + QDBusServiceWatcher watcher(serviceName, con, + QDBusServiceWatcher::WatchForRegistration); + connect(&watcher, SIGNAL(serviceRegistered(QString)), + &QTestEventLoop::instance(), SLOT(exitLoop())); + #ifdef Q_OS_WIN proc.start("server"); #else @@ -87,19 +95,7 @@ void tst_QDBusPerformance::initTestCase() #endif QVERIFY(proc.waitForStarted()); - QDBusConnection con = QDBusConnection::sessionBus(); - QVERIFY(con.isConnected()); - - connect(con.interface(), SIGNAL(serviceOwnerChanged(QString,QString,QString)), - &QTestEventLoop::instance(), SLOT(exitLoop())); - QTime timer; - timer.start(); - - while (timer.elapsed() < 5000) { - QTestEventLoop::instance().enterLoop(5); - if (con.interface()->isServiceRegistered(serviceName)) - break; - } + QTestEventLoop::instance().enterLoop(5); QVERIFY(con.interface()->isServiceRegistered(serviceName)); remote = new QDBusInterface(serviceName, "/", "com.trolltech.autotests.Performance", con, this); diff --git a/tests/auto/qdockwidget/tst_qdockwidget.cpp b/tests/auto/qdockwidget/tst_qdockwidget.cpp index e62ba8c..8f72e39 100644 --- a/tests/auto/qdockwidget/tst_qdockwidget.cpp +++ b/tests/auto/qdockwidget/tst_qdockwidget.cpp @@ -50,6 +50,7 @@ #include <qlineedit.h> #include <QDesktopWidget> #include <QtGui/QPainter> +#include "private/qdockwidget_p.h" bool hasFeature(QDockWidget *dockwidget, QDockWidget::DockWidgetFeature feature) { return (dockwidget->features() & feature) == feature; } @@ -87,12 +88,14 @@ private slots: void dockLocationChanged(); void setTitleBarWidget(); void titleBarDoubleClick(); + void restoreStateOfFloating(); // task specific tests: void task165177_deleteFocusWidget(); void task169808_setFloating(); void task237438_setFloatingCrash(); void task248604_infiniteResize(); void task258459_visibilityChanged(); + void taskQTBUG_1665_closableChanged(); }; // Testing get/set functions @@ -612,6 +615,7 @@ void tst_QDockWidget::dockLocationChanged() QMainWindow mw; QDockWidget dw; + dw.setObjectName("dock1"); QSignalSpy spy(&dw, SIGNAL(dockLocationChanged(Qt::DockWidgetArea))); mw.addDockWidget(Qt::LeftDockWidgetArea, &dw); @@ -636,6 +640,7 @@ void tst_QDockWidget::dockLocationChanged() QCOMPARE(spy.count(), 0); QDockWidget dw2; + dw2.setObjectName("dock2"); mw.addDockWidget(Qt::TopDockWidgetArea, &dw2); mw.tabifyDockWidget(&dw2, &dw); QCOMPARE(spy.count(), 1); @@ -657,6 +662,12 @@ void tst_QDockWidget::dockLocationChanged() QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)), Qt::TopDockWidgetArea); spy.clear(); + + QByteArray ba = mw.saveState(); + mw.restoreState(ba); + QCOMPARE(spy.count(), 1); + QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)), + Qt::TopDockWidgetArea); } void tst_QDockWidget::featuresChanged() @@ -714,6 +725,21 @@ void tst_QDockWidget::titleBarDoubleClick() QCOMPARE(win.dockWidgetArea(&dock), Qt::TopDockWidgetArea); } +void tst_QDockWidget::restoreStateOfFloating() +{ + QMainWindow mw; + QDockWidget dock; + dock.setObjectName("dock1"); + mw.addDockWidget(Qt::TopDockWidgetArea, &dock); + QVERIFY(!dock.isFloating()); + QByteArray ba = mw.saveState(); + dock.setFloating(true); + QVERIFY(dock.isFloating()); + QVERIFY(mw.restoreState(ba)); + QVERIFY(!dock.isFloating()); +} + + void tst_QDockWidget::task165177_deleteFocusWidget() { QMainWindow mw; @@ -834,5 +860,24 @@ void tst_QDockWidget::task258459_visibilityChanged() QCOMPARE(spy2.first().first().toBool(), true); //dock1 is visible } +void tst_QDockWidget::taskQTBUG_1665_closableChanged() +{ + QDockWidget dock; + dock.show(); + QTest::qWaitForWindowShown(&dock); + + QDockWidgetLayout *l = qobject_cast<QDockWidgetLayout*>(dock.layout()); + + if (l && !l->nativeWindowDeco()) + QSKIP("this machine doesn't support native dock widget", SkipAll); + + QVERIFY(dock.windowFlags() & Qt::WindowCloseButtonHint); + + //now let's remove the closable attribute + dock.setFeatures(dock.features() ^ QDockWidget::DockWidgetClosable); + QVERIFY(!(dock.windowFlags() & Qt::WindowCloseButtonHint)); +} + + QTEST_MAIN(tst_QDockWidget) #include "tst_qdockwidget.moc" diff --git a/tests/auto/qfile/qfile.pro b/tests/auto/qfile/qfile.pro index f70f750..33fd2fd 100644 --- a/tests/auto/qfile/qfile.pro +++ b/tests/auto/qfile/qfile.pro @@ -5,5 +5,5 @@ wince*:{ SUBDIRS = test stdinprocess } -SUBDIRS += largefile +!symbian*:SUBDIRS += largefile diff --git a/tests/auto/qfile/tst_qfile.cpp b/tests/auto/qfile/tst_qfile.cpp index b3d6fd9..cf46ce1 100644 --- a/tests/auto/qfile/tst_qfile.cpp +++ b/tests/auto/qfile/tst_qfile.cpp @@ -210,6 +210,7 @@ private slots: void task167217(); void openDirectory(); + void writeNothing(); public: // disabled this test for the moment... it hangs @@ -750,6 +751,7 @@ void tst_QFile::readAllStdin() QProcess process; process.start("stdinprocess/stdinprocess all"); + QVERIFY( process.waitForStarted() ); for (int i = 0; i < 5; ++i) { QTest::qWait(1000); process.write(lotsOfData); @@ -2489,13 +2491,13 @@ void tst_QFile::readEof() } QByteArray ret = file.read(10); - QVERIFY(ret.isNull()); + QVERIFY(ret.isEmpty()); QVERIFY(file.error() == QFile::NoError); QVERIFY(file.atEnd()); // Do it again to ensure that we get the same result ret = file.read(10); - QVERIFY(ret.isNull()); + QVERIFY(ret.isEmpty()); QVERIFY(file.error() == QFile::NoError); QVERIFY(file.atEnd()); } @@ -2840,5 +2842,16 @@ void tst_QFile::openStandardStreams() } } +void tst_QFile::writeNothing() +{ + for (int i = 0; i < 3; ++i) { + QFile file("file.txt"); + QVERIFY( openFile(file, QIODevice::WriteOnly | QIODevice::Unbuffered, FileType(i)) ); + QVERIFY( 0 == file.write((char *)0, 0) ); + QCOMPARE( file.error(), QFile::NoError ); + closeFile(file); + } +} + QTEST_MAIN(tst_QFile) #include "tst_qfile.moc" diff --git a/tests/auto/qfont/tst_qfont.cpp b/tests/auto/qfont/tst_qfont.cpp index fa76e44..5622e10 100644 --- a/tests/auto/qfont/tst_qfont.cpp +++ b/tests/auto/qfont/tst_qfont.cpp @@ -395,6 +395,13 @@ void tst_QFont::compare() font.setOverline(false); QVERIFY( font == font2 ); QVERIFY(!(font < font2)); + + font.setCapitalization(QFont::SmallCaps); + QVERIFY( font != font2 ); + QCOMPARE(font < font2,!(font2 < font)); + font.setCapitalization(QFont::MixedCase); + QVERIFY( font == font2 ); + QVERIFY(!(font < font2)); } #if defined(Q_WS_X11) diff --git a/tests/auto/qfontcombobox/tst_qfontcombobox.cpp b/tests/auto/qfontcombobox/tst_qfontcombobox.cpp index 7045c19..b974ecab 100644 --- a/tests/auto/qfontcombobox/tst_qfontcombobox.cpp +++ b/tests/auto/qfontcombobox/tst_qfontcombobox.cpp @@ -153,7 +153,7 @@ void tst_QFontComboBox::currentFont() if (oldCurrentFont != box.currentFont()) { //the signal may be emit twice if there is a foundry into brackets - QVERIFY(spy0.count() >= 1); + QCOMPARE(spy0.count(),1); } } @@ -286,6 +286,10 @@ void tst_QFontComboBox::currentFontChanged() if (box.model()->rowCount() > 2) { QTest::keyPress(&box, Qt::Key_Down); QCOMPARE(spy0.count(), 1); + + QFont f( "Sans Serif" ); + box.setCurrentFont(f); + QCOMPARE(spy0.count(), 2); } else qWarning("Not enough fonts installed on test system. Consider adding some"); } diff --git a/tests/auto/qgl/tst_qgl.cpp b/tests/auto/qgl/tst_qgl.cpp index c680dec..5dc072d 100644 --- a/tests/auto/qgl/tst_qgl.cpp +++ b/tests/auto/qgl/tst_qgl.cpp @@ -76,6 +76,7 @@ private slots: void partialGLWidgetUpdates_data(); void partialGLWidgetUpdates(); void glWidgetRendering(); + void glFBOSimpleRendering(); void glFBORendering(); void multipleFBOInterleavedRendering(); void glFBOUseInGLWidget(); @@ -711,6 +712,79 @@ void tst_QGL::openGLVersionCheck() #endif //QT_BUILD_INTERNAL } +static bool fuzzyComparePixels(const QRgb testPixel, const QRgb refPixel, const char* file, int line, int x = -1, int y = -1) +{ + static int maxFuzz = 1; + static bool maxFuzzSet = false; + + // On 16 bpp systems, we need to allow for more fuzz: + if (!maxFuzzSet) { + maxFuzzSet = true; + if (appDefaultDepth() < 24) + maxFuzz = 32; + } + + int redFuzz = qAbs(qRed(testPixel) - qRed(refPixel)); + int greenFuzz = qAbs(qGreen(testPixel) - qGreen(refPixel)); + int blueFuzz = qAbs(qBlue(testPixel) - qBlue(refPixel)); + int alphaFuzz = qAbs(qAlpha(testPixel) - qAlpha(refPixel)); + + if (refPixel != 0 && testPixel == 0) { + QString msg; + if (x >= 0) { + msg = QString("Test pixel [%1, %2] is null (black) when it should be (%3,%4,%5,%6)") + .arg(x).arg(y) + .arg(qRed(refPixel)).arg(qGreen(refPixel)).arg(qBlue(refPixel)).arg(qAlpha(refPixel)); + } else { + msg = QString("Test pixel is null (black) when it should be (%2,%3,%4,%5)") + .arg(qRed(refPixel)).arg(qGreen(refPixel)).arg(qBlue(refPixel)).arg(qAlpha(refPixel)); + } + + QTest::qFail(msg.toLatin1(), file, line); + return false; + } + + if (redFuzz > maxFuzz || greenFuzz > maxFuzz || blueFuzz > maxFuzz || alphaFuzz > maxFuzz) { + QString msg; + + if (x >= 0) + msg = QString("Pixel [%1,%2]: ").arg(x).arg(y); + else + msg = QString("Pixel "); + + msg += QString("Max fuzz (%1) exceeded: (%2,%3,%4,%5) vs (%6,%7,%8,%9)") + .arg(maxFuzz) + .arg(qRed(testPixel)).arg(qGreen(testPixel)).arg(qBlue(testPixel)).arg(qAlpha(testPixel)) + .arg(qRed(refPixel)).arg(qGreen(refPixel)).arg(qBlue(refPixel)).arg(qAlpha(refPixel)); + QTest::qFail(msg.toLatin1(), file, line); + return false; + } + return true; +} + +static void fuzzyCompareImages(const QImage &testImage, const QImage &referenceImage, const char* file, int line) +{ + QCOMPARE(testImage.width(), referenceImage.width()); + QCOMPARE(testImage.height(), referenceImage.height()); + + for (int y = 0; y < testImage.height(); y++) { + for (int x = 0; x < testImage.width(); x++) { + if (!fuzzyComparePixels(testImage.pixel(x, y), referenceImage.pixel(x, y), file, line, x, y)) { + // Might as well save the images for easier debugging: + referenceImage.save("referenceImage.png"); + testImage.save("testImage.png"); + return; + } + } + } +} + +#define QFUZZY_COMPARE_IMAGES(A,B) \ + fuzzyCompareImages(A, B, __FILE__, __LINE__) + +#define QFUZZY_COMPARE_PIXELS(A,B) \ + fuzzyComparePixels(A, B, __FILE__, __LINE__) + class UnclippedWidget : public QWidget { public: @@ -723,8 +797,6 @@ public: void tst_QGL::graphicsViewClipping() { - if (appDefaultDepth() < 24) - QSKIP("This test won't work for bit depths < 24", SkipAll); const int size = 64; UnclippedWidget *widget = new UnclippedWidget; widget->setFixedSize(size, size); @@ -734,6 +806,9 @@ void tst_QGL::graphicsViewClipping() scene.addWidget(widget)->setPos(0, 0); QGraphicsView view(&scene); +#ifdef Q_WS_QWS + view.setWindowFlags(Qt::FramelessWindowHint); +#endif view.resize(2*size, 2*size); QGLWidget *viewport = new QGLWidget; @@ -758,7 +833,7 @@ void tst_QGL::graphicsViewClipping() p.fillRect(QRect(0, 0, size, size), Qt::black); p.end(); - QCOMPARE(image, expected); + QFUZZY_COMPARE_IMAGES(image, expected); } void tst_QGL::partialGLWidgetUpdates_data() @@ -849,7 +924,7 @@ void tst_QGL::glPBufferRendering() p.fillRect(32, 32, 64, 64, Qt::blue); p.end(); - QCOMPARE(fb, reference); + QFUZZY_COMPARE_IMAGES(fb, reference); } class GLWidget : public QGLWidget @@ -868,8 +943,8 @@ public: // This test only ensures it's possible to paint onto a QGLWidget. Full // paint engine feature testing is way out of scope! + p.fillRect(-1, -1, width()+2, height()+2, Qt::red); - p.fillRect(0, 0, width(), height(), Qt::red); // No p.end() or swap buffers, should be done automatically } @@ -877,9 +952,11 @@ public: void tst_QGL::glWidgetRendering() { - if (appDefaultDepth() < 24) - QSKIP("This test won't work for bit depths < 24", SkipAll); GLWidget w; +#ifdef Q_WS_QWS + w.setWindowFlags(Qt::FramelessWindowHint); +#endif + w.setGeometry(100, 100, 200, 200); w.show(); #ifdef Q_WS_X11 @@ -894,7 +971,37 @@ void tst_QGL::glWidgetRendering() QImage reference(fb.size(), QImage::Format_RGB32); reference.fill(0xffff0000); - QCOMPARE(fb, reference); + QFUZZY_COMPARE_IMAGES(fb, reference); +} + +void tst_QGL::glFBOSimpleRendering() +{ + if (!QGLFramebufferObject::hasOpenGLFramebufferObjects()) + QSKIP("QGLFramebufferObject not supported on this platform", SkipSingle); + + QGLWidget glw; + glw.makeCurrent(); + + // No multisample with combined depth/stencil attachment: + QGLFramebufferObjectFormat fboFormat; + fboFormat.setAttachment(QGLFramebufferObject::NoAttachment); + + // Don't complicate things by using NPOT: + QGLFramebufferObject *fbo = new QGLFramebufferObject(256, 128, fboFormat); + + fbo->bind(); + + glClearColor(1.0, 0.0, 0.0, 1.0); + glClear(GL_COLOR_BUFFER_BIT); + glFinish(); + + QImage fb = fbo->toImage().convertToFormat(QImage::Format_RGB32); + QImage reference(fb.size(), QImage::Format_RGB32); + reference.fill(0xffff0000); + + QFUZZY_COMPARE_IMAGES(fb, reference); + + delete fbo; } // NOTE: This tests that CombinedDepthStencil attachment works by assuming the @@ -949,14 +1056,14 @@ void tst_QGL::glFBORendering() // As we're doing more than trivial painting, we can't just compare to // an image rendered with raster. Instead, we sample at well-defined // test-points: - QCOMPARE(fb.pixel(39, 64), QColor(Qt::red).rgb()); - QCOMPARE(fb.pixel(89, 64), QColor(Qt::red).rgb()); - QCOMPARE(fb.pixel(64, 39), QColor(Qt::blue).rgb()); - QCOMPARE(fb.pixel(64, 89), QColor(Qt::blue).rgb()); - - QCOMPARE(fb.pixel(167, 39), QColor(Qt::red).rgb()); - QCOMPARE(fb.pixel(217, 39), QColor(Qt::red).rgb()); - QCOMPARE(fb.pixel(192, 64), QColor(Qt::green).rgb()); + QFUZZY_COMPARE_PIXELS(fb.pixel(39, 64), QColor(Qt::red).rgb()); + QFUZZY_COMPARE_PIXELS(fb.pixel(89, 64), QColor(Qt::red).rgb()); + QFUZZY_COMPARE_PIXELS(fb.pixel(64, 39), QColor(Qt::blue).rgb()); + QFUZZY_COMPARE_PIXELS(fb.pixel(64, 89), QColor(Qt::blue).rgb()); + + QFUZZY_COMPARE_PIXELS(fb.pixel(167, 39), QColor(Qt::red).rgb()); + QFUZZY_COMPARE_PIXELS(fb.pixel(217, 39), QColor(Qt::red).rgb()); + QFUZZY_COMPARE_PIXELS(fb.pixel(192, 64), QColor(Qt::green).rgb()); } @@ -1047,29 +1154,29 @@ void tst_QGL::multipleFBOInterleavedRendering() // As we're doing more than trivial painting, we can't just compare to // an image rendered with raster. Instead, we sample at well-defined // test-points: - QCOMPARE(fb1.pixel(39, 64), QColor(Qt::red).rgb()); - QCOMPARE(fb1.pixel(89, 64), QColor(Qt::red).rgb()); - QCOMPARE(fb1.pixel(64, 39), QColor(Qt::blue).rgb()); - QCOMPARE(fb1.pixel(64, 89), QColor(Qt::blue).rgb()); - QCOMPARE(fb1.pixel(167, 39), QColor(Qt::red).rgb()); - QCOMPARE(fb1.pixel(217, 39), QColor(Qt::red).rgb()); - QCOMPARE(fb1.pixel(192, 64), QColor(Qt::green).rgb()); - - QCOMPARE(fb2.pixel(39, 64), QColor(Qt::green).rgb()); - QCOMPARE(fb2.pixel(89, 64), QColor(Qt::green).rgb()); - QCOMPARE(fb2.pixel(64, 39), QColor(Qt::red).rgb()); - QCOMPARE(fb2.pixel(64, 89), QColor(Qt::red).rgb()); - QCOMPARE(fb2.pixel(167, 39), QColor(Qt::green).rgb()); - QCOMPARE(fb2.pixel(217, 39), QColor(Qt::green).rgb()); - QCOMPARE(fb2.pixel(192, 64), QColor(Qt::blue).rgb()); - - QCOMPARE(fb3.pixel(39, 64), QColor(Qt::blue).rgb()); - QCOMPARE(fb3.pixel(89, 64), QColor(Qt::blue).rgb()); - QCOMPARE(fb3.pixel(64, 39), QColor(Qt::green).rgb()); - QCOMPARE(fb3.pixel(64, 89), QColor(Qt::green).rgb()); - QCOMPARE(fb3.pixel(167, 39), QColor(Qt::blue).rgb()); - QCOMPARE(fb3.pixel(217, 39), QColor(Qt::blue).rgb()); - QCOMPARE(fb3.pixel(192, 64), QColor(Qt::red).rgb()); + QFUZZY_COMPARE_PIXELS(fb1.pixel(39, 64), QColor(Qt::red).rgb()); + QFUZZY_COMPARE_PIXELS(fb1.pixel(89, 64), QColor(Qt::red).rgb()); + QFUZZY_COMPARE_PIXELS(fb1.pixel(64, 39), QColor(Qt::blue).rgb()); + QFUZZY_COMPARE_PIXELS(fb1.pixel(64, 89), QColor(Qt::blue).rgb()); + QFUZZY_COMPARE_PIXELS(fb1.pixel(167, 39), QColor(Qt::red).rgb()); + QFUZZY_COMPARE_PIXELS(fb1.pixel(217, 39), QColor(Qt::red).rgb()); + QFUZZY_COMPARE_PIXELS(fb1.pixel(192, 64), QColor(Qt::green).rgb()); + + QFUZZY_COMPARE_PIXELS(fb2.pixel(39, 64), QColor(Qt::green).rgb()); + QFUZZY_COMPARE_PIXELS(fb2.pixel(89, 64), QColor(Qt::green).rgb()); + QFUZZY_COMPARE_PIXELS(fb2.pixel(64, 39), QColor(Qt::red).rgb()); + QFUZZY_COMPARE_PIXELS(fb2.pixel(64, 89), QColor(Qt::red).rgb()); + QFUZZY_COMPARE_PIXELS(fb2.pixel(167, 39), QColor(Qt::green).rgb()); + QFUZZY_COMPARE_PIXELS(fb2.pixel(217, 39), QColor(Qt::green).rgb()); + QFUZZY_COMPARE_PIXELS(fb2.pixel(192, 64), QColor(Qt::blue).rgb()); + + QFUZZY_COMPARE_PIXELS(fb3.pixel(39, 64), QColor(Qt::blue).rgb()); + QFUZZY_COMPARE_PIXELS(fb3.pixel(89, 64), QColor(Qt::blue).rgb()); + QFUZZY_COMPARE_PIXELS(fb3.pixel(64, 39), QColor(Qt::green).rgb()); + QFUZZY_COMPARE_PIXELS(fb3.pixel(64, 89), QColor(Qt::green).rgb()); + QFUZZY_COMPARE_PIXELS(fb3.pixel(167, 39), QColor(Qt::blue).rgb()); + QFUZZY_COMPARE_PIXELS(fb3.pixel(217, 39), QColor(Qt::blue).rgb()); + QFUZZY_COMPARE_PIXELS(fb3.pixel(192, 64), QColor(Qt::red).rgb()); } class FBOUseInGLWidget : public QGLWidget @@ -1089,11 +1196,11 @@ protected: QPainter fboPainter; fboPainterBeginOk = fboPainter.begin(fbo); - fboPainter.fillRect(0, 0, 128, 128, Qt::red); + fboPainter.fillRect(-1, -1, 130, 130, Qt::red); fboPainter.end(); fboImage = fbo->toImage(); - widgetPainter.fillRect(rect(), Qt::blue); + widgetPainter.fillRect(-1, -1, width()+2, width()+2, Qt::blue); delete fbo; } @@ -1102,12 +1209,13 @@ protected: void tst_QGL::glFBOUseInGLWidget() { - if (appDefaultDepth() < 24) - QSKIP("This test won't work for bit depths < 24", SkipAll); if (!QGLFramebufferObject::hasOpenGLFramebufferObjects()) QSKIP("QGLFramebufferObject not supported on this platform", SkipSingle); FBOUseInGLWidget w; +#ifdef Q_WS_QWS + w.setWindowFlags(Qt::FramelessWindowHint); +#endif w.resize(128, 128); w.show(); @@ -1122,17 +1230,15 @@ void tst_QGL::glFBOUseInGLWidget() QImage widgetFB = w.grabFrameBuffer(false); QImage widgetReference(widgetFB.size(), widgetFB.format()); widgetReference.fill(0xff0000ff); - QCOMPARE(widgetFB, widgetReference); + QFUZZY_COMPARE_IMAGES(widgetFB, widgetReference); QImage fboReference(w.fboImage.size(), w.fboImage.format()); fboReference.fill(0xffff0000); - QCOMPARE(w.fboImage, fboReference); + QFUZZY_COMPARE_IMAGES(w.fboImage, fboReference); } void tst_QGL::glWidgetReparent() { - if (appDefaultDepth() < 24) - QSKIP("This test won't work for bit depths < 24", SkipAll); // Try it as a top-level first: GLWidget *widget = new GLWidget; widget->setGeometry(0, 0, 200, 30); @@ -1222,7 +1328,7 @@ void tst_QGL::glWidgetRenderPixmap() QImage reference(fb.size(), QImage::Format_RGB32); reference.fill(0xffff0000); - QCOMPARE(fb, reference); + QFUZZY_COMPARE_IMAGES(fb, reference); } class ColormapExtended : public QGLColormap @@ -1495,9 +1601,10 @@ protected: void tst_QGL::replaceClipping() { - if (appDefaultDepth() < 24) - QSKIP("This test won't work for bit depths < 24", SkipAll); ReplaceClippingGLWidget glw; +#ifdef Q_WS_QWS + glw.setWindowFlags(Qt::FramelessWindowHint); +#endif glw.resize(300, 300); glw.show(); @@ -1513,7 +1620,13 @@ void tst_QGL::replaceClipping() const QImage widgetFB = glw.grabFrameBuffer(false).convertToFormat(QImage::Format_RGB32); - QCOMPARE(widgetFB, reference); + // Sample pixels in a grid pattern which avoids false failures due to + // off-by-one pixel errors on some buggy GL implementations + for (int x = 25; x < reference.width(); x += 50) { + for (int y = 25; y < reference.width(); y += 50) { + QFUZZY_COMPARE_PIXELS(widgetFB.pixel(x, y), reference.pixel(x, y)); + } + } } class ClipTestGLWidget : public QGLWidget @@ -1521,7 +1634,7 @@ class ClipTestGLWidget : public QGLWidget public: void paint(QPainter *painter) { - painter->fillRect(rect(), Qt::white); + painter->fillRect(-1, -1, width()+2, height()+2, Qt::white); painter->setClipRect(10, 10, width()-20, height()-20); painter->fillRect(rect(), Qt::cyan); @@ -1622,9 +1735,10 @@ protected: void tst_QGL::clipTest() { - if (appDefaultDepth() < 24) - QSKIP("This test won't work for bit depths < 24", SkipAll); ClipTestGLWidget glw; +#ifdef Q_WS_QWS + glw.setWindowFlags(Qt::FramelessWindowHint); +#endif glw.resize(220, 220); glw.show(); @@ -1640,7 +1754,13 @@ void tst_QGL::clipTest() const QImage widgetFB = glw.grabFrameBuffer(false).convertToFormat(QImage::Format_RGB32); - QCOMPARE(widgetFB, reference); + // Sample pixels in a grid pattern which avoids false failures due to + // off-by-one pixel errors on some buggy GL implementations + for (int x = 2; x < reference.width(); x += 5) { + for (int y = 2; y < reference.width(); y += 5) { + QFUZZY_COMPARE_PIXELS(widgetFB.pixel(x, y), reference.pixel(x, y)); + } + } } void tst_QGL::destroyFBOAfterContext() @@ -1722,12 +1842,14 @@ void tst_QGL::shareRegister() QVERIFY(qt_shared_test()->value(glw1->context()) == res1); // Create another context that shares with the first. + QVERIFY(!glw1->isSharing()); QGLWidget *glw2 = new QGLWidget(0, glw1); if (!glw2->isSharing()) { delete glw2; delete glw1; QSKIP("Context sharing is not supported", SkipSingle); } + QVERIFY(glw1->isSharing()); QVERIFY(glw1->context() != glw2->context()); // Check that the first context's resource is also on the second. @@ -1759,6 +1881,7 @@ void tst_QGL::shareRegister() // Create a third context, not sharing with the others. QGLWidget *glw3 = new QGLWidget(); + QVERIFY(!glw3->isSharing()); // Create a guard on the standalone context. QGLSharedResourceGuard guard3(glw3->context()); @@ -1807,6 +1930,9 @@ void tst_QGL::shareRegister() // Delete the first context. delete glw1; + // The second context should no longer register as sharing. + QVERIFY(!glw2->isSharing()); + // The first context's resource should transfer to the second context. QCOMPARE(tst_QGLResource::deletions, 0); QVERIFY(qt_shared_test()->value(glw2->context()) == res1); diff --git a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp index c7ed309..2ad024f 100644 --- a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp +++ b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp @@ -85,6 +85,7 @@ private slots: void simplificationVsOrder(); void parallelSimplificationOfCenter(); void simplificationVsRedundance(); + void spacingPersistency(); }; class RectWidget : public QGraphicsWidget @@ -1866,5 +1867,30 @@ void tst_QGraphicsAnchorLayout::simplificationVsRedundance() QCOMPARE(usedSimplex(l, Qt::Vertical), false); } +/* + Avoid regression where the saved prefSize would be lost. This was + solved by saving the original spacing in the QGraphicsAnchorPrivate class +*/ +void tst_QGraphicsAnchorLayout::spacingPersistency() +{ + QGraphicsWidget w; + QGraphicsWidget *a = createItem(); + QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout(&w); + + l->addAnchors(l, a, Qt::Horizontal); + QGraphicsAnchor *anchor = l->anchor(l, Qt::AnchorLeft, a, Qt::AnchorLeft); + + anchor->setSpacing(-30); + QCOMPARE(anchor->spacing(), -30.0); + + anchor->setSpacing(30); + QCOMPARE(anchor->spacing(), 30.0); + + anchor->setSizePolicy(QSizePolicy::Ignored); + w.effectiveSizeHint(Qt::PreferredSize); + + QCOMPARE(anchor->spacing(), 30.0); +} + QTEST_MAIN(tst_QGraphicsAnchorLayout) #include "tst_qgraphicsanchorlayout.moc" diff --git a/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp b/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp index 0fbd069..bca59c3 100644 --- a/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp +++ b/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp @@ -1722,7 +1722,7 @@ void tst_QGraphicsAnchorLayout1::testBasicLayout() QRectF expected = truncate(item.rect); QRectF actual = truncate(widgets[item.index]->geometry()); - QCOMPARE(expected, actual); + QCOMPARE(actual, expected); } // Test mirrored mode @@ -1739,7 +1739,7 @@ void tst_QGraphicsAnchorLayout1::testBasicLayout() QRectF expected = truncate(mirroredRect); QRectF actual = truncate(widgets[item.index]->geometry()); - QCOMPARE(expected, actual); + QCOMPARE(actual, expected); delete widgets[item.index]; } diff --git a/tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp b/tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp index e33c7b6..cd1eedd 100644 --- a/tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp +++ b/tests/auto/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp @@ -399,7 +399,7 @@ void tst_QGraphicsGridLayout::columnAlignment() widget->resize(widget->effectiveSizeHint(Qt::MaximumSize)); view.show(); widget->show(); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); // Check default QCOMPARE(layout->columnAlignment(0), 0); QCOMPARE(layout->columnAlignment(1), 0); @@ -414,7 +414,7 @@ void tst_QGraphicsGridLayout::columnAlignment() layout->setAlignment(layout->itemAt(1,1), Qt::AlignRight); layout->setAlignment(layout->itemAt(1,2), Qt::AlignLeft); - QApplication::processEvents(); // process LayoutRequest + QApplication::sendPostedEvents(0, 0); // process LayoutRequest /* +----------+------------+---------+ | Left | HCenter | Right | @@ -846,7 +846,7 @@ void tst_QGraphicsGridLayout::rowAlignment() widget->resize(300, 400); view.show(); widget->show(); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); // Check default QCOMPARE(layout->rowAlignment(0), 0); QCOMPARE(layout->rowAlignment(1), 0); @@ -869,7 +869,7 @@ void tst_QGraphicsGridLayout::rowAlignment() layout->setAlignment(layout->itemAt(1,0), Qt::AlignTop); layout->setAlignment(layout->itemAt(2,0), Qt::AlignHCenter); - QApplication::processEvents(); // process LayoutRequest + QApplication::sendPostedEvents(0, 0); // process LayoutRequest QCOMPARE(layout->alignment(layout->itemAt(0,0)), Qt::AlignRight); //Qt::AlignRight | Qt::AlignBottom QCOMPARE(layout->itemAt(0,0)->geometry(), QRectF(50, 50, 50, 50)); @@ -1834,7 +1834,7 @@ void tst_QGraphicsGridLayout::defaultStretchFactors() desc.apply(layout, item); } - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); widget->show(); view.show(); @@ -1842,7 +1842,7 @@ void tst_QGraphicsGridLayout::defaultStretchFactors() if (newSize.isValid()) widget->resize(newSize); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); for (i = 0; i < expectedSizes.count(); ++i) { QSizeF itemSize = layout->itemAt(i)->geometry().size(); QCOMPARE(itemSize, expectedSizes.at(i)); @@ -1994,7 +1994,7 @@ void tst_QGraphicsGridLayout::alignment2() desc.apply(layout, item); } - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); widget->show(); view.resize(400,300); @@ -2002,7 +2002,7 @@ void tst_QGraphicsGridLayout::alignment2() if (newSize.isValid()) widget->resize(newSize); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); for (i = 0; i < expectedGeometries.count(); ++i) { QRectF itemRect = layout->itemAt(i)->geometry(); QCOMPARE(itemRect, expectedGeometries.at(i)); diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp index d65c6ec..db80db6 100644 --- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp @@ -413,6 +413,7 @@ private slots: void task243707_addChildBeforeParent(); void task197802_childrenVisibility(); void QTBUG_4233_updateCachedWithSceneRect(); + void QTBUG_5418_textItemSetDefaultColor(); private: QList<QGraphicsItem *> paintedItems; @@ -4077,8 +4078,11 @@ void tst_QGraphicsItem::defaultItemTest_QGraphicsTextItem() QCOMPARE(text->pos(), QPointF(10, 10)); + text->setTextInteractionFlags(Qt::NoTextInteraction); + QVERIFY(!(text->flags() & QGraphicsItem::ItemAcceptsInputMethod)); text->setTextInteractionFlags(Qt::TextEditorInteraction); QCOMPARE(text->textInteractionFlags(), Qt::TextInteractionFlags(Qt::TextEditorInteraction)); + QVERIFY(text->flags() & QGraphicsItem::ItemAcceptsInputMethod); { QGraphicsSceneMouseEvent event2(QEvent::GraphicsSceneMouseMove); @@ -9751,5 +9755,62 @@ void tst_QGraphicsItem::scenePosChange() QCOMPARE(child2->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 0); } +void tst_QGraphicsItem::QTBUG_5418_textItemSetDefaultColor() +{ + struct Item : public QGraphicsTextItem + { + bool painted; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *opt, QWidget *wid) + { + painted = true; + QGraphicsTextItem::paint(painter, opt, wid); + } + }; + + Item *i = new Item; + i->painted = false; + i->setPlainText("I AM A TROLL"); + + QGraphicsScene scene; + QGraphicsView view(&scene); + view.show(); + QTest::qWaitForWindowShown(&view); + scene.addItem(i); + QApplication::processEvents(); + QTRY_VERIFY(i->painted); + QApplication::processEvents(); + + i->painted = false; + QColor col(Qt::red); + i->setDefaultTextColor(col); + QApplication::processEvents(); + QTRY_VERIFY(i->painted); //check that changing the color force an update + + i->painted = false; + QImage image(400, 200, QImage::Format_RGB32); + image.fill(0); + QPainter painter(&image); + scene.render(&painter); + painter.end(); + QVERIFY(i->painted); + + int numRedPixel = 0; + QRgb rgb = col.rgb(); + for (int y = 0; y < image.height(); ++y) { + for (int x = 0; x < image.width(); ++x) { + // Because of antialiasing we allow a certain range of errors here. + QRgb pixel = image.pixel(x, y); + if (qAbs((int)(pixel & 0xff) - (int)(rgb & 0xff)) + + qAbs((int)((pixel & 0xff00) >> 8) - (int)((rgb & 0xff00) >> 8)) + + qAbs((int)((pixel & 0xff0000) >> 16) - (int)((rgb & 0xff0000) >> 16)) <= 50) { + if (++numRedPixel >= 10) { + return; + } + } + } + } + QCOMPARE(numRedPixel, -1); //color not found, FAIL! +} + QTEST_MAIN(tst_QGraphicsItem) #include "tst_qgraphicsitem.moc" diff --git a/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp b/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp index 546f92d..d3087dc 100644 --- a/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp +++ b/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp @@ -664,16 +664,16 @@ void tst_QGraphicsLinearLayout::invalidate() widget->show(); layout.setContentsMargins(1, 2, 3, 4); - qApp->processEvents(); + QApplication::sendPostedEvents(0, 0); QCOMPARE(layout.layoutRequest, 1); layout.setOrientation(Qt::Vertical); - qApp->processEvents(); + QApplication::sendPostedEvents(0, 0); QCOMPARE(layout.layoutRequest, 2); for (int i = 0; i < count; ++i) layout.invalidate(); // Event is compressed, should only get one layoutrequest - qApp->processEvents(); + QApplication::sendPostedEvents(0, 0); QCOMPARE(layout.layoutRequest, count ? 3 : 2); delete widget; } diff --git a/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp b/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp index 9269164..36ee22c 100644 --- a/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp +++ b/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp @@ -1286,8 +1286,9 @@ void tst_QGraphicsProxyWidget::paintEvent() QGraphicsScene scene; QGraphicsView view(&scene); view.show(); + QApplication::setActiveWindow(&view); QTest::qWaitForWindowShown(&view); - QTest::qWait(70); + QTRY_VERIFY(view.isActiveWindow()); SubQGraphicsProxyWidget proxy; @@ -1298,14 +1299,14 @@ void tst_QGraphicsProxyWidget::paintEvent() w->show(); QTest::qWaitForWindowShown(w); QApplication::processEvents(); - QTest::qWait(100); + QTest::qWait(30); proxy.setWidget(w); scene.addItem(&proxy); //make sure we flush all the paint events - QTest::qWait(70); + QTest::qWait(30); QTRY_VERIFY(proxy.paintCount > 1); - QTest::qWait(110); + QTest::qWait(30); proxy.paintCount = 0; w->update(); @@ -2573,20 +2574,22 @@ void tst_QGraphicsProxyWidget::changingCursor_basic() proxy->setWidget(widget); proxy->show(); scene.addItem(proxy); + QApplication::setActiveWindow(&view); QTest::qWaitForWindowShown(&view); QApplication::processEvents(); + QTRY_VERIFY(view.isActiveWindow()); // in QTest::mouseMove(view.viewport(), view.mapFromScene(proxy->mapToScene(proxy->boundingRect().center()))); sendMouseMove(view.viewport(), view.mapFromScene(proxy->mapToScene(proxy->boundingRect().center()))); - QTest::qWait(125); - QCOMPARE(view.viewport()->cursor().shape(), Qt::IBeamCursor); + QTest::qWait(12); + QTRY_COMPARE(view.viewport()->cursor().shape(), Qt::IBeamCursor); // out QTest::mouseMove(view.viewport(), QPoint(1, 1)); sendMouseMove(view.viewport(), QPoint(1, 1)); - QTest::qWait(125); - QCOMPARE(view.viewport()->cursor().shape(), Qt::ArrowCursor); + QTest::qWait(12); + QTRY_COMPARE(view.viewport()->cursor().shape(), Qt::ArrowCursor); #endif } @@ -2746,10 +2749,12 @@ void tst_QGraphicsProxyWidget::windowOpacity() widget->resize(100, 100); QGraphicsProxyWidget *proxy = scene.addWidget(widget); proxy->setCacheMode(QGraphicsItem::ItemCoordinateCache); + + QApplication::setActiveWindow(&view); view.show(); QTest::qWaitForWindowShown(&view); QApplication::sendPostedEvents(); - QTest::qWait(150); + QTRY_VERIFY(view.isActiveWindow()); qRegisterMetaType<QList<QRectF> >("QList<QRectF>"); QSignalSpy signalSpy(&scene, SIGNAL(changed(const QList<QRectF> &))); diff --git a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp index 9a561eb..a49c2c1 100644 --- a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp +++ b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp @@ -3983,20 +3983,28 @@ void tst_QGraphicsScene::isActive() QVERIFY(!scene1.isActive()); //it is hidden; QVERIFY(scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(scene2.hasFocus()); view1->show(); QVERIFY(scene1.isActive()); QVERIFY(scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(scene2.hasFocus()); view2->hide(); QVERIFY(scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); toplevel1.hide(); - QTest::qWait(12); + QTest::qWait(50); QTRY_VERIFY(!scene1.isActive()); QTRY_VERIFY(!scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); toplevel1.show(); QApplication::setActiveWindow(&toplevel1); @@ -4005,14 +4013,21 @@ void tst_QGraphicsScene::isActive() QTRY_VERIFY(scene1.isActive()); QTRY_VERIFY(!scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); view2->show(); QVERIFY(scene1.isActive()); QVERIFY(scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); } QVERIFY(!scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); + { QWidget toplevel2; @@ -4025,6 +4040,8 @@ void tst_QGraphicsScene::isActive() QVERIFY(!scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); toplevel2.show(); QApplication::setActiveWindow(&toplevel2); @@ -4033,66 +4050,89 @@ void tst_QGraphicsScene::isActive() QVERIFY(scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); view2->setScene(&scene2); QVERIFY(scene1.isActive()); QVERIFY(scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); view1->setScene(&scene2); QVERIFY(!scene1.isActive()); QVERIFY(scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(scene2.hasFocus()); view1->hide(); QVERIFY(!scene1.isActive()); QVERIFY(scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(scene2.hasFocus()); view1->setScene(&scene1); QVERIFY(!scene1.isActive()); QVERIFY(scene2.isActive()); - - view1->show(); + QVERIFY(!scene1.hasFocus()); + QVERIFY(scene2.hasFocus()); view1->show(); QVERIFY(scene1.isActive()); QVERIFY(scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(scene2.hasFocus()); view2->hide(); QVERIFY(scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); QGraphicsView topLevelView; topLevelView.show(); QApplication::setActiveWindow(&topLevelView); + topLevelView.setFocus(); QTest::qWaitForWindowShown(&topLevelView); QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&topLevelView)); QVERIFY(!scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); topLevelView.setScene(&scene1); QVERIFY(scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); view2->show(); QVERIFY(scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); view1->hide(); QVERIFY(scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); QApplication::setActiveWindow(&toplevel2); QTRY_COMPARE(QApplication::activeWindow(), &toplevel2); QVERIFY(!scene1.isActive()); QVERIFY(scene2.isActive()); - - + QVERIFY(!scene1.hasFocus()); + QVERIFY(scene2.hasFocus()); } QVERIFY(!scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); { QWidget toplevel3; @@ -4104,6 +4144,9 @@ void tst_QGraphicsScene::isActive() QVERIFY(!scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); + toplevel3.show(); QApplication::setActiveWindow(&toplevel3); @@ -4112,23 +4155,30 @@ void tst_QGraphicsScene::isActive() QVERIFY(scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); layout->addWidget(view2); QApplication::processEvents(); QVERIFY(scene1.isActive()); QVERIFY(scene2.isActive()); + QVERIFY(scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); view1->setParent(0); QVERIFY(!scene1.isActive()); QVERIFY(scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(scene2.hasFocus()); delete view1; } QVERIFY(!scene1.isActive()); QVERIFY(!scene2.isActive()); + QVERIFY(!scene1.hasFocus()); + QVERIFY(!scene2.hasFocus()); } - QTEST_MAIN(tst_QGraphicsScene) #include "tst_qgraphicsscene.moc" diff --git a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp index 9c6aa39..1ff06c2 100644 --- a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp @@ -217,7 +217,6 @@ private slots: void update(); void inputMethodSensitivity(); void inputContextReset(); - void defaultClipIntersectToView(); // task specific tests below me void task172231_untransformableItems(); @@ -3601,6 +3600,7 @@ void tst_QGraphicsView::inputMethodSensitivity() item->setFlag(QGraphicsItem::ItemIsFocusable); scene.addItem(item); scene.setFocusItem(item); + QCOMPARE(scene.focusItem(), item); QCOMPARE(view.testAttribute(Qt::WA_InputMethodEnabled), true); item->setFlag(QGraphicsItem::ItemAcceptsInputMethod, false); @@ -3615,27 +3615,35 @@ void tst_QGraphicsView::inputMethodSensitivity() scene.addItem(item2); scene.setFocusItem(item2); QCOMPARE(view.testAttribute(Qt::WA_InputMethodEnabled), false); + QCOMPARE(scene.focusItem(), item2); scene.setFocusItem(item); QCOMPARE(view.testAttribute(Qt::WA_InputMethodEnabled), true); + QCOMPARE(scene.focusItem(), item); view.setScene(0); QCOMPARE(view.testAttribute(Qt::WA_InputMethodEnabled), false); + QCOMPARE(scene.focusItem(), item); view.setScene(&scene); QCOMPARE(view.testAttribute(Qt::WA_InputMethodEnabled), true); + QCOMPARE(scene.focusItem(), item); scene.setFocusItem(item2); QCOMPARE(view.testAttribute(Qt::WA_InputMethodEnabled), false); + QCOMPARE(scene.focusItem(), item2); view.setScene(0); QCOMPARE(view.testAttribute(Qt::WA_InputMethodEnabled), false); + QCOMPARE(scene.focusItem(), item2); scene.setFocusItem(item); QCOMPARE(view.testAttribute(Qt::WA_InputMethodEnabled), false); + QCOMPARE(scene.focusItem(), item); view.setScene(&scene); QCOMPARE(view.testAttribute(Qt::WA_InputMethodEnabled), true); + QCOMPARE(scene.focusItem(), item); } class InputContextTester : public QInputContext @@ -3693,77 +3701,6 @@ void tst_QGraphicsView::inputContextReset() QCOMPARE(inputContext.resets, 0); } -class ViewClipTester : public QGraphicsView -{ -public: - ViewClipTester(QGraphicsScene *scene = 0) - : QGraphicsView(scene) - { } - QRegion clipRegion; - -protected: - void drawBackground(QPainter *painter, const QRectF &rect) - { - clipRegion = painter->clipRegion(); - } -}; - -class ItemClipTester : public QGraphicsRectItem -{ -public: - ItemClipTester() : QGraphicsRectItem(0, 0, 20, 20) - { - setBrush(Qt::blue); - } - QRegion clipRegion; - - void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) - { - clipRegion = painter->clipRegion(); - QGraphicsRectItem::paint(painter, option, widget); - } -}; - -void tst_QGraphicsView::defaultClipIntersectToView() -{ - QGraphicsScene scene; - ItemClipTester *tester = new ItemClipTester; - scene.addItem(tester); - - ViewClipTester view(&scene); - view.setAlignment(Qt::AlignTop | Qt::AlignLeft); - view.setFrameStyle(0); - view.resize(200, 200); - view.show(); - QTRY_COMPARE(QApplication::activeWindow(), (QWidget *)&view); - - QRect viewRect(0, 0, 200, 200); - QCOMPARE(view.clipRegion, QRegion(viewRect)); - QCOMPARE(tester->clipRegion, QRegion(viewRect)); - - view.viewport()->update(0, 0, 5, 5); - view.viewport()->update(10, 10, 5, 5); - qApp->processEvents(); - viewRect = QRect(0, 0, 15, 15); - QCOMPARE(view.clipRegion, QRegion(viewRect)); - QCOMPARE(tester->clipRegion, QRegion(viewRect)); - - view.scale(2, 2); - qApp->processEvents(); - - viewRect.moveTop(-viewRect.height()); - viewRect = QRect(0, 0, 100, 100); - QCOMPARE(view.clipRegion, QRegion(viewRect)); - QCOMPARE(tester->clipRegion, QRegion(viewRect)); - - view.viewport()->update(0, 0, 5, 5); - view.viewport()->update(10, 10, 5, 5); - qApp->processEvents(); - viewRect = QRect(0, 0, 8, 8); - QCOMPARE(view.clipRegion, QRegion(viewRect)); - QCOMPARE(tester->clipRegion, QRegion(viewRect)); -} - void tst_QGraphicsView::task253415_reconnectUpdateSceneOnSceneChanged() { QGraphicsView view; diff --git a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp index 6b5ad09..829e55c 100644 --- a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp +++ b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp @@ -160,6 +160,7 @@ private slots: void widgetSendsGeometryChanges(); void respectHFW(); void addChildInpolishEvent(); + void polishEvent(); // Task fixes void task236127_bspTreeIndexFails(); @@ -2768,6 +2769,32 @@ void tst_QGraphicsWidget::addChildInpolishEvent() QCOMPARE(PolishWidget::numberOfPolish, 2); } +void tst_QGraphicsWidget::polishEvent() +{ + class MyGraphicsWidget : public QGraphicsWidget + { public: + void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *) + { events << QEvent::Paint; } + void polishEvent() + { events << QEvent::Polish; } + QList<QEvent::Type> events; + }; + + QGraphicsScene scene; + + MyGraphicsWidget *widget = new MyGraphicsWidget; + scene.addItem(widget); + + QGraphicsView view(&scene); + view.show(); + QTest::qWaitForWindowShown(&view); + + // Make sure the item is painted. + QTRY_VERIFY(widget->events.contains(QEvent::Paint)); + + // Make sure the item got polish before paint. + QCOMPARE(widget->events.at(0), QEvent::Polish); +} QTEST_MAIN(tst_QGraphicsWidget) #include "tst_qgraphicswidget.moc" diff --git a/tests/auto/qgridlayout/tst_qgridlayout.cpp b/tests/auto/qgridlayout/tst_qgridlayout.cpp index 46e2a03..313dc95 100644 --- a/tests/auto/qgridlayout/tst_qgridlayout.cpp +++ b/tests/auto/qgridlayout/tst_qgridlayout.cpp @@ -268,7 +268,7 @@ void tst_QGridLayout::setMinAndMaxSize() leftChild.setMinimumSize(100, 100); leftChild.setMaximumSize(200, 200); layout.addWidget(&leftChild, 0, 0); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); QCOMPARE(widget.minimumSize(), leftChild.minimumSize()); QCOMPARE(widget.maximumSize(), leftChild.maximumSize()); @@ -277,7 +277,7 @@ void tst_QGridLayout::setMinAndMaxSize() rightChild.setMinimumSize(100, 100); rightChild.setMaximumSize(200, 200); layout.addWidget(&rightChild, 0, 2); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); QCOMPARE(widget.minimumWidth(), leftChild.minimumWidth() + rightChild.minimumWidth()); @@ -293,7 +293,7 @@ void tst_QGridLayout::setMinAndMaxSize() layout.setColumnMinimumWidth(1, colMin); QCOMPARE(layout.columnMinimumWidth(1), colMin); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); QCOMPARE(widget.minimumWidth(), leftChild.minimumWidth() + rightChild.minimumWidth() + colMin); QCOMPARE(widget.maximumWidth(), @@ -306,7 +306,7 @@ void tst_QGridLayout::setMinAndMaxSize() layout.setColumnStretch(1,1); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); QCOMPARE(widget.minimumWidth(), leftChild.minimumWidth() + rightChild.minimumWidth() + colMin); QCOMPARE(widget.maximumWidth(), QLAYOUTSIZE_MAX); @@ -318,7 +318,7 @@ void tst_QGridLayout::setMinAndMaxSize() layout.setColumnStretch(1,0); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); QCOMPARE(widget.minimumWidth(), leftChild.minimumWidth() + rightChild.minimumWidth() + colMin); QCOMPARE(widget.maximumWidth(), @@ -335,7 +335,7 @@ void tst_QGridLayout::setMinAndMaxSize() static const int spacerS = 250; QSpacerItem *spacer = new QSpacerItem(spacerS, spacerS); layout.addItem(spacer, 0, 1); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); QCOMPARE(widget.minimumWidth(), leftChild.minimumWidth() + rightChild.minimumWidth() + spacerS); @@ -348,7 +348,7 @@ void tst_QGridLayout::setMinAndMaxSize() spacer->changeSize(spacerS, spacerS, QSizePolicy::Fixed, QSizePolicy::Minimum); layout.invalidate(); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); QCOMPARE(widget.minimumWidth(), leftChild.minimumWidth() + rightChild.minimumWidth() + spacerS); QCOMPARE(widget.maximumWidth(), @@ -358,13 +358,13 @@ void tst_QGridLayout::setMinAndMaxSize() layout.removeItem(spacer); rightChild.hide(); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); QCOMPARE(widget.minimumSize(), leftChild.minimumSize()); QCOMPARE(widget.maximumSize(), leftChild.maximumSize()); rightChild.show(); layout.removeWidget(&rightChild); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); QCOMPARE(widget.minimumSize(), leftChild.minimumSize()); QCOMPARE(widget.maximumSize(), leftChild.maximumSize()); @@ -373,7 +373,7 @@ void tst_QGridLayout::setMinAndMaxSize() bottomChild.setMinimumSize(100, 100); bottomChild.setMaximumSize(200, 200); layout.addWidget(&bottomChild, 1, 0); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); QCOMPARE(widget.minimumHeight(), leftChild.minimumHeight() + bottomChild.minimumHeight()); @@ -385,13 +385,13 @@ void tst_QGridLayout::setMinAndMaxSize() qMax(leftChild.maximumWidth(), bottomChild.maximumWidth())); bottomChild.hide(); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); QCOMPARE(widget.minimumSize(), leftChild.minimumSize()); QCOMPARE(widget.maximumSize(), leftChild.maximumSize()); bottomChild.show(); layout.removeWidget(&bottomChild); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); QCOMPARE(widget.minimumSize(), leftChild.minimumSize()); QCOMPARE(widget.maximumSize(), leftChild.maximumSize()); } @@ -423,7 +423,7 @@ void tst_QGridLayout::spacingAndSpacers() SizeHinter leftChild(100,100); leftChild.setPalette(QPalette(Qt::red)); layout.addWidget(&leftChild, 0, 0); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); expectedSizeHint = leftChild.sizeHint(); QCOMPARE(widget.sizeHint(), expectedSizeHint); @@ -431,7 +431,7 @@ void tst_QGridLayout::spacingAndSpacers() SizeHinter rightChild(200,100); rightChild.setPalette(QPalette(Qt::green)); layout.addWidget(&rightChild, 0, 2); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); QCOMPARE(rightChild.sizeHint(), QSize(200,100)); expectedSizeHint += QSize(rightChild.sizeHint().width(), 0); @@ -440,11 +440,11 @@ void tst_QGridLayout::spacingAndSpacers() layout.setColumnMinimumWidth(1, 100); widget.adjustSize(); expectedSizeHint += QSize(100,0); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); QCOMPARE(widget.sizeHint(), expectedSizeHint); rightChild.hide(); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); expectedSizeHint -= QSize(rightChild.sizeHint().width(), 0); QCOMPARE(widget.sizeHint(), expectedSizeHint); @@ -459,12 +459,12 @@ void tst_QGridLayout::spacingAndSpacers() leftChild.setMaximumWidth(200); rightChild.setMaximumWidth(200); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); QCOMPARE(widget.maximumWidth(), leftChild.maximumWidth() + rightChild.maximumWidth()); #endif layout.removeWidget(&rightChild); - QApplication::processEvents(); + QApplication::sendPostedEvents(0, 0); QCOMPARE(widget.sizeHint(), expectedSizeHint); diff --git a/tests/auto/qimagereader/images/grayscale-ref.tif b/tests/auto/qimagereader/images/grayscale-ref.tif Binary files differnew file mode 100644 index 0000000..960531e --- /dev/null +++ b/tests/auto/qimagereader/images/grayscale-ref.tif diff --git a/tests/auto/qimagereader/images/grayscale.tif b/tests/auto/qimagereader/images/grayscale.tif Binary files differnew file mode 100644 index 0000000..5f4e114 --- /dev/null +++ b/tests/auto/qimagereader/images/grayscale.tif diff --git a/tests/auto/qimagereader/tst_qimagereader.cpp b/tests/auto/qimagereader/tst_qimagereader.cpp index 05b506c..15b1c1c 100644 --- a/tests/auto/qimagereader/tst_qimagereader.cpp +++ b/tests/auto/qimagereader/tst_qimagereader.cpp @@ -157,6 +157,8 @@ private slots: void tiffOrientation_data(); void tiffOrientation(); + + void tiffGrayscale(); #endif void autoDetectImageFormat(); @@ -1376,6 +1378,13 @@ void tst_QImageReader::tiffOrientation() QCOMPARE(expectedImage, orientedImage); } +void tst_QImageReader::tiffGrayscale() +{ + QImage actualImage(prefix + "grayscale.tif"); + QImage expectedImage(prefix + "grayscale-ref.tif"); + + QCOMPARE(expectedImage, actualImage.convertToFormat(expectedImage.format())); +} #endif void tst_QImageReader::dotsPerMeter_data() diff --git a/tests/auto/qimagewriter/tst_qimagewriter.cpp b/tests/auto/qimagewriter/tst_qimagewriter.cpp index ab5572d..5997f39 100644 --- a/tests/auto/qimagewriter/tst_qimagewriter.cpp +++ b/tests/auto/qimagewriter/tst_qimagewriter.cpp @@ -391,16 +391,27 @@ void tst_QImageWriter::readWriteNonDestructive_data() { QTest::addColumn<QImage::Format>("format"); QTest::addColumn<QImage::Format>("expectedFormat"); - QTest::newRow("tiff mono") << QImage::Format_Mono << QImage::Format_Mono; - QTest::newRow("tiff indexed") << QImage::Format_Indexed8 << QImage::Format_Indexed8; - QTest::newRow("tiff rgb32") << QImage::Format_ARGB32 << QImage::Format_ARGB32; + QTest::addColumn<bool>("grayscale"); + QTest::newRow("tiff mono") << QImage::Format_Mono << QImage::Format_Mono << false; + QTest::newRow("tiff indexed") << QImage::Format_Indexed8 << QImage::Format_Indexed8 << false; + QTest::newRow("tiff rgb32") << QImage::Format_ARGB32 << QImage::Format_ARGB32 << false; + QTest::newRow("tiff grayscale") << QImage::Format_Indexed8 << QImage::Format_Indexed8 << true; } void tst_QImageWriter::readWriteNonDestructive() { QFETCH(QImage::Format, format); QFETCH(QImage::Format, expectedFormat); + QFETCH(bool, grayscale); QImage image = QImage(prefix + "colorful.bmp").convertToFormat(format); + + if (grayscale) { + QVector<QRgb> colors; + for (int i = 0; i < 256; ++i) + colors << qRgb(i, i, i); + image.setColorTable(colors); + } + QVERIFY(image.save(prefix + "gen-readWriteNonDestructive.tiff")); QImage image2 = QImage(prefix + "gen-readWriteNonDestructive.tiff"); diff --git a/tests/auto/qitemselectionmodel/tst_qitemselectionmodel.cpp b/tests/auto/qitemselectionmodel/tst_qitemselectionmodel.cpp index 77c259c..269afbd 100644 --- a/tests/auto/qitemselectionmodel/tst_qitemselectionmodel.cpp +++ b/tests/auto/qitemselectionmodel/tst_qitemselectionmodel.cpp @@ -92,6 +92,7 @@ private slots: void task252069_rowIntersectsSelection(); void task232634_childrenDeselectionSignal(); void task260134_layoutChangedWithAllSelected(); + void QTBUG5671_layoutChangedWithAllSelected(); private: QAbstractItemModel *model; @@ -2025,24 +2026,24 @@ void tst_QItemSelectionModel::task220420_selectedIndexes() class QtTestTableModel: public QAbstractTableModel { Q_OBJECT - + public: QtTestTableModel(int rows = 0, int columns = 0, QObject *parent = 0) : QAbstractTableModel(parent), row_count(rows), column_count(columns) {} - + int rowCount(const QModelIndex& = QModelIndex()) const { return row_count; } int columnCount(const QModelIndex& = QModelIndex()) const { return column_count; } bool isEditable(const QModelIndex &) const { return true; } - + QVariant data(const QModelIndex &idx, int role) const { if (role == Qt::DisplayRole || role == Qt::EditRole) return QString("[%1,%2]").arg(idx.row()).arg(idx.column()); return QVariant(); } - + int row_count; int column_count; friend class tst_QItemSelectionModel; @@ -2055,7 +2056,7 @@ void tst_QItemSelectionModel::task240734_layoutChanged() QItemSelectionModel selectionModel(&model); selectionModel.select(model.index(0,0), QItemSelectionModel::Select); QCOMPARE(selectionModel.selectedIndexes().count() , 1); - + emit model.layoutAboutToBeChanged(); model.row_count = 5; emit model.layoutChanged(); @@ -2107,7 +2108,7 @@ void tst_QItemSelectionModel::merge_data() << QItemSelection(model->index(2, 2) , model->index(3, 4)) << int(QItemSelectionModel::Deselect) << QItemSelection(model->index(2, 1) , model->index(3, 1)); - + QItemSelection r1(model->index(2, 1) , model->index(3, 1)); r1.select(model->index(2, 4) , model->index(3, 4)); QTest::newRow("Toggle") @@ -2274,5 +2275,57 @@ void tst_QItemSelectionModel::task260134_layoutChangedWithAllSelected() } +void tst_QItemSelectionModel::QTBUG5671_layoutChangedWithAllSelected() +{ + struct MyFilterModel : public QSortFilterProxyModel + { // Override sort filter proxy to remove even numbered rows. + bool filtering; + virtual bool filterAcceptsRow( int source_row, const QModelIndex& source_parent ) const + { + return !filtering || !( source_row & 1 ); + } + }; + + //same as task260134_layoutChangedWithAllSelected but with a sightly bigger model + + enum { cNumRows=30, cNumCols=20 }; + + QStandardItemModel model(cNumRows, cNumCols); + MyFilterModel proxy; + proxy.filtering = true; + proxy.setSourceModel(&model); + QItemSelectionModel selection(&proxy); + + // Populate the tree view. + for (unsigned int i = 0; i < cNumCols; i++) + model.setHeaderData( i, Qt::Horizontal, QString::fromLatin1("Column %1").arg(i)); + + for (unsigned int r = 0; r < cNumRows; r++) { + for (unsigned int c = 0; c < cNumCols; c++) { + model.setData(model.index(r, c, QModelIndex()), + QString::fromLatin1("r:%1/c:%2").arg(r, c)); + } + } + + + QCOMPARE(model.rowCount(), int(cNumRows)); + QCOMPARE(proxy.rowCount(), int(cNumRows/2)); + + selection.select( QItemSelection(proxy.index(0,0), proxy.index(proxy.rowCount() - 1, proxy.columnCount() - 1)), QItemSelectionModel::Select); + + QList<QPersistentModelIndex> indexList; + foreach(const QModelIndex &id, selection.selectedIndexes()) + indexList << id; + + proxy.filtering = false; + proxy.invalidate(); + QCOMPARE(proxy.rowCount(), int(cNumRows)); + + //let's check the selection hasn't changed + QCOMPARE(selection.selectedIndexes().count(), indexList.count()); + foreach(QPersistentModelIndex index, indexList) + QVERIFY(selection.isSelected(index)); +} + QTEST_MAIN(tst_QItemSelectionModel) #include "tst_qitemselectionmodel.moc" diff --git a/tests/auto/qkeysequence/tst_qkeysequence.cpp b/tests/auto/qkeysequence/tst_qkeysequence.cpp index 1c257bf..bc9ae6c 100644 --- a/tests/auto/qkeysequence/tst_qkeysequence.cpp +++ b/tests/auto/qkeysequence/tst_qkeysequence.cpp @@ -119,6 +119,7 @@ private slots: void symetricConstructors_data(); void symetricConstructors(); void checkMultipleNames(); + void mnemonic_data(); void mnemonic(); void toString_data(); void toString(); @@ -133,6 +134,7 @@ private slots: void translated_data(); void translated(); + void initTestCase(); private: QTranslator *ourTranslator; @@ -299,7 +301,7 @@ void tst_QKeySequence::standardKeys_data() QTest::newRow("findNext") << (int)QKeySequence::FindNext<< QString("F3"); QTest::newRow("findPrevious") << (int)QKeySequence::FindPrevious << QString("SHIFT+F3"); QTest::newRow("close") << (int)QKeySequence::Close<< QString("CTRL+F4"); - QTest::newRow("replace") << (int)QKeySequence::Replace<< QString("CTRL+H"); + QTest::newRow("replace") << (int)QKeySequence::Replace<< QString("CTRL+H"); #endif QTest::newRow("bold") << (int)QKeySequence::Bold << QString("CTRL+B"); QTest::newRow("italic") << (int)QKeySequence::Italic << QString("CTRL+I"); @@ -357,17 +359,50 @@ void tst_QKeySequence::keyBindings() } + +void tst_QKeySequence::mnemonic_data() +{ + QTest::addColumn<QString>("string"); + QTest::addColumn<QString>("key"); + QTest::addColumn<bool>("warning"); + + QTest::newRow("1") << QString::fromLatin1("&bonjour") << QString::fromLatin1("ALT+B") << false; + QTest::newRow("2") << QString::fromLatin1("&&bonjour") << QString() << false; + QTest::newRow("3") << QString::fromLatin1("&&bon&jour") << QString::fromLatin1("ALT+J") << false; + QTest::newRow("4") << QString::fromLatin1("&&bon&jo&ur") << QString::fromLatin1("ALT+J") << true; + QTest::newRow("5") << QString::fromLatin1("b&on&&jour") << QString::fromLatin1("ALT+O") << false; + QTest::newRow("6") << QString::fromLatin1("bonjour") << QString() << false; + QTest::newRow("7") << QString::fromLatin1("&&&bonjour") << QString::fromLatin1("ALT+B") << false; + QTest::newRow("8") << QString::fromLatin1("bonjour&&&") << QString() << false; + QTest::newRow("9") << QString::fromLatin1("bo&&nj&o&&u&r") << QString::fromLatin1("ALT+O") << true; + QTest::newRow("10") << QString::fromLatin1("BON&JOUR") << QString::fromLatin1("ALT+J") << false; + QTest::newRow("11") << QString::fromUtf8("bonjour") << QString() << false; +} + void tst_QKeySequence::mnemonic() { #ifdef Q_WS_MAC QSKIP("mnemonics are not used on Mac OS X", SkipAll); #endif - QKeySequence k = QKeySequence::mnemonic("&Foo"); - QVERIFY(k == QKeySequence("ALT+F")); - k = QKeySequence::mnemonic("&& &x"); - QVERIFY(k == QKeySequence("ALT+X")); + QFETCH(QString, string); + QFETCH(QString, key); + QFETCH(bool, warning); + +#ifndef QT_NO_DEBUG + if (warning) { + QString str = QString::fromLatin1("QKeySequence::mnemonic: \"%1\" contains multiple occurences of '&'").arg(string); + QTest::ignoreMessage(QtWarningMsg, qPrintable(str)); + // qWarning(qPrintable(str)); + } +#endif + QKeySequence seq = QKeySequence::mnemonic(string); + QKeySequence res = QKeySequence(key); + + QCOMPARE(seq, res); } + + void tst_QKeySequence::toString_data() { QTest::addColumn<QString>("strSequence"); diff --git a/tests/auto/qlabel/tst_qlabel.cpp b/tests/auto/qlabel/tst_qlabel.cpp index 9d957a5..6b7e106 100644 --- a/tests/auto/qlabel/tst_qlabel.cpp +++ b/tests/auto/qlabel/tst_qlabel.cpp @@ -51,6 +51,7 @@ #include <qmovie.h> #include <qpicture.h> #include <qmessagebox.h> +#include <private/qlabel_p.h> //TESTED_CLASS= //TESTED_FILES= @@ -116,6 +117,9 @@ private slots: void unicodeText_data(); void unicodeText(); + void mnemonic_data(); + void mnemonic(); + private: QLabel *testWidget; QPointer<Widget> test_box; @@ -224,6 +228,7 @@ void tst_QLabel::setBuddy() QVERIFY( !test_edit->hasFocus() ); QTest::keyClick( test_box, 't', Qt::AltModifier ); QVERIFY( test_edit->hasFocus() ); + delete test_box; } void tst_QLabel::text() @@ -245,6 +250,7 @@ void tst_QLabel::setText_data() QTest::newRow( QString(prefix + "data1").toLatin1() ) << QString("This is the first line\nThis is the second line") << QString("Courier"); QTest::newRow( QString(prefix + "data2").toLatin1() ) << QString("This is the first line\nThis is the second line\nThis is the third line") << QString("Helvetica"); QTest::newRow( QString(prefix + "data3").toLatin1() ) << QString("This is <b>bold</b> richtext") << QString("Courier"); + QTest::newRow( QString(prefix + "data4").toLatin1() ) << QString("I Have a &shortcut") << QString("Helvetica"); } void tst_QLabel::setText() @@ -509,5 +515,50 @@ void tst_QLabel::unicodeText() testWidget->show(); } +void tst_QLabel::mnemonic_data() +{ + QTest::addColumn<QString>("text"); + QTest::addColumn<QString>("expectedDocText"); + QTest::addColumn<QString>("expectedShortcutCursor"); + + QTest::newRow("1") << QString("Normal") << QString("Normal") << QString(); + QTest::newRow("2") << QString("&Simple") << QString("Simple") << QString("S"); + QTest::newRow("3") << QString("Also &simple") << QString("Also simple") << QString("s"); + QTest::newRow("4") << QString("&&With &Double &&") << QString("&With Double &") << QString("D"); + QTest::newRow("5") << QString("Hep&&Hop") << QString("Hep&Hop") << QString(""); + QTest::newRow("6") << QString("Hep&&&Hop") << QString("Hep&Hop") << QString("H"); +} + + +void tst_QLabel::mnemonic() +{ + // this test that the mnemonics appears correctly when the label has a text control. + + QFETCH(QString, text); + QFETCH(QString, expectedDocText); + QFETCH(QString, expectedShortcutCursor); + + QWidget w; + QHBoxLayout *hbox = new QHBoxLayout; + QLabel *lab = new QLabel(text); + //lab->setText("plop &plop"); + QLineEdit *lineedit = new QLineEdit; + lab->setBuddy(lineedit); + lab->setTextInteractionFlags(Qt::TextSelectableByMouse); + + hbox->addWidget(lab); + hbox->addWidget(lineedit); + hbox->addWidget(new QLineEdit); + w.setLayout(hbox); + w.show(); + QTest::qWaitForWindowShown(&w); + + QLabelPrivate *d = static_cast<QLabelPrivate *>(QObjectPrivate::get(lab)); + QVERIFY(d->control); + QCOMPARE(d->control->document()->toPlainText(), expectedDocText); + QCOMPARE(d->shortcutCursor.selectedText(), expectedShortcutCursor); +} + + QTEST_MAIN(tst_QLabel) #include "tst_qlabel.moc" diff --git a/tests/auto/qlibrary/lib2/lib2.pro b/tests/auto/qlibrary/lib2/lib2.pro index 436d7ba..fc00af8 100644 --- a/tests/auto/qlibrary/lib2/lib2.pro +++ b/tests/auto/qlibrary/lib2/lib2.pro @@ -37,9 +37,9 @@ symbian-abld: { symbian-sbsv2: { TARGET.CAPABILITY=ALL -TCB QMAKE_POST_LINK = \ - $(GNUCP) $${EPOCROOT}epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/mylib.dll $${EPOCROOT}epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/mylib.dl2 && \ - $(GNUCP) $${EPOCROOT}epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/mylib.dll $${EPOCROOT}epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/system.trolltech.test.mylib.dll && \ - if test $(PLATFORM) != WINSCW;then $(GNUCP) $${EPOCROOT}epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/mylib.dll $${PWD}/../tst/mylib.dl2; fi + $(GNUCP) $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/mylib.dll $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/mylib.dl2 && \ + $(GNUCP) $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/mylib.dll $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/system.trolltech.test.mylib.dll && \ + if test $(PLATFORM) != WINSCW;then $(GNUCP) $(EPOCROOT)epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/mylib.dll $${PWD}/../tst/mylib.dl2; fi } #no special install rule for the library used by test diff --git a/tests/auto/qmenu/tst_qmenu.cpp b/tests/auto/qmenu/tst_qmenu.cpp index f12fa92..f0f69a4 100644 --- a/tests/auto/qmenu/tst_qmenu.cpp +++ b/tests/auto/qmenu/tst_qmenu.cpp @@ -101,11 +101,13 @@ private slots: void menuSizeHint(); void task258920_mouseBorder(); void setFixedWidth(); + void deleteActionInTriggered(); protected slots: void onActivated(QAction*); void onHighlighted(QAction*); void onStatusMessageChanged(const QString &); void onStatusTipTimer(); + void deleteAction(QAction *a) { delete a; } private: void createActions(); QMenu *menus[2], *lastMenu; @@ -858,6 +860,17 @@ void tst_QMenu::setFixedWidth() QCOMPARE(menu.sizeHint().width(), menu.minimumWidth()); } +void tst_QMenu::deleteActionInTriggered() +{ + // should not crash + QMenu m; + QObject::connect(&m, SIGNAL(triggered(QAction*)), this, SLOT(deleteAction(QAction*))); + QWeakPointer<QAction> a = m.addAction("action"); + a.data()->trigger(); + QVERIFY(!a); +} + + QTEST_MAIN(tst_QMenu) diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp index 0b61dcd..bd83c47 100644 --- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp @@ -225,6 +225,9 @@ private Q_SLOTS: void ioPostToHttpUploadProgress(); void ioPostToHttpEmtpyUploadProgress(); + void lastModifiedHeaderForFile(); + void lastModifiedHeaderForHttp(); + void rateControl_data(); void rateControl(); @@ -2619,12 +2622,7 @@ void tst_QNetworkReply::ioPostToHttpFromSocket() QSignalSpy authenticationRequiredSpy(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*))); QSignalSpy proxyAuthenticationRequiredSpy(&manager, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*))); -#ifdef Q_OS_SYMBIAN QTestEventLoop::instance().enterLoop(6); -#else - QTestEventLoop::instance().enterLoop(3); -#endif - disconnect(&manager, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)), this, SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*))); disconnect(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)), @@ -2969,6 +2967,41 @@ void tst_QNetworkReply::ioPostToHttpEmtpyUploadProgress() server.close(); } +void tst_QNetworkReply::lastModifiedHeaderForFile() +{ + QFileInfo fileInfo(SRCDIR "./bigfile"); + QUrl url = QUrl::fromLocalFile(fileInfo.filePath()); + + QNetworkRequest request(url); + QNetworkReplyPtr reply = manager.head(request); + QSignalSpy spy(reply, SIGNAL(uploadProgress(qint64,qint64))); + connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); + QTestEventLoop::instance().enterLoop(10); + QVERIFY(!QTestEventLoop::instance().timeout()); + + QDateTime header = reply->header(QNetworkRequest::LastModifiedHeader).toDateTime(); + QCOMPARE(header, fileInfo.lastModified()); +} + +void tst_QNetworkReply::lastModifiedHeaderForHttp() +{ + // Tue, 22 May 2007 12:04:57 GMT according to webserver + QUrl url = "http://" + QtNetworkSettings::serverName() + "/gif/fluke.gif"; + + QNetworkRequest request(url); + QNetworkReplyPtr reply = manager.head(request); + QSignalSpy spy(reply, SIGNAL(uploadProgress(qint64,qint64))); + connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); + QTestEventLoop::instance().enterLoop(10); + QVERIFY(!QTestEventLoop::instance().timeout()); + + QDateTime header = reply->header(QNetworkRequest::LastModifiedHeader).toDateTime(); + QDateTime realDate = QDateTime::fromString("2007-05-22T12:04:57", Qt::ISODate); + realDate.setTimeSpec(Qt::UTC); + + QCOMPARE(header, realDate); +} + void tst_QNetworkReply::rateControl_data() { QTest::addColumn<int>("rate"); diff --git a/tests/auto/qpixmapfilter/tst_qpixmapfilter.cpp b/tests/auto/qpixmapfilter/tst_qpixmapfilter.cpp index a80c787..751c7dc 100644 --- a/tests/auto/qpixmapfilter/tst_qpixmapfilter.cpp +++ b/tests/auto/qpixmapfilter/tst_qpixmapfilter.cpp @@ -407,7 +407,7 @@ void tst_QPixmapFilter::dropShadowBoundingRectFor() filter.setBlurRadius(2); filter.setOffset(QPointF(0,0)); - int delta = 2 * 2; + qreal delta = 2; QCOMPARE(filter.boundingRectFor(rect1), rect1.adjusted(-delta, -delta, delta, delta)); QCOMPARE(filter.boundingRectFor(rect2), rect2.adjusted(-delta, -delta, delta, delta)); QCOMPARE(filter.boundingRectFor(rect3), rect3.adjusted(-delta, -delta, delta, delta)); diff --git a/tests/auto/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/qtcpsocket/tst_qtcpsocket.cpp index 5577903..4ed9fca 100644 --- a/tests/auto/qtcpsocket/tst_qtcpsocket.cpp +++ b/tests/auto/qtcpsocket/tst_qtcpsocket.cpp @@ -192,6 +192,8 @@ private slots: void connectToMultiIP(); void moveToThread0(); void increaseReadBufferSize(); + void taskQtBug5799ConnectionErrorWaitForConnected(); + void taskQtBug5799ConnectionErrorEventLoop(); #ifdef TEST_QNETWORK_PROXY void invalidProxy_data(); void invalidProxy(); @@ -2214,6 +2216,47 @@ void tst_QTcpSocket::increaseReadBufferSize() delete active; } +void tst_QTcpSocket::taskQtBug5799ConnectionErrorWaitForConnected() +{ + QFETCH_GLOBAL(bool, setProxy); + if (setProxy) + return; + + // check that we get a proper error connecting to port 12346 + // use waitForConnected, e.g. this should use a synchronous select() on the OS level + + QTcpSocket socket; + socket.connectToHost(QtNetworkSettings::serverName(), 12346); + QTime timer; + timer.start(); + socket.waitForConnected(10000); + QVERIFY2(timer.elapsed() < 9900, "Connection to closed port timed out instead of refusing, something is wrong"); + QVERIFY2(socket.state() == QAbstractSocket::UnconnectedState, "Socket connected unexpectedly!"); + QVERIFY2(socket.error() == QAbstractSocket::ConnectionRefusedError, + QString("Could not reach server: %1").arg(socket.errorString()).toLocal8Bit()); +} + +void tst_QTcpSocket::taskQtBug5799ConnectionErrorEventLoop() +{ + QFETCH_GLOBAL(bool, setProxy); + if (setProxy) + return; + + // check that we get a proper error connecting to port 12346 + // This testcase uses an event loop + QTcpSocket socket; + connect(&socket, SIGNAL(error(QAbstractSocket::SocketError)), &QTestEventLoop::instance(), SLOT(exitLoop())); + socket.connectToHost(QtNetworkSettings::serverName(), 12346); + + QTestEventLoop::instance().enterLoop(10); + QVERIFY2(!QTestEventLoop::instance().timeout(), "Connection to closed port timed out instead of refusing, something is wrong"); + QVERIFY2(socket.state() == QAbstractSocket::UnconnectedState, "Socket connected unexpectedly!"); + QVERIFY2(socket.error() == QAbstractSocket::ConnectionRefusedError, + QString("Could not reach server: %1").arg(socket.errorString()).toLocal8Bit()); +} + + + #ifdef TEST_QNETWORK_PROXY void tst_QTcpSocket::invalidProxy_data() { diff --git a/tests/auto/qtextdocument/tst_qtextdocument.cpp b/tests/auto/qtextdocument/tst_qtextdocument.cpp index 1d54409..11e32b0 100644 --- a/tests/auto/qtextdocument/tst_qtextdocument.cpp +++ b/tests/auto/qtextdocument/tst_qtextdocument.cpp @@ -2615,6 +2615,17 @@ void tst_QTextDocument::testUndoCommandAdded() cf.setFontItalic(true); cursor.mergeCharFormat(cf); QCOMPARE(spy.count(), 1); + + spy.clear(); + doc->undo(); + QCOMPARE(spy.count(), 0); + doc->undo(); + QCOMPARE(spy.count(), 0); + spy.clear(); + doc->redo(); + QCOMPARE(spy.count(), 0); + doc->redo(); + QCOMPARE(spy.count(), 0); } void tst_QTextDocument::testUndoBlocks() diff --git a/tests/auto/qtreeview/tst_qtreeview.cpp b/tests/auto/qtreeview/tst_qtreeview.cpp index 58f059b..4fc6dd3 100644 --- a/tests/auto/qtreeview/tst_qtreeview.cpp +++ b/tests/auto/qtreeview/tst_qtreeview.cpp @@ -3653,7 +3653,9 @@ void tst_QTreeView::doubleClickedWithSpans() view.setModel(&model); view.setFirstColumnSpanned(0, QModelIndex(), true); view.show(); + QApplication::setActiveWindow(&view); QTest::qWaitForWindowShown(&view); + QTRY_VERIFY(view.isActiveWindow()); QPoint p(10, 10); QCOMPARE(view.indexAt(p), model.index(0, 0)); diff --git a/tests/auto/qtreewidget/tst_qtreewidget.cpp b/tests/auto/qtreewidget/tst_qtreewidget.cpp index 6defd7b..621072c 100644 --- a/tests/auto/qtreewidget/tst_qtreewidget.cpp +++ b/tests/auto/qtreewidget/tst_qtreewidget.cpp @@ -167,6 +167,7 @@ private slots: void setCurrentItemExpandsParent(); void task239150_editorWidth(); void setTextUpdate(); + void taskQTBUG2844_visualItemRect(); public slots: void itemSelectionChanged(); @@ -601,9 +602,9 @@ void tst_QTreeWidget::setItemHidden() testWidget->scrollToItem(child); QVERIFY(testWidget->visualItemRect(parent).isValid() - && testWidget->viewport()->rect().contains(testWidget->visualItemRect(parent))); + && testWidget->viewport()->rect().intersects(testWidget->visualItemRect(parent))); QVERIFY(testWidget->visualItemRect(child).isValid() - && testWidget->viewport()->rect().contains(testWidget->visualItemRect(child))); + && testWidget->viewport()->rect().intersects(testWidget->visualItemRect(child))); QVERIFY(!testWidget->isItemHidden(parent)); QVERIFY(!testWidget->isItemHidden(child)); @@ -611,9 +612,9 @@ void tst_QTreeWidget::setItemHidden() testWidget->setItemHidden(parent, true); QVERIFY(!(testWidget->visualItemRect(parent).isValid() - && testWidget->viewport()->rect().contains(testWidget->visualItemRect(parent)))); + && testWidget->viewport()->rect().intersects(testWidget->visualItemRect(parent)))); QVERIFY(!(testWidget->visualItemRect(child).isValid() - && testWidget->viewport()->rect().contains(testWidget->visualItemRect(child)))); + && testWidget->viewport()->rect().intersects(testWidget->visualItemRect(child)))); QVERIFY(testWidget->isItemHidden(parent)); QVERIFY(!testWidget->isItemHidden(child)); @@ -3271,6 +3272,25 @@ void tst_QTreeWidget::setTextUpdate() QTRY_VERIFY(delegate.numPaints > 0); } +void tst_QTreeWidget::taskQTBUG2844_visualItemRect() +{ + CustomTreeWidget tree; + tree.resize(150, 100); + tree.setColumnCount(3); + QTreeWidgetItem item(&tree); + + QRect itemRect = tree.visualItemRect(&item); + + QRect rectCol0 = tree.visualRect(tree.indexFromItem(&item, 0)); + QRect rectCol1 = tree.visualRect(tree.indexFromItem(&item, 1)); + QRect rectCol2 = tree.visualRect(tree.indexFromItem(&item, 2)); + + QCOMPARE(tree.visualItemRect(&item), rectCol0 | rectCol2); + tree.setColumnHidden(2, true); + QCOMPARE(tree.visualItemRect(&item), rectCol0 | rectCol1); +} + + QTEST_MAIN(tst_QTreeWidget) diff --git a/tests/auto/qurl/tst_qurl.cpp b/tests/auto/qurl/tst_qurl.cpp index c8fe4e5..03e77aa 100644 --- a/tests/auto/qurl/tst_qurl.cpp +++ b/tests/auto/qurl/tst_qurl.cpp @@ -3713,7 +3713,7 @@ void tst_QUrl::fromUserInput_data() QTest::newRow("add scheme-0") << "example.org" << QUrl("http://example.org"); QTest::newRow("add scheme-1") << "www.example.org" << QUrl("http://www.example.org"); QTest::newRow("add scheme-2") << "ftp.example.org" << QUrl("ftp://ftp.example.org"); - QTest::newRow("add scheme-3") << "webkit" << QUrl("webkit"); + QTest::newRow("add scheme-3") << "hostname" << QUrl("http://hostname"); // QUrl's tolerant parser should already handle this QTest::newRow("not-encoded-0") << "http://example.org/test page.html" << QUrl::fromEncoded("http://example.org/test%20page.html"); @@ -3723,6 +3723,9 @@ void tst_QUrl::fromUserInput_data() portUrl.setPort(80); QTest::newRow("port-0") << "example.org:80" << portUrl; QTest::newRow("port-1") << "http://example.org:80" << portUrl; + portUrl.setPath("path"); + QTest::newRow("port-1") << "example.org:80/path" << portUrl; + QTest::newRow("port-1") << "http://example.org:80/path" << portUrl; // mailto doesn't have a ://, but is valid QUrl mailto("ben@example.net"); @@ -3730,10 +3733,11 @@ void tst_QUrl::fromUserInput_data() QTest::newRow("mailto") << "mailto:ben@example.net" << mailto; // misc - QTest::newRow("localhost-0") << "localhost" << QUrl("http://localhost"); QTest::newRow("localhost-1") << "localhost:80" << QUrl("http://localhost:80"); QTest::newRow("spaces-0") << " http://example.org/test page.html " << QUrl("http://example.org/test%20page.html"); QTest::newRow("trash-0") << "example.org/test?someData=42%&someOtherData=abcde#anchor" << QUrl::fromEncoded("http://example.org/test?someData=42%25&someOtherData=abcde#anchor"); + QTest::newRow("other-scheme-0") << "spotify:track:0hO542doVbfGDAGQULMORT" << QUrl("spotify:track:0hO542doVbfGDAGQULMORT"); + QTest::newRow("other-scheme-1") << "weirdscheme:80:otherstuff" << QUrl("weirdscheme:80:otherstuff"); // FYI: The scheme in the resulting url user QUrl authUrl("user:pass@domain.com"); diff --git a/tests/auto/qvideosurfaceformat/tst_qvideosurfaceformat.cpp b/tests/auto/qvideosurfaceformat/tst_qvideosurfaceformat.cpp index a47cb48..2b78d20 100644 --- a/tests/auto/qvideosurfaceformat/tst_qvideosurfaceformat.cpp +++ b/tests/auto/qvideosurfaceformat/tst_qvideosurfaceformat.cpp @@ -292,13 +292,13 @@ void tst_QVideoSurfaceFormat::frameRate_data() QTest::addColumn<qreal>("frameRate"); QTest::newRow("null") - << 0.0; + << qreal(0.0); QTest::newRow("1/1") - << 1.0; + << qreal(1.0); QTest::newRow("24/1") - << 24.0; + << qreal(24.0); QTest::newRow("15/2") - << 7.5; + << qreal(7.5); } void tst_QVideoSurfaceFormat::frameRate() @@ -583,7 +583,7 @@ void tst_QVideoSurfaceFormat::compare() QCOMPARE(format1 == format2, false); QCOMPARE(format1 != format2, true); - format2.setFrameRate(7.50001); + format2.setFrameRate(qreal(7.50001)); // Equal. QCOMPARE(format1 == format2, true); diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp index e027dd1..9692c6e 100644 --- a/tests/auto/qwidget/tst_qwidget.cpp +++ b/tests/auto/qwidget/tst_qwidget.cpp @@ -388,6 +388,8 @@ private slots: void cbaVisibility(); #endif + void focusProxyAndInputMethods(); + private: bool ensureScreenSize(int width, int height); QWidget *testWidget; @@ -9619,5 +9621,62 @@ void tst_QWidget::cbaVisibility() } #endif +class InputContextTester : public QInputContext +{ + Q_OBJECT +public: + QString identifierName() { return QString(); } + bool isComposing() const { return false; } + QString language() { return QString(); } + void reset() { ++resets; } + int resets; +}; + +void tst_QWidget::focusProxyAndInputMethods() +{ + InputContextTester *inputContext = new InputContextTester; + QWidget *toplevel = new QWidget(0, Qt::X11BypassWindowManagerHint); + toplevel->setAttribute(Qt::WA_InputMethodEnabled, true); + toplevel->setInputContext(inputContext); // ownership is transferred + + QWidget *child = new QWidget(toplevel); + child->setFocusProxy(toplevel); + child->setAttribute(Qt::WA_InputMethodEnabled, true); + + toplevel->setFocusPolicy(Qt::WheelFocus); + child->setFocusPolicy(Qt::WheelFocus); + + QVERIFY(!child->hasFocus()); + QVERIFY(!toplevel->hasFocus()); + + toplevel->show(); + QTest::qWaitForWindowShown(toplevel); + QApplication::setActiveWindow(toplevel); + QVERIFY(toplevel->hasFocus()); + QVERIFY(child->hasFocus()); + + // verify that toggling input methods on the child widget + // correctly propagate to the focus proxy's input method + // and that the input method gets the focus proxy passed + // as the focus widget instead of the child widget. + // otherwise input method queries go to the wrong widget + + QCOMPARE(inputContext->focusWidget(), toplevel); + + child->setAttribute(Qt::WA_InputMethodEnabled, false); + QVERIFY(!inputContext->focusWidget()); + + child->setAttribute(Qt::WA_InputMethodEnabled, true); + QCOMPARE(inputContext->focusWidget(), toplevel); + + child->setEnabled(false); + QVERIFY(!inputContext->focusWidget()); + + child->setEnabled(true); + QCOMPARE(inputContext->focusWidget(), toplevel); + + delete toplevel; +} + QTEST_MAIN(tst_QWidget) #include "tst_qwidget.moc" diff --git a/tests/auto/qworkspace/tst_qworkspace.cpp b/tests/auto/qworkspace/tst_qworkspace.cpp index c1fe3e0..35f8a4d 100644 --- a/tests/auto/qworkspace/tst_qworkspace.cpp +++ b/tests/auto/qworkspace/tst_qworkspace.cpp @@ -426,6 +426,9 @@ void tst_QWorkspace::showWindows() void tst_QWorkspace::changeWindowTitle() { +#ifdef Q_OS_WINCE + QSKIP( "Test fails on Windows CE due to QWorkspace state handling", SkipAll); +#endif const QString mwc( "MainWindow's Caption" ); const QString mwc2( "MainWindow's New Caption" ); const QString wc( "Widget's Caption" ); diff --git a/tests/auto/uic/baseline/mainwindowbase.ui.h b/tests/auto/uic/baseline/mainwindowbase.ui.h index 46270a7..8472dbb 100644 --- a/tests/auto/uic/baseline/mainwindowbase.ui.h +++ b/tests/auto/uic/baseline/mainwindowbase.ui.h @@ -221,7 +221,6 @@ public: hboxLayout->setSpacing(4); hboxLayout->setContentsMargins(8, 8, 8, 8); hboxLayout->setObjectName(QString::fromUtf8("hboxLayout")); - hboxLayout->setContentsMargins(0, 0, 0, 0); helpview = new QTextEdit(widget); helpview->setObjectName(QString::fromUtf8("helpview")); helpview->setMinimumSize(QSize(200, 0)); diff --git a/tests/auto/xmlpatterns/stderrBaselines/Anunboundexternalvariable.txt b/tests/auto/xmlpatterns/stderrBaselines/Anunboundexternalvariable.txt index a7945f0..b620e05 100644 --- a/tests/auto/xmlpatterns/stderrBaselines/Anunboundexternalvariable.txt +++ b/tests/auto/xmlpatterns/stderrBaselines/Anunboundexternalvariable.txt @@ -1 +1 @@ -Error XPST0008 in file:///home/fenglich/dev/qt-xslt/tests/auto/xmlpatterns/queries/externalVariable.xq, at line 1, column 69: No variable by name externalVariable exists +Error XPST0008 in file:///home/fenglich/dev/qt-xslt/tests/auto/xmlpatterns/queries/externalVariable.xq, at line 1, column 69: No variable with name externalVariable exists diff --git a/tests/auto/xmlpatterns/tst_xmlpatterns.cpp b/tests/auto/xmlpatterns/tst_xmlpatterns.cpp index 22f6693..ff7c8c0 100644 --- a/tests/auto/xmlpatterns/tst_xmlpatterns.cpp +++ b/tests/auto/xmlpatterns/tst_xmlpatterns.cpp @@ -160,7 +160,9 @@ void tst_XmlPatterns::xquerySupport() QCOMPARE(process.exitCode(), expectedExitCode); const QByteArray rawProducedStderr((process.readAllStandardError())); - const QString fixedStderr(QString::fromLocal8Bit(rawProducedStderr).remove(m_filenameInStderr)); + QString fixedStderr(QString::fromLocal8Bit(rawProducedStderr).remove(m_filenameInStderr)); + // convert Windows line endings to Unix ones + fixedStderr.replace("\r\n", "\n"); const QString errorFileName(inputFile(QLatin1String(SRCDIR "stderrBaselines/") + QString::fromUtf8(QTest::currentDataTag()).remove(m_normalizeTestName) + diff --git a/tools/assistant/lib/qhelp_global.cpp b/tools/assistant/lib/qhelp_global.cpp index 980de27..749d2c9 100644 --- a/tools/assistant/lib/qhelp_global.cpp +++ b/tools/assistant/lib/qhelp_global.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt Assistant. +** This file is part of the Qt Assistant of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/tools/assistant/lib/qhelpenginecore.cpp b/tools/assistant/lib/qhelpenginecore.cpp index 8c6c2fe..140e99a 100644 --- a/tools/assistant/lib/qhelpenginecore.cpp +++ b/tools/assistant/lib/qhelpenginecore.cpp @@ -177,12 +177,11 @@ void QHelpEngineCorePrivate::errorReceived(const QString &msg) instead. When creating a custom help viewer the viewer can be -configured by writing a custom collection file which could contain various -keywords to be used to configure the help engine. These keywords and values -and their meaning can be found in the help information for -\l{assistant-custom-help-viewer.html#creating-a-custom-help-collection-file -}{creating a custom help collection file} for -Assistant. + configured by writing a custom collection file which could contain various + keywords to be used to configure the help engine. These keywords and values + and their meaning can be found in the help information for + \l{assistant-custom-help-viewer.html#creating-a-custom-help-collection-file} + {creating a custom help collection file} for Assistant. */ /*! diff --git a/tools/assistant/tools/assistant/main.cpp b/tools/assistant/tools/assistant/main.cpp index 12bc5b1..9568df0 100644 --- a/tools/assistant/tools/assistant/main.cpp +++ b/tools/assistant/tools/assistant/main.cpp @@ -189,6 +189,7 @@ QString indexFilesFolder(const QString &collectionFile) int main(int argc, char *argv[]) { +#ifndef Q_OS_WIN // First do a quick search for arguments that imply command-line mode. const char * cmdModeArgs[] = { "-help", "-register", "-unregister", "-remove-search-index" @@ -202,8 +203,10 @@ int main(int argc, char *argv[]) } } } - QApplication a(argc, argv, useGui); +#else + QApplication a(argc, argv); +#endif a.addLibraryPath(a.applicationDirPath() + QLatin1String("/plugins")); CmdLineParser cmd; diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 735e030..cd3feec 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -2595,7 +2595,7 @@ void Configure::generateOutputVars() if (!opensslLibs.isEmpty()) qmakeVars += opensslLibs; else if (dictionary[ "OPENSSL" ] == "linked") { - if(dictionary[ "XQMAKESPEC" ].startsWith("symbian") ) + if(dictionary.contains("XQMAKESPEC") && dictionary[ "XQMAKESPEC" ].startsWith("symbian") ) qmakeVars += QString("OPENSSL_LIBS = -llibssl -llibcrypto"); else qmakeVars += QString("OPENSSL_LIBS = -lssleay32 -llibeay32"); @@ -3402,7 +3402,8 @@ void Configure::buildHostTools() QString pwd = QDir::currentPath(); QStringList hostToolsDirs; hostToolsDirs - << "src/tools"; + << "src/tools" + << "tools/linguist/lrelease"; if(dictionary["XQMAKESPEC"].startsWith("wince")) hostToolsDirs << "tools/checksdk"; diff --git a/tools/designer/src/lib/uilib/abstractformbuilder.cpp b/tools/designer/src/lib/uilib/abstractformbuilder.cpp index 24d2c01..eb3dc1c 100644 --- a/tools/designer/src/lib/uilib/abstractformbuilder.cpp +++ b/tools/designer/src/lib/uilib/abstractformbuilder.cpp @@ -285,23 +285,8 @@ void QAbstractFormBuilder::initialize(const DomUI *ui) if (!customWidgets.empty()) { QFormBuilderExtra *formBuilderPrivate = QFormBuilderExtra::instance(this); const DomCustomWidgetList::const_iterator cend = customWidgets.constEnd(); - for (DomCustomWidgetList::const_iterator it = customWidgets.constBegin(); it != cend; ++it) { - const DomCustomWidget *cw = *it; -#ifndef QT_FORMBUILDER_NO_SCRIPT - if (const DomScript *domScript = cw->elementScript()) { - const QString script = domScript->text(); - if (!script.isEmpty()) - formBuilderPrivate->storeCustomWidgetScript(cw->elementClass(), script); - } -#endif - const QString addPageMethod = cw->elementAddPageMethod(); - if (!addPageMethod.isEmpty()) - formBuilderPrivate->storeCustomWidgetAddPageMethod(cw->elementClass(), addPageMethod); - - const QString extends = cw->elementExtends(); - if (!extends.isEmpty()) - formBuilderPrivate->storeCustomWidgetBaseClass(cw->elementClass(), extends); - } + for (DomCustomWidgetList::const_iterator it = customWidgets.constBegin(); it != cend; ++it) + formBuilderPrivate->storeCustomWidgetData((*it)->elementClass(), *it); } } } diff --git a/tools/designer/src/lib/uilib/formbuilder.cpp b/tools/designer/src/lib/uilib/formbuilder.cpp index 0a722ba..2de8388 100644 --- a/tools/designer/src/lib/uilib/formbuilder.cpp +++ b/tools/designer/src/lib/uilib/formbuilder.cpp @@ -123,6 +123,8 @@ QWidget *QFormBuilder::create(DomWidget *ui_widget, QWidget *parentWidget) QFormBuilderExtra *fb = QFormBuilderExtra::instance(this); if (!fb->parentWidgetIsSet()) fb->setParentWidget(parentWidget); + // Is this a QLayoutWidget with a margin of 0: Not a known page-based + // container and no method for adding pages registered. fb->setProcessingLayoutWidget(false); if (ui_widget->attributeClass() == QFormBuilderStrings::instance().qWidgetClass && !ui_widget->hasAttributeNative() && parentWidget @@ -147,8 +149,11 @@ QWidget *QFormBuilder::create(DomWidget *ui_widget, QWidget *parentWidget) #ifndef QT_NO_DOCKWIDGET && !qobject_cast<QDockWidget *>(parentWidget) #endif - ) - fb->setProcessingLayoutWidget(true); + ) { + const QString parentClassName = QLatin1String(parentWidget->metaObject()->className()); + if (!fb->isCustomWidgetContainer(parentClassName)) + fb->setProcessingLayoutWidget(true); + } return QAbstractFormBuilder::create(ui_widget, parentWidget); } diff --git a/tools/designer/src/lib/uilib/formbuilderextra.cpp b/tools/designer/src/lib/uilib/formbuilderextra.cpp index 0e803fb..ce71d59 100644 --- a/tools/designer/src/lib/uilib/formbuilderextra.cpp +++ b/tools/designer/src/lib/uilib/formbuilderextra.cpp @@ -65,6 +65,23 @@ void uiLibWarning(const QString &message) { qWarning("Designer: %s", qPrintable(message)); } + +QFormBuilderExtra::CustomWidgetData::CustomWidgetData() : + isContainer(false) +{ +} + +QFormBuilderExtra::CustomWidgetData::CustomWidgetData(const DomCustomWidget *dcw) : + addPageMethod(dcw->elementAddPageMethod()), + baseClass(dcw->elementExtends()), + isContainer(dcw->hasElementContainer() && dcw->elementContainer() != 0) +{ +#ifndef QT_FORMBUILDER_NO_SCRIPT + if (const DomScript *domScript = dcw->elementScript()) + script = domScript->text(); +#endif +} + QFormBuilderExtra::QFormBuilderExtra() : m_layoutWidget(false), m_resourceBuilder(0), @@ -85,8 +102,8 @@ void QFormBuilderExtra::clear() m_parentWidgetIsSet = false; #ifndef QT_FORMBUILDER_NO_SCRIPT m_FormScriptRunner.clearErrors(); - m_customWidgetScriptHash.clear(); #endif + m_customWidgetDataHash.clear(); m_buttonGroups.clear(); } @@ -160,45 +177,44 @@ QFormScriptRunner &QFormBuilderExtra::formScriptRunner() return m_FormScriptRunner; } -void QFormBuilderExtra::storeCustomWidgetScript(const QString &className, const QString &script) -{ - m_customWidgetScriptHash.insert(className, script); -} - QString QFormBuilderExtra::customWidgetScript(const QString &className) const { - const CustomWidgetScriptHash::const_iterator it = m_customWidgetScriptHash.constFind(className); - if ( it == m_customWidgetScriptHash.constEnd()) - return QString(); - return it.value(); + const QHash<QString, CustomWidgetData>::const_iterator it = m_customWidgetDataHash.constFind(className); + if (it != m_customWidgetDataHash.constEnd()) + return it.value().script; + return QString(); } #endif -void QFormBuilderExtra::storeCustomWidgetBaseClass(const QString &className, const QString &baseClassName) +void QFormBuilderExtra::storeCustomWidgetData(const QString &className, const DomCustomWidget *d) { - m_customWidgetBaseClassHash.insert(className, baseClassName); + if (d) + m_customWidgetDataHash.insert(className, CustomWidgetData(d)); } QString QFormBuilderExtra::customWidgetBaseClass(const QString &className) const { - const QHash<QString, QString>::const_iterator it = m_customWidgetBaseClassHash.constFind(className); - if (it == m_customWidgetBaseClassHash.constEnd()) - return QString(); - return it.value(); + const QHash<QString, CustomWidgetData>::const_iterator it = m_customWidgetDataHash.constFind(className); + if (it != m_customWidgetDataHash.constEnd()) + return it.value().baseClass; + return QString(); } -void QFormBuilderExtra::storeCustomWidgetAddPageMethod(const QString &className, const QString &ct) +QString QFormBuilderExtra::customWidgetAddPageMethod(const QString &className) const { - m_customWidgetAddPageMethodHash.insert(className, ct); + const QHash<QString, CustomWidgetData>::const_iterator it = m_customWidgetDataHash.constFind(className); + if (it != m_customWidgetDataHash.constEnd()) + return it.value().addPageMethod; + return QString(); } -QString QFormBuilderExtra::customWidgetAddPageMethod(const QString &className) const +bool QFormBuilderExtra::isCustomWidgetContainer(const QString &className) const { - const QHash<QString, QString>::const_iterator it = m_customWidgetAddPageMethodHash.constFind(className); - if (it == m_customWidgetAddPageMethodHash.constEnd()) - return QString(); - return it.value(); + const QHash<QString, CustomWidgetData>::const_iterator it = m_customWidgetDataHash.constFind(className); + if (it != m_customWidgetDataHash.constEnd()) + return it.value().isContainer; + return false; } namespace { diff --git a/tools/designer/src/lib/uilib/formbuilderextra_p.h b/tools/designer/src/lib/uilib/formbuilderextra_p.h index ce4d25b..3bcd1eb 100644 --- a/tools/designer/src/lib/uilib/formbuilderextra_p.h +++ b/tools/designer/src/lib/uilib/formbuilderextra_p.h @@ -82,6 +82,7 @@ namespace QFormInternal class DomButtonGroups; class DomButtonGroup; +class DomCustomWidget; class QAbstractFormBuilder; class QResourceBuilder; @@ -92,6 +93,16 @@ class QDESIGNER_UILIB_EXPORT QFormBuilderExtra QFormBuilderExtra(); ~QFormBuilderExtra(); public: + struct CustomWidgetData { + CustomWidgetData(); + explicit CustomWidgetData(const DomCustomWidget *dc); + + QString addPageMethod; + QString script; + QString baseClass; + bool isContainer; + }; + void clear(); bool applyPropertyInternally(QObject *o, const QString &propertyName, const QVariant &value); @@ -107,7 +118,6 @@ public: #ifndef QT_FORMBUILDER_NO_SCRIPT QFormScriptRunner &formScriptRunner(); - void storeCustomWidgetScript(const QString &className, const QString &script); QString customWidgetScript(const QString &className) const; #endif @@ -123,11 +133,10 @@ public: static QFormBuilderExtra *instance(const QAbstractFormBuilder *afb); static void removeInstance(const QAbstractFormBuilder *afb); - void storeCustomWidgetAddPageMethod(const QString &className, const QString &ct); + void storeCustomWidgetData(const QString &className, const DomCustomWidget *d); QString customWidgetAddPageMethod(const QString &className) const; - - void storeCustomWidgetBaseClass(const QString &className, const QString &baseClassName); QString customWidgetBaseClass(const QString &className) const; + bool isCustomWidgetContainer(const QString &className) const; // --- Hash used in creating button groups on demand. Store a map of name and pair of dom group and real group void registerButtonGroups(const DomButtonGroups *groups); @@ -169,13 +178,9 @@ private: #ifndef QT_FORMBUILDER_NO_SCRIPT QFormScriptRunner m_FormScriptRunner; - - typedef QHash<QString, QString> CustomWidgetScriptHash; - CustomWidgetScriptHash m_customWidgetScriptHash; #endif - QHash<QString, QString> m_customWidgetAddPageMethodHash; - QHash<QString, QString> m_customWidgetBaseClassHash; + QHash<QString, CustomWidgetData> m_customWidgetDataHash; ButtonGroupHash m_buttonGroups; diff --git a/tools/designer/translations/translations.pro b/tools/designer/translations/translations.pro index 2323882..03c1415 100644 --- a/tools/designer/translations/translations.pro +++ b/tools/designer/translations/translations.pro @@ -130,6 +130,7 @@ HEADERS += ../../shared/findwidget/abstractfindwidget.h \ TR_DIR = $$PWD/../../../translations TRANSLATIONS = \ $$TR_DIR/designer_de.ts \ + $$TR_DIR/designer_fr.ts \ $$TR_DIR/designer_ja.ts \ $$TR_DIR/designer_pl.ts \ $$TR_DIR/designer_ru.ts \ diff --git a/tools/linguist/lrelease/lrelease.pro b/tools/linguist/lrelease/lrelease.pro index 01091b3..e4c18ee 100644 --- a/tools/linguist/lrelease/lrelease.pro +++ b/tools/linguist/lrelease/lrelease.pro @@ -2,21 +2,14 @@ TEMPLATE = app TARGET = lrelease DESTDIR = ../../../bin -QT -= gui - -CONFIG += qt warn_on console -CONFIG -= app_bundle - -build_all:!build_pass { - CONFIG -= build_all - CONFIG += release -} - DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII SOURCES += main.cpp +include(../../../src/tools/bootstrap/bootstrap.pri) include(../shared/formats.pri) include(../shared/proparser.pri) +win32-msvc*:LIBS += advapi32.lib # for qsettings_win.cpp + target.path=$$[QT_INSTALL_BINS] INSTALLS += target diff --git a/tools/linguist/lrelease/main.cpp b/tools/linguist/lrelease/main.cpp index 742c2e6..c45459a 100644 --- a/tools/linguist/lrelease/main.cpp +++ b/tools/linguist/lrelease/main.cpp @@ -42,7 +42,10 @@ #include "translator.h" #include "proreader.h" +#ifndef QT_BOOTSTRAPPED #include <QtCore/QCoreApplication> +#include <QtCore/QTranslator> +#endif #include <QtCore/QDebug> #include <QtCore/QDir> #include <QtCore/QFile> @@ -51,7 +54,14 @@ #include <QtCore/QString> #include <QtCore/QStringList> #include <QtCore/QTextStream> -#include <QtCore/QTranslator> + +#ifdef QT_BOOTSTRAPPED +static void initBinaryDir( +#ifndef Q_OS_WIN + const char *argv0 +#endif + ); +#endif static void printOut(const QString & out) { @@ -157,11 +167,18 @@ static bool releaseTsFile(const QString& tsFileName, int main(int argc, char **argv) { +#ifdef QT_BOOTSTRAPPED + initBinaryDir( +#ifndef Q_OS_WIN + argv[0] +#endif + ); +#else QCoreApplication app(argc, argv); - QStringList args = app.arguments(); QTranslator translator; if (translator.load(QLatin1String("lrelease_") + QLocale::system().name())) app.installTranslator(&translator); +#endif ConversionData cd; cd.m_verbose = true; // the default is true starting with Qt 4.2 @@ -171,50 +188,50 @@ int main(int argc, char **argv) QString outputFile; for (int i = 1; i < argc; ++i) { - if (args[i] == QLatin1String("-compress")) { + if (!strcmp(argv[i], "-compress")) { cd.m_saveMode = SaveStripped; continue; - } else if (args[i] == QLatin1String("-idbased")) { + } else if (!strcmp(argv[i], "-idbased")) { cd.m_idBased = true; continue; - } else if (args[i] == QLatin1String("-nocompress")) { + } else if (!strcmp(argv[i], "-nocompress")) { cd.m_saveMode = SaveEverything; continue; - } else if (args[i] == QLatin1String("-removeidentical")) { + } else if (!strcmp(argv[i], "-removeidentical")) { removeIdentical = true; continue; - } else if (args[i] == QLatin1String("-nounfinished")) { + } else if (!strcmp(argv[i], "-nounfinished")) { cd.m_ignoreUnfinished = true; continue; - } else if (args[i] == QLatin1String("-markuntranslated")) { + } else if (!strcmp(argv[i], "-markuntranslated")) { if (i == argc - 1) { printUsage(); return 1; } - cd.m_unTrPrefix = args[++i]; - } else if (args[i] == QLatin1String("-silent")) { + cd.m_unTrPrefix = QString::fromLocal8Bit(argv[++i]); + } else if (!strcmp(argv[i], "-silent")) { cd.m_verbose = false; continue; - } else if (args[i] == QLatin1String("-verbose")) { + } else if (!strcmp(argv[i], "-verbose")) { cd.m_verbose = true; continue; - } else if (args[i] == QLatin1String("-version")) { + } else if (!strcmp(argv[i], "-version")) { printOut(QCoreApplication::tr( "lrelease version %1\n").arg(QLatin1String(QT_VERSION_STR)) ); return 0; - } else if (args[i] == QLatin1String("-qm")) { + } else if (!strcmp(argv[i], "-qm")) { if (i == argc - 1) { printUsage(); return 1; } - outputFile = args[++i]; - } else if (args[i] == QLatin1String("-help")) { + outputFile = QString::fromLocal8Bit(argv[++i]); + } else if (!strcmp(argv[i], "-help")) { printUsage(); return 0; - } else if (args[i].startsWith(QLatin1Char('-'))) { + } else if (argv[i][0] == '-') { printUsage(); return 1; } else { - inputFiles << args[i]; + inputFiles << QString::fromLocal8Bit(argv[i]); } } @@ -261,3 +278,79 @@ int main(int argc, char **argv) return 0; } + +#ifdef QT_BOOTSTRAPPED + +#ifdef Q_OS_WIN +# include <windows.h> +#endif + +static QString binDir; + +static void initBinaryDir( +#ifndef Q_OS_WIN + const char *_argv0 +#endif + ) +{ +#ifdef Q_OS_WIN + wchar_t module_name[MAX_PATH]; + GetModuleFileName(0, module_name, MAX_PATH); + QFileInfo filePath = QString::fromWCharArray(module_name); + binDir = filePath.filePath(); +#else + QString argv0 = QFile::decodeName(QByteArray(_argv0)); + QString absPath; + + if (!argv0.isEmpty() && argv0.at(0) == QLatin1Char('/')) { + /* + If argv0 starts with a slash, it is already an absolute + file path. + */ + absPath = argv0; + } else if (argv0.contains(QLatin1Char('/'))) { + /* + If argv0 contains one or more slashes, it is a file path + relative to the current directory. + */ + absPath = QDir::current().absoluteFilePath(argv0); + } else { + /* + Otherwise, the file path has to be determined using the + PATH environment variable. + */ + QByteArray pEnv = qgetenv("PATH"); + QDir currentDir = QDir::current(); + QStringList paths = QString::fromLocal8Bit(pEnv.constData()).split(QLatin1String(":")); + for (QStringList::const_iterator p = paths.constBegin(); p != paths.constEnd(); ++p) { + if ((*p).isEmpty()) + continue; + QString candidate = currentDir.absoluteFilePath(*p + QLatin1Char('/') + argv0); + QFileInfo candidate_fi(candidate); + if (candidate_fi.exists() && !candidate_fi.isDir()) { + binDir = candidate_fi.canonicalPath(); + return; + } + } + return; + } + + QFileInfo fi(absPath); + if (fi.exists()) + binDir = fi.canonicalPath(); +#endif +} + +QT_BEGIN_NAMESPACE + +// The name is hard-coded in QLibraryInfo +QString qmake_libraryInfoFile() +{ + if (binDir.isEmpty()) + return QString(); + return QDir(binDir).filePath(QString::fromLatin1("qt.conf")); +} + +QT_END_NAMESPACE + +#endif // QT_BOOTSTRAPPED diff --git a/tools/linguist/phrasebooks/french.qph b/tools/linguist/phrasebooks/french.qph index a34effe..d710abd 100644 --- a/tools/linguist/phrasebooks/french.qph +++ b/tools/linguist/phrasebooks/french.qph @@ -1351,8 +1351,8 @@ <target>Impossible de créer le répertoire : %1</target> </phrase> <phrase> - <source>&Case sensitive</source> - <target>&Sensible à la casse</target> + <source></source> + <target></target> </phrase> <phrase> <source>Whole &words</source> @@ -1366,4 +1366,40 @@ <source>Fonts</source> <target>Polices</target> </phrase> +<phrase> + <source>Insert</source> + <target>Insérer</target> +</phrase> +<phrase> + <source>Size</source> + <target>Taille</target> +</phrase> +<phrase> + <source>List View</source> + <target>Affichage liste</target> +</phrase> +<phrase> + <source>Read-only</source> + <target>Lecture seule</target> +</phrase> +<phrase> + <source>Minimize</source> + <target>Réduire</target> +</phrase> +<phrase> + <source>Maximize</source> + <target>Maximiser</target> +</phrase> +<phrase> + <source>Retry</source> + <target>Réessayer</target> +</phrase> +<phrase> + <source>Dock</source> + <target>Attacher</target> +</phrase> +<phrase> + <source>&Redo</source> + <target>&Rétablir</target> +</phrase> </QPH> diff --git a/tools/linguist/shared/proparserutils.h b/tools/linguist/shared/proparserutils.h index 9a83733..1ed3d6c 100644 --- a/tools/linguist/shared/proparserutils.h +++ b/tools/linguist/shared/proparserutils.h @@ -43,10 +43,35 @@ #define PROPARSERUTILS_H #include <QtCore/QDir> +#ifndef QT_BOOTSTRAPPED #include <QtCore/QLibraryInfo> +#endif QT_BEGIN_NAMESPACE +#ifdef QT_BOOTSTRAPPED +// this is a stripped down version of the one found in QtCore +class QLibraryInfo +{ +public: + enum LibraryLocation + { + PrefixPath, + DocumentationPath, + HeadersPath, + LibrariesPath, + BinariesPath, + PluginsPath, + DataPath, + TranslationsPath, + SettingsPath, + DemosPath, + ExamplesPath + }; + static QString location(LibraryLocation); +}; +#endif + // Pre- and postcondition macros #define PRE(cond) do {if (!(cond))qt_assert(#cond,__FILE__,__LINE__);} while (0) #define POST(cond) do {if (!(cond))qt_assert(#cond,__FILE__,__LINE__);} while (0) diff --git a/tools/linguist/shared/qm.cpp b/tools/linguist/shared/qm.cpp index 99aedef..e4c26bc 100644 --- a/tools/linguist/shared/qm.cpp +++ b/tools/linguist/shared/qm.cpp @@ -41,7 +41,9 @@ #include "translator.h" +#ifndef QT_BOOTSTRAPPED #include <QtCore/QCoreApplication> +#endif #include <QtCore/QDebug> #include <QtCore/QDir> #include <QtCore/QFile> diff --git a/tools/linguist/shared/translator.cpp b/tools/linguist/shared/translator.cpp index bc27daf..05fc6e5 100644 --- a/tools/linguist/shared/translator.cpp +++ b/tools/linguist/shared/translator.cpp @@ -56,6 +56,16 @@ QT_BEGIN_NAMESPACE +#ifdef QT_BOOTSTRAPPED +QString QObject::tr(const char *sourceText, const char *, int n) +{ + QString ret = QString::fromLatin1(sourceText); + if (n >= 0) + ret.replace(QLatin1String("%n"), QString::number(n)); + return ret; +} +#endif + Translator::Translator() : m_codecName("ISO-8859-1"), m_locationsType(AbsoluteLocations) diff --git a/tools/linguist/shared/translator.h b/tools/linguist/shared/translator.h index eec704a..f29317b 100644 --- a/tools/linguist/shared/translator.h +++ b/tools/linguist/shared/translator.h @@ -54,6 +54,18 @@ QT_BEGIN_NAMESPACE +#ifdef QT_BOOTSTRAPPED +struct QObject { + static QString tr(const char *sourceText, const char * = 0, int n = -1); +}; +struct QCoreApplication : public QObject { + enum Encoding { CodecForTr }; + static QString translate(const char *, const char *sourceText, const char * = 0, + Encoding = CodecForTr, int n = -1) + { return tr(sourceText, 0, n); } +}; +#endif + class QIODevice; // A struct of "interesting" data passed to and from the load and save routines diff --git a/tools/qdoc3/codemarker.cpp b/tools/qdoc3/codemarker.cpp index a9da841..c8c92ec 100644 --- a/tools/qdoc3/codemarker.cpp +++ b/tools/qdoc3/codemarker.cpp @@ -602,10 +602,10 @@ QString CodeMarker::macName(const Node *node, const QString &name) } if (node->name().isEmpty()) { - return QLatin1Char('/') + myName; + return QLatin1Char('/') + protect(myName); } else { - return plainFullName(node) + QLatin1Char('/') + myName; + return plainFullName(node) + QLatin1Char('/') + protect(myName); } } diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index f0ddade..8711c6b 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -2300,7 +2300,8 @@ void HtmlGenerator::generateCompactList(const Node *relative, << " </b>"; } out() << "</td>\n"; - + + out() << "<td>"; if ((currentParagraphNo[i] < NumParagraphs) && !paragraphName[currentParagraphNo[i]].isEmpty()) { NodeMap::Iterator it; @@ -2308,7 +2309,6 @@ void HtmlGenerator::generateCompactList(const Node *relative, for (j = 0; j < currentOffsetInParagraph[i]; j++) ++it; - out() << "<td>"; // Previously, we used generateFullName() for this, but we // require some special formatting. out() << "<a href=\"" @@ -2322,8 +2322,8 @@ void HtmlGenerator::generateCompactList(const Node *relative, generateFullName(it.value()->parent(), relative, marker); out() << ")"; } - out() << "</td>\n"; - } + } + out() << "</td>\n"; currentOffset[i]++; currentOffsetInParagraph[i]++; @@ -4080,7 +4080,7 @@ void HtmlGenerator::generateMacRef(const Node *node, CodeMarker *marker) QStringList macRefs = marker->macRefsForNode(node); foreach (const QString &macRef, macRefs) - out() << "<a name=\"" << "//apple_ref/" << macRef << "\" />\n"; + out() << "<a name=\"" << "//apple_ref/" << macRef << "\"></a>\n"; } void HtmlGenerator::beginLink(const QString &link, diff --git a/tools/qttracereplay/main.cpp b/tools/qttracereplay/main.cpp index 1d21a21..4760c43 100644 --- a/tools/qttracereplay/main.cpp +++ b/tools/qttracereplay/main.cpp @@ -56,7 +56,7 @@ public: public slots: void updateRect(); -private: +public: QList<QRegion> updates; QPaintBuffer buffer; @@ -70,7 +70,8 @@ private: void ReplayWidget::updateRect() { - update(updates.at(currentFrame)); + if (!updates.isEmpty()) + update(updates.at(currentFrame)); } void ReplayWidget::paintEvent(QPaintEvent *) @@ -138,12 +139,25 @@ ReplayWidget::ReplayWidget(const QString &filename_) QFile file(filename); QRect bounds; - if (file.open(QIODevice::ReadOnly)) { - QDataStream in(&file); - in >> buffer >> updates; + if (!file.open(QIODevice::ReadOnly)) { + printf("Failed to load input file '%s'\n", qPrintable(filename_)); + return; } - qDebug() << "Read paint buffer with" << buffer.numFrames() << "frames"; + QDataStream in(&file); + + char *data; + uint size; + in.readBytes(data, size); + bool isTraceFile = size == 7 && qstrncmp(data, "qttrace", 7) == 0; + delete [] data; + if (!isTraceFile) { + printf("File '%s' is not a trace file\n", qPrintable(filename_)); + return; + } + + in >> buffer >> updates; + printf("Read paint buffer with %d frames\n", buffer.numFrames()); resize(buffer.boundingRect().size().toSize()); @@ -157,14 +171,24 @@ int main(int argc, char **argv) { QApplication app(argc, argv); - if (argc <= 1) { - printf("Usage: %s filename\n", argv[0]); + if (argc <= 1 || qstrcmp(argv[1], "-h") == 0 || qstrcmp(argv[1], "--help") == 0) { + printf("Replays a tracefile generated with '-graphicssystem trace'\n"); + printf("Usage:\n > %s [traceFile]\n", argv[0]); + return 1; + } + + QFile file(argv[1]); + if (!file.exists()) { + printf("%s does not exist\n", argv[1]); return 1; } ReplayWidget *widget = new ReplayWidget(argv[1]); - widget->show(); - return app.exec(); + if (!widget->updates.isEmpty()) { + widget->show(); + return app.exec(); + } + } #include "main.moc" diff --git a/tools/qttracereplay/qttracereplay.pro b/tools/qttracereplay/qttracereplay.pro index 766ed04..cc5b98d 100644 --- a/tools/qttracereplay/qttracereplay.pro +++ b/tools/qttracereplay/qttracereplay.pro @@ -11,3 +11,5 @@ SOURCES += main.cpp target.path=$$[QT_INSTALL_BINS] INSTALLS += target + +CONFIG += console diff --git a/translations/assistant_de.ts b/translations/assistant_de.ts index 027c566..b020003 100644 --- a/translations/assistant_de.ts +++ b/translations/assistant_de.ts @@ -79,7 +79,7 @@ <context> <name>BookmarkManager</name> <message> - <location line="+434"/> + <location line="+435"/> <source>Bookmarks</source> <translation>Lesezeichen</translation> </message> @@ -103,7 +103,7 @@ <context> <name>BookmarkWidget</name> <message> - <location line="-416"/> + <location line="-417"/> <source>Filter:</source> <translation>Filter:</translation> </message> @@ -130,7 +130,7 @@ <message> <location line="+1"/> <source>Show Bookmark in New Tab</source> - <translation>Lesezeichen in neuem Tab öffnen</translation> + <translation>Lesezeichen in neuem Reiter öffnen</translation> </message> <message> <location line="+3"/> @@ -151,7 +151,7 @@ <context> <name>CentralWidget</name> <message> - <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+238"/> + <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="+239"/> <source>Add new page</source> <translation>Neue Seite hinzufügen</translation> </message> @@ -166,7 +166,7 @@ <translation>Drucken</translation> </message> <message> - <location line="+148"/> + <location line="+130"/> <location line="+2"/> <source>unknown</source> <translation>unbekannt</translation> @@ -192,7 +192,7 @@ <translation>Lesezeichen für diese Seite hinzufügen ...</translation> </message> <message> - <location line="+255"/> + <location line="+235"/> <source>Search</source> <translation>Suchen</translation> </message> @@ -207,7 +207,7 @@ <message> <location line="+1"/> <source>Open Link in New Tab</source> - <translation>Link in neuem Tab öffnen</translation> + <translation>Link in neuem Reiter öffnen</translation> </message> </context> <context> @@ -226,7 +226,7 @@ <context> <name>FindWidget</name> <message> - <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="-955"/> + <location filename="../tools/assistant/tools/assistant/centralwidget.cpp" line="-918"/> <source>Previous</source> <translation>Zurück</translation> </message> @@ -282,7 +282,7 @@ <context> <name>HelpViewer</name> <message> - <location filename="../tools/assistant/tools/assistant/helpviewer.cpp" line="+492"/> + <location filename="../tools/assistant/tools/assistant/helpviewer.cpp" line="+489"/> <source>Help</source> <translation>Hilfe</translation> </message> @@ -304,12 +304,12 @@ <message> <location line="+3"/> <source>Open Link in New Tab Ctrl+LMB</source> - <translation>Link in neuem Tab öffnen </translation> + <translation>Link in neuem Reiter öffnen </translation> </message> <message> <location line="-275"/> <source>Open Link in New Tab</source> - <translation>Link in neuem Tab öffnen</translation> + <translation>Link in neuem Reiter öffnen</translation> </message> <message> <location line="+209"/> @@ -334,7 +334,7 @@ <message> <location line="+1"/> <source>Open Link in New Tab</source> - <translation>Link in neuem Tab öffnen</translation> + <translation>Link in neuem Reiter öffnen</translation> </message> </context> <context> @@ -392,7 +392,7 @@ <message> <location line="+37"/> <source>Download failed: Downloaded file is corrupted.</source> - <translation>Herunterladen fehlgeschlagen: Die Datei ist warscheinlich beschädigt.</translation> + <translation>Herunterladen fehlgeschlagen: Die Datei ist wahrscheinlich beschädigt.</translation> </message> <message> <location line="+2"/> @@ -441,19 +441,19 @@ <name>MainWindow</name> <message> <location filename="../tools/assistant/tools/assistant/mainwindow.cpp" line="+110"/> - <location line="+391"/> + <location line="+383"/> <source>Index</source> <translation>Index</translation> </message> <message> - <location line="-385"/> - <location line="+383"/> + <location line="-377"/> + <location line="+375"/> <source>Contents</source> <translation>Inhalt</translation> </message> <message> - <location line="-378"/> - <location line="+382"/> + <location line="-370"/> + <location line="+374"/> <source>Bookmarks</source> <translation>Lesezeichen</translation> </message> @@ -463,14 +463,14 @@ <translation>Suchen</translation> </message> <message> - <location line="-372"/> - <location line="+215"/> - <location line="+512"/> + <location line="-364"/> + <location line="+207"/> + <location line="+514"/> <source>Qt Assistant</source> <translation>Qt Assistant</translation> </message> <message> - <location line="-544"/> + <location line="-546"/> <location line="+5"/> <source>Unfiltered</source> <translation>Ohne Filter</translation> @@ -493,12 +493,12 @@ <message> <location line="+7"/> <source>New &Tab</source> - <translation>Neuer &Tab</translation> + <translation>Neuer &Reiter</translation> </message> <message> <location line="+3"/> <source>&Close Tab</source> - <translation>Tab &schließen</translation> + <translation>Reiter &schließen</translation> </message> <message> <location line="+4"/> @@ -516,7 +516,12 @@ <translation>&Textsuche ...</translation> </message> <message> - <location line="+6"/> + <location line="+2"/> + <source>&Find</source> + <translation>&Suchen</translation> + </message> + <message> + <location line="+4"/> <source>Find &Next</source> <translation>&Weitersuchen</translation> </message> @@ -583,10 +588,15 @@ <message> <location line="+6"/> <source>Sync with Table of Contents</source> - <translation>Seite mit Inhalt-Tab abgleichen</translation> + <translation>Seite mit Inhaltsangabe abgleichen</translation> </message> <message> - <location line="+7"/> + <location line="+2"/> + <source>Sync</source> + <translation>Synchronisieren</translation> + </message> + <message> + <location line="+5"/> <source>Next Page</source> <translation>Nächste Seite</translation> </message> @@ -636,7 +646,7 @@ <translation>Filter:</translation> </message> <message> - <location line="+23"/> + <location line="+25"/> <source>Address Toolbar</source> <translation>Adressleiste</translation> </message> @@ -661,7 +671,7 @@ <translation>Suchindex wird aufgebaut</translation> </message> <message> - <location line="-638"/> + <location line="-640"/> <source>Looking for Qt Documentation...</source> <translation>Suche nach Qt-Dokumentation ...</translation> </message> @@ -963,7 +973,7 @@ <translation>Qt Assistant</translation> </message> <message> - <location filename="../tools/assistant/tools/assistant/main.cpp" line="+217"/> + <location filename="../tools/assistant/tools/assistant/main.cpp" line="+225"/> <source>Could not register documentation file %1 @@ -1023,7 +1033,7 @@ Grund: <context> <name>SearchWidget</name> <message> - <location filename="../tools/assistant/tools/assistant/searchwidget.cpp" line="+195"/> + <location filename="../tools/assistant/tools/assistant/searchwidget.cpp" line="+196"/> <source>&Copy</source> <translation>&Kopieren</translation> </message> @@ -1035,7 +1045,7 @@ Grund: <message> <location line="+4"/> <source>Open Link in New Tab</source> - <translation>Link in neuem Tab öffnen</translation> + <translation>Link in neuem Reiter öffnen</translation> </message> <message> <location line="+8"/> diff --git a/translations/assistant_fr.ts b/translations/assistant_fr.ts index 9c5d651..4c6c5a0 100644 --- a/translations/assistant_fr.ts +++ b/translations/assistant_fr.ts @@ -39,12 +39,12 @@ <message> <location/> <source>Bookmark:</source> - <translation>Signet :</translation> + <translation>Signet :</translation> </message> <message> <location/> <source>Add in Folder:</source> - <translation>Ajouter dans le dossier :</translation> + <translation>Ajouter dans le dossier :</translation> </message> <message> <location/> @@ -91,7 +91,7 @@ <message> <location line="+1"/> <source>You are going to delete a Folder, this will also<br>remove it's content. Are you sure to continue?</source> - <translation>Vous allez supprimer un dossier, ceci va aussi<br>supprimer son contenu. Voulez-vous continuer?</translation> + <translation>Vous allez supprimer un dossier, ceci va aussi<br>supprimer son contenu. Voulez-vous continuer ?</translation> </message> <message> <location line="+143"/> @@ -135,7 +135,7 @@ <message> <location line="+38"/> <source>Filter:</source> - <translation>Filtre :</translation> + <translation>Filtre :</translation> </message> <message> <location line="+24"/> @@ -220,7 +220,7 @@ <message> <location/> <source>Filter Name:</source> - <translation>Nom du filtre :</translation> + <translation>Nom du filtre :</translation> </message> </context> <context> @@ -325,7 +325,7 @@ <message> <location filename="../tools/assistant/tools/assistant/indexwindow.cpp" line="+66"/> <source>&Look for:</source> - <translation>&Rechercher :</translation> + <translation>&Rechercher :</translation> </message> <message> <location line="+68"/> @@ -349,7 +349,7 @@ <message> <location/> <source>Available Documentation:</source> - <translation>Documentation disponible :</translation> + <translation>Documentation disponible :</translation> </message> <message> <location/> @@ -369,7 +369,7 @@ <message> <location/> <source>Installation Path:</source> - <translation>Chemin d'installation :</translation> + <translation>Chemin d'installation :</translation> </message> <message> <location/> @@ -396,12 +396,12 @@ <message> <location line="-90"/> <source>The file %1 already exists. Do you want to overwrite it?</source> - <translation>Le fichier %1 existe déjà. Voulez-vous l'écraser?</translation> + <translation>Le fichier %1 existe déjà. Voulez-vous l'écraser ?</translation> </message> <message> <location line="+11"/> <source>Unable to save the file %1: %2.</source> - <translation>Impossible de sauver le fichier %1 : %2.</translation> + <translation>Impossible de sauver le fichier %1 : %2.</translation> </message> <message> <location line="+8"/> @@ -413,17 +413,17 @@ <location line="+42"/> <location line="+38"/> <source>Download failed: %1.</source> - <translation>Échec du téléchargement : %1.</translation> + <translation>Échec du téléchargement : %1.</translation> </message> <message> <location line="-70"/> <source>Documentation info file is corrupt!</source> - <translation>Le fichier d'information de documentation est corrompu!</translation> + <translation>Le fichier d'information de documentation est corrompu !</translation> </message> <message> <location line="+37"/> <source>Download failed: Downloaded file is corrupted.</source> - <translation>Échec du téléchargement : le fichier téléchargé est corrompu.</translation> + <translation>Échec du téléchargement : le fichier téléchargé est corrompu.</translation> </message> <message> <location line="+2"/> @@ -434,7 +434,7 @@ <location line="+22"/> <source>Error while installing documentation: %1</source> - <translation>Erreur durant l'installation de la documentation : + <translation>Erreur durant l'installation de la documentation : %1</translation> </message> </context> @@ -599,7 +599,7 @@ <message> <location line="+2"/> <source>&Go</source> - <translation>&Aller</translation> + <translation>A&ller</translation> </message> <message> <location line="+1"/> @@ -654,7 +654,7 @@ <message> <location line="+3"/> <source>&Bookmarks</source> - <translation>&Signets</translation> + <translation>Si&gnets</translation> </message> <message> <location line="+1"/> @@ -669,7 +669,7 @@ <message> <location line="+2"/> <source>&Help</source> - <translation>&Aide</translation> + <translation>Ai&de</translation> </message> <message> <location line="+1"/> @@ -714,7 +714,7 @@ <message> <location line="+2"/> <source>Filtered by:</source> - <translation>Filtre :</translation> + <translation>Filtre :</translation> </message> <message> <location line="+25"/> @@ -724,7 +724,7 @@ <message> <location line="+4"/> <source>Address:</source> - <translation>Adresse :</translation> + <translation>Adresse :</translation> </message> <message> <location line="+114"/> @@ -759,12 +759,12 @@ <message> <location line="+29"/> <source>The namespace %1 is already registered!</source> - <translation>L'espace de nom %1 existe déjà!</translation> + <translation>L'espace de nom %1 existe déjà !</translation> </message> <message> <location line="+8"/> <source>The specified file is not a valid Qt Help File!</source> - <translation>Le fichier spécifié n'est pas un fichier d'aide Qt valide!</translation> + <translation>Le fichier spécifié n'est pas un fichier d'aide Qt valide !</translation> </message> <message> <location line="+23"/> @@ -807,7 +807,7 @@ <message> <location/> <source>Font settings:</source> - <translation>Configuration des polices :</translation> + <translation>Configuration des polices :</translation> </message> <message> <location/> @@ -827,12 +827,12 @@ <message> <location/> <source>Filter:</source> - <translation>Filtre :</translation> + <translation>Filtre :</translation> </message> <message> <location/> <source>Attributes:</source> - <translation>Attributs :</translation> + <translation>Attributs :</translation> </message> <message> <location/> @@ -858,7 +858,7 @@ <location/> <source>Registered Documentation:</source> <translatorcomment>documentation enregistrée ? ← je préfère référencée pour les deux...</translatorcomment> - <translation>Documentation référencée :</translation> + <translation>Documentation référencée :</translation> </message> <message> <location/> @@ -873,7 +873,7 @@ <message> <location/> <source>On help start:</source> - <translation>Au démarrage :</translation> + <translation>Au démarrage :</translation> </message> <message> <location/> @@ -916,58 +916,58 @@ <message> <location filename="../tools/assistant/tools/assistant/cmdlineparser.cpp" line="+112"/> <source>The specified collection file does not exist!</source> - <translation>Le fichier de collection spécifié n'existe pas!</translation> + <translation>Le fichier de collection spécifié n'existe pas !</translation> </message> <message> <location line="+4"/> <source>Missing collection file!</source> - <translation>Fichier de collection manquant!</translation> + <translation>Fichier de collection manquant !</translation> </message> <message> <location line="+9"/> <source>Invalid URL!</source> - <translation>URL invalide!</translation> + <translation>URL invalide !</translation> </message> <message> <location line="+4"/> <source>Missing URL!</source> - <translation>URL manquante!</translation> + <translation>URL manquante !</translation> </message> <message> <location line="+17"/> <location line="+19"/> <location line="+19"/> <source>Unknown widget: %1</source> - <translation>Widget inconnu : %1</translation> + <translation>Widget inconnu : %1</translation> </message> <message> <location line="-34"/> <location line="+19"/> <location line="+19"/> <source>Missing widget!</source> - <translation>Widget manquant!</translation> + <translation>Widget manquant !</translation> </message> <message> <location line="+7"/> <location line="+12"/> <source>The specified Qt help file does not exist!</source> - <translation>Le fichier d'aide Qt spécifié n'existe pas!</translation> + <translation>Le fichier d'aide Qt spécifié n'existe pas !</translation> </message> <message> <location line="-7"/> <location line="+12"/> <source>Missing help file!</source> - <translation>Fichier d'aide manquant!</translation> + <translation>Fichier d'aide manquant !</translation> </message> <message> <location line="+7"/> <source>Missing filter argument!</source> - <translation>Argument de filtre manquant!</translation> + <translation>Argument de filtre manquant !</translation> </message> <message> <location line="+12"/> <source>Unknown option: %1</source> - <translation>Option inconnue : %1</translation> + <translation>Option inconnue : %1</translation> </message> <message> <location line="+30"/> @@ -985,7 +985,7 @@ Reason: <translation>Impossible d'enregistrer le fichier de documentation %1 -Raison : +Raison : %2</translation> </message> <message> @@ -1008,18 +1008,18 @@ Reason: <translation>Impossible d'enregistrer le fichier de documentation %1 -Raison : +Raison : %2</translation> </message> <message> <location line="+37"/> <source>Cannot load sqlite database driver!</source> - <translation>Impossible de charger le driver de la base de données sqlite!</translation> + <translation>Impossible de charger le driver de la base de données sqlite !</translation> </message> <message> <location line="+9"/> <source>The specified collection file could not be read!</source> - <translation>Le fichier de collection spécifié ne peut pas être lu!</translation> + <translation>Le fichier de collection spécifié ne peut pas être lu !</translation> </message> </context> <context> @@ -1032,7 +1032,7 @@ Raison : <message> <location line="+1"/> <source>Received Command: %1 %2</source> - <translation>Commande reçue : %1 %2</translation> + <translation>Commande reçue : %1 %2</translation> </message> </context> <context> @@ -1083,7 +1083,7 @@ Raison : <message> <location filename="../tools/assistant/tools/assistant/topicchooser.cpp" line="+54"/> <source>Choose a topic for <b>%1</b>:</source> - <translation>Choisir le domaine pour <b>%1</b> :</translation> + <translation>Choisir le domaine pour <b>%1</b> :</translation> </message> </context> </TS> diff --git a/translations/designer_de.ts b/translations/designer_de.ts index 638a8b4..76ccbfb 100644 --- a/translations/designer_de.ts +++ b/translations/designer_de.ts @@ -702,7 +702,7 @@ <context> <name>ConnectionDelegate</name> <message> - <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="+643"/> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="+644"/> <source><object></source> <translation><Objekt></translation> </message> @@ -4446,8 +4446,8 @@ Möchten Sie sie überschreiben?</translation> <location line="+6"/> <source>Customized (%n roles)</source> <translation> - <numerusform>Angepaßt (eine Rolle)</numerusform> - <numerusform>Angepaßt (%n Rollen)</numerusform> + <numerusform>Angepasst (eine Rolle)</numerusform> + <numerusform>Angepasst (%n Rollen)</numerusform> </translation> </message> <message> @@ -4689,7 +4689,7 @@ Möchten Sie sie überschreiben?</translation> <message> <location filename="../tools/designer/src/lib/shared/filterwidget.cpp" line="+185"/> <source><Filter></source> - <translation><FIlter></translation> + <translation><Filter></translation> </message> </context> <context> @@ -5550,18 +5550,15 @@ Please select another name.</source> <context> <name>qdesigner_internal::ObjectInspector</name> <message> - <location filename="../tools/designer/src/components/objectinspector/objectinspector.cpp" line="+754"/> - <source>&Find in Text...</source> - <translation>&Suchen...</translation> - </message> -</context> -<context> - <name>qdesigner_internal::ObjectInspector::ObjectInspectorPrivate</name> - <message> - <location line="-438"/> + <location filename="../tools/designer/src/components/objectinspector/objectinspector.cpp" line="+316"/> <source>Change Current Page</source> <translation>Seite wechseln</translation> </message> + <message> + <location line="+438"/> + <source>&Find in Text...</source> + <translation>&Suchen...</translation> + </message> </context> <context> <name>qdesigner_internal::OrderDialog</name> @@ -5747,7 +5744,7 @@ Please select another name.</source> <message> <location line="+55"/> <source>New custom widget plugins have been found.</source> - <translation>Es wurden neuinstallierten Plugins mit benutzerdefinierten Widgets gefunden.</translation> + <translation>Es wurden neu installierte Plugins mit benutzerdefinierten Widgets gefunden.</translation> </message> </context> <context> @@ -5775,9 +5772,6 @@ Please select another name.</source> <source>Browse...</source> <translation>Durchsuchen...</translation> </message> -</context> -<context> - <name>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate</name> <message> <location line="+118"/> <source>Load Custom Device Skin</source> diff --git a/translations/designer_fr.ts b/translations/designer_fr.ts new file mode 100644 index 0000000..7c18290 --- /dev/null +++ b/translations/designer_fr.ts @@ -0,0 +1,7046 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.0" language="fr_FR"> +<context> + <name>AbstractFindWidget</name> + <message> + <location filename="../tools/shared/findwidget/abstractfindwidget.cpp" line="127"/> + <source>&Previous</source> + <translation>&Précédent</translation> + </message> + <message> + <location filename="../tools/shared/findwidget/abstractfindwidget.cpp" line="135"/> + <source>&Next</source> + <translation>&Suivant</translation> + </message> + <message> + <location filename="../tools/shared/findwidget/abstractfindwidget.cpp" line="159"/> + <source>&Case sensitive</source> + <translation>&Sensible à la casse</translation> + </message> + <message> + <location filename="../tools/shared/findwidget/abstractfindwidget.cpp" line="167"/> + <source>Whole &words</source> + <translation>M&ots complets</translation> + </message> + <message> + <location filename="../tools/shared/findwidget/abstractfindwidget.cpp" line="179"/> + <source><img src=":/trolltech/shared/images/wrap.png">&nbsp;Search wrapped</source> + <translation><img src=":/trolltech/shared/images/wrap.png">&nbsp;Recherche à partir du début</translation> + </message> +</context> +<context> + <name>AddLinkDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/addlinkdialog.ui" line="5"/> + <source>Insert Link</source> + <translation>Insérer lien</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/addlinkdialog.ui" line="19"/> + <source>Title:</source> + <translation>Titre :</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/addlinkdialog.ui" line="36"/> + <source>URL:</source> + <translation>URL :</translation> + </message> +</context> +<context> + <name>AppFontDialog</name> + <message> + <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="418"/> + <source>Additional Fonts</source> + <translation>Polices additionnelles</translation> + </message> +</context> +<context> + <name>AppFontManager</name> + <message> + <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="151"/> + <source>'%1' is not a file.</source> + <translation>'%1' n'est pas un fichier.</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="155"/> + <source>The font file '%1' does not have read permissions.</source> + <translation>Le fichier de la police '%1' n'a pas les permissions de lecture.</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="163"/> + <source>The font file '%1' is already loaded.</source> + <translation>Le fichier de la police '%1' est déjà chargé.</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="170"/> + <source>The font file '%1' could not be loaded.</source> + <translatorcomment>passé composé plutôt</translatorcomment> + <translation>Le fichier de la police '%1' n'a pas pu chargé.</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="187"/> + <source>'%1' is not a valid font id.</source> + <translation>'%1' n'est pas un identifiant de police valide.</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="198"/> + <source>There is no loaded font matching the id '%1'.</source> + <translation>Il n'y a pas de police chargée correspondant à l'identifiant '%1'.</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="213"/> + <source>The font '%1' (%2) could not be unloaded.</source> + <translation>La police '%1' (%2) ne peut pas être déchargée.</translation> + </message> +</context> +<context> + <name>AppFontWidget</name> + <message> + <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="239"/> + <source>Fonts</source> + <translation>Polices</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="297"/> + <source>Add font files</source> + <translation>Ajouter des fichiers de polices</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="302"/> + <source>Remove current font file</source> + <translation>Retirer le fichier de police courant</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="306"/> + <source>Remove all font files</source> + <translation>Retirer tous les fichiers de polices</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="325"/> + <source>Add Font Files</source> + <translation>Ajouter des fichiers de polices</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="326"/> + <source>Font files (*.ttf)</source> + <translation>Fichier de polices (*.ttf)</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="339"/> + <source>Error Adding Fonts</source> + <translation>Erreur dans l'ajout de polices</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="363"/> + <source>Error Removing Fonts</source> + <translatorcomment>s/de/des/ pour être cohérent avec le suivant...</translatorcomment> + <translation>Erreur lors de la suppression des polices</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="385"/> + <source>Remove Fonts</source> + <translation>Retirer les polices</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="385"/> + <source>Would you like to remove all fonts?</source> + <translation>Voulez-vous supprimer toutes les polices ?</translation> + </message> +</context> +<context> + <name>AppearanceOptionsWidget</name> + <message> + <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.ui" line="14"/> + <source>Form</source> + <translation>Formulaire</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.ui" line="20"/> + <source>User Interface Mode</source> + <translation>Mode de l'interface utilisateur</translation> + </message> +</context> +<context> + <name>AssistantClient</name> + <message> + <location filename="../tools/designer/src/designer/assistantclient.cpp" line="100"/> + <source>Unable to send request: Assistant is not responding.</source> + <translation>Impossible d'envoyer la requête : Assistant ne répond pas.</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/assistantclient.cpp" line="139"/> + <source>The binary '%1' does not exist.</source> + <translation>Le binaire '%1' n'existe pas.</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/assistantclient.cpp" line="148"/> + <source>Unable to launch assistant (%1).</source> + <translation>Impossible de démarrer Assistant (%1).</translation> + </message> +</context> +<context> + <name>BrushPropertyManager</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="52"/> + <source>No brush</source> + <translation>Pas de pinceau</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="53"/> + <source>Solid</source> + <translatorcomment>c'est plutôt continu ou "trait continu" pour moi</translatorcomment> + <translation>Trait continu</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="54"/> + <source>Dense 1</source> + <translation>Dense 1</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="55"/> + <source>Dense 2</source> + <translation>Dense 2</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="56"/> + <source>Dense 3</source> + <translation>Dense 3</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="57"/> + <source>Dense 4</source> + <translation>Dense 4</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="58"/> + <source>Dense 5</source> + <translation>Dense 5</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="59"/> + <source>Dense 6</source> + <translation>Dense 6</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="60"/> + <source>Dense 7</source> + <translation>Dense 7</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="61"/> + <source>Horizontal</source> + <translation>Horizontal</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="62"/> + <source>Vertical</source> + <translation>Vertical</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="63"/> + <source>Cross</source> + <translation>Croix</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="64"/> + <source>Backward diagonal</source> + <translation>Diagonale arrière</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="65"/> + <source>Forward diagonal</source> + <translation>Diagonale avant</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="66"/> + <source>Crossing diagonal</source> + <translation>Diagonale croisée</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="149"/> + <source>Style</source> + <translation>Style</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="160"/> + <source>Color</source> + <translation>Couleur</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="265"/> + <source>[%1, %2]</source> + <translation>[%1, %2]</translation> + </message> +</context> +<context> + <name>Command</name> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="208"/> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="466"/> + <source>Change signal</source> + <translation>Modifier le signal</translation> + </message> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="210"/> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="478"/> + <source>Change slot</source> + <translation>Modifier le slot</translation> + </message> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="258"/> + <source>Change signal-slot connection</source> + <translation>Modfier la connection signal-slot</translation> + </message> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="492"/> + <source>Change sender</source> + <translatorcomment>expéditeur/source</translatorcomment> + <translation>Modifier l'envoyeur</translation> + </message> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="510"/> + <source>Change receiver</source> + <translatorcomment>destinataire++/cible?</translatorcomment> + <translation>Modifier le destinataire</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="221"/> + <source>Create button group</source> + <translation>Créer un groupe de boutons</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="248"/> + <source>Break button group</source> + <translation>Dissocier le groupe de bouton</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="257"/> + <source>Break button group '%1'</source> + <translation>Dissossier le groupe de bouton '%1'</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="274"/> + <source>Add buttons to group</source> + <translation>Ajouter les boutons au groupe</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="282"/> + <location filename="../tools/designer/src/lib/shared/formlayoutmenu.cpp" line="458"/> + <source>Add '%1' to '%2'</source> + <extracomment>Command description for adding buttons to a QButtonGroup</extracomment> + <translation>Ajouter '%1' à '%2'</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="296"/> + <source>Remove buttons from group</source> + <translation>Retirer les boutons du groupe</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="311"/> + <source>Remove '%1' from '%2'</source> + <extracomment>Command description for removing buttons from a QButtonGroup</extracomment> + <translation>Retirer '%1' de '%2'</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="143"/> + <source>Add connection</source> + <translation>Ajouter une connexion</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="197"/> + <source>Adjust connection</source> + <translation>Réajuster les connexions</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="216"/> + <source>Delete connections</source> + <translation>Supprimer les connexions</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="274"/> + <source>Change source</source> + <translation>Modifier la source</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="276"/> + <source>Change target</source> + <translation>Modifier la cible</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/morphmenu.cpp" line="349"/> + <source>Morph %1/'%2' into %3</source> + <extracomment>MorphWidgetCommand description</extracomment> + <translation>Transformer %1/'%2' en %3</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="149"/> + <source>Insert '%1'</source> + <translation>Insérer '%1'</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="282"/> + <source>Change Z-order of '%1'</source> + <translatorcomment>l'ordre de '%1' sur l'axe z? profondeur ?</translatorcomment> + <translation>Modifier la profondeur de '%1'</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="316"/> + <source>Raise '%1'</source> + <translation>Élever '%1'</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="349"/> + <source>Lower '%1'</source> + <translation>Abaisser '%1'</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="462"/> + <source>Delete '%1'</source> + <translation>Supprimer '%1'</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="581"/> + <source>Reparent '%1'</source> + <translation>Reparenter '%1'</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="634"/> + <source>Promote to custom widget</source> + <translation>Promouvoir en widget personnalisé</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="676"/> + <source>Demote from custom widget</source> + <translation>Annuler la promotion en widget personnalisé</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="755"/> + <source>Lay out using grid</source> + <translation>Mettre en page à l'aide d'une grille</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="758"/> + <source>Lay out vertically</source> + <translation>Mettre en page verticalement</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="761"/> + <source>Lay out horizontaly</source> + <translation>Mettre en page horizontalement</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="802"/> + <source>Break layout</source> + <translation>Casser la mise en page</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="907"/> + <source>Simplify Grid Layout</source> + <translation>Simplifier la mise en page en grille</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1042"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1277"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1355"/> + <source>Move Page</source> + <translation>Déplacer la page</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1076"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1199"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1387"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2053"/> + <source>Delete Page</source> + <translation>Supprimer la page</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1114"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1237"/> + <source>Page</source> + <translation>Page</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1119"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1242"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1428"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2095"/> + <source>Insert Page</source> + <translation>Insérer une page</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1448"/> + <source>Change Tab order</source> + <translation>Modifier l'ordre des tabulations</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1476"/> + <source>Create Menu Bar</source> + <translation>Créer une barre de menu</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1520"/> + <source>Delete Menu Bar</source> + <translation>Supprimer la barre de menu</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1567"/> + <source>Create Status Bar</source> + <translation>Créer une barre d'état</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1609"/> + <source>Delete Status Bar</source> + <translation>Supprimer la barre d'état</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1654"/> + <source>Add Tool Bar</source> + <translation>Ajouter une barre d'outil</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1713"/> + <source>Add Dock Window</source> + <translation>Ajouter une fenêtre ancrable</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1766"/> + <source>Adjust Size of '%1'</source> + <translation>Ajuster les dimensions de '%1'</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1823"/> + <source>Change Form Layout Item Geometry</source> + <translation>Modifier la géométrie de l'élément de formulaire</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1918"/> + <source>Change Layout Item Geometry</source> + <translation>Modifier la géométrie de l'élément de mise en page</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2056"/> + <source>Delete Subwindow</source> + <translation>Supprimer la sous-fenêtre</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2097"/> + <source>page</source> + <translation>page</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2100"/> + <source>Insert Subwindow</source> + <translation>Insérer une sous-fenêtre</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2102"/> + <source>subwindow</source> + <translation>sous-fenêtre</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2103"/> + <source>Subwindow</source> + <translation>Sous fenêtre</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2494"/> + <source>Change Table Contents</source> + <translation>Modifier le contenu de la table</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2601"/> + <source>Change Tree Contents</source> + <translation>Modifier le contenu de l'arbre</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2675"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2821"/> + <source>Add action</source> + <translation>Ajouter une action</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2701"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2827"/> + <source>Remove action</source> + <translation>Supprimer l'action</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2880"/> + <source>Add menu</source> + <translation>Ajouter un menu</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2886"/> + <source>Remove menu</source> + <translation>Supprimer le menu</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2892"/> + <source>Create submenu</source> + <translation>Créer une sous-fenêtre</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2923"/> + <source>Delete Tool Bar</source> + <translation>Supprimer la barre d'outils</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_command2.cpp" line="154"/> + <source>Change layout of '%1' from %2 to %3</source> + <translation>Modifier la mise en page de '%1' de %2 à %3</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="1195"/> + <source>Set action text</source> + <translation>Définir le texte de l'action</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="1198"/> + <source>Insert action</source> + <translation>Insérer action</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="1287"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="907"/> + <source>Move action</source> + <translation>Déplacer action</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="483"/> + <source>Change Title</source> + <translation>Modifier le titre</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="485"/> + <source>Insert Menu</source> + <translation>Insérer menu</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1213"/> + <source>Changed '%1' of '%2'</source> + <translation>Modifier '%1' de '%2'</translation> + </message> + <message numerus="yes"> + <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1216"/> + <source>Changed '%1' of %n objects</source> + <translation> + <numerusform>Modifier '%1' de %n objet</numerusform> + <numerusform>Modifier '%1' de %n objets</numerusform> + </translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1292"/> + <source>Reset '%1' of '%2'</source> + <translation>Réinitialiser '%1' de '%2'</translation> + </message> + <message numerus="yes"> + <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1295"/> + <source>Reset '%1' of %n objects</source> + <translation> + <numerusform>Réinitialiser '%1' de %n objet</numerusform> + <numerusform>Réinitialiser '%1' de %n objets</numerusform> + </translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1384"/> + <source>Add dynamic property '%1' to '%2'</source> + <translation>Ajouter la propriété dynamique '%1' à '%2'</translation> + </message> + <message numerus="yes"> + <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1387"/> + <source>Add dynamic property '%1' to %n objects</source> + <translation> + <numerusform>Ajouter la propriété dynamique '%1' à %n objet</numerusform> + <numerusform>Ajouter la propriété dynamique '%1' à %n objets</numerusform> + </translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1473"/> + <source>Remove dynamic property '%1' from '%2'</source> + <translation>Supprimer la propriété dynamique '%1' de '%2'</translation> + </message> + <message numerus="yes"> + <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1476"/> + <source>Remove dynamic property '%1' from %n objects</source> + <translation> + <numerusform>Supprimer la propriété dynamique '%1' de %n objet</numerusform> + <numerusform>Supprimer la propriété dynamique '%1' de %n objets</numerusform> + </translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/scriptcommand.cpp" line="55"/> + <source>Change script</source> + <translation>Modifier le script</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="202"/> + <source>Change signals/slots</source> + <translation>Modifier signaux/slots</translation> + </message> +</context> +<context> + <name>ConnectDialog</name> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui" line="13"/> + <source>Configure Connection</source> + <translation>Configurer connexion</translation> + </message> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui" line="19"/> + <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui" line="59"/> + <source>GroupBox</source> + <translation>GroupBox</translation> + </message> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui" line="34"/> + <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui" line="74"/> + <source>Edit...</source> + <translation>Éditer...</translation> + </message> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui" line="99"/> + <source>Show signals and slots inherited from QWidget</source> + <translation>Afficher les signaux et slots hérités de QWidget</translation> + </message> +</context> +<context> + <name>ConnectionDelegate</name> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="643"/> + <source><object></source> + <translation><objet></translation> + </message> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="661"/> + <source><signal></source> + <translation><signal></translation> + </message> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="661"/> + <source><slot></source> + <translation><slot></translation> + </message> +</context> +<context> + <name>DPI_Chooser</name> + <message> + <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="69"/> + <source>Standard (96 x 96)</source> + <extracomment>Embedded device standard screen resolution</extracomment> + <translation>Standard (96 x 96)</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="71"/> + <source>Greenphone (179 x 185)</source> + <extracomment>Embedded device screen resolution</extracomment> + <translation>Greenphone (179 x 185)</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="73"/> + <source>High (192 x 192)</source> + <extracomment>Embedded device high definition screen resolution</extracomment> + <translatorcomment>"haute resolution" would be missleading</translatorcomment> + <translation>Grand (192 x 192)</translation> + </message> +</context> +<context> + <name>Designer</name> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="449"/> + <source>Qt Designer</source> + <translation>Qt Designer</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="459"/> + <source>This file contains top level spacers.<br>They have <b>NOT</b> been saved into the form.</source> + <translation>Ce fichier contient des ressorts de premier niveau. <br>Ils ne sont <b>PAS</b> sauvegardé dans le formulaire.</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="461"/> + <source>Perhaps you forgot to create a layout?</source> + <translation>Peut-être avez-vous oublié de créer un layout ?</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="634"/> + <source>Invalid UI file: The root element <ui> is missing.</source> + <translation>Fichier UI invalide. L'élément racine <ui> est manquant.</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="640"/> + <source>An error has occurred while reading the UI file at line %1, column %2: %3</source> + <translation>Une erreur est survenue lors de la lecture du fichier UI à la ligne %1, colonne %2: %3</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="666"/> + <source>This file cannot be read because it was created using %1.</source> + <translation>Ce fichier ne peut pas être lu car il a été créé à l'aide de %1.</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="680"/> + <source>This file was created using Designer from Qt-%1 and cannot be read.</source> + <translation>Ce fichier a été créé à l'aide du Designer de Qt-%1 et ne peut être lu.</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="710"/> + <source>The converted file could not be read.</source> + <translation>Le fichier converti ne peut pas être lu.</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="714"/> + <source>This file was created using Designer from Qt-%1 and will be converted to a new form by Qt Designer.</source> + <translation>Ce fichier a été créé par le Designer de Qt-%1 et sera converti au nouveau format par Qt Designer.</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="717"/> + <source>The old form has not been touched, but you will have to save the form under a new name.</source> + <translation>L'ancienne interface n'a pas été modifiée, vous devez sauvergarder l'interface sous un nouveau nom.</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="728"/> + <source>This file was created using Designer from Qt-%1 and could not be read: +%2</source> + <translation>Le fichier a été créé à l'aide de Designer de Qt-%1 et ne peut pas être lu : +%2</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="731"/> + <source>Please run it through <b>uic3&nbsp;-convert</b> to convert it to Qt-4's ui format.</source> + <translation>Veuillez le faire passer par <b>uic3&nbsp;-convert</b> pour le convertir au format de fichier de Qt 4.</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="762"/> + <source>This file cannot be read because the extra info extension failed to load.</source> + <translation>Ce fichier ne peut pas être lu car les informations d'extension n'ont pu être chargées.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="682"/> + <source>Unable to launch %1.</source> + <translation>Impossible de lancer %1.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="686"/> + <source>%1 timed out.</source> + <translation>%1 est arrivé à échéance.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qsimpleresource.cpp" line="339"/> + <source>Custom Widgets</source> + <translation>Widgets personnalisés</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qsimpleresource.cpp" line="351"/> + <source>Promoted Widgets</source> + <translation>Widgets promus</translation> + </message> +</context> +<context> + <name>DesignerMetaEnum</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="173"/> + <source>%1 is not a valid enumeration value of '%2'.</source> + <translation>%1 n'est pas une valeur d'énumeration valide de '%2'.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="178"/> + <source>'%1' could not be converted to an enumeration value of type '%2'.</source> + <translation>'%1' ne peut pas être converti en une valeur d'énumération de type '%2'.</translation> + </message> +</context> +<context> + <name>DesignerMetaFlags</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="256"/> + <source>'%1' could not be converted to a flag value of type '%2'.</source> + <translation>'%1' ne peut pas être converti en un drapeau de type '%2'.</translation> + </message> +</context> +<context> + <name>DeviceProfile</name> + <message> + <location filename="../tools/designer/src/lib/shared/deviceprofile.cpp" line="397"/> + <source>'%1' is not a number.</source> + <extracomment>Reading a number for an embedded device profile</extracomment> + <translation>'%1' n'est pas un nombre.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/deviceprofile.cpp" line="420"/> + <source>An invalid tag <%1> was encountered.</source> + <translation>La balise invalide <%1> a été rencontré.</translation> + </message> +</context> +<context> + <name>DeviceProfileDialog</name> + <message> + <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui" line="20"/> + <source>&Family</source> + <translation>&Famille</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui" line="33"/> + <source>&Point Size</source> + <translation>&Taille en points</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui" line="46"/> + <source>Style</source> + <translation>Style</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui" line="59"/> + <source>Device DPI</source> + <translation>PPP/DPI de l'appareil</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui" line="69"/> + <source>Name</source> + <translation>Nom</translation> + </message> +</context> +<context> + <name>DeviceSkin</name> + <message> + <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="79"/> + <source>The image file '%1' could not be loaded.</source> + <translation>Le fichier image '%1' n'a pas pu être chargé.</translation> + </message> + <message> + <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="143"/> + <source>The skin directory '%1' does not contain a configuration file.</source> + <translation>Le repertoire de revêtement '%1' ne contient pas un fichier de configuration.</translation> + </message> + <message> + <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="148"/> + <source>The skin configuration file '%1' could not be opened.</source> + <translation>Le fichier de configuration de revêtement '%1' ne peut pas être ouvert.</translation> + </message> + <message> + <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="154"/> + <source>The skin configuration file '%1' could not be read: %2</source> + <translation>Le fichier de configuration de revêtement '%1' ne peut pas être lu: %2</translation> + </message> + <message> + <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="224"/> + <source>Syntax error: %1</source> + <translation>Erreur de syntaxe : %1</translation> + </message> + <message> + <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="245"/> + <source>The skin "up" image file '%1' does not exist.</source> + <translation>Le fichier image "up" de revêtement '%1' n'existe pas.</translation> + </message> + <message> + <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="255"/> + <source>The skin "down" image file '%1' does not exist.</source> + <translation>Le fichier image "down" de revêtement '%1' n'existe pas.</translation> + </message> + <message> + <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="266"/> + <source>The skin "closed" image file '%1' does not exist.</source> + <translation>Le fichier image "closed" de revêtement '%1' n'existe pas.</translation> + </message> + <message> + <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="278"/> + <source>The skin cursor image file '%1' does not exist.</source> + <translation>Le fichier image de revêtement '%1' n'existe pas.</translation> + </message> + <message> + <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="303"/> + <source>Syntax error in area definition: %1</source> + <translation>Erreur de syntaxe dans la zone de définition : %1</translation> + </message> + <message> + <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="341"/> + <source>Mismatch in number of areas, expected %1, got %2.</source> + <translation>Incohérence dans le nombre de zones, %1 attendu, %2 reçu.</translation> + </message> +</context> +<context> + <name>EmbeddedOptionsControl</name> + <message> + <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="307"/> + <source><html><table><tr><td><b>Font</b></td><td>%1, %2</td></tr><tr><td><b>Style</b></td><td>%3</td></tr><tr><td><b>Resolution</b></td><td>%4 x %5</td></tr></table></html></source> + <extracomment>Format embedded device profile description</extracomment> + <translation><html><table><tr><td><b>Police</b></td><td>%1, %2</td></tr><tr><td><b>Style</b></td><td>%3</td></tr><tr><td><b>Résolution</b></td><td>%4 x %5</td></tr></table></html></translation> + </message> +</context> +<context> + <name>EmbeddedOptionsPage</name> + <message> + <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="410"/> + <source>Embedded Design</source> + <extracomment>Tab in preferences dialog</extracomment> + <translation>Design pour appareil mobile</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="420"/> + <source>Device Profiles</source> + <extracomment>EmbeddedOptionsControl group box"</extracomment> + <translation>Profils des appareils</translation> + </message> +</context> +<context> + <name>FontPanel</name> + <message> + <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="63"/> + <source>Font</source> + <translation>Police</translation> + </message> + <message> + <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="74"/> + <source>&Writing system</source> + <translation>&Système d'écriture</translation> + </message> + <message> + <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="77"/> + <source>&Family</source> + <translation>&Famille</translation> + </message> + <message> + <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="81"/> + <source>&Style</source> + <translation>&Style</translation> + </message> + <message> + <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="85"/> + <source>&Point size</source> + <translation>&Taille en points</translation> + </message> +</context> +<context> + <name>FontPropertyManager</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/fontpropertymanager.cpp" line="62"/> + <source>PreferDefault</source> + <translation>PreferDefault</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/fontpropertymanager.cpp" line="63"/> + <source>NoAntialias</source> + <translation>NoAntialias</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/fontpropertymanager.cpp" line="64"/> + <source>PreferAntialias</source> + <translation>PreferAntialias</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/fontpropertymanager.cpp" line="125"/> + <source>Antialiasing</source> + <translation>Antialiasing</translation> + </message> +</context> +<context> + <name>FormBuilder</name> + <message> + <location filename="../tools/designer/src/lib/uilib/formbuilderextra.cpp" line="359"/> + <source>Invalid stretch value for '%1': '%2'</source> + <extracomment>Parsing layout stretch values</extracomment> + <translation>Valeur d'extension invalide pour '%1' : '%2'</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/formbuilderextra.cpp" line="421"/> + <source>Invalid minimum size for '%1': '%2'</source> + <extracomment>Parsing grid layout minimum size values</extracomment> + <translation>Taille minimum invalide pour '%1' : '%2'</translation> + </message> +</context> +<context> + <name>FormEditorOptionsPage</name> + <message> + <location filename="../tools/designer/src/components/formeditor/formeditor_optionspage.cpp" line="91"/> + <source>%1 %</source> + <translation>%1 %</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formeditor_optionspage.cpp" line="95"/> + <source>Preview Zoom</source> + <translation>Zoom de visualisation</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formeditor_optionspage.cpp" line="97"/> + <source>Default Zoom</source> + <translation>Zoom par défaut</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formeditor_optionspage.cpp" line="126"/> + <source>Forms</source> + <extracomment>Tab in preferences dialog</extracomment> + <translation>Formulaires</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formeditor_optionspage.cpp" line="139"/> + <source>Default Grid</source> + <translation>Grille par défaut</translation> + </message> +</context> +<context> + <name>FormLayoutRowDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="6"/> + <source>Add Form Layout Row</source> + <translation>Ajouter une ligne de mise en page au formulaire</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="17"/> + <source>&Label text:</source> + <translation>&Texte du label :</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="40"/> + <source>Field &type:</source> + <translation>&Type du champ :</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="60"/> + <source>&Field name:</source> + <translation>&Nom du champ :</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="70"/> + <source>&Buddy:</source> + <translatorcomment>copain c'est un peu beaucoup ptet</translatorcomment> + <translation>&Copain :</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="87"/> + <source>&Row:</source> + <translation>&Ligne :</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="103"/> + <source>Label &name:</source> + <translation>&Nom du label :</translation> + </message> +</context> +<context> + <name>FormWindow</name> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1701"/> + <source>Unexpected element <%1></source> + <translation>Element inattendu : <%1></translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1708"/> + <source>Error while pasting clipboard contents at line %1, column %2: %3</source> + <translation>Erreur lors du collage du contenu du presse-papier à la ligne %1, colonne %2 : %3</translation> + </message> +</context> +<context> + <name>FormWindowSettings</name> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="54"/> + <source>Form Settings</source> + <translation>Configuration du formulaire</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="68"/> + <source>Layout &Default</source> + <translation>Mise en page par &défaut</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="83"/> + <source>&Spacing:</source> + <translation>&Espacements :</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="93"/> + <source>&Margin:</source> + <translation>&Marge :</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="112"/> + <source>&Layout Function</source> + <translation>&Fonction de mise en page</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="133"/> + <source>Ma&rgin:</source> + <translation>Ma&rge :</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="143"/> + <source>Spa&cing:</source> + <translation>Espa&cement :</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="166"/> + <source>&Pixmap Function</source> + <translation>Function de &pixmap</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="219"/> + <source>&Include Hints</source> + <translation>Indication d'&include</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="237"/> + <source>Grid</source> + <translation>Grille</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="244"/> + <source>Embedded Design</source> + <translation>Design pour appareil mobile</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="260"/> + <source>&Author</source> + <translation>&Auteur</translation> + </message> +</context> +<context> + <name>IconSelector</name> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="352"/> + <source>All Pixmaps (</source> + <translation>Tous les pixmaps (</translation> + </message> +</context> +<context> + <name>ItemPropertyBrowser</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="66"/> + <source>XX Icon Selected off</source> + <extracomment>Sample string to determinate the width for the first column of the list item property browser</extracomment> + <translation>XX Icon Selected off</translation> + </message> +</context> +<context> + <name>MainWindowBase</name> + <message> + <location filename="../tools/designer/src/designer/mainwindow.cpp" line="119"/> + <source>Main</source> + <extracomment>Not currently used (main tool bar)</extracomment> + <translation>Principal</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/mainwindow.cpp" line="125"/> + <source>File</source> + <translation>Fichier</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/mainwindow.cpp" line="126"/> + <source>Edit</source> + <translation>Édition</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/mainwindow.cpp" line="127"/> + <source>Tools</source> + <translation>Outils</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/mainwindow.cpp" line="128"/> + <source>Form</source> + <translation>Formulaire</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/mainwindow.cpp" line="135"/> + <source>Qt Designer</source> + <translation>Qt Designer</translation> + </message> +</context> +<context> + <name>NewForm</name> + <message> + <location filename="../tools/designer/src/designer/newform.cpp" line="78"/> + <source>Show this Dialog on Startup</source> + <translation>Afficher cette boîte de dialogue au démarrage</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/newform.cpp" line="79"/> + <source>C&reate</source> + <translation>C&réer</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/newform.cpp" line="80"/> + <source>Recent</source> + <translation>Récent</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/newform.cpp" line="83"/> + <source>New Form</source> + <translation>Nouveau formulaire</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/newform.cpp" line="112"/> + <source>&Close</source> + <translation>&Fermer</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/newform.cpp" line="115"/> + <source>&Open...</source> + <translation>&Ouvrir...</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/newform.cpp" line="119"/> + <source>&Recent Forms</source> + <translation>&Formulaires récents</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/newform.cpp" line="183"/> + <source>Read error</source> + <translation>Erreur de lecture</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/newform.cpp" line="206"/> + <source>A temporary form file could not be created in %1.</source> + <translation>Un fichier temporaire de formulaire n'a pas pu être créé dans %1.</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/newform.cpp" line="212"/> + <source>The temporary form file %1 could not be written.</source> + <translation>Le fichier temporaire de formulaire %1 n'a pas pu être écrit.</translation> + </message> +</context> +<context> + <name>ObjectInspectorModel</name> + <message> + <location filename="../tools/designer/src/components/objectinspector/objectinspectormodel.cpp" line="360"/> + <source>Object</source> + <translation>Objet</translation> + </message> + <message> + <location filename="../tools/designer/src/components/objectinspector/objectinspectormodel.cpp" line="361"/> + <source>Class</source> + <translation>Classe</translation> + </message> + <message> + <location filename="../tools/designer/src/components/objectinspector/objectinspectormodel.cpp" line="396"/> + <source>separator</source> + <translation>séparateur</translation> + </message> + <message> + <location filename="../tools/designer/src/components/objectinspector/objectinspectormodel.cpp" line="494"/> + <source><noname></source> + <translation><sans nom></translation> + </message> +</context> +<context> + <name>ObjectNameDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="158"/> + <source>Change Object Name</source> + <translation>Modifier le nom de l'objet</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="162"/> + <source>Object Name</source> + <translation>Nom de l'objet</translation> + </message> +</context> +<context> + <name>PluginDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/plugindialog.ui" line="54"/> + <source>Plugin Information</source> + <translation>Information du plugin</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/plugindialog.ui" line="80"/> + <source>1</source> + <translation>1</translation> + </message> +</context> +<context> + <name>PreferencesDialog</name> + <message> + <location filename="../tools/designer/src/designer/preferencesdialog.ui" line="20"/> + <source>Preferences</source> + <translation>Préférences</translation> + </message> +</context> +<context> + <name>PreviewConfigurationWidget</name> + <message> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="5"/> + <source>Form</source> + <translation>Formulaire</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="8"/> + <source>Print/Preview Configuration</source> + <translation>Configuration d'impression/prévisualisation</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="17"/> + <source>Style</source> + <translation>Style</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="27"/> + <source>Style sheet</source> + <translation>Feuille de style</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="46"/> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="53"/> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="74"/> + <source>...</source> + <translation>...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="62"/> + <source>Device skin</source> + <translation>Revêtement de l'appareil</translation> + </message> +</context> +<context> + <name>PromotionModel</name> + <message> + <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="112"/> + <source>Not used</source> + <extracomment>Usage of promoted widgets</extracomment> + <translation>Non utilisé</translation> + </message> +</context> +<context> + <name>Q3WizardContainer</name> + <message> + <location filename="../tools/designer/src/plugins/widgets/q3wizard/q3wizard_container.cpp" line="172"/> + <location filename="../tools/designer/src/plugins/widgets/q3wizard/q3wizard_container.cpp" line="177"/> + <source>Page</source> + <translation>Page</translation> + </message> +</context> +<context> + <name>QAbstractFormBuilder</name> + <message> + <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="206"/> + <source>Unexpected element <%1></source> + <translation>Élément imprévu <%1></translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="211"/> + <source>An error has occurred while reading the UI file at line %1, column %2: %3</source> + <translation>Une erreur s'est produite lors de la lecture du fichier UI à la ligne %1, colonne %2 : %3</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="217"/> + <source>Invalid UI file: The root element <ui> is missing.</source> + <translation>Fichier UI invalide : l'élément racine <ui> est manquant.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="336"/> + <source>The creation of a widget of the class '%1' failed.</source> + <translation>La création d'un widget de la classe '%1' a échoué.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="632"/> + <source>Attempt to add child that is not of class QWizardPage to QWizard.</source> + <translation>Tentative d'ajout d'enfant qui n'est pas de la classe QWizardPage à QWizard.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="718"/> + <source>Attempt to add a layout to a widget '%1' (%2) which already has a layout of non-box type %3. +This indicates an inconsistency in the ui-file.</source> + <translation>Tentative d'ajout d'un layout au widget '%1' (%2) qui a déjà un layout dont le type n'est pas boîte %3. +Ceci indique une incohérence dans le fichier ui.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="862"/> + <source>Empty widget item in %1 '%2'.</source> + <translation>Widget vide dans %1 '%2'.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="1542"/> + <source>Flags property are not supported yet.</source> + <translation>Les propriétés de type drapeau ne sont pas supportées.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="1623"/> + <source>While applying tab stops: The widget '%1' could not be found.</source> + <translation>Lors de l'application des arrêts de tabulation : le widget '%1' ne peut pas être trouvé.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="2531"/> + <source>Invalid QButtonGroup reference '%1' referenced by '%2'.</source> + <translation>Référence invalide '%1' à QButtonGroup, référencé par '%2'.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="3042"/> + <source>This version of the uitools library is linked without script support.</source> + <translation>Cette version de la bibliothèque uitools n'a pas le support des scripts.</translation> + </message> +</context> +<context> + <name>QAxWidgetPlugin</name> + <message> + <location filename="../tools/designer/src/plugins/activeqt/qaxwidgetplugin.cpp" line="75"/> + <source>ActiveX control</source> + <translation>Control ActiveX</translation> + </message> + <message> + <location filename="../tools/designer/src/plugins/activeqt/qaxwidgetplugin.cpp" line="80"/> + <source>ActiveX control widget</source> + <translation>Widget control ActiveX</translation> + </message> +</context> +<context> + <name>QAxWidgetTaskMenu</name> + <message> + <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="119"/> + <source>Set Control</source> + <translation>Définir le contrôle</translation> + </message> + <message> + <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="120"/> + <source>Reset Control</source> + <translation>Réinitialiser le contrôle</translation> + </message> + <message> + <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="161"/> + <source>Licensed Control</source> + <translation>Contrôle licencié</translation> + </message> + <message> + <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="162"/> + <source>The control requires a design-time license</source> + <translation>Le contrôle requiert une license par interface</translation> + </message> +</context> +<context> + <name>QCoreApplication</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="83"/> + <source>%1 is not a promoted class.</source> + <translation>%1 n'est pas une classe promue.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="148"/> + <source>The base class %1 is invalid.</source> + <translation>La classe de base %1 est invalide.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="155"/> + <source>The class %1 already exists.</source> + <translation>La classe %1 existe déjà.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="164"/> + <source>Promoted Widgets</source> + <translation>Widgets promus</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="290"/> + <source>The class %1 cannot be removed</source> + <translation>La classe %1 ne peut pas être retirée</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="299"/> + <source>The class %1 cannot be removed because it is still referenced.</source> + <translation>La classe %1 ne peut pas être retirée car elle est toujours référencée.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="309"/> + <source>The class %1 cannot be renamed</source> + <translation>La classe %1 ne peut pas être renommée</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="316"/> + <source>The class %1 cannot be renamed to an empty name.</source> + <translation>La classe %1 ne peut pas être renommé avec un nom vide.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="321"/> + <source>There is already a class named %1.</source> + <translation>Une classe existe déjà avec le nom %1.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="350"/> + <source>Cannot set an empty include file.</source> + <translation>Impossible de créer un fichier include vide.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/formscriptrunner.cpp" line="88"/> + <source>Exception at line %1: %2</source> + <translation>Exception à la ligne %1 : %2</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/formscriptrunner.cpp" line="124"/> + <source>Unknown error</source> + <translation>Erreur inconnue</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/formscriptrunner.cpp" line="174"/> + <source>An error occurred while running the script for %1: %2 +Script: %3</source> + <translation>Une erreur s'est produite lors de l'exécution du script de %1 : %2 +Script : %3</translation> + </message> +</context> +<context> + <name>QDesigner</name> + <message> + <location filename="../tools/designer/src/designer/qdesigner.cpp" line="141"/> + <source>%1 - warning</source> + <translation>Avertissement - %1</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner.cpp" line="237"/> + <source>Qt Designer</source> + <translation>Qt Designer</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner.cpp" line="238"/> + <source>This application cannot be used for the Console edition of Qt</source> + <translation>Cette application ne peut pas être utilisée avec l'édition console de Qt</translation> + </message> +</context> +<context> + <name>QDesignerActions</name> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="128"/> + <source>Saved %1.</source> + <translation>%1 sauvé.</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="154"/> + <source>%1 already exists. +Do you want to replace it?</source> + <translation>%1 existe déjà. +Voulez-vous le remplacer ?</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="178"/> + <source>Edit Widgets</source> + <translation>Éditer les widgets</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="179"/> + <source>&New...</source> + <translation>&Nouveau...</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="180"/> + <source>&Open...</source> + <translation>&Ouvrir...</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="181"/> + <source>&Save</source> + <translation>&Enregistrer</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="182"/> + <source>Save &As...</source> + <translation>Enregistrer &sous...</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="183"/> + <source>Save A&ll</source> + <translation>Enregistrer &tout</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="184"/> + <source>Save As &Template...</source> + <translation>Sauver comme &modèle...</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="185"/> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1086"/> + <source>&Close</source> + <translation>&Fermer</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="186"/> + <source>Save &Image...</source> + <translation>Enregistrer &image...</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="187"/> + <source>&Print...</source> + <translation>Im&primer...</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="188"/> + <source>&Quit</source> + <translation>&Quitter</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="190"/> + <source>View &Code...</source> + <translation>&Visualizer le code...</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="191"/> + <source>&Minimize</source> + <translation>&Minimiser</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="193"/> + <source>Bring All to Front</source> + <translation>Amener tout au premier plan</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="195"/> + <source>Preferences...</source> + <translation>Préférences...</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="196"/> + <source>Additional Fonts...</source> + <translation>Polices additionnelles...</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="258"/> + <source>ALT+CTRL+S</source> + <translation>ALT+CTRL+S</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="260"/> + <source>CTRL+SHIFT+S</source> + <translation>CTRL+SHIFT+S</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="373"/> + <source>CTRL+R</source> + <translation>CTRL+R</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="391"/> + <source>CTRL+M</source> + <translation>CTRL+M</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="422"/> + <source>Qt Designer &Help</source> + <translation>&Aide de Qt Designer</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="429"/> + <source>Current Widget Help</source> + <translation>Aide du widget courant</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="436"/> + <source>What's New in Qt Designer?</source> + <translation>Quoi de neuf dans Qt Designer ?</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="443"/> + <source>About Plugins</source> + <translation>À propos des plugins</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="449"/> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1050"/> + <source>About Qt Designer</source> + <translation>À propos de Qt Designer</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="455"/> + <source>About Qt</source> + <translation>À propos de Qt</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="493"/> + <source>Clear &Menu</source> + <translation>Réinitialiser le &menu</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="499"/> + <source>&Recent Forms</source> + <translation>Formulaires &récents</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="576"/> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="773"/> + <source>Open Form</source> + <translation>Ouvrir le formulaire</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="577"/> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="614"/> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="774"/> + <source>Designer UI files (*.%1);;All Files (*)</source> + <translation>Fichier UI de Qt Designer (*.%1);;Tous les fichiers(*)</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="614"/> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="862"/> + <source>Save Form As</source> + <translation>Enregistrer le formulaire sous</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="701"/> + <source>Designer</source> + <translation>Designer</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="701"/> + <source>Feature not implemented yet!</source> + <translation>Cette fonctionnalité n'est pas encore implémentée !</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="716"/> + <source>Code generation failed</source> + <translation>La génération du code à échoué</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="760"/> + <source>Read error</source> + <translation>Erreur de lecture</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="761"/> + <source>%1 +Do you want to update the file location or generate a new form?</source> + <translation>%1 +Voulez vous mettre à jour l'emplacement du fichier ou générer un nouveau formulaire ?</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="764"/> + <source>&Update</source> + <translation>&Mettre à jour</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="765"/> + <source>&New Form</source> + <translation>&Nouveau formulaire</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="842"/> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="882"/> + <source>Save Form?</source> + <translation>Sauver le formulaire ?</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="843"/> + <source>Could not open file</source> + <translation>Impossible d'ouvrir le fichier</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="847"/> + <source>The file %1 could not be opened. +Reason: %2 +Would you like to retry or select a different file?</source> + <translation>Le fichier %1 ne peut pas être ouvert. +Raison : %2 +Voulez-vous réessayer ou sélectionner un fichier différent ?</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="853"/> + <source>Select New File</source> + <translation>Sélectionner un nouveau fichier</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="883"/> + <source>Could not write file</source> + <translation>Impossible d'écrire le fichier</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="886"/> + <source>It was not possible to write the entire file %1 to disk. +Reason:%2 +Would you like to retry?</source> + <translation>Il n'a pas été possible d'écrire l'intégralité du fichier %1 sur le disque. +Raison : %2 +Voulez-vous réessayer ?</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1044"/> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1078"/> + <source>Assistant</source> + <translation>Assistant</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1084"/> + <source>&Close Preview</source> + <translation>&Fermer la prévisualisation</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1125"/> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1148"/> + <source>The backup file %1 could not be written.</source> + <translation>Le fichier de backup %1 n'a pas pu être écrit.</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1255"/> + <source>The backup directory %1 could not be created.</source> + <translation>Le dossier de backup %1 n'a pas pu être créé.</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1261"/> + <source>The temporary backup directory %1 could not be created.</source> + <translation>Le dossier temporaire de backup %1 n'a pas pu être créé.</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1291"/> + <source>Preview failed</source> + <translation>La prévisualisation a échoué</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1315"/> + <source>Image files (*.%1)</source> + <translation>Fichiers image (*.%1)</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1324"/> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1341"/> + <source>Save Image</source> + <translation>Sauver image</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1337"/> + <source>Saved image %1.</source> + <translation>Image %1 sauvée.</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1342"/> + <source>The file %1 could not be written.</source> + <translation>Le fichier %1 n'a pas pu être écrit.</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1355"/> + <source>Please close all forms to enable the loading of additional fonts.</source> + <translation>Veuillez fermer tous les formulaires pour activer le chargement de polices additionnelles.</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1407"/> + <source>Printed %1.</source> + <translation>Impression de %1 terminée.</translation> + </message> +</context> +<context> + <name>QDesignerAppearanceOptionsPage</name> + <message> + <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.cpp" line="138"/> + <source>Appearance</source> + <extracomment>Tab in preferences dialog</extracomment> + <translation>Apparence</translation> + </message> +</context> +<context> + <name>QDesignerAppearanceOptionsWidget</name> + <message> + <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.cpp" line="85"/> + <source>Docked Window</source> + <translation>Fenêtre ancrable</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.cpp" line="86"/> + <source>Multiple Top-Level Windows</source> + <translation>Fenêtres multiples</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.cpp" line="91"/> + <source>Toolwindow Font</source> + <translation>Police des fenêtre d'outils</translation> + </message> +</context> +<context> + <name>QDesignerAxWidget</name> + <message> + <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="91"/> + <source>Reset control</source> + <translation>Réinitialiser les contrôles</translation> + </message> + <message> + <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="93"/> + <source>Set control</source> + <translation>Définir les contrôles</translation> + </message> + <message> + <location filename="../tools/designer/src/plugins/activeqt/qdesigneraxwidget.cpp" line="179"/> + <source>Control loaded</source> + <translation>Contrôle chargé</translation> + </message> + <message> + <location filename="../tools/designer/src/plugins/activeqt/qdesigneraxwidget.cpp" line="219"/> + <source>A COM exception occurred when executing a meta call of type %1, index %2 of "%3".</source> + <translation>Une exception COM a été levée lors de l'execution du meta-appel de type %1, indice %2 de "%3".</translation> + </message> +</context> +<context> + <name>QDesignerFormBuilder</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_formbuilder.cpp" line="89"/> + <source>Script errors occurred:</source> + <translation>Erreurs du script :</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_formbuilder.cpp" line="396"/> + <source>The preview failed to build.</source> + <translation>La construction de la prévisualisation a échoué.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_formbuilder.cpp" line="461"/> + <source>Designer</source> + <translation>Designer</translation> + </message> +</context> +<context> + <name>QDesignerFormWindow</name> + <message> + <location filename="../tools/designer/src/designer/qdesigner_formwindow.cpp" line="217"/> + <source>%1 - %2[*]</source> + <translation>%1 - %2[*]</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_formwindow.cpp" line="227"/> + <source>Save Form?</source> + <translation>Enregistrer le formulaire ?</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_formwindow.cpp" line="228"/> + <source>Do you want to save the changes to this document before closing?</source> + <translation>Voulez-vous enregistrer les changements de ce document avant de le fermer ?</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_formwindow.cpp" line="230"/> + <source>If you don't save, your changes will be lost.</source> + <translation>Si vous ne sauvegardez pas, les changements seront perdus.</translation> + </message> +</context> +<context> + <name>QDesignerMenu</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="106"/> + <source>Type Here</source> + <translation>Taper ici</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="109"/> + <source>Add Separator</source> + <translation>Ajouter séparateur</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="480"/> + <source>Insert separator</source> + <translation>Insérer séparateur</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="485"/> + <source>Remove separator</source> + <translation>Retirer séparateur</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="487"/> + <source>Remove action '%1'</source> + <translation>Supprimer l'action '%1'</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="512"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="1162"/> + <source>Add separator</source> + <translation>Ajouter séparateur</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="814"/> + <source>Insert action</source> + <translation>Insérer action</translation> + </message> +</context> +<context> + <name>QDesignerMenuBar</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="110"/> + <source>Type Here</source> + <translation>Taper ici</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="408"/> + <source>Remove Menu '%1'</source> + <translation>Supprimer menu '%1'</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="420"/> + <source>Remove Menu Bar</source> + <translation>Supprimer barre de menu</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="490"/> + <source>Menu</source> + <translation>Menu</translation> + </message> +</context> +<context> + <name>QDesignerPluginManager</name> + <message> + <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="271"/> + <source>An XML error was encountered when parsing the XML of the custom widget %1: %2</source> + <translation>Une erreur XML a été rencontrée lors de l'analyse grammaticale du XML provenant du widget personnalisé %1 : %2</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="276"/> + <source>A required attribute ('%1') is missing.</source> + <translation>Un attribut obligatoire ('%1') est manquant.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="314"/> + <source>An invalid property specification ('%1') was encountered. Supported types: %2</source> + <translation>Une spécification invalide de propriété ('%1') a été rencontrée. Types supportés : %2</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="334"/> + <source>'%1' is not a valid string property specification.</source> + <translation>'%1' n'est pas une spécification valide de propriété chaîne de caractères.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="374"/> + <source>The XML of the custom widget %1 does not contain any of the elements <widget> or <ui>.</source> + <translation>Le XML du widget personnalisé %1 ne contient aucun des éléments <widget> ou <ui>.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="386"/> + <source>The class attribute for the class %1 is missing.</source> + <translation>L'attribut de classe est manquant pour la classe %1.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="390"/> + <source>The class attribute for the class %1 does not match the class name %2.</source> + <translation>L'attribut de classe pour la classe %1 ne correspond pas au nom de la classe %2.</translation> + </message> +</context> +<context> + <name>QDesignerPropertySheet</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_propertysheet.cpp" line="754"/> + <source>Dynamic Properties</source> + <translation>Propriétés dynamiques</translation> + </message> +</context> +<context> + <name>QDesignerResource</name> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="1223"/> + <source>The layout type '%1' is not supported, defaulting to grid.</source> + <translation>Le type de layout '%1' n'est pas supporté, replacement par une grille.</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="1466"/> + <source>The container extension of the widget '%1' (%2) returned a widget not managed by Designer '%3' (%4) when queried for page #%5. +Container pages should only be added by specifying them in XML returned by the domXml() method of the custom widget.</source> + <translation>L'extension du widget '%1' (%2) a retourné un widget non géré par Designer '%3' (%4) lors de la requête pour la page #%5. +Les pages du conteneur ne devraient être ajoutées que par spécification dans le XML retourné par la méthode domXml() du widget personnalisé.</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2065"/> + <source>Unexpected element <%1></source> + <extracomment>Parsing clipboard contents</extracomment> + <translation>Élément inattendu <%1></translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2071"/> + <source>Error while pasting clipboard contents at line %1, column %2: %3</source> + <extracomment>Parsing clipboard contents</extracomment> + <translation>Erreur lors du collage du contenu du presse-papier à la ligne %1, colonne %2 : %3</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2077"/> + <source>Error while pasting clipboard contents: The root element <ui> is missing.</source> + <extracomment>Parsing clipboard contents</extracomment> + <translation>Erreur lors du collage du contenu du presse-papier. L'élément racine <ui> est manquant.</translation> + </message> +</context> +<context> + <name>QDesignerSharedSettings</name> + <message> + <location filename="../tools/designer/src/lib/shared/shared_settings.cpp" line="83"/> + <source>The template path %1 could not be created.</source> + <translation>Le chemin du modèle %1 n'a pas pu être créé.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/shared_settings.cpp" line="267"/> + <source>An error has been encountered while parsing device profile XML: %1</source> + <translation>Une erreur a été rencontrée lors de l'analyse grammaticale du XML du profil de l'appareil : %1</translation> + </message> +</context> +<context> + <name>QDesignerToolWindow</name> + <message> + <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="190"/> + <source>Property Editor</source> + <translation>Éditeur de propriétés</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="244"/> + <source>Action Editor</source> + <translation>Éditeur d'actions</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="286"/> + <source>Object Inspector</source> + <translation>Inspecteur d'objet</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="321"/> + <source>Resource Browser</source> + <translatorcomment>plural</translatorcomment> + <translation>Explorateur de ressources</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="355"/> + <source>Signal/Slot Editor</source> + <translation>Éditeur de signaux et slots</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="396"/> + <source>Widget Box</source> + <translation>Boîte de widget</translation> + </message> +</context> +<context> + <name>QDesignerWorkbench</name> + <message> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="199"/> + <source>&File</source> + <translation>&Fichier</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="201"/> + <source>Edit</source> + <translation>Édition</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="205"/> + <source>F&orm</source> + <translation>F&ormulaire</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="206"/> + <source>Preview in</source> + <translation>Prévisualisation avec</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="210"/> + <source>&View</source> + <translation>Afficha&ge</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="212"/> + <source>&Settings</source> + <translation>&Configuration</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="214"/> + <source>&Window</source> + <translation>Fe&nêtre</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="216"/> + <source>&Help</source> + <translation>&Aide</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="239"/> + <source>Toolbars</source> + <translation>Barre d'outils</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="416"/> + <source>Widget Box</source> + <translation>Boîte de widget</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="704"/> + <source>Save Forms?</source> + <translation>Enregistrer les formulaires ?</translation> + </message> + <message numerus="yes"> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="705"/> + <source>There are %n forms with unsaved changes. Do you want to review these changes before quitting?</source> + <translation> + <numerusform>Il y a %n formulaire avec des changements non-enregistrés. Voulez-vous vérifier les changements avant de quitter?</numerusform> + <numerusform>Il y a %n formulaires avec des changements non-enregistrés. Voulez-vous vérifier les changements avant de quitter?</numerusform> + </translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="708"/> + <source>If you do not review your documents, all your changes will be lost.</source> + <translation>Si vous ne vérifiez pas vos documents, tous les changements seront perdus.</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="709"/> + <source>Discard Changes</source> + <translation>Abandonner les changements</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="711"/> + <source>Review Changes</source> + <translation>Vérifier les changements</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="806"/> + <source>Backup Information</source> + <translation>Informations de sauvegarde</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="807"/> + <source>The last session of Designer was not terminated correctly. Backup files were left behind. Do you want to load them?</source> + <translation>La dernière session de Designer n'a pas été fermée correctement. Des fichiers de sauvegarde existent. Voulez-vous les charger ?</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="918"/> + <source>The file <b>%1</b> could not be opened.</source> + <translation>Le fichier <b>%1</b> n'a pas pu être ouvert.</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="964"/> + <source>The file <b>%1</b> is not a valid Designer UI file.</source> + <translation>Le fichier <b>%1</b> n'est pas un fichier valide d'UI de Designer.</translation> + </message> +</context> +<context> + <name>QFormBuilder</name> + <message> + <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="163"/> + <source>An empty class name was passed on to %1 (object name: '%2').</source> + <extracomment>Empty class name passed to widget factory method</extracomment> + <translation>Un nom de classe vide a été passé à %1 (nom d'objet '%2').</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="219"/> + <source>QFormBuilder was unable to create a custom widget of the class '%1'; defaulting to base class '%2'.</source> + <translation>QFormBuilder n'a pas pu créer le widget personnalisé de classe '%1'; passage à la classe de base '%2'.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="225"/> + <source>QFormBuilder was unable to create a widget of the class '%1'.</source> + <translation>QFormBuilder n'a pas pu créer un widget de classe '%1'.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="286"/> + <source>The layout type `%1' is not supported.</source> + <translation>Le type de layout '%1' n'est pas supporté.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/properties.cpp" line="106"/> + <source>The set-type property %1 could not be read.</source> + <translation>Le type du setteur de propriété %1 n'a pas pu être lu.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/properties.cpp" line="129"/> + <source>The enumeration-type property %1 could not be read.</source> + <translation>Le type d'énumeration de propriété %1 n'a pas pu être lu.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/properties.cpp" line="319"/> + <source>Reading properties of the type %1 is not supported yet.</source> + <translation>La lecture des propriétés de type %1 n'est pas supporté.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/uilib/properties.cpp" line="585"/> + <source>The property %1 could not be written. The type %2 is not supported yet.</source> + <translation>La propriété %1 ne peut pas être écrite. Le type %2 n'est pas encore supporté.</translation> + </message> +</context> +<context> + <name>QStackedWidgetEventFilter</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="194"/> + <source>Previous Page</source> + <translation>Page précédente</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="195"/> + <source>Next Page</source> + <translation>Page suivante</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="196"/> + <source>Delete</source> + <translation>Supprimer</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="197"/> + <source>Before Current Page</source> + <translation>Avant la page courante</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="198"/> + <source>After Current Page</source> + <translation>Après la page courante</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="199"/> + <source>Change Page Order...</source> + <translation>Modifier l'ordre des pages...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="271"/> + <source>Change Page Order</source> + <translation>Modifier l'ordre des pages</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="320"/> + <source>Page %1 of %2</source> + <translation>Page %1 de %2</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="330"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="334"/> + <source>Insert Page</source> + <translation>Insérer page</translation> + </message> +</context> +<context> + <name>QStackedWidgetPreviewEventFilter</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="181"/> + <source>Go to previous page of %1 '%2' (%3/%4).</source> + <translation>Aller à la page précédente de %1 '%2' (%3/%4).</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="185"/> + <source>Go to next page of %1 '%2' (%3/%4).</source> + <translation>Aller à la page suivante de %1 '%2' (%3/%4).</translation> + </message> +</context> +<context> + <name>QTabWidgetEventFilter</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="89"/> + <source>Delete</source> + <translation>Supprimer</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="90"/> + <source>Before Current Page</source> + <translation>Avant la page courante</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="91"/> + <source>After Current Page</source> + <translation>Après la page courante</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="374"/> + <source>Page %1 of %2</source> + <translation>Page %1 de %2</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="384"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="388"/> + <source>Insert Page</source> + <translation>Insérer page</translation> + </message> +</context> +<context> + <name>QToolBoxHelper</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="64"/> + <source>Delete Page</source> + <translation>Supprimer page</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="65"/> + <source>Before Current Page</source> + <translation>Avant la page courante</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="66"/> + <source>After Current Page</source> + <translation>Après la page courante</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="67"/> + <source>Change Page Order...</source> + <translation>Modifier l'ordre des pages...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="183"/> + <source>Change Page Order</source> + <translation>Modifier l'ordre de pages</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="227"/> + <source>Page %1 of %2</source> + <translation>Page %1 de %2</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="239"/> + <source>Insert Page</source> + <translation>Insérer page</translation> + </message> +</context> +<context> + <name>QtBoolEdit</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="226"/> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="236"/> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="261"/> + <source>True</source> + <translation>Vrai</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="236"/> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="261"/> + <source>False</source> + <translation>Faux</translation> + </message> +</context> +<context> + <name>QtBoolPropertyManager</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="1469"/> + <source>True</source> + <translation>Vrai</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="1470"/> + <source>False</source> + <translation>Faux</translation> + </message> +</context> +<context> + <name>QtCharEdit</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="1581"/> + <source>Clear Char</source> + <translation>Effacer caractère</translation> + </message> +</context> +<context> + <name>QtColorEditWidget</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="2186"/> + <source>...</source> + <translation>...</translation> + </message> +</context> +<context> + <name>QtColorPropertyManager</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="6213"/> + <source>Red</source> + <translation>Rouge</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="6221"/> + <source>Green</source> + <translation>Vert</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="6229"/> + <source>Blue</source> + <translation>Bleu</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="6237"/> + <source>Alpha</source> + <translation>Alpha</translation> + </message> +</context> +<context> + <name>QtCursorDatabase</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="55"/> + <source>Arrow</source> + <translation>Flèche</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="57"/> + <source>Up Arrow</source> + <translation>Flèche vers le haut</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="59"/> + <source>Cross</source> + <translation>Croix</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="61"/> + <source>Wait</source> + <translation>Attendre</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="63"/> + <source>IBeam</source> + <translation>IBeam</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="65"/> + <source>Size Vertical</source> + <translation>Redimensionner verticalement</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="67"/> + <source>Size Horizontal</source> + <translation>Redimensionner horizontalement</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="69"/> + <source>Size Backslash</source> + <translation>Redimensionner diagonale droite</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="71"/> + <source>Size Slash</source> + <translation>Redimensionner diagonale gauche</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="73"/> + <source>Size All</source> + <translation>Redimensionner</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="75"/> + <source>Blank</source> + <translation>Vide</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="77"/> + <source>Split Vertical</source> + <translation>Scinder verticalement</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="79"/> + <source>Split Horizontal</source> + <translation>Scinder horizontalement</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="81"/> + <source>Pointing Hand</source> + <translation>Pointeur index</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="83"/> + <source>Forbidden</source> + <translation>Interdit</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="85"/> + <source>Open Hand</source> + <translation>Main ouverte</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="87"/> + <source>Closed Hand</source> + <translation>Main fermée</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="89"/> + <source>What's This</source> + <translation>Qu'est-ce que c'est ?</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="91"/> + <source>Busy</source> + <translation>Occupé</translation> + </message> +</context> +<context> + <name>QtFontEditWidget</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="2384"/> + <source>...</source> + <translation>...</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="2404"/> + <source>Select Font</source> + <translation>Selectionner police</translation> + </message> +</context> +<context> + <name>QtFontPropertyManager</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5886"/> + <source>Family</source> + <translation>Famille</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5899"/> + <source>Point Size</source> + <translation>Taille en points</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5907"/> + <source>Bold</source> + <translation>Gras</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5914"/> + <source>Italic</source> + <translation>Italique</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5921"/> + <source>Underline</source> + <translation>Souligné</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5928"/> + <source>Strikeout</source> + <translation>Barré</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5935"/> + <source>Kerning</source> + <translation>Crénage</translation> + </message> +</context> +<context> + <name>QtGradientDialog</name> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientdialog.ui" line="53"/> + <source>Edit Gradient</source> + <translation>Modifier le gradient</translation> + </message> +</context> +<context> + <name>QtGradientEditor</name> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="53"/> + <source>Form</source> + <translation>Formulaire</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="101"/> + <source>Gradient Editor</source> + <translation>Éditeur de gradient</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="104"/> + <source>This area shows a preview of the gradient being edited. It also allows you to edit parameters specific to the gradient's type such as start and final point, radius, etc. by drag & drop.</source> + <translation>Cette zone montre une prévisualisation du gradient édité. Elle permet aussi d'éditer les paramètres spécifiques au type de gradient tel que les points de départ et d'arrivée, le rayon, etc. par glisser-déposer.</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="120"/> + <source>1</source> + <translation>1</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="155"/> + <source>2</source> + <translation>2</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="190"/> + <source>3</source> + <translation>3</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="225"/> + <source>4</source> + <translation>4</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="260"/> + <source>5</source> + <translation>5</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="295"/> + <source>Gradient Stops Editor</source> + <translation>Éditeur de point d'arrêt du gradient</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="298"/> + <source>This area allows you to edit gradient stops. Double click on the existing stop handle to duplicate it. Double click outside of the existing stop handles to create a new stop. Drag & drop the handle to reposition it. Use right mouse button to popup context menu with extra actions.</source> + <translation>Cette zone vous permet d'éditer les points d'arrêt du gardient. Double-cliquez sur un point d'arrêt existant pour le dupliquer. Double-cliquez à l'exterieur d'un point d'arrêt pour en créer un nouveau. Glissez-déposez un point pour le repositionner. Utilisez le bouton droit de la souris pour afficher le menu contextuel avec des actions supplémentaires.</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="311"/> + <source>Zoom</source> + <translation>Zoom</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="330"/> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="333"/> + <source>Reset Zoom</source> + <translation>Réinitialiser le zoom</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="346"/> + <source>Position</source> + <translation>Position</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="365"/> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="414"/> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="436"/> + <source>Hue</source> + <translation>Teinte</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="368"/> + <source>H</source> + <translation>T</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="455"/> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="504"/> + <source>Saturation</source> + <translation>Saturation</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="458"/> + <source>S</source> + <translation>S</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="526"/> + <source>Sat</source> + <translation>Sat</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="545"/> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="594"/> + <source>Value</source> + <translation>Valeur</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="548"/> + <source>V</source> + <translation>V</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="616"/> + <source>Val</source> + <translation>Val</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="635"/> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="684"/> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="706"/> + <source>Alpha</source> + <translation>Alpha</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="638"/> + <source>A</source> + <translation>A</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="719"/> + <source>Type</source> + <translation>Type</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="732"/> + <source>Spread</source> + <translation>Étendue</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="751"/> + <source>Color</source> + <translation>Couleur</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="764"/> + <source>Current stop's color</source> + <translation>Couleur du point d'arrêt courant</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="786"/> + <source>Show HSV specification</source> + <translation>Montrer les spécifications TSV/HSV</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="789"/> + <source>HSV</source> + <translation>TSV/HSV</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="811"/> + <source>Show RGB specification</source> + <translation>Affichier les spécifications RGB</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="814"/> + <source>RGB</source> + <translation>RGB</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="842"/> + <source>Current stop's position</source> + <translation>Position du point d'arrêt courant</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1030"/> + <source>%</source> + <translation>%</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1141"/> + <source>Zoom In</source> + <translation>Zoomer</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1148"/> + <source>Zoom Out</source> + <translation>Dézoomer</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1183"/> + <source>Toggle details extension</source> + <translation>Inverser les détails d'exention</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1186"/> + <source>></source> + <translation>></translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1205"/> + <source>Linear Type</source> + <translation>Type linéaire</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1208"/> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1230"/> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1252"/> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1274"/> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1296"/> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1318"/> + <source>...</source> + <translation>...</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1227"/> + <source>Radial Type</source> + <translation>Type radial</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1249"/> + <source>Conical Type</source> + <translation>Type conique</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1271"/> + <source>Pad Spread</source> + <translation>Étendue par remplissage</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1293"/> + <source>Repeat Spread</source> + <translation>Étendue par répétition</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1315"/> + <source>Reflect Spread</source> + <translation>Étendue par réflexion</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="431"/> + <source>Start X</source> + <translation>X de départ</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="435"/> + <source>Start Y</source> + <translation>Y de départ</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="439"/> + <source>Final X</source> + <translation>X de fin</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="443"/> + <source>Final Y</source> + <translation>Y de fin</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="450"/> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="474"/> + <source>Central X</source> + <translation>X central</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="454"/> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="478"/> + <source>Central Y</source> + <translation>Y central</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="458"/> + <source>Focal X</source> + <translation>X focal</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="462"/> + <source>Focal Y</source> + <translation>Y focal</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="466"/> + <source>Radius</source> + <translation>Rayon</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="482"/> + <source>Angle</source> + <translation>Angle</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="770"/> + <source>Linear</source> + <translation>Linéaire</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="771"/> + <source>Radial</source> + <translation>Radial</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="772"/> + <source>Conical</source> + <translation>Conique</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="792"/> + <source>Pad</source> + <translation>Remplissage</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="793"/> + <source>Repeat</source> + <translation>Répéter</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="794"/> + <source>Reflect</source> + <translation>Réflexion</translation> + </message> +</context> +<context> + <name>QtGradientStopsWidget</name> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="947"/> + <source>New Stop</source> + <translation>Nouveau point d'arrêt</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="948"/> + <source>Delete</source> + <translation>Supprimer</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="949"/> + <source>Flip All</source> + <translation>Tout renverser</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="950"/> + <source>Select All</source> + <translation>Tout sélectionner</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="951"/> + <source>Zoom In</source> + <translation>Zoomer</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="952"/> + <source>Zoom Out</source> + <translation>Dézoomer</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="953"/> + <source>Reset Zoom</source> + <translation>Réinitialiser le zoom</translation> + </message> +</context> +<context> + <name>QtGradientView</name> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui" line="13"/> + <source>Gradient View</source> + <translation>Vue du gradient</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui" line="39"/> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="208"/> + <source>New...</source> + <translation>Nouveau...</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui" line="58"/> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="209"/> + <source>Edit...</source> + <translation>Éditer...</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui" line="77"/> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="210"/> + <source>Rename</source> + <translation>Renommer</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui" line="96"/> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="211"/> + <source>Remove</source> + <translation>Retirer</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="107"/> + <source>Grad</source> + <translation>Gradient</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="133"/> + <source>Remove Gradient</source> + <translation>Retirer gradient</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="134"/> + <source>Are you sure you want to remove the selected gradient?</source> + <translation>Êtes-vous sûr de vouloir supprimer le gradient sélectionné ?</translation> + </message> +</context> +<context> + <name>QtGradientViewDialog</name> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientviewdialog.ui" line="53"/> + <source>Select Gradient</source> + <translation>Sélectionner gradient</translation> + </message> +</context> +<context> + <name>QtKeySequenceEdit</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="312"/> + <source>Clear Shortcut</source> + <translation>Effacer les racourcis</translation> + </message> +</context> +<context> + <name>QtLocalePropertyManager</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2394"/> + <source>%1, %2</source> + <translation>%1, %2</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2447"/> + <source>Language</source> + <translation>Langue</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2455"/> + <source>Country</source> + <translation>Pays</translation> + </message> +</context> +<context> + <name>QtPointFPropertyManager</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2866"/> + <source>(%1, %2)</source> + <translation>(%1, %2)</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2937"/> + <source>X</source> + <translation>X</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2945"/> + <source>Y</source> + <translation>Y</translation> + </message> +</context> +<context> + <name>QtPointPropertyManager</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2625"/> + <source>(%1, %2)</source> + <translation>(%1, %2)</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2662"/> + <source>X</source> + <translation>X</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2669"/> + <source>Y</source> + <translation>Y</translation> + </message> +</context> +<context> + <name>QtPropertyBrowserUtils</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="176"/> + <source>[%1, %2, %3] (%4)</source> + <translation>[%1, %2, %3] (%4)</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="206"/> + <source>[%1, %2]</source> + <translation>[%1, %2]</translation> + </message> +</context> +<context> + <name>QtRectFPropertyManager</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4375"/> + <source>[(%1, %2), %3 x %4]</source> + <translation>[(%1, %2), %3 x %4]</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4531"/> + <source>X</source> + <translation>X</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4539"/> + <source>Y</source> + <translation>Y</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4547"/> + <source>Width</source> + <translation>Largeur</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4556"/> + <source>Height</source> + <translation>Hauteur</translation> + </message> +</context> +<context> + <name>QtRectPropertyManager</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3944"/> + <source>[(%1, %2), %3 x %4]</source> + <translation>[(%1, %2), %3 x %4]</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4064"/> + <source>X</source> + <translation>X</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4071"/> + <source>Y</source> + <translation>Y</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4078"/> + <source>Width</source> + <translation>Largeur</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4086"/> + <source>Height</source> + <translation>Hauteur</translation> + </message> +</context> +<context> + <name>QtResourceEditorDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="13"/> + <source>Dialog</source> + <translation>Dialogue</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="39"/> + <source>New File</source> + <translation>Nouveau fichier</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="42"/> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="92"/> + <source>N</source> + <translation>N</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="49"/> + <source>Remove File</source> + <translation>Supprimer fichier</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="52"/> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="109"/> + <source>R</source> + <translation>S</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="75"/> + <source>I</source> + <translation></translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="89"/> + <source>New Resource</source> + <translation>Nouvelle ressource</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="99"/> + <source>A</source> + <translation>A</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="106"/> + <source>Remove Resource or File</source> + <translation>Supprimer ressource ou fichier</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="76"/> + <source>%1 already exists. +Do you want to replace it?</source> + <translation>%1 existe déjà. +Voulez-vous le remplacer ?</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="81"/> + <source>The file does not appear to be a resource file; element '%1' was found where '%2' was expected.</source> + <translation>Le fichier n'est pas un fichier ressource; l'élément '%1' a été trouvé à la place de %2.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="983"/> + <source>%1 [read-only]</source> + <translation>%1 [lecture seule]</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="985"/> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1183"/> + <source>%1 [missing]</source> + <translation>%1 [manquant]</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1111"/> + <source><no prefix></source> + <translation><pas de préfixe></translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1431"/> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1997"/> + <source>New Resource File</source> + <translation>Nouveau fichier de ressource</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1433"/> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1458"/> + <source>Resource files (*.qrc)</source> + <translation>Fichier de ressource (*.qrc)</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1456"/> + <source>Import Resource File</source> + <translation>Importer fichier de ressource</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1568"/> + <source>newPrefix</source> + <translation>newPrefix</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1584"/> + <source><p><b>Warning:</b> The file</p><p>%1</p><p>is outside of the current resource file's parent directory.</p></source> + <translation><p><b>Avertissement :</b> le fichier</p><p>%1</p><p>est en dehors du répertoire parent du fichier de ressource courant.</p></translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1592"/> + <source><p>To resolve the issue, press:</p><table><tr><th align="left">Copy</th><td>to copy the file to the resource file's parent directory.</td></tr><tr><th align="left">Copy As...</th><td>to copy the file into a subdirectory of the resource file's parent directory.</td></tr><tr><th align="left">Keep</th><td>to use its current location.</td></tr></table></source> + <translation><p>Pour résoudre le problème, appuyez sur :</p><table><tr><th align="left">Copier</th><td>Pour copier le fichier dans le répertoire parent du fichier de ressource.</td></tr><tr><th align="left">Copier sous...</th><td>Pour copier le fichier ressource dans un sous-répertoire du répertoire parent du fichier de ressource.</td></tr><tr><th align="left">Conserver</th><td>pour conserver l'emplacement courant.</td></tr></table></translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1617"/> + <source>Add Files</source> + <translation>Ajouter fichiers</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1638"/> + <source>Incorrect Path</source> + <translation>Chemin incorrect</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1641"/> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1660"/> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1872"/> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1879"/> + <source>Copy</source> + <translation>Copier</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1643"/> + <source>Copy As...</source> + <translation>Copier sous...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1645"/> + <source>Keep</source> + <translation>Conserver</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1647"/> + <source>Skip</source> + <translation>Passer</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1734"/> + <source>Clone Prefix</source> + <translation>Cloner le préfixe</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1735"/> + <source>Enter the suffix which you want to add to the names of the cloned files. +This could for example be a language extension like "_de".</source> + <translation>Entrez le suffixe que vous voulez ajouter aux noms des fichiers clonés. +Ceci peut être une extension de langue par exemple, comme "_fr'.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1848"/> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1852"/> + <source>Copy As</source> + <translation>Copier sous</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1853"/> + <source><p>The selected file:</p><p>%1</p><p>is outside of the current resource file's directory:</p><p>%2</p><p>Please select another path within this directory.<p></source> + <translation><p>Le fichier sélectionné</p><p>%1</p><p>est en dehors du répertoire du fichier de ressource courant :</p><p>%2</p><p>Veuillez sélectionner un chemin dans le répertoire courant.</p></translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1873"/> + <source>Could not overwrite %1.</source> + <translation>Impossible d'écraser %1.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1880"/> + <source>Could not copy +%1 +to +%2</source> + <translation>Impossible de copier +%1 +vers +%2</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1915"/> + <source>A parse error occurred at line %1, column %2 of %3: +%4</source> + <translation>Une erreur d'analyse grammaticale est apparue à la ligne %1, colonne %2 de %3 : +%4</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1927"/> + <source>Save Resource File</source> + <translation>Enregistrer le fichier de ressource</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1928"/> + <source>Could not write %1: %2</source> + <translation>Impossible d'écrire %1 : %2</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1961"/> + <source>Edit Resources</source> + <translation>Éditer les ressources</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1996"/> + <source>New...</source> + <translation>Nouveau...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1998"/> + <source>Open...</source> + <translation>Ouvrir...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1999"/> + <source>Open Resource File</source> + <translation>Ouvrir fichier de ressource</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2000"/> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2011"/> + <source>Remove</source> + <translation>Retirer</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2001"/> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2012"/> + <source>Move Up</source> + <translation>Vers le Haut</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2002"/> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2013"/> + <source>Move Down</source> + <translation>Vers le Bas</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2004"/> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2005"/> + <source>Add Prefix</source> + <translation>Ajouter préfixe</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2006"/> + <source>Add Files...</source> + <translation>Ajouter fichiers...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2007"/> + <source>Change Prefix</source> + <translation>Modifier le préfixe</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2008"/> + <source>Change Language</source> + <translation>Modifier la langue</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2009"/> + <source>Change Alias</source> + <translation>Modifier l'alias</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2010"/> + <source>Clone Prefix...</source> + <translation>Cloner le préfixe...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2047"/> + <source>Prefix / Path</source> + <translation>Préfixe / chemin</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2048"/> + <source>Language / Alias</source> + <translation>Langue / Alias</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2165"/> + <source><html><p><b>Warning:</b> There have been problems while reloading the resources:</p><pre>%1</pre></html></source> + <translation><html><p><b>Avertissement:</b> Des problèmes sont apparus lors du rafraichissement des données des ressources :</p><pre>%1</pre></html></translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2167"/> + <source>Resource Warning</source> + <translation>Avertissement relatif aux ressources</translation> + </message> +</context> +<context> + <name>QtResourceView</name> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="566"/> + <source>Size: %1 x %2 +%3</source> + <translation>Taille : %1 x %2 +%3</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="586"/> + <source>Edit Resources...</source> + <translation>Éditer ressources...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="592"/> + <source>Reload</source> + <translation>Recharger</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="599"/> + <source>Copy Path</source> + <translation>Copier le chemin</translation> + </message> +</context> +<context> + <name>QtResourceViewDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="849"/> + <source>Select Resource</source> + <translation>Séléctionner ressource</translation> + </message> +</context> +<context> + <name>QtSizeFPropertyManager</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3551"/> + <source>%1 x %2</source> + <translation>%1 x %2</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3681"/> + <source>Width</source> + <translation>Largeur</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3690"/> + <source>Height</source> + <translation>Hauteur</translation> + </message> +</context> +<context> + <name>QtSizePolicyPropertyManager</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5399"/> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5400"/> + <source><Invalid></source> + <translation><Invalide></translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5401"/> + <source>[%1, %2, %3, %4]</source> + <translation>[%1, %2, %3, %4]</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5446"/> + <source>Horizontal Policy</source> + <translation>Politique horizontale</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5455"/> + <source>Vertical Policy</source> + <translation>Politique verticale</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5464"/> + <source>Horizontal Stretch</source> + <translation>Étirement horizontal</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5472"/> + <source>Vertical Stretch</source> + <translation>Étirement vertical</translation> + </message> +</context> +<context> + <name>QtSizePropertyManager</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3186"/> + <source>%1 x %2</source> + <translation>%1 x %2</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3282"/> + <source>Width</source> + <translation>Largeur</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3290"/> + <source>Height</source> + <translation>Hauteur</translation> + </message> +</context> +<context> + <name>QtToolBarDialog</name> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="13"/> + <source>Customize Toolbars</source> + <translation>Personnaliser les barres d'outils</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="26"/> + <source>1</source> + <translation>1</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="34"/> + <source>Actions</source> + <translation>Actions</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="49"/> + <source>Toolbars</source> + <translation>Barres d'outils</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="56"/> + <source>Add new toolbar</source> + <translation>Ajouter une nouvelle barre d'outils</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="59"/> + <source>New</source> + <translation>Nouveau</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="66"/> + <source>Remove selected toolbar</source> + <translation>Supprimer la barre d'outils sélectionnée</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="69"/> + <source>Remove</source> + <translation>Supprimer</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="76"/> + <source>Rename toolbar</source> + <translation>Renommer la barre d'outils</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="79"/> + <source>Rename</source> + <translation>Renommer</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="102"/> + <source>Move action up</source> + <translation>Déplacer l'action vers le haut</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="105"/> + <source>Up</source> + <translation>Monter</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="118"/> + <source>Remove action from toolbar</source> + <translation>Retirer l'action de la barre d'outils</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="121"/> + <source><-</source> + <translation><-</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="134"/> + <source>Add action to toolbar</source> + <translation>Ajouter l'action à la barre d'outil</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="137"/> + <source>-></source> + <translation>-></translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="150"/> + <source>Move action down</source> + <translation>Déplacer l'action vers le bas</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="153"/> + <source>Down</source> + <translation>Descendre</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="178"/> + <source>Current Toolbar Actions</source> + <translation>Actions de la barre d'outils courante</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.cpp" line="1240"/> + <source>Custom Toolbar</source> + <translation>Barre d'outils personnalisée</translation> + </message> + <message> + <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.cpp" line="1784"/> + <source>< S E P A R A T O R ></source> + <translation>< S É P A R A T E U R ></translation> + </message> +</context> +<context> + <name>QtTreePropertyBrowser</name> + <message> + <location filename="../tools/shared/qtpropertybrowser/qttreepropertybrowser.cpp" line="442"/> + <source>Property</source> + <translation>Propriété</translation> + </message> + <message> + <location filename="../tools/shared/qtpropertybrowser/qttreepropertybrowser.cpp" line="443"/> + <source>Value</source> + <translation>Valeur</translation> + </message> +</context> +<context> + <name>SaveFormAsTemplate</name> + <message> + <location filename="../tools/designer/src/designer/saveformastemplate.ui" line="45"/> + <source>Save Form As Template</source> + <translation>Enregistrer le formulaire comme un modèle</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/saveformastemplate.ui" line="59"/> + <source>&Name:</source> + <translation>&Nom :</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/saveformastemplate.ui" line="94"/> + <source>&Category:</source> + <translation>&Catégorie :</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="72"/> + <source>Add path...</source> + <translation>Ajouter chemin...</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="95"/> + <source>Template Exists</source> + <translation>Le modèle existe</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="96"/> + <source>A template with the name %1 already exists. +Do you want overwrite the template?</source> + <translation>Un modèle existe déjà avec le nom %1. +Voulez-vous le remplacer ?</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="99"/> + <source>Overwrite Template</source> + <translation>Remplacer modèle</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="106"/> + <source>Open Error</source> + <translation>Erreur d'ouverture</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="107"/> + <source>There was an error opening template %1 for writing. Reason: %2</source> + <translation>Une erreur s'est produite à l'ouverture du modèle %1 en écriture. Raison : %2</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="120"/> + <source>Write Error</source> + <translation>Erreur d'écriture</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="121"/> + <source>There was an error writing the template %1 to disk. Reason: %2</source> + <translation>Une erreur s'est produite lors de l'écriture du modèle %1 sur le disque. Raison : %2</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="148"/> + <source>Pick a directory to save templates in</source> + <translation>Sélectionner le dossier dans lequel le modèle sera enregistré</translation> + </message> +</context> +<context> + <name>ScriptErrorDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/scripterrordialog.cpp" line="59"/> + <source>An error occurred while running the scripts for "%1": +</source> + <translation>Une erreur est apparue lors de l'execution des scripts de "%1" : +</translation> + </message> +</context> +<context> + <name>SelectSignalDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/selectsignaldialog.ui" line="14"/> + <source>Go to slot</source> + <translation>Aller au slot</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/selectsignaldialog.ui" line="20"/> + <source>Select signal</source> + <translation>Sélectionner signal</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/selectsignaldialog.ui" line="33"/> + <source>signal</source> + <translation>signal</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/selectsignaldialog.ui" line="38"/> + <source>class</source> + <translation>classe</translation> + </message> +</context> +<context> + <name>SignalSlotConnection</name> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="152"/> + <source>SENDER(%1), SIGNAL(%2), RECEIVER(%3), SLOT(%4)</source> + <translation>ENVOYER(%1), SIGNAL(%2), RECEVEUR(%3), SLOT(%4)</translation> + </message> +</context> +<context> + <name>SignalSlotDialogClass</name> + <message> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="13"/> + <source>Signals and slots</source> + <translation>Signaux et slots</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="19"/> + <source>Slots</source> + <translation>Slots</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="30"/> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="79"/> + <source>Add</source> + <translation>Ajouter</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="33"/> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="43"/> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="82"/> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="92"/> + <source>...</source> + <translation>...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="40"/> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="89"/> + <source>Delete</source> + <translation>Supprimer</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="68"/> + <source>Signals</source> + <translation>Signaux</translation> + </message> +</context> +<context> + <name>Spacer</name> + <message> + <location filename="../tools/designer/src/lib/shared/spacer_widget.cpp" line="275"/> + <source>Horizontal Spacer '%1', %2 x %3</source> + <translation>Ressort horizontal '%1', %2 x %3</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/spacer_widget.cpp" line="275"/> + <source>Vertical Spacer '%1', %2 x %3</source> + <translation>Ressort vertical '%1', %2 x %3</translation> + </message> +</context> +<context> + <name>TemplateOptionsPage</name> + <message> + <location filename="../tools/designer/src/components/formeditor/templateoptionspage.cpp" line="156"/> + <source>Template Paths</source> + <extracomment>Tab in preferences dialog</extracomment> + <translation>Chemins des modèles</translation> + </message> +</context> +<context> + <name>ToolBarManager</name> + <message> + <location filename="../tools/designer/src/designer/mainwindow.cpp" line="224"/> + <source>Configure Toolbars...</source> + <translation>Configurer les barres d'outils...</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/mainwindow.cpp" line="239"/> + <source>Window</source> + <translation>Fenêtre</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/mainwindow.cpp" line="240"/> + <source>Help</source> + <translation>Aide</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/mainwindow.cpp" line="247"/> + <source>Style</source> + <translation>Style</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/mainwindow.cpp" line="249"/> + <source>Dock views</source> + <translation>Ancrer les vues</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/mainwindow.cpp" line="255"/> + <source>Toolbars</source> + <translation>Barres d'outils</translation> + </message> +</context> +<context> + <name>VersionDialog</name> + <message> + <location filename="../tools/designer/src/designer/versiondialog.cpp" line="171"/> + <source><h3>%1</h3><br/><br/>Version %2</source> + <translation><h3>%1</h3><br/><br/>Version %2</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/versiondialog.cpp" line="172"/> + <source>Qt Designer</source> + <translation>Qt Designer</translation> + </message> + <message> + <location filename="../tools/designer/src/designer/versiondialog.cpp" line="173"/> + <source><br/>Qt Designer is a graphical user interface designer for Qt applications.<br/></source> + <translation><br/>Qt Designer est une interface de création d'interface graphique pour les applications Qt.<br/></translation> + </message> + <message> + <location filename="../tools/designer/src/designer/versiondialog.cpp" line="175"/> + <source>%1<br/>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</source> + <translation>%1<br/>Copyright (C) 2009 Nokia Corporation et/ou ses filiales.</translation> + </message> +</context> +<context> + <name>WidgetDataBase</name> + <message> + <location filename="../tools/designer/src/lib/shared/widgetdatabase.cpp" line="814"/> + <source>The file contains a custom widget '%1' whose base class (%2) differs from the current entry in the widget database (%3). The widget database is left unchanged.</source> + <translation>Le fichier contient un widget personnalisé '%1' dont la classe de base (%2) est différente de l'entrée dans la base de données de widget (%3). La base de données de widget n'a pas été modifiée.</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ActionEditor</name> + <message> + <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="123"/> + <source>New...</source> + <translation>Nouveau...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="124"/> + <source>Edit...</source> + <translation>Éditer...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="125"/> + <source>Go to slot...</source> + <translation>Aller au slot...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="126"/> + <source>Copy</source> + <translation>Copier</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="127"/> + <source>Cut</source> + <translation>Couper</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="128"/> + <source>Paste</source> + <translation>Coller</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="129"/> + <source>Select all</source> + <translation>Tout sélectionner</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="130"/> + <source>Delete</source> + <translation>Supprimer</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="139"/> + <source>Actions</source> + <translation>Actions</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="188"/> + <source>Configure Action Editor</source> + <translation>Configurer l'éditeur d'action</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="191"/> + <source>Icon View</source> + <translation>Vue en icônes</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="197"/> + <source>Detailed View</source> + <translation>Vue détaillée</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="443"/> + <source>New action</source> + <translation>Nouvelle action</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="541"/> + <source>Edit action</source> + <translation>Editer action</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="610"/> + <source>Remove action '%1'</source> + <translation>Supprimer action '%1'</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="610"/> + <source>Remove actions</source> + <translation>Supprimer les actions</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="796"/> + <source>Used In</source> + <translation>Utilisé dans</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ActionModel</name> + <message> + <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="95"/> + <source>Name</source> + <translation>Nom</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="96"/> + <source>Used</source> + <translation>Utilisé</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="97"/> + <source>Text</source> + <translation>Texte</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="98"/> + <source>Shortcut</source> + <translation>Raccourci</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="99"/> + <source>Checkable</source> + <translation>Vérifiable</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="100"/> + <source>ToolTip</source> + <translation>Info-bulle</translation> + </message> +</context> +<context> + <name>qdesigner_internal::BrushManagerProxy</name> + <message> + <location filename="../tools/designer/src/components/formeditor/brushmanagerproxy.cpp" line="219"/> + <source>The element '%1' is missing the required attribute '%2'.</source> + <translation>L'attribut requis '%2' est manquant pour l'élément '%1'.</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/brushmanagerproxy.cpp" line="230"/> + <source>Empty brush name encountered.</source> + <translation>Un nom vide de pinceau a été rencontré.</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/brushmanagerproxy.cpp" line="240"/> + <source>An unexpected element '%1' was encountered.</source> + <translation>L'élément inattendu '%1' a été rencontré.</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/brushmanagerproxy.cpp" line="247"/> + <source>An error occurred when reading the brush definition file '%1' at line line %2, column %3: %4</source> + <translation>Une erreur est apparue lors de la lecture du fichier '%1' de définition des pinceaux à la ligne %2, colonne %3: %4</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/brushmanagerproxy.cpp" line="290"/> + <source>An error occurred when reading the resource file '%1' at line %2, column %3: %4</source> + <translation>Une erreur est survenue lors de la lecture du fichier de ressource '%1' à la ligne %2, colonne %3 : %4</translation> + </message> +</context> +<context> + <name>qdesigner_internal::BuddyEditor</name> + <message> + <location filename="../tools/designer/src/components/buddyeditor/buddyeditor.cpp" line="261"/> + <source>Add buddy</source> + <translation>Ajouter un copain</translation> + </message> + <message> + <location filename="../tools/designer/src/components/buddyeditor/buddyeditor.cpp" line="313"/> + <source>Remove buddies</source> + <translation>Supprimer les copains</translation> + </message> + <message numerus="yes"> + <location filename="../tools/designer/src/components/buddyeditor/buddyeditor.cpp" line="337"/> + <source>Remove %n buddies</source> + <translation> + <numerusform>Supprimer %n copain</numerusform> + <numerusform>Supprimer %n copains</numerusform> + </translation> + </message> + <message numerus="yes"> + <location filename="../tools/designer/src/components/buddyeditor/buddyeditor.cpp" line="388"/> + <source>Add %n buddies</source> + <translation> + <numerusform>Ajouter %n copain</numerusform> + <numerusform>Ajouter %n copains</numerusform> + </translation> + </message> + <message> + <location filename="../tools/designer/src/components/buddyeditor/buddyeditor.cpp" line="435"/> + <source>Set automatically</source> + <translation>Définir automatiquement</translation> + </message> +</context> +<context> + <name>qdesigner_internal::BuddyEditorPlugin</name> + <message> + <location filename="../tools/designer/src/components/buddyeditor/buddyeditor_plugin.cpp" line="73"/> + <source>Edit Buddies</source> + <translation>Éditer les copains</translation> + </message> +</context> +<context> + <name>qdesigner_internal::BuddyEditorTool</name> + <message> + <location filename="../tools/designer/src/components/buddyeditor/buddyeditor_tool.cpp" line="56"/> + <source>Edit Buddies</source> + <translation>Éditer les copains</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ButtonGroupMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="318"/> + <source>Select members</source> + <translation>Sélectionner les membres</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="319"/> + <source>Break</source> + <translation>Casser</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ButtonTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="440"/> + <source>Assign to button group</source> + <translation>Assigner au groupe de boutons</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="442"/> + <source>Button group</source> + <translation>Groupe de boutons</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="443"/> + <source>New button group</source> + <translation>Nouveau groupe de boutons</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="444"/> + <source>Change text...</source> + <translation>Modifier le texte...</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="445"/> + <source>None</source> + <translation>Aucun</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="546"/> + <source>Button group '%1'</source> + <translation>Groupe de boutons '%1'</translation> + </message> +</context> +<context> + <name>qdesigner_internal::CodeDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="95"/> + <source>Save...</source> + <translation>Enregistrer...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="99"/> + <source>Copy All</source> + <translation>Tout copier</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="104"/> + <source>&Find in Text...</source> + <translation>&Rechercher dans le texte...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="179"/> + <source>A temporary form file could not be created in %1.</source> + <translation>Un fichier temporaire de formulaire n'a pas pu être créé dans %1.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="185"/> + <source>The temporary form file %1 could not be written.</source> + <translation>Le fichier temporaire de formulaire %1 n'a pas pu être écrit.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="206"/> + <source>%1 - [Code]</source> + <translation>%1 - [Code]</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="229"/> + <source>Save Code</source> + <translation>Enregistrer le code</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="229"/> + <source>Header Files (*.%1)</source> + <translation>Fichiers headers (*.%1)</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="235"/> + <source>The file %1 could not be opened: %2</source> + <translation>Le fichier %1 ne peut pas être ouvert : %2</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="240"/> + <source>The file %1 could not be written: %2</source> + <translation>Le fichier %1 ne peut pas être écrit : %2</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="251"/> + <source>%1 - Error</source> + <translation>%1 - Erreur</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ColorAction</name> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="246"/> + <source>Text Color</source> + <translation>Couleur du texte</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ComboBoxTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/combobox_taskmenu.cpp" line="68"/> + <source>Edit Items...</source> + <translation>Éditer les éléments...</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/combobox_taskmenu.cpp" line="106"/> + <source>Change Combobox Contents</source> + <translation>Modifier le contenu du Combobox</translation> + </message> +</context> +<context> + <name>qdesigner_internal::CommandLinkButtonTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="702"/> + <source>Change description...</source> + <translation>Modifier la description...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ConnectionEdit</name> + <message> + <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="1589"/> + <source>Select All</source> + <translation>Tout sélectionner</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="1592"/> + <source>Deselect All</source> + <translation>Désélectionner tout</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="1597"/> + <source>Delete</source> + <translation>Supprimer</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ConnectionModel</name> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="196"/> + <source>Sender</source> + <translation>Émetteur</translation> + </message> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="197"/> + <source>Signal</source> + <translation>Signal</translation> + </message> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="198"/> + <source>Receiver</source> + <translation>Receveur</translation> + </message> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="199"/> + <source>Slot</source> + <translation>Slot</translation> + </message> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="289"/> + <source><sender></source> + <translation><émetteur></translation> + </message> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="290"/> + <source><signal></source> + <translation><signal></translation> + </message> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="291"/> + <source><receiver></source> + <translation><receveur></translation> + </message> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="292"/> + <source><slot></source> + <translation><slot></translation> + </message> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="400"/> + <source>The connection already exists!<br>%1</source> + <translation>La connexion existe déjà !<br>%1</translation> + </message> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="402"/> + <source>Signal and Slot Editor</source> + <translation>Éditeur de signaux et slots</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ContainerWidgetTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="79"/> + <source>Delete</source> + <translation>Supprimer</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="104"/> + <source>Insert</source> + <translation>Insérer</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="107"/> + <source>Insert Page Before Current Page</source> + <translation>Insérer la page avant la page courante</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="111"/> + <source>Insert Page After Current Page</source> + <translation>Insérer la page après la page courante</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="119"/> + <source>Add Subwindow</source> + <translation>Ajouter sous-fenêtre</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="157"/> + <source>Subwindow</source> + <translation>Sous fenêtre</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="159"/> + <source>Page</source> + <translation>Page</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="160"/> + <source>Page %1 of %2</source> + <translation>Page %1 de %2</translation> + </message> +</context> +<context> + <name>qdesigner_internal::DPI_Chooser</name> + <message> + <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="100"/> + <source>System (%1 x %2)</source> + <extracomment>System resolution</extracomment> + <translation>Système (%1 x %2)</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="107"/> + <source>User defined</source> + <translation>Défini par l'utilisateur</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="125"/> + <source> x </source> + <extracomment>DPI X/Y separator</extracomment> + <translation> x </translation> + </message> +</context> +<context> + <name>qdesigner_internal::DesignerPropertyManager</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="647"/> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="653"/> + <source>AlignLeft</source> + <translation>AlignementGauche</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="648"/> + <source>AlignHCenter</source> + <translation>AlignementCentreH</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="649"/> + <source>AlignRight</source> + <translation>AlignementDroite</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="650"/> + <source>AlignJustify</source> + <translation>AlignementJustifié</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="659"/> + <source>AlignTop</source> + <translation>AlignementSommet</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="660"/> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="664"/> + <source>AlignVCenter</source> + <translation>AlignementCentreV</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="661"/> + <source>AlignBottom</source> + <translation>AlignementDessous</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1226"/> + <source>%1, %2</source> + <translation>%1, %2</translation> + </message> + <message numerus="yes"> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1232"/> + <source>Customized (%n roles)</source> + <translation> + <numerusform>Personnalisé (%n rôle)</numerusform> + <numerusform>Personnalisé (%n rôles)</numerusform> + </translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1233"/> + <source>Inherited</source> + <translatorcomment>pour la palette</translatorcomment> + <translation>Héritée</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1799"/> + <source>Horizontal</source> + <translation>Horizontal</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1808"/> + <source>Vertical</source> + <translation>Vertical</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1823"/> + <source>Normal Off</source> + <translation>Arrêt normal</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1824"/> + <source>Normal On</source> + <translation>Marche normal</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1825"/> + <source>Disabled Off</source> + <translation>Arrêt désactivé</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1826"/> + <source>Disabled On</source> + <translation>Marche désactivé</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1827"/> + <source>Active Off</source> + <translation>Arrêt activé</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1828"/> + <source>Active On</source> + <translation>Marche activé</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1829"/> + <source>Selected Off</source> + <translation>Arrêt sélectionné</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1830"/> + <source>Selected On</source> + <translation>Marche sélectionné</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1837"/> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1858"/> + <source>translatable</source> + <translation>Traduisible</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1843"/> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1864"/> + <source>disambiguation</source> + <translation>désambiguation</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1849"/> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1870"/> + <source>comment</source> + <translation>commentaire</translation> + </message> +</context> +<context> + <name>qdesigner_internal::DeviceProfileDialog</name> + <message> + <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="63"/> + <source>Device Profiles (*.%1)</source> + <translation>Profils d'appareil (*.%1)</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="94"/> + <source>Default</source> + <translation>Par défaut</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="161"/> + <source>Save Profile</source> + <translation>Enregistrer le profil</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="171"/> + <source>Save Profile - Error</source> + <translation>Enregistrer le profile - Erreur</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="171"/> + <source>Unable to open the file '%1' for writing: %2</source> + <translation>Impossible d'ouvrir le fichier '%1' en écriture : %2</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="179"/> + <source>Open profile</source> + <translation>Ouvrir profil</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="185"/> + <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="191"/> + <source>Open Profile - Error</source> + <translation>Ouvrir profil - Erreur</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="185"/> + <source>Unable to open the file '%1' for reading: %2</source> + <translation>Impossible d'ouvrir le fichier '%1' en lecture : %2</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="191"/> + <source>'%1' is not a valid profile: %2</source> + <translation>'%1' n'est pas un profil valide : %2</translation> + </message> +</context> +<context> + <name>qdesigner_internal::Dialog</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="53"/> + <source>Dialog</source> + <translation>Boîte de dialogue</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="65"/> + <source>StringList</source> + <translation>Liste de chaîne de caractères</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="93"/> + <source>New String</source> + <translation>Nouvelle chaîne de caractères</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="96"/> + <source>&New</source> + <translation>&Nouveau</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="106"/> + <source>Delete String</source> + <translation>Supprimer la chaîne de caractères</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="109"/> + <source>&Delete</source> + <translation>&Supprimer</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="142"/> + <source>&Value:</source> + <translation>&Valeur : </translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="180"/> + <source>Move String Up</source> + <translation>Déplacer la chaîne de caractères vers le haut</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="183"/> + <source>Up</source> + <translation>Vers le haut</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="190"/> + <source>Move String Down</source> + <translation>Déplacer la chaîne de caractères vers le bas</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="193"/> + <source>Down</source> + <translation>Vers le bas</translation> + </message> +</context> +<context> + <name>qdesigner_internal::EmbeddedOptionsControl</name> + <message> + <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="160"/> + <source>None</source> + <translation>Aucun</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="164"/> + <source>Add a profile</source> + <translation>Ajouter un profil</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="170"/> + <source>Edit the selected profile</source> + <translation>Éditer le profile sélectionné</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="174"/> + <source>Delete the selected profile</source> + <translation>Supprimer le profil sélectionné</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="196"/> + <source>Add Profile</source> + <translation>Ajouter profil</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="203"/> + <source>New profile</source> + <translation>Nouveau profil</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="238"/> + <source>Edit Profile</source> + <translation>Éditer profil</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="264"/> + <source>Delete Profile</source> + <translation>Supprimer profil</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="265"/> + <source>Would you like to delete the profile '%1'?</source> + <translation>Voulez-vous supprimer le profil '%1' ?</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="320"/> + <source>Default</source> + <translation>Par défaut</translation> + </message> +</context> +<context> + <name>qdesigner_internal::FilterWidget</name> + <message> + <location filename="../tools/designer/src/lib/shared/filterwidget.cpp" line="185"/> + <source><Filter></source> + <translation><Filtre></translation> + </message> +</context> +<context> + <name>qdesigner_internal::FormEditor</name> + <message> + <location filename="../tools/designer/src/components/formeditor/formeditor.cpp" line="190"/> + <source>Resource File Changed</source> + <translation>Fichier de ressource modifié</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formeditor.cpp" line="191"/> + <source>The file "%1" has changed outside Designer. Do you want to reload it?</source> + <translation>Le fichier "%1" a été modifié en dehors de Designer. Voulez-vous le recharger ?</translation> + </message> +</context> +<context> + <name>qdesigner_internal::FormLayoutMenu</name> + <message> + <location filename="../tools/designer/src/lib/shared/formlayoutmenu.cpp" line="482"/> + <source>Add form layout row...</source> + <translation>Ajouter une ligne au layout du formulaire...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::FormWindow</name> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="441"/> + <source>Edit contents</source> + <translation>Éditer le contenu</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="442"/> + <source>F2</source> + <translation>F2</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1216"/> + <source>Insert widget '%1'</source> + <translation>Insérer le widget '%1'</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1283"/> + <source>Resize</source> + <translation>Redimensionner</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1501"/> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1516"/> + <source>Key Move</source> + <translation>Déplacement au clavier</translation> + </message> + <message numerus="yes"> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1727"/> + <source>Paste %n action(s)</source> + <translation> + <numerusform>Coller %n action</numerusform> + <numerusform>Coller %n actions</numerusform> + </translation> + </message> + <message numerus="yes"> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1729"/> + <source>Paste %n widget(s)</source> + <translation> + <numerusform>Coller %n widget</numerusform> + <numerusform>Coller %n widgets</numerusform> + </translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1730"/> + <source>Paste (%1 widgets, %2 actions)</source> + <translation>Coller (%1 widgets, %2 actions)</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1786"/> + <source>Cannot paste widgets. Designer could not find a container without a layout to paste into.</source> + <translation>Impossible de coller les widgets. Designer n'a pas trouvé de conteneur sans layout pour coller.</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1788"/> + <source>Break the layout of the container you want to paste into, select this container and then paste again.</source> + <translation>Retirez le layout du conteneur dans lequel vous voulez coller, sélectionnez ce conteneur et collez à nouveau.</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1792"/> + <source>Paste error</source> + <translation>Erreur de collage</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1975"/> + <source>Raise widgets</source> + <translation>Élever widgets</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1992"/> + <source>Lower widgets</source> + <translation>Descendre widgets</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="2196"/> + <source>Select Ancestor</source> + <translation>Sélectionner les ancêtres</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="2237"/> + <source>Lay out</source> + <translation>Mettre en page</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="2730"/> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="2785"/> + <source>Drop widget</source> + <translation>Supprimer widget</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="2772"/> + <source>A QMainWindow-based form does not contain a central widget.</source> + <translation>Un formulaire basé sur QMainWindow ne contenant pas de widget central.</translation> + </message> +</context> +<context> + <name>qdesigner_internal::FormWindowBase</name> + <message> + <location filename="../tools/designer/src/lib/shared/formwindowbase.cpp" line="393"/> + <source>Delete '%1'</source> + <translation>Supprimer '%1'</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/formwindowbase.cpp" line="393"/> + <source>Delete</source> + <translation>Supprimer</translation> + </message> +</context> +<context> + <name>qdesigner_internal::FormWindowManager</name> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="364"/> + <source>Cu&t</source> + <translation>Co&uper</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="367"/> + <source>Cuts the selected widgets and puts them on the clipboard</source> + <translation>Coupe les widgets sélectionnés et les place dans le presse-papiers</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="372"/> + <source>&Copy</source> + <translation>Cop&ier</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="375"/> + <source>Copies the selected widgets to the clipboard</source> + <translation>Copie les widgets sélectionnés dans le presse-papiers</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="380"/> + <source>&Paste</source> + <translation>C&oller</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="383"/> + <source>Pastes the clipboard's contents</source> + <translation>Colle le contenu du presse-papiers</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="388"/> + <source>&Delete</source> + <translation>&Supprimer</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="390"/> + <source>Deletes the selected widgets</source> + <translation>Supprime les widgets sélectionnés</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="395"/> + <source>Select &All</source> + <translation>Tout &sélectionner</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="398"/> + <source>Selects all widgets</source> + <translation>Sélectionne tous les widgets</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="403"/> + <source>Bring to &Front</source> + <translation>Amener au premier &plan</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="406"/> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="407"/> + <source>Raises the selected widgets</source> + <translation>Élève les widgets sélectionnés</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="411"/> + <source>Send to &Back</source> + <translation>Placer en &arrière plan</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="414"/> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="415"/> + <source>Lowers the selected widgets</source> + <translation>Descend les widgets sélectionnés</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="419"/> + <source>Adjust &Size</source> + <translation>Ajuster les &dimensions</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="422"/> + <source>Adjusts the size of the selected widget</source> + <translation>Ajuster les dimensions du widget sélectionné</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="428"/> + <source>Lay Out &Horizontally</source> + <translation>Mettre en page &horizontalement</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="431"/> + <source>Lays out the selected widgets horizontaly</source> + <translation>Mettre en page horizontalement les widgets sélectionnés</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="437"/> + <source>Lay Out &Vertically</source> + <translation>Mettre en page &verticalement</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="440"/> + <source>Lays out the selected widgets vertically</source> + <translation>Mettre en page verticalement les widgets sélectionnés</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="447"/> + <source>Lay Out in a &Form Layout</source> + <translation>Mettre en page dans un layout de &formulaire</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="450"/> + <source>Lays out the selected widgets in a form layout</source> + <translation>Mettre en page les widgets sélectionnés dans un layout de formulaire</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="457"/> + <source>Lay Out in a &Grid</source> + <translation>Mettre en page dans une &grille</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="460"/> + <source>Lays out the selected widgets in a grid</source> + <translation>Mettre en page les widgets sélectionnés dans une grille</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="467"/> + <source>Lay Out Horizontally in S&plitter</source> + <translation>Mettre en page horizontalement avec un sé&parateur</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="470"/> + <source>Lays out the selected widgets horizontaly in a splitter</source> + <translation>Met en page les widgets sélectionnés horizontalement à l'aide d'un séparateur</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="477"/> + <source>Lay Out Vertically in Sp&litter</source> + <translation>Mettre en page verticalement avec un sépa&rateur</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="480"/> + <source>Lays out the selected widgets vertically in a splitter</source> + <translation>Met en page les widgets sélectionnés verticalement à l'aide d'un séparateur</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="487"/> + <source>&Break Layout</source> + <translation>&Casser la mise en page</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="490"/> + <source>Breaks the selected layout</source> + <translation>Retire le layout sélectionné</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="495"/> + <source>Si&mplify Grid Layout</source> + <translation>Si&mplifier le layout de grille</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="497"/> + <source>Removes empty columns and rows</source> + <translation>Supprime les lignes et colonnes vides</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="503"/> + <source>&Preview...</source> + <translation>&Prévisualisation...</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="505"/> + <source>Preview current form</source> + <translation>Prévisualise le formulaire courant</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="520"/> + <source>Form &Settings...</source> + <translation>Paramètres du &formulaire...</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="612"/> + <source>Break Layout</source> + <translation>Casser la mise en page</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="638"/> + <source>Adjust Size</source> + <translation>Ajuster les dimensions</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="681"/> + <source>Could not create form preview</source> + <comment>Title of warning message box</comment> + <translation>Impossible de créer la prévisualisation du formulaire</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="1022"/> + <source>Form Settings - %1</source> + <translation>Paramètres du formulaire - %1</translation> + </message> +</context> +<context> + <name>qdesigner_internal::FormWindowSettings</name> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowsettings.cpp" line="193"/> + <source>None</source> + <translation>Aucun</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/formwindowsettings.cpp" line="194"/> + <source>Device Profile: %1</source> + <translation>Profil de périphérique : %1</translation> + </message> +</context> +<context> + <name>qdesigner_internal::GridPanel</name> + <message> + <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="13"/> + <source>Form</source> + <translation>Formulaire</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="31"/> + <source>Grid</source> + <translation>Grille</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="43"/> + <source>Visible</source> + <translation>Visible</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="50"/> + <source>Grid &X</source> + <translation>Grille &X</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="76"/> + <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="133"/> + <source>Snap</source> + <translation>Grille aimantée</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="85"/> + <source>Reset</source> + <translation>Réinitialisé</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="107"/> + <source>Grid &Y</source> + <translation>Grille &Y</translation> + </message> +</context> +<context> + <name>qdesigner_internal::GroupBoxTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/groupbox_taskmenu.cpp" line="82"/> + <source>Change title...</source> + <translation>Modifier le titre...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::HtmlTextEdit</name> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="188"/> + <source>Insert HTML entity</source> + <translation>Insérer une entité HTML</translation> + </message> +</context> +<context> + <name>qdesigner_internal::IconSelector</name> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="328"/> + <source>The pixmap file '%1' cannot be read.</source> + <translation>Le fichier pixmap '%1' ne peut pas être lu.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="334"/> + <source>The file '%1' does not appear to be a valid pixmap file: %2</source> + <translation>Le fichier '%1' n'est pas un fichier de pixmap valide : %2</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="343"/> + <source>The file '%1' could not be read: %2</source> + <translation>Le fichier '%1' ne peut pas être lu : %2</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="376"/> + <source>Choose a Pixmap</source> + <translation>Choisissez un pixmap</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="383"/> + <source>Pixmap Read Error</source> + <translation>Erreur de lecture de pixmap</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="437"/> + <source>...</source> + <translation>...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="443"/> + <source>Normal Off</source> + <translation>Arrêt normal</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="444"/> + <source>Normal On</source> + <translation>Marche normal</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="445"/> + <source>Disabled Off</source> + <translation>Arrêt désactivé</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="446"/> + <source>Disabled On</source> + <translation>Marche désactivé</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="447"/> + <source>Active Off</source> + <translation>Arrêt activé</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="448"/> + <source>Active On</source> + <translation>Marche activé</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="449"/> + <source>Selected Off</source> + <translation>Arrêt sélectionné</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="450"/> + <source>Selected On</source> + <translation>Marche sélectionné</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="458"/> + <source>Choose Resource...</source> + <translation>Choisir ressource...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="459"/> + <source>Choose File...</source> + <translation>Choisir un fichier...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="460"/> + <source>Reset</source> + <translation>Réinitialiser</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="461"/> + <source>Reset All</source> + <translation>Réinitialisé tout</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ItemListEditor</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="68"/> + <source>Items List</source> + <translation>Liste d'éléments</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="77"/> + <source>New Item</source> + <translation>Nouvel élément</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="80"/> + <source>&New</source> + <translation>&Nouveau</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="87"/> + <source>Delete Item</source> + <translation>Supprimer élément</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="90"/> + <source>&Delete</source> + <translation>&Supprimer</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="110"/> + <source>Move Item Up</source> + <translation>Déplacer l'élément vers le haut</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="113"/> + <source>U</source> + <translation>Monter</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="120"/> + <source>Move Item Down</source> + <translation>Déplacer l'élément vers le bas</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="123"/> + <source>D</source> + <translation>Descendre</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="143"/> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="426"/> + <source>Properties &>></source> + <translation>Propriétés &>></translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="424"/> + <source>Properties &<<</source> + <translation>Propriétés &<<</translation> + </message> +</context> +<context> + <name>qdesigner_internal::LabelTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/label_taskmenu.cpp" line="85"/> + <source>Change rich text...</source> + <translation>Modifier texte riche...</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/label_taskmenu.cpp" line="86"/> + <source>Change plain text...</source> + <translation>Modifier texte simple...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::LanguageResourceDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="118"/> + <source>Choose Resource</source> + <translation>Choisir ressource</translation> + </message> +</context> +<context> + <name>qdesigner_internal::LineEditTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/lineedit_taskmenu.cpp" line="80"/> + <source>Change text...</source> + <translation>Modifier texte...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ListWidgetEditor</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/listwidgeteditor.cpp" line="69"/> + <source>New Item</source> + <translation>Nouvel élément</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/listwidgeteditor.cpp" line="101"/> + <source>Edit List Widget</source> + <translation>Éditer le widget de liste</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/listwidgeteditor.cpp" line="120"/> + <source>Edit Combobox</source> + <translation>Éditer le Combobox</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ListWidgetTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/listwidget_taskmenu.cpp" line="67"/> + <source>Edit Items...</source> + <translation>Éditer les éléments...</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/listwidget_taskmenu.cpp" line="105"/> + <source>Change List Contents</source> + <translation>Modifier le contenu de la liste</translation> + </message> +</context> +<context> + <name>qdesigner_internal::MdiContainerWidgetTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="278"/> + <source>Next Subwindow</source> + <translation>Sous-fenêtre suivante</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="279"/> + <source>Previous Subwindow</source> + <translation>Sous-fenêtre précédente</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="280"/> + <source>Tile</source> + <translation>Côte à côte</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="281"/> + <source>Cascade</source> + <translation>Cascade</translation> + </message> +</context> +<context> + <name>qdesigner_internal::MenuTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/menutaskmenu.cpp" line="56"/> + <source>Remove</source> + <translation>Supprimer</translation> + </message> +</context> +<context> + <name>qdesigner_internal::MorphMenu</name> + <message> + <location filename="../tools/designer/src/lib/shared/morphmenu.cpp" line="613"/> + <source>Morph into</source> + <translation>Transformer en</translation> + </message> +</context> +<context> + <name>qdesigner_internal::NewActionDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="46"/> + <source>New Action...</source> + <translation>Nouvelle action...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="54"/> + <source>&Text:</source> + <translation>&Texte :</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="74"/> + <source>Object &name:</source> + <translation>&Nom de l'objet :</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="87"/> + <source>&Icon:</source> + <translation>&Icône :</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="117"/> + <source>Shortcut:</source> + <translation>Raccourci :</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="131"/> + <source>Checkable:</source> + <translation>Peut être cochée :</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="138"/> + <source>ToolTip:</source> + <translation>Info-bulle :</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="157"/> + <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="178"/> + <source>...</source> + <translation>...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::NewDynamicPropertyDialog</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui" line="13"/> + <source>Create Dynamic Property</source> + <translation>Créer une propriété dynamique</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui" line="37"/> + <source>Property Name</source> + <translation>Nom de la propriété</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui" line="49"/> + <source>horizontalSpacer</source> + <translation>Espaceur horizontal</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui" line="73"/> + <source>Property Type</source> + <translation>Type de la propriété</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp" line="134"/> + <source>Set Property Name</source> + <translation>Définir le nom de la propriété</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp" line="145"/> + <source>The current object already has a property named '%1'. +Please select another, unique one.</source> + <translation>L'objet courant possède déjà une propriété nommée '%1'. +Veuillez-sélectionner un autre nom.</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp" line="149"/> + <source>The '_q_' prefix is reserved for the Qt library. +Please select another name.</source> + <translation>Le préfixe «_q_» est réservé pour la bibliothèque Qt. +Veuillez sélectionner un autre nom.</translation> + </message> +</context> +<context> + <name>qdesigner_internal::NewFormWidget</name> + <message> + <location filename="../tools/designer/src/lib/shared/newformwidget.ui" line="82"/> + <source>0</source> + <translation>0</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newformwidget.ui" line="101"/> + <source>Choose a template for a preview</source> + <translation>Choisir un modèle pour la prévisualisation</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newformwidget.ui" line="145"/> + <source>Embedded Design</source> + <translation>Design pour appareil mobile</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newformwidget.ui" line="157"/> + <source>Device:</source> + <translation>Appareil :</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newformwidget.ui" line="164"/> + <source>Screen Size:</source> + <translation>Dimensions de l'écran :</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="104"/> + <source>Default size</source> + <translation>Dimensions par défaut</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="105"/> + <source>QVGA portrait (240x320)</source> + <translation>QVGA portrait (240x320)</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="106"/> + <source>QVGA landscape (320x240)</source> + <translation>QVGA paysage (320x240)</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="107"/> + <source>VGA portrait (480x640)</source> + <translation>VGA portrait (480x640)</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="108"/> + <source>VGA landscape (640x480)</source> + <translation>VGA paysage (640x480)</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="174"/> + <source>Widgets</source> + <extracomment>New Form Dialog Categories</extracomment> + <translation>Widgets</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="175"/> + <source>Custom Widgets</source> + <translation>Widgets personnalisé</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="193"/> + <source>None</source> + <translation>Aucun</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="250"/> + <source>Error loading form</source> + <translation>Erreur de chargement du formulaire</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="494"/> + <source>Unable to open the form template file '%1': %2</source> + <translation>Impossible d'ouvrir le fichier de modèle de formulaire '%1' : %2</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="561"/> + <source>Internal error: No template selected.</source> + <translation>Erreur interne : aucun modèle sélectionné.</translation> + </message> +</context> +<context> + <name>qdesigner_internal::NewPromotedClassPanel</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="92"/> + <source>Add</source> + <translation>Ajouter</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="94"/> + <source>New Promoted Class</source> + <translation>Nouvelle classe promue</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="109"/> + <source>Base class name:</source> + <translation>Nom de la classe de base :</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="110"/> + <source>Promoted class name:</source> + <translation>Nom de la classe promue :</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="111"/> + <source>Header file:</source> + <translation>Fichier d'en-tête :</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="112"/> + <source>Global include</source> + <translation>En-tête global</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="123"/> + <source>Reset</source> + <translation>Réinitialiser</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ObjectInspector</name> + <message> + <location filename="../tools/designer/src/components/objectinspector/objectinspector.cpp" line="754"/> + <source>&Find in Text...</source> + <translation>&Rechercher dans le texte...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ObjectInspector::ObjectInspectorPrivate</name> + <message> + <location filename="../tools/designer/src/components/objectinspector/objectinspector.cpp" line="316"/> + <source>Change Current Page</source> + <translation>Modifier la page courante</translation> + </message> +</context> +<context> + <name>qdesigner_internal::OrderDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/orderdialog.ui" line="53"/> + <source>Change Page Order</source> + <translation>Modifier l'ordre des pages</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/orderdialog.ui" line="59"/> + <source>Page Order</source> + <translation>Ordre des pages</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/orderdialog.ui" line="116"/> + <source>Move page up</source> + <translation>Déplacer la page vers le haut</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/orderdialog.ui" line="123"/> + <source>Move page down</source> + <translation>Déplacer la page vers le bas</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/orderdialog.cpp" line="109"/> + <source>Index %1 (%2)</source> + <translation>Indice %1 (%2)</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/orderdialog.cpp" line="112"/> + <source>%1 %2</source> + <translation>%1 %2</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PaletteEditor</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="61"/> + <source>Edit Palette</source> + <translation>Éditer la palette</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="85"/> + <source>Tune Palette</source> + <translation>Ajuster la palette</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="122"/> + <source>Show Details</source> + <translation>Afficher les détails</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="129"/> + <source>Compute Details</source> + <translation>Calculer les détails</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="139"/> + <source>Quick</source> + <translation>Rapide</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="157"/> + <source>Preview</source> + <translation>Prévisualisation</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="169"/> + <source>Disabled</source> + <translation>Désactivé</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="176"/> + <source>Inactive</source> + <translation>Inactif</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="183"/> + <source>Active</source> + <translation>Actif</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PaletteEditorButton</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditorbutton.cpp" line="57"/> + <source>Change Palette</source> + <translation>Modifier la palette</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PaletteModel</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.cpp" line="374"/> + <source>Color Role</source> + <translation>Rôle de la couleur</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.cpp" line="376"/> + <source>Active</source> + <translation>Actif</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.cpp" line="378"/> + <source>Inactive</source> + <translation>Inactif</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.cpp" line="380"/> + <source>Disabled</source> + <translation>Désactivé</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PixmapEditor</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="329"/> + <source>Choose Resource...</source> + <translation>Choisir ressource...</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="330"/> + <source>Choose File...</source> + <translation>Choisir fichier...</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="331"/> + <source>Copy Path</source> + <translation>Chemin de copie</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="332"/> + <source>Paste Path</source> + <translation>Chemin de collage</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="338"/> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="354"/> + <source>...</source> + <translation>...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PlainTextEditorDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/plaintexteditor.cpp" line="65"/> + <source>Edit text</source> + <translation>Éditer le texte</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PluginDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="72"/> + <source>Components</source> + <translation>Composants</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="85"/> + <source>Plugin Information</source> + <translation>Information sur les plugins</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="89"/> + <source>Refresh</source> + <translation>Rafraîchir</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="90"/> + <source>Scan for newly installed custom widget plugins.</source> + <translation>Recherche des plugins personnalisés récemment installés.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="138"/> + <source>Qt Designer couldn't find any plugins</source> + <translation>Qt Designer n'a trouvé aucun plugin</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="141"/> + <source>Qt Designer found the following plugins</source> + <translation>Qt Designer a trouvé les plugins suivants</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="196"/> + <source>New custom widget plugins have been found.</source> + <translation>De nouveaux plugins de widgets ont été trouvés.</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PreviewActionGroup</name> + <message> + <location filename="../tools/designer/src/components/formeditor/previewactiongroup.cpp" line="95"/> + <source>%1 Style</source> + <translation>Style %1</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PreviewConfigurationWidget</name> + <message> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="139"/> + <source>Default</source> + <translation>Par défaut</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="161"/> + <source>None</source> + <translation>Aucun</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="167"/> + <source>Browse...</source> + <translation>Parcourir...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate</name> + <message> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="285"/> + <source>Load Custom Device Skin</source> + <translation>Charger le revêtement d'appareil personnalisé</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="287"/> + <source>All QVFB Skins (*.%1)</source> + <translation>Tous les revêtements QVFB (*.%1)</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="303"/> + <source>%1 - Duplicate Skin</source> + <translation>%1 - Revêtement doublon</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="304"/> + <source>The skin '%1' already exists.</source> + <translation>Le revêtement '%1' existe déjà.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="318"/> + <source>%1 - Error</source> + <translation>%1 - -Erreur</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="319"/> + <source>%1 is not a valid skin directory: +%2</source> + <translation>%1 n'est pas un répertoire de revêtements valide : +%2</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PreviewDeviceSkin</name> + <message> + <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="259"/> + <source>&Portrait</source> + <translation>&Portrait</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="261"/> + <source>Landscape (&CCW)</source> + <extracomment>Rotate form preview counter-clockwise</extracomment> + <translation>Paysage (&dans le sens horaire)</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="263"/> + <source>&Landscape (CW)</source> + <extracomment>Rotate form preview clockwise</extracomment> + <translation>Paysage (&dans le sens anti-horaire)</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="264"/> + <source>&Close</source> + <translation>&Fermer</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PreviewManager</name> + <message> + <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="690"/> + <source>%1 - [Preview]</source> + <translation>%1 - [prévisualisation]</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PreviewMdiArea</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/previewframe.cpp" line="72"/> + <source>The moose in the noose +ate the goose who was loose.</source> + <extracomment>Palette editor background</extracomment> + <translation>Au site de Bologne, +je préfère les mines de Pompéi.</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PreviewWidget</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="61"/> + <source>Preview Window</source> + <translation>Fenêtre de prévisualisation</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="81"/> + <source>LineEdit</source> + <translation>LineEdit</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="89"/> + <source>ComboBox</source> + <translation>ComboBox</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="108"/> + <source>PushButton</source> + <translation>PushButton</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="166"/> + <source>ButtonGroup2</source> + <translation>ButtonGroup2</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="178"/> + <source>CheckBox1</source> + <translation>CheckBox1</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="188"/> + <source>CheckBox2</source> + <translation>CheckBox2</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="198"/> + <source>ButtonGroup</source> + <translation>ButtonGroup</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="210"/> + <source>RadioButton1</source> + <translation>RadioButton1</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="220"/> + <source>RadioButton2</source> + <translation>RadioButton2</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="227"/> + <source>RadioButton3</source> + <translation>BoutonRadio1</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PromotionModel</name> + <message> + <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="129"/> + <source>Name</source> + <translation>Nom</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="130"/> + <source>Header file</source> + <translation>Fichier d'en-tête</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="131"/> + <source>Global include</source> + <translation>En-tête global</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="132"/> + <source>Usage</source> + <translation>Usage</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PromotionTaskMenu</name> + <message> + <location filename="../tools/designer/src/lib/shared/promotiontaskmenu.cpp" line="85"/> + <source>Promoted widgets...</source> + <translation>Widgets promus...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/promotiontaskmenu.cpp" line="86"/> + <source>Promote to ...</source> + <translation>Promouvoir en...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/promotiontaskmenu.cpp" line="87"/> + <source>Change signals/slots...</source> + <translation>Modifier signaux/slots...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/promotiontaskmenu.cpp" line="88"/> + <source>Promote to</source> + <translation>Promouvoir en</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/promotiontaskmenu.cpp" line="89"/> + <source>Demote to %1</source> + <translation>Rétrograder en %1</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PropertyEditor</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="183"/> + <source>Add Dynamic Property...</source> + <translation>Ajouter une propriété dynamique...</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="184"/> + <source>Remove Dynamic Property</source> + <translation>Supprimer la propriété dynamique</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="185"/> + <source>Sorting</source> + <translation>Tri</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="186"/> + <source>Color Groups</source> + <translation>Groupes de couleur</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="187"/> + <source>Tree View</source> + <translation>Vue arborescente</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="188"/> + <source>Drop Down Button View</source> + <translation type="unfinished">Liste déroulante</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="238"/> + <source>String...</source> + <translation>Chaîne de caractères...</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="241"/> + <source>Bool...</source> + <translation>Booléen...</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="245"/> + <source>Other...</source> + <translation>Autre...</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="252"/> + <source>Configure Property Editor</source> + <translation>Configurer l'éditeur de propriétés</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="785"/> + <source>Object: %1 +Class: %2</source> + <translation>Objet : %1 +Classe : %2</translation> + </message> +</context> +<context> + <name>qdesigner_internal::PropertyLineEdit</name> + <message> + <location filename="../tools/designer/src/lib/shared/propertylineedit.cpp" line="88"/> + <source>Insert line break</source> + <translation>Insérer saut de ligne</translation> + </message> +</context> +<context> + <name>qdesigner_internal::QDesignerPromotionDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="208"/> + <source>Promoted Widgets</source> + <translation>Widgets promus</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="215"/> + <source>Promoted Classes</source> + <translation>Classes promues</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="275"/> + <source>Promote</source> + <translation>Promouvoir</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="427"/> + <source>Change signals/slots...</source> + <translation>Modifier signaux/slots...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="444"/> + <source>%1 - Error</source> + <translation>%1 - Erreur</translation> + </message> +</context> +<context> + <name>qdesigner_internal::QDesignerResource</name> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2354"/> + <source>Loading qrc file</source> + <translation>Chargement du fichier qrc</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2355"/> + <source>The specified qrc file <p><b>%1</b></p><p>could not be found. Do you want to update the file location?</p></source> + <translation>Le fichier qrc spécifié <p><b>%1</b></p><p>n'a pas pu être trouvé. Voulez-vous mettre à jour l'emplacement du fichier?</p></translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2361"/> + <source>New location for %1</source> + <translation>Nouvel emplacement pour %1</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2362"/> + <source>Resource files (*.qrc)</source> + <translation>Fichier de ressource (*.qrc)</translation> + </message> +</context> +<context> + <name>qdesigner_internal::QDesignerTaskMenu</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="230"/> + <source>Change objectName...</source> + <translation>Modifier objectName...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="231"/> + <source>Change toolTip...</source> + <translation>Modifier toolTip...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="232"/> + <source>Change whatsThis...</source> + <translation>Modifier whatsThis...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="233"/> + <source>Change styleSheet...</source> + <translation>Modifier la feuille de style...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="236"/> + <source>Create Menu Bar</source> + <translation>Créer une barre de menus</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="237"/> + <source>Add Tool Bar</source> + <translation>Ajouter une barre d'outils</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="238"/> + <source>Create Status Bar</source> + <translation>Créer une barre de status</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="239"/> + <source>Remove Status Bar</source> + <translation>Supprimer la barre de status</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="240"/> + <source>Change script...</source> + <translation>Modifier le script...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="241"/> + <source>Change signals/slots...</source> + <translation>Modifier signaux/slots...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="242"/> + <source>Go to slot...</source> + <translation>Aller au slot...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="245"/> + <source>Size Constraints</source> + <translation>Contrainte de taille</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="249"/> + <source>Set Minimum Width</source> + <translation>Définir la largeur minimum</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="253"/> + <source>Set Minimum Height</source> + <translation>Définir la hauteur minimum</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="257"/> + <source>Set Minimum Size</source> + <translation>Définir la taille minimum</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="263"/> + <source>Set Maximum Width</source> + <translation>Définir la largeur maximum</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="267"/> + <source>Set Maximum Height</source> + <translation>Définir la hauteur maximum</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="271"/> + <source>Set Maximum Size</source> + <translation>Définir la taille maximum</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="506"/> + <source>Edit ToolTip</source> + <translation>Éditer l'info-bulle</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="511"/> + <source>Edit WhatsThis</source> + <translation>Éditer «Qu'est-ce»</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="655"/> + <source>no signals available</source> + <translation>Aucun signal disponible</translation> + </message> + <message numerus="yes"> + <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="722"/> + <source>Set size constraint on %n widget(s)</source> + <translation> + <numerusform>Définir les contraintes de dimensions sur %n widget</numerusform> + <numerusform>Définir les contraintes de dimensions sur %n widgets</numerusform> + </translation> + </message> +</context> +<context> + <name>qdesigner_internal::QDesignerWidgetBox</name> + <message> + <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="349"/> + <source>An error has been encountered at line %1 of %2: %3</source> + <translation>Une erreur a été rencontrée à la ligne %1 de %2 : %3</translation> + </message> + <message> + <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="488"/> + <source>Unexpected element <%1> encountered when parsing for <widget> or <ui></source> + <translation>L'élément inattendu <%1> a été rencontré lors de l'analyse des élements <widget> et <ui></translation> + </message> + <message> + <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="507"/> + <source>Unexpected end of file encountered when parsing widgets.</source> + <translation>Fin de fichier inattendue lors de l'analyse grammaticale des widgets.</translation> + </message> + <message> + <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="516"/> + <source>A widget element could not be found.</source> + <translation>Un élement de widget n'a pas pu être trouvé.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_widgetbox.cpp" line="123"/> + <location filename="../tools/designer/src/lib/shared/qdesigner_widgetbox.cpp" line="136"/> + <source>Unexpected element <%1></source> + <translation>Élément <%1> inattendu</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_widgetbox.cpp" line="143"/> + <source>A parse error occurred at line %1, column %2 of the XML code specified for the widget %3: %4 +%5</source> + <translation>Une erreur d'analyse grammaticale est apparue à la ligne %1, colonne %2 du code XML spécifiant le widget %3 : %4 +%5</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_widgetbox.cpp" line="152"/> + <source>The XML code specified for the widget %1 does not contain any widget elements. +%2</source> + <translation>Le code XML spécifié pour le widget %1 ne contient aucun élément widget. +%2</translation> + </message> +</context> +<context> + <name>qdesigner_internal::QtGradientStopsController</name> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="173"/> + <source>H</source> + <translation>T</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="174"/> + <source>S</source> + <translation>S</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="175"/> + <source>V</source> + <translation>V</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="181"/> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="185"/> + <source>Hue</source> + <translation>Teinte</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="182"/> + <source>Sat</source> + <translation>Sat</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="183"/> + <source>Val</source> + <translation>Val</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="186"/> + <source>Saturation</source> + <translation>Saturation</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="187"/> + <source>Value</source> + <translation>Valeur</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="209"/> + <source>R</source> + <translation>R</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="210"/> + <source>G</source> + <translation>V</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="211"/> + <source>B</source> + <translation>B</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="217"/> + <source>Red</source> + <translation>Rouge</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="218"/> + <source>Green</source> + <translation>Vert</translation> + </message> + <message> + <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="219"/> + <source>Blue</source> + <translation>Bleu</translation> + </message> +</context> +<context> + <name>qdesigner_internal::RichTextEditorDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="624"/> + <source>Edit text</source> + <translation>Éditer le texte</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="647"/> + <source>Rich Text</source> + <translation>Texte riche</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="648"/> + <source>Source</source> + <translation>Source</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="654"/> + <source>&OK</source> + <translation>&OK</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="656"/> + <source>&Cancel</source> + <translation>&Annuler</translation> + </message> +</context> +<context> + <name>qdesigner_internal::RichTextEditorToolBar</name> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="354"/> + <source>Bold</source> + <translation>Gras</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="355"/> + <source>CTRL+B</source> + <translation>CTRL+B</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="360"/> + <source>Italic</source> + <translation>Italique</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="361"/> + <source>CTRL+I</source> + <translation>CTRL+I</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="366"/> + <source>Underline</source> + <translation>Souligné</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="367"/> + <source>CTRL+U</source> + <translation>CTRL+U</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="380"/> + <source>Left Align</source> + <translation>Aligner à gauche</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="385"/> + <source>Center</source> + <translation>Centrer</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="390"/> + <source>Right Align</source> + <translation>Aligner à droite</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="395"/> + <source>Justify</source> + <translation>Justifier</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="404"/> + <source>Superscript</source> + <translation>Exposant</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="410"/> + <source>Subscript</source> + <translation>Indice</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="419"/> + <source>Insert &Link</source> + <translation>Insérer &lien</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="424"/> + <source>Insert &Image</source> + <translation>Insérer &image</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ScriptDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/scriptdialog.cpp" line="66"/> + <source>Edit script</source> + <translation>Éditer le script</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/scriptdialog.cpp" line="71"/> + <source><html>Enter a Qt Script snippet to be executed while loading the form.<br>The widget and its children are accessible via the variables <i>widget</i> and <i>childWidgets</i>, respectively.</source> + <translation><html>Entrez un snippet de code Qt Script à exécuter lors du chargement du formulaire.<br>Le widget et ses enfants sont accessibles via les variables <i>widget</i> et <i>childWidgets</i>, respectivement.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/scriptdialog.cpp" line="122"/> + <source>Syntax error</source> + <translation>Erreur de syntaxe</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ScriptErrorDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/scripterrordialog.cpp" line="86"/> + <source>Script errors</source> + <translation>Erreurs de script</translation> + </message> +</context> +<context> + <name>qdesigner_internal::SignalSlotDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="401"/> + <source>There is already a slot with the signature '%1'.</source> + <translation>Un slot existe déjà avec la signature '%1'.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="406"/> + <source>There is already a signal with the signature '%1'.</source> + <translation>Un signal existe déjà avec la signature '%1'.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="413"/> + <source>%1 - Duplicate Signature</source> + <translation>%1 - Signature double</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="434"/> + <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="510"/> + <source>Signals/Slots of %1</source> + <translation>Signaux/slots de %1</translation> + </message> +</context> +<context> + <name>qdesigner_internal::SignalSlotEditorPlugin</name> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor_plugin.cpp" line="72"/> + <source>Edit Signals/Slots</source> + <translation>Éditer signaux/slots</translation> + </message> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor_plugin.cpp" line="74"/> + <source>F4</source> + <translation>F4</translation> + </message> +</context> +<context> + <name>qdesigner_internal::SignalSlotEditorTool</name> + <message> + <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor_tool.cpp" line="58"/> + <source>Edit Signals/Slots</source> + <translation>Éditer signaux/slots</translation> + </message> +</context> +<context> + <name>qdesigner_internal::StatusBarTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/toolbar_taskmenu.cpp" line="81"/> + <source>Remove</source> + <translation>Supprimer</translation> + </message> +</context> +<context> + <name>qdesigner_internal::StringListEditorButton</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/stringlisteditorbutton.cpp" line="56"/> + <source>Change String List</source> + <translation>Modifier la liste de chaîne de caractères</translation> + </message> +</context> +<context> + <name>qdesigner_internal::StyleSheetEditorDialog</name> + <message> + <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="90"/> + <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="370"/> + <source>Valid Style Sheet</source> + <translation>Feuille de style valide</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="92"/> + <source>Add Resource...</source> + <translation>Ajouter ressource...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="93"/> + <source>Add Gradient...</source> + <translation>Ajouter gradient...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="94"/> + <source>Add Color...</source> + <translation>Ajouter couleur...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="95"/> + <source>Add Font...</source> + <translation>Ajouter police...</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="97"/> + <source>Edit Style Sheet</source> + <translation>Éditer feuille de style</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="373"/> + <source>Invalid Style Sheet</source> + <translation>Feuille de style invalide</translation> + </message> +</context> +<context> + <name>qdesigner_internal::TabOrderEditor</name> + <message> + <location filename="../tools/designer/src/components/tabordereditor/tabordereditor.cpp" line="363"/> + <source>Start from Here</source> + <translation>Démarrer à partir d'ici</translation> + </message> + <message> + <location filename="../tools/designer/src/components/tabordereditor/tabordereditor.cpp" line="366"/> + <source>Restart</source> + <translation>Redémarrer</translation> + </message> + <message> + <location filename="../tools/designer/src/components/tabordereditor/tabordereditor.cpp" line="368"/> + <source>Tab Order List...</source> + <translation>Ordre de la liste de tabulation...</translation> + </message> + <message> + <location filename="../tools/designer/src/components/tabordereditor/tabordereditor.cpp" line="412"/> + <source>Tab Order List</source> + <translation>Ordre de la liste de tabulation</translation> + </message> + <message> + <location filename="../tools/designer/src/components/tabordereditor/tabordereditor.cpp" line="413"/> + <source>Tab Order</source> + <translation>Ordre des tabulations</translation> + </message> +</context> +<context> + <name>qdesigner_internal::TabOrderEditorPlugin</name> + <message> + <location filename="../tools/designer/src/components/tabordereditor/tabordereditor_plugin.cpp" line="73"/> + <source>Edit Tab Order</source> + <translation>Éditer l'ordre des tabulations</translation> + </message> +</context> +<context> + <name>qdesigner_internal::TabOrderEditorTool</name> + <message> + <location filename="../tools/designer/src/components/tabordereditor/tabordereditor_tool.cpp" line="57"/> + <source>Edit Tab Order</source> + <translation>Éditer l'ordre des tabulations</translation> + </message> +</context> +<context> + <name>qdesigner_internal::TableWidgetEditor</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.ui" line="53"/> + <source>Edit Table Widget</source> + <translation>Éditer le widget de table</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.ui" line="63"/> + <source>&Items</source> + <translation>&Éléments</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.ui" line="75"/> + <source>Table Items</source> + <translation>Éléments de la table</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.ui" line="97"/> + <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="218"/> + <source>Properties &>></source> + <translation>Propriétés &>></translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="67"/> + <source>New Column</source> + <translation>Nouvelle colonne</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="70"/> + <source>New Row</source> + <translation>Nouvelle ligne</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="78"/> + <source>&Columns</source> + <translation>&Colonne</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="79"/> + <source>&Rows</source> + <translation>&Lignes</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="216"/> + <source>Properties &<<</source> + <translation>Propriétés &<<</translation> + </message> +</context> +<context> + <name>qdesigner_internal::TableWidgetTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/tablewidget_taskmenu.cpp" line="64"/> + <source>Edit Items...</source> + <translation>Éditer les éléments...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::TemplateOptionsWidget</name> + <message> + <location filename="../tools/designer/src/components/formeditor/templateoptionspage.ui" line="13"/> + <source>Form</source> + <translation>Formulaire</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/templateoptionspage.ui" line="19"/> + <source>Additional Template Paths</source> + <translation>Chemins de modèles additionnels</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/templateoptionspage.ui" line="28"/> + <location filename="../tools/designer/src/components/formeditor/templateoptionspage.ui" line="35"/> + <source>...</source> + <translation>...</translation> + </message> + <message> + <location filename="../tools/designer/src/components/formeditor/templateoptionspage.cpp" line="138"/> + <source>Pick a directory to save templates in</source> + <translation>Choisir un répertoire où enregistrer les modèles</translation> + </message> +</context> +<context> + <name>qdesigner_internal::TextEditTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/textedit_taskmenu.cpp" line="58"/> + <source>Edit HTML</source> + <translation>Éditer le HTML</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/textedit_taskmenu.cpp" line="59"/> + <source>Change HTML...</source> + <translation>Modifier le HTML...</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/textedit_taskmenu.cpp" line="68"/> + <source>Edit Text</source> + <translation>Éditer le texte</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/textedit_taskmenu.cpp" line="69"/> + <source>Change Plain Text...</source> + <translation>Modifier le texte simple...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::TextEditor</name> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="150"/> + <source>Choose Resource...</source> + <translation>Choisir ressource...</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="151"/> + <source>Choose File...</source> + <translation>Choisir fichier...</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="156"/> + <source>...</source> + <translation>...</translation> + </message> + <message> + <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="274"/> + <source>Choose a File</source> + <translation>Choisir un fichier</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ToolBarEventFilter</name> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_toolbar.cpp" line="148"/> + <source>Insert Separator before '%1'</source> + <translation>Insérer un séparateur avant '%1'</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_toolbar.cpp" line="157"/> + <source>Append Separator</source> + <translation>Ajouter un séparateur à la fin</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_toolbar.cpp" line="169"/> + <source>Remove action '%1'</source> + <translation>Supprimer l'action '%1'</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_toolbar.cpp" line="176"/> + <source>Remove Toolbar '%1'</source> + <translation>Supprimer la barre d'outils '%1'</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/qdesigner_toolbar.cpp" line="234"/> + <source>Insert Separator</source> + <translation>Insérer un séparateur</translation> + </message> +</context> +<context> + <name>qdesigner_internal::TreeWidgetEditor</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="53"/> + <source>Edit Tree Widget</source> + <translation>Éditer un widget d'arborescence</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="63"/> + <source>&Items</source> + <translation>&Éléments</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="87"/> + <source>Tree Items</source> + <translation>Élément de l'arbre</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="91"/> + <source>1</source> + <translation>1</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="101"/> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="199"/> + <source>New Item</source> + <translation>Nouvel élément</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="104"/> + <source>&New</source> + <translation>&Nouveau</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="111"/> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="218"/> + <source>New Subitem</source> + <translation>Nouveau sous-élément</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="114"/> + <source>New &Subitem</source> + <translation>Nouveau &sous-élément</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="121"/> + <source>Delete Item</source> + <translation>Supprimer l'élément</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="124"/> + <source>&Delete</source> + <translation>&Supprimer</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="144"/> + <source>Move Item Left (before Parent Item)</source> + <translation>Déplacer l'élément à gauche (avant l'élément parent)</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="147"/> + <source>L</source> + <translation>G</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="154"/> + <source>Move Item Right (as a First Subitem of the Next Sibling Item)</source> + <translation>Déplacer l'élément sur la droite (comme un premier sous-élément de l'élément à droite)</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="157"/> + <source>R</source> + <translation>D</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="164"/> + <source>Move Item Up</source> + <translation>Déplacer l'élément vers le haut</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="167"/> + <source>U</source> + <translation>H</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="174"/> + <source>Move Item Down</source> + <translation>Déplacer l'élément vers le bas</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="177"/> + <source>D</source> + <translation>B</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="197"/> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="395"/> + <source>Properties &>></source> + <translation>Propriétés &>></translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="68"/> + <source>New Column</source> + <translation>Nouvelle colonne</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="76"/> + <source>&Columns</source> + <translation>&Colonnes</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="145"/> + <source>Per column properties</source> + <translation>Propriétés par colonnes</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="146"/> + <source>Common properties</source> + <translation>Propritétés de colonnes</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="393"/> + <source>Properties &<<</source> + <translation>Propriétés &<<</translation> + </message> +</context> +<context> + <name>qdesigner_internal::TreeWidgetTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/treewidget_taskmenu.cpp" line="63"/> + <source>Edit Items...</source> + <translation>Éditer les éléments...</translation> + </message> +</context> +<context> + <name>qdesigner_internal::WidgetBox</name> + <message> + <location filename="../tools/designer/src/components/widgetbox/widgetbox_dnditem.cpp" line="115"/> + <source>Warning: Widget creation failed in the widget box. This could be caused by invalid custom widget XML.</source> + <translation>Avertissement : La création du widget a échoué dans la boîte de widget. Ceci peut être causé par un code XML invalide d'un widget personnalisé.</translation> + </message> +</context> +<context> + <name>qdesigner_internal::WidgetBoxTreeWidget</name> + <message> + <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="248"/> + <source>Scratchpad</source> + <translation>bloc-notes</translation> + </message> + <message> + <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="618"/> + <source>Custom Widgets</source> + <translation>Widgets personnalisés</translation> + </message> + <message> + <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="881"/> + <source>Expand all</source> + <translation>Tout étendre</translation> + </message> + <message> + <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="882"/> + <source>Collapse all</source> + <translation>Tout replier</translation> + </message> + <message> + <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="885"/> + <source>List View</source> + <translation>Vue de liste</translation> + </message> + <message> + <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="886"/> + <source>Icon View</source> + <translation>Vue en icônes</translation> + </message> + <message> + <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="901"/> + <source>Remove</source> + <translation>Supprimer</translation> + </message> + <message> + <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="903"/> + <source>Edit name</source> + <translation>Éditer le nom</translation> + </message> +</context> +<context> + <name>qdesigner_internal::WidgetDataBase</name> + <message> + <location filename="../tools/designer/src/lib/shared/widgetdatabase.cpp" line="403"/> + <source>A custom widget plugin whose class name (%1) matches that of an existing class has been found.</source> + <translation>Un plugin de widgets personnalisés dont un nom de classe (%1) correspond à une classe existante à été trouvé.</translation> + </message> +</context> +<context> + <name>qdesigner_internal::WidgetEditorTool</name> + <message> + <location filename="../tools/designer/src/components/formeditor/tool_widgeteditor.cpp" line="67"/> + <source>Edit Widgets</source> + <translation>Éditer les widgets</translation> + </message> +</context> +<context> + <name>qdesigner_internal::WidgetFactory</name> + <message> + <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="263"/> + <source>The custom widget factory registered for widgets of class %1 returned 0.</source> + <translation>La fabrique (factory) de widget personnalisé, enregistrée pour les widgets de classe %1, a retourné 0.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="307"/> + <source>A class name mismatch occurred when creating a widget using the custom widget factory registered for widgets of class %1. It returned a widget of class %2.</source> + <translation>Une discordance de nom de classe est apparue lors de la création d'un nouveau widget à l'aide de la fabrique de widget personnalisé enregistrée pour la classe %1. La fabrique a retourné un widget de classe %2.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="406"/> + <source>%1 Widget</source> + <translation>%1 Widget</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="496"/> + <source>The current page of the container '%1' (%2) could not be determined while creating a layout.This indicates an inconsistency in the ui-file, probably a layout being constructed on a container widget.</source> + <translation>Le conteneur '%1' de la page courante (%2) n'a pas pu être déterminé lors de la création du layout. Ceci indique une incohérence dans le fichier ui, probablement un layout étant construit sur un widget conteneur.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="549"/> + <source>Attempt to add a layout to a widget '%1' (%2) which already has an unmanaged layout of type %3. +This indicates an inconsistency in the ui-file.</source> + <translation>Temptative d'ajout d'un layout sur le widget '%1' (%2) qui a déjà un layout non pris en charge de type %3. +Ceci indique une inconsistance dans le fichier ui.</translation> + </message> + <message> + <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="760"/> + <source>Cannot create style '%1'.</source> + <translation>Impossible de créer le style '%1'.</translation> + </message> +</context> +<context> + <name>qdesigner_internal::WizardContainerWidgetTaskMenu</name> + <message> + <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="232"/> + <source>Next</source> + <translation>Suivant</translation> + </message> + <message> + <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="233"/> + <source>Back</source> + <translation>Précédent</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ZoomMenu</name> + <message> + <location filename="../tools/designer/src/lib/shared/zoomwidget.cpp" line="84"/> + <source>%1 %</source> + <extracomment>Zoom factor</extracomment> + <translation>%1 %</translation> + </message> +</context> +<context> + <name>qdesigner_internal::ZoomablePreviewDeviceSkin</name> + <message> + <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="420"/> + <source>&Zoom</source> + <translation>&Zoom</translation> + </message> +</context> +</TS> diff --git a/translations/linguist_de.ts b/translations/linguist_de.ts index 25f35ef..9362811 100644 --- a/translations/linguist_de.ts +++ b/translations/linguist_de.ts @@ -4,7 +4,7 @@ <context> <name>AboutDialog</name> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1357"/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1358"/> <source>Qt Linguist</source> <translation>Qt Linguist</translation> </message> @@ -109,11 +109,17 @@ </message> <message> <location line="+4"/> + <location line="+8"/> <source><p>[more duplicates omitted]</source> <translation><p>[weitere mehrfach vorhandene Nachrichten weggelassen]</translation> </message> <message> - <location line="+3"/> + <location line="-5"/> + <source><p>* ID: %1</source> + <translation><p>* ID: %1</translation> + </message> + <message> + <location line="+8"/> <source><p>* Context: %1<br>* Source: %2</source> <translation><p>* Kontext: %1<br>* Quelle: %2</translation> </message> @@ -123,7 +129,7 @@ <translation><br>* Kommentar: %3</translation> </message> <message> - <location line="+70"/> + <location line="+71"/> <source>Linguist does not know the plural rules for '%1'. Will assume a single universal form.</source> <translation>Die Regeln zur Pluralbildung der Sprache '%1' sind in Linguist nicht definiert. @@ -311,7 +317,7 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation> <context> <name>LRelease</name> <message numerus="yes"> - <location filename="../tools/linguist/shared/qm.cpp" line="+747"/> + <location filename="../tools/linguist/shared/qm.cpp" line="+761"/> <source>Dropped %n message(s) which had no ID.</source> <translation> <numerusform>Es wurde ein Eintrag ohne Bezeichner gelöscht.</numerusform> @@ -908,7 +914,7 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation> <translation>Freigeben unter ...</translation> </message> <message> - <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-2004"/> + <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-2005"/> <source></source> <comment>This is the application's main window.</comment> <translation></translation> @@ -926,17 +932,17 @@ Es wird mit einer einfachen Universalform gearbeitet.</translation> </message> <message> <location line="-2"/> - <location line="+62"/> + <location line="+63"/> <source>Context</source> <translation>Kontext</translation> </message> <message> - <location line="-61"/> + <location line="-62"/> <source>Items</source> <translation>Einträge</translation> </message> <message> - <location line="+78"/> + <location line="+79"/> <source>This panel lists the source contexts.</source> <translation>Dieser Bereich zeigt die Kontexte an.</translation> </message> @@ -1391,7 +1397,7 @@ Alle Dateien (*)</translation> <message> <location filename="../tools/linguist/linguist/mainwindow.ui"/> <source>Open/Refresh Form &Preview</source> - <translation>Die &Vorschau öffnen/&aktualisieren</translation> + <translation>&Vorschau öffnen/aktualisieren</translation> </message> <message> <location/> @@ -1801,8 +1807,8 @@ Zeile: %2</translation> <translation>Alle Dateien (*)</translation> </message> <message> - <location filename="../tools/linguist/linguist/messagemodel.cpp" line="-1118"/> - <location line="+18"/> + <location filename="../tools/linguist/linguist/messagemodel.cpp" line="-1127"/> + <location line="+27"/> <location line="+67"/> <location line="+39"/> <location line="+17"/> diff --git a/translations/qt_de.ts b/translations/qt_de.ts index 0d329e5..81968fb 100644 --- a/translations/qt_de.ts +++ b/translations/qt_de.ts @@ -4,7 +4,7 @@ <context> <name>CloseButton</name> <message> - <location filename="../src/gui/widgets/qtabbar.cpp" line="+2245"/> + <location filename="../src/gui/widgets/qtabbar.cpp" line="+2262"/> <source>Close Tab</source> <translation>Schließen</translation> </message> @@ -12,7 +12,7 @@ <context> <name>FakeReply</name> <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp" line="+2191"/> + <location filename="../src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp" line="+2198"/> <source>Fake error !</source> <translation>Fake error !</translation> </message> @@ -58,7 +58,7 @@ <context> <name>Phonon::AudioOutput</name> <message> - <location filename="../src/3rdparty/phonon/phonon/audiooutput.cpp" line="+377"/> + <location filename="../src/3rdparty/phonon/phonon/audiooutput.cpp" line="+385"/> <source><html>The audio playback device <b>%1</b> does not work.<br/>Falling back to <b>%2</b>.</html></source> <translation><html>Das Audiogerät <b>%1</b> funktioniert nicht.<br/>Es wird stattdessen <b>%2</b> verwendet.</html></translation> </message> @@ -76,7 +76,7 @@ <context> <name>Phonon::Gstreamer::Backend</name> <message> - <location filename="../src/3rdparty/phonon/gstreamer/backend.cpp" line="+171"/> + <location filename="../src/3rdparty/phonon/gstreamer/backend.cpp" line="+182"/> <source>Warning: You do not seem to have the package gstreamer0.10-plugins-good installed. Some video features have been disabled.</source> <translation>Achtung: Das Paket gstreamer0.10-plugins-good ist nicht installiert. @@ -96,10 +96,11 @@ Die Audio- und Video-Unterstützung steht nicht zur Verfügung.</translation> <location filename="../src/3rdparty/phonon/gstreamer/mediaobject.cpp" line="+90"/> <source>Cannot start playback. -Check your Gstreamer installation and make sure you +Check your GStreamer installation and make sure you have libgstreamer-plugins-base installed.</source> - <translation>Die Wiedergabe kann nicht gestartet werden. -Bitte prüfen Sie die Gstreamer-Installation und stellen Sie sicher, dass das Paket libgstreamer-plugins-base installiert ist.</translation> + <translation>Das Abspielen konnte nicht gestartet werden. + +Bitte überprüfen Sie Ihre GStreamer-Installation und stellen Sie sicher, dass das Paket libgstreamer-plugins-base installiert ist.</translation> </message> <message> <location line="+113"/> @@ -107,10 +108,10 @@ Bitte prüfen Sie die Gstreamer-Installation und stellen Sie sicher, dass das Pa <translation>Es sind nicht alle erforderlichen Codecs installiert. Um diesen Inhalt abzuspielen, muss der folgende Codec installiert werden: %0</translation> </message> <message> - <location line="+681"/> + <location line="+702"/> <location line="+8"/> <location line="+15"/> - <location line="+22"/> + <location line="+26"/> <location line="+6"/> <location line="+19"/> <location line="+339"/> @@ -119,12 +120,12 @@ Bitte prüfen Sie die Gstreamer-Installation und stellen Sie sicher, dass das Pa <translation>Die Medienquelle konnte nicht geöffnet werden.</translation> </message> <message> - <location line="-420"/> + <location line="-424"/> <source>Invalid source type.</source> <translation>Ungültiger Typ der Medienquelle.</translation> </message> <message> - <location line="+394"/> + <location line="+398"/> <source>Could not locate media source.</source> <translation>Die Medienquelle konnte nicht gefunden werden.</translation> </message> @@ -142,7 +143,7 @@ Bitte prüfen Sie die Gstreamer-Installation und stellen Sie sicher, dass das Pa <context> <name>Phonon::MMF</name> <message> - <location filename="../src/3rdparty/phonon/mmf/audiooutput.cpp" line="+110"/> + <location filename="../src/3rdparty/phonon/mmf/audiooutput.cpp" line="+108"/> <source>Audio Output</source> <translation>Audio-Ausgabe</translation> </message> @@ -164,13 +165,13 @@ Bitte prüfen Sie die Gstreamer-Installation und stellen Sie sicher, dass das Pa <name>Phonon::MMF::EffectFactory</name> <message> <location filename="../src/3rdparty/phonon/mmf/effectfactory.cpp" line="+65"/> - <source>audio equalizer</source> + <source>Audio Equalizer</source> <translation>Audio-Equalizer</translation> </message> <message> <location line="+2"/> - <source>Bass boost</source> - <translation>Hervorhebung der Bässe</translation> + <source>Bass Boost</source> + <translation>Bass-Boost</translation> </message> <message> <location line="+2"/> @@ -200,6 +201,14 @@ Bitte prüfen Sie die Gstreamer-Installation und stellen Sie sicher, dass das Pa </message> </context> <context> + <name>Phonon::MMF::MediaObject</name> + <message> + <location filename="../src/3rdparty/phonon/mmf/mediaobject.cpp" line="+291"/> + <source>Media type could not be determined</source> + <translation>Der Typ des Mediums konnte nicht bestimmt werden</translation> + </message> +</context> +<context> <name>Phonon::VolumeSlider</name> <message> <location filename="../src/3rdparty/phonon/phonon/volumeslider.cpp" line="+42"/> @@ -903,8 +912,8 @@ nach <context> <name>QAbstractSocket</name> <message> - <location filename="../src/network/socket/qabstractsocket.cpp" line="+890"/> - <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+633"/> + <location filename="../src/network/socket/qabstractsocket.cpp" line="+899"/> + <location filename="../src/network/socket/qhttpsocketengine.cpp" line="+643"/> <location filename="../src/network/socket/qsocks5socketengine.cpp" line="+661"/> <location line="+26"/> <source>Host not found</source> @@ -923,8 +932,8 @@ nach <translation>Das Zeitlimit für die Verbindung wurde überschritten</translation> </message> <message> - <location line="-548"/> - <location line="+789"/> + <location line="-555"/> + <location line="+805"/> <location line="+208"/> <source>Operation on socket is not supported</source> <translation>Diese Socket-Operation wird nicht unterstützt</translation> @@ -964,9 +973,17 @@ nach </message> </context> <context> + <name>QAccessibleButton</name> + <message> + <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+250"/> + <source>Press</source> + <translation>Drücken</translation> + </message> +</context> +<context> <name>QApplication</name> <message> - <location filename="../src/gui/kernel/qapplication.cpp" line="+2290"/> + <location filename="../src/gui/kernel/qapplication.cpp" line="+2279"/> <source>QT_LAYOUT_DIRECTION</source> <comment>Translate this string to the string 'LTR' in left-to-right languages or to 'RTL' in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment> <translation>LTR</translation> @@ -1018,7 +1035,7 @@ nach <context> <name>QCheckBox</name> <message> - <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+114"/> + <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="-136"/> <source>Uncheck</source> <translation>Löschen</translation> </message> @@ -1276,7 +1293,7 @@ nach <message> <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1872"/> <location line="+464"/> - <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+606"/> + <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+622"/> <source>OK</source> <translation>OK</translation> </message> @@ -1580,12 +1597,12 @@ nach <translation>S&peichern</translation> </message> <message> - <location line="+1807"/> + <location line="+1801"/> <source>Recent Places</source> <translation>Zuletzt besucht</translation> </message> <message> - <location line="-2517"/> + <location line="-2511"/> <source>&Rename</source> <translation>&Umbenennen</translation> </message> @@ -1793,7 +1810,6 @@ Möchten Sie die Datei trotzdem löschen?</translation> </message> <message> <location line="+1"/> - <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+1"/> <source>%1 bytes</source> <translation>%1 Byte</translation> </message> @@ -1844,60 +1860,65 @@ Möchten Sie die Datei trotzdem löschen?</translation> <source>Computer</source> <translation>Computer</translation> </message> + <message> + <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+1"/> + <source>%1 byte(s)</source> + <translation>%1 byte</translation> + </message> </context> <context> <name>QFontDatabase</name> <message> <location filename="../src/gui/text/qfontdatabase.cpp" line="+102"/> - <location line="+1335"/> + <location line="+1342"/> <source>Normal</source> <translation>Normal</translation> </message> <message> - <location line="-1332"/> + <location line="-1339"/> <location line="+12"/> - <location line="+1308"/> + <location line="+1315"/> <source>Bold</source> <translation>Fett</translation> </message> <message> - <location line="-1317"/> - <location line="+1319"/> + <location line="-1324"/> + <location line="+1326"/> <source>Demi Bold</source> <translation>Halbfett</translation> </message> <message> - <location line="-1316"/> + <location line="-1323"/> <location line="+18"/> - <location line="+1294"/> + <location line="+1301"/> <source>Black</source> <translation>Schwarz</translation> </message> <message> - <location line="-1304"/> + <location line="-1311"/> <source>Demi</source> <translation>Semi</translation> </message> <message> <location line="+6"/> - <location line="+1304"/> + <location line="+1311"/> <source>Light</source> <translation>Leicht</translation> </message> <message> - <location line="-1158"/> - <location line="+1161"/> + <location line="-1165"/> + <location line="+1168"/> <source>Italic</source> <translation>Kursiv</translation> </message> <message> - <location line="-1158"/> - <location line="+1160"/> + <location line="-1165"/> + <location line="+1167"/> <source>Oblique</source> <translation>Schräggestellt</translation> </message> <message> - <location line="+703"/> + <location line="+704"/> <source>Any</source> <translation>Alle</translation> </message> @@ -2061,6 +2082,11 @@ Möchten Sie die Datei trotzdem löschen?</translation> <source>Runic</source> <translation>Runen</translation> </message> + <message> + <location line="+3"/> + <source>N'Ko</source> + <translation>N'Ko</translation> + </message> </context> <context> <name>QFontDialog</name> @@ -2201,7 +2227,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Changing directory failed: %1</source> - <translation>Ändern des Verzeichnises schlug fehl: + <translation>Ändern des Verzeichnisses schlug fehl: %1</translation> </message> <message> @@ -2233,7 +2259,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Creating directory failed: %1</source> - <translation>Erstellen des Verzeichnises schlug fehl: + <translation>Erstellen des Verzeichnisses schlug fehl: %1</translation> </message> <message> @@ -2241,7 +2267,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Removing directory failed: %1</source> - <translation>Löschen des Verzeichnises schlug fehl: + <translation>Löschen des Verzeichnisses schlug fehl: %1</translation> </message> <message> @@ -2260,7 +2286,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QHostInfo</name> <message> - <location filename="../src/network/kernel/qhostinfo_p.h" line="+183"/> + <location filename="../src/network/kernel/qhostinfo_p.h" line="+185"/> <source>Unknown error</source> <translation>Unbekannter Fehler</translation> </message> @@ -2304,13 +2330,13 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QHttp</name> <message> - <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+569"/> + <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+578"/> <location filename="../src/qt3support/network/q3http.cpp" line="+1835"/> <source>Connection refused</source> <translation>Verbindung verweigert</translation> </message> <message> - <location filename="../src/network/access/qhttp.cpp" line="+2634"/> + <location filename="../src/network/access/qhttp.cpp" line="+2639"/> <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-4"/> <location filename="../src/qt3support/network/q3http.cpp" line="+3"/> <source>Host %1 not found</source> @@ -2388,7 +2414,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <translation>Der Server hat die Verbindung unerwartet geschlossen</translation> </message> <message> - <location line="+151"/> + <location line="+172"/> <location filename="../src/qt3support/network/q3http.cpp" line="+113"/> <source>Invalid HTTP response header</source> <translation>Der Kopfteil der HTTP-Antwort ist ungültig</translation> @@ -2447,7 +2473,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <translation>Es wurde ein unbekanntes Protokoll angegeben</translation> </message> <message> - <location filename="../src/network/access/qhttp.cpp" line="-138"/> + <location filename="../src/network/access/qhttp.cpp" line="-159"/> <source>Connection refused (or timed out)</source> <translation>Verbindung verweigert oder Zeitlimit überschritten</translation> </message> @@ -2621,7 +2647,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QIODevice</name> <message> - <location filename="../src/corelib/global/qglobal.cpp" line="+2058"/> + <location filename="../src/corelib/global/qglobal.cpp" line="+2072"/> <source>Permission denied</source> <translation>Zugriff verweigert</translation> </message> @@ -2705,7 +2731,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <translation>Operation unmap fehlgeschlagen für '%1': %2</translation> </message> <message> - <location line="+341"/> + <location line="+344"/> <source>The plugin '%1' uses incompatible Qt library. (%2.%3.%4) [%5]</source> <translation>Das Plugin '%1' verwendet eine inkompatible Qt-Bibliothek. (%2.%3.%4) [%5]</translation> </message> @@ -2739,13 +2765,13 @@ Möchten Sie die Datei trotzdem löschen?</translation> <location filename="../src/corelib/plugin/qlibrary_unix.cpp" line="+236"/> <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+87"/> <source>Cannot load library %1: %2</source> - <translation>Die Library %1 kann nicht geladen werden: %2</translation> + <translation>Die Bibliothek %1 kann nicht geladen werden: %2</translation> </message> <message> <location line="+17"/> <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+22"/> <source>Cannot unload library %1: %2</source> - <translation>Die Library %1 kann nicht entladen werden: %2</translation> + <translation>Die Bibliothek %1 kann nicht entladen werden: %2</translation> </message> <message> <location line="+34"/> @@ -2757,7 +2783,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QLineEdit</name> <message> - <location filename="../src/gui/widgets/qlineedit.cpp" line="+2012"/> + <location filename="../src/gui/widgets/qlineedit.cpp" line="+2035"/> <source>Select All</source> <translation>Alles auswählen</translation> </message> @@ -2796,7 +2822,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <name>QLocalServer</name> <message> <location filename="../src/network/socket/qlocalserver.cpp" line="+224"/> - <location filename="../src/network/socket/qlocalserver_unix.cpp" line="+256"/> + <location filename="../src/network/socket/qlocalserver_unix.cpp" line="+246"/> <source>%1: Name error</source> <translation>%1: Fehlerhafter Name</translation> </message> @@ -3101,7 +3127,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QMenuBar</name> <message> - <location filename="../src/gui/widgets/qmenu_symbian.cpp" line="+404"/> + <location filename="../src/gui/widgets/qmenu_symbian.cpp" line="+410"/> <source>Actions</source> <translation>Optionen</translation> </message> @@ -3183,7 +3209,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <message> <location line="+3"/> <source>Out of resources</source> - <translation>Keine Resourcen verfügbar</translation> + <translation>Keine Ressourcen verfügbar</translation> </message> <message> <location line="+3"/> @@ -3320,27 +3346,30 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QNetworkAccessFileBackend</name> <message> + <location filename="../src/network/access/qfilenetworkreply.cpp" line="+83"/> <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+100"/> <source>Request for opening non-local file %1</source> <translation>Anforderung zum Öffnen einer Datei über Netzwerk %1</translation> </message> <message> - <location line="+45"/> + <location line="+31"/> + <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+45"/> <source>Error opening %1: %2</source> <translation>%1 konnte nicht geöffnet werden: %2</translation> </message> <message> - <location line="+38"/> + <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+38"/> <source>Write error writing to %1: %2</source> <translation>Fehler beim Schreiben zur Datei %1: %2</translation> </message> <message> - <location line="+48"/> + <location filename="../src/network/access/qfilenetworkreply.cpp" line="-11"/> + <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+48"/> <source>Cannot open %1: Path is a directory</source> <translation>%1 kann nicht geöffnet werden: Der Pfad spezifiziert ein Verzeichnis</translation> </message> <message> - <location line="+21"/> + <location filename="../src/network/access/qnetworkaccessfilebackend.cpp" line="+21"/> <source>Read error reading from %1: %2</source> <translation>Beim Lesen von der Datei %1 trat ein Fehler auf: %2</translation> </message> @@ -3406,7 +3435,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QOCIDriver</name> <message> - <location filename="../src/sql/drivers/oci/qsql_oci.cpp" line="+2076"/> + <location filename="../src/sql/drivers/oci/qsql_oci.cpp" line="+2083"/> <source>Unable to logon</source> <translation>Logon-Vorgang fehlgeschlagen</translation> </message> @@ -3435,8 +3464,8 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QOCIResult</name> <message> - <location line="-972"/> - <location line="+161"/> + <location line="-979"/> + <location line="+168"/> <location line="+15"/> <source>Unable to bind column for batch execute</source> <translation>Die Spalte konnte nicht für den Stapelverarbeitungs-Befehl gebunden werden</translation> @@ -3599,7 +3628,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <context> <name>QPPDOptionsModel</name> <message> - <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1198"/> + <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="+1197"/> <source>Name</source> <translation>Name</translation> </message> @@ -3785,7 +3814,7 @@ Möchten Sie die Datei trotzdem löschen?</translation> <translation>Alias: %1</translation> </message> <message> - <location line="+223"/> + <location line="+225"/> <location line="+199"/> <source>unknown</source> <translation>unbekannt</translation> @@ -3968,12 +3997,12 @@ Möchten Sie die Datei trotzdem löschen?</translation> <translation>Drucken</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-357"/> + <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-359"/> <source>Print To File ...</source> <translation>In Datei drucken ...</translation> </message> <message> - <location line="+80"/> + <location line="+82"/> <source>File %1 is not writable. Please choose a different file name.</source> <translation>Die Datei %1 ist schreibgeschützt. @@ -4164,7 +4193,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Benutzerdefiniert</translation> </message> <message> - <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-524"/> + <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-523"/> <location line="+68"/> <source>&Options >></source> <translation>&Einstellungen >></translation> @@ -4471,7 +4500,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QProcess</name> <message> - <location filename="../src/corelib/io/qprocess_unix.cpp" line="+402"/> + <location filename="../src/corelib/io/qprocess_unix.cpp" line="+406"/> <location filename="../src/corelib/io/qprocess_win.cpp" line="+137"/> <source>Could not open input redirection for reading</source> <translation>Die Eingabeumleitung konnte nicht zum Lesen geöffnet werden</translation> @@ -4488,7 +4517,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Ressourcenproblem ("fork failure"): %1</translation> </message> <message> - <location line="+252"/> + <location line="+258"/> <location line="+52"/> <location line="+74"/> <location line="+66"/> @@ -4652,7 +4681,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QSQLiteDriver</name> <message> - <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+544"/> + <location filename="../src/sql/drivers/sqlite/qsql_sqlite.cpp" line="+540"/> <source>Error opening database</source> <translation>Die Datenbankverbindung konnte nicht geöffnet werden</translation> </message> @@ -4680,8 +4709,8 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QSQLiteResult</name> <message> - <location line="-408"/> - <location line="+66"/> + <location line="-404"/> + <location line="+62"/> <location line="+8"/> <source>Unable to fetch row</source> <translation>Der Datensatz konnte nicht abgeholt werden</translation> @@ -4707,7 +4736,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Die Anzahl der Parameter ist falsch</translation> </message> <message> - <location line="-204"/> + <location line="-200"/> <source>No query</source> <translation>Kein Abfrage</translation> </message> @@ -5155,7 +5184,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> </message> <message> <location filename="../src/corelib/kernel/qsharedmemory_symbian.cpp" line="+83"/> - <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+80"/> + <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+79"/> <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+87"/> <source>%1: permission denied</source> <translation>%1: Zugriff verweigert</translation> @@ -5375,7 +5404,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Hilfe</translation> </message> <message> - <location line="+3"/> + <location line="+5"/> <source>Back</source> <translation>Zurück</translation> </message> @@ -5570,6 +5599,451 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>(F) starten</translation> </message> <message> + <location line="+1"/> + <source>Monitor Brightness Up</source> + <translation>Monitor heller</translation> + </message> + <message> + <location line="+1"/> + <source>Monitor Brightness Down</source> + <translation>Monitor dunkler</translation> + </message> + <message> + <location line="+1"/> + <source>Keyboard Light On/Off</source> + <translation>Tastaturbeleuchtung Ein/Aus</translation> + </message> + <message> + <location line="+1"/> + <source>Keyboard Brightness Up</source> + <translation>Tastaturbeleuchtung heller</translation> + </message> + <message> + <location line="+1"/> + <source>Keyboard Brightness Down</source> + <translation>Tastaturbeleuchtung dunkler</translation> + </message> + <message> + <location line="+1"/> + <source>Power Off</source> + <translation>Ausschalten</translation> + </message> + <message> + <location line="+1"/> + <source>Wake Up</source> + <translation>Aufwecken</translation> + </message> + <message> + <location line="+1"/> + <source>Eject</source> + <translation>Auswerfen</translation> + </message> + <message> + <location line="+1"/> + <source>Screensaver</source> + <translation>Bildschirmschoner</translation> + </message> + <message> + <location line="+1"/> + <source>WWW</source> + <translation>Internet</translation> + </message> + <message> + <location line="+1"/> + <source>Sleep</source> + <translation>Schlafmodus</translation> + </message> + <message> + <location line="+1"/> + <source>LightBulb</source> + <translation>Beleuchtung</translation> + </message> + <message> + <location line="+1"/> + <source>Shop</source> + <translation>Shop</translation> + </message> + <message> + <location line="+1"/> + <source>History</source> + <translation>Verlauf</translation> + </message> + <message> + <location line="+1"/> + <source>Add Favorite</source> + <translation>Lesezeichen hinzufügen</translation> + </message> + <message> + <location line="+1"/> + <source>Hot Links</source> + <translation>Empfohlene Verweise</translation> + </message> + <message> + <location line="+1"/> + <source>Adjust Brightness</source> + <translation>Helligkeit einstellen</translation> + </message> + <message> + <location line="+1"/> + <source>Finance</source> + <translation>Finanzen</translation> + </message> + <message> + <location line="+1"/> + <source>Community</source> + <translation>Community</translation> + </message> + <message> + <location line="+1"/> + <source>Audio Rewind</source> + <translation>Audio rückspulen</translation> + </message> + <message> + <location line="+1"/> + <source>Back Forward</source> + <translation>Hinterstes nach vorn</translation> + </message> + <message> + <location line="+1"/> + <source>Application Left</source> + <translation>Anwendung links</translation> + </message> + <message> + <location line="+1"/> + <source>Application Right</source> + <translation>Anwendung rechts</translation> + </message> + <message> + <location line="+1"/> + <source>Book</source> + <translation>Buch</translation> + </message> + <message> + <location line="+1"/> + <source>CD</source> + <translation>CD</translation> + </message> + <message> + <location line="+1"/> + <source>Calculator</source> + <translation>Rechner</translation> + </message> + <message> + <location line="+1"/> + <source>Clear</source> + <translation>Löschen</translation> + </message> + <message> + <location line="+1"/> + <source>Clear Grab</source> + <translation>Zugriff löschen</translation> + </message> + <message> + <location line="+1"/> + <source>Close</source> + <translation>Schließen</translation> + </message> + <message> + <location line="+1"/> + <source>Copy</source> + <translation>Kopieren</translation> + </message> + <message> + <location line="+1"/> + <source>Cut</source> + <translation>Ausschneiden</translation> + </message> + <message> + <location line="+1"/> + <source>Display</source> + <translation>Anzeigen</translation> + </message> + <message> + <location line="+1"/> + <source>DOS</source> + <translation>DOS</translation> + </message> + <message> + <location line="+1"/> + <source>Documents</source> + <translation>Dokumente</translation> + </message> + <message> + <location line="+1"/> + <source>Spreadsheet</source> + <translation>Spreadsheet</translation> + </message> + <message> + <location line="+1"/> + <source>Browser</source> + <translation>Browser</translation> + </message> + <message> + <location line="+1"/> + <source>Game</source> + <translation>Spiel</translation> + </message> + <message> + <location line="+1"/> + <source>Go</source> + <translation>Los</translation> + </message> + <message> + <location line="+1"/> + <source>iTouch</source> + <translation>iTouch</translation> + </message> + <message> + <location line="+1"/> + <source>Logoff</source> + <translation>Logoff</translation> + </message> + <message> + <location line="+1"/> + <source>Market</source> + <translation>Markt</translation> + </message> + <message> + <location line="+1"/> + <source>Meeting</source> + <translation>Versammlung</translation> + </message> + <message> + <location line="+1"/> + <source>Keyboard Menu</source> + <translation>Tastaturmenü</translation> + </message> + <message> + <location line="+1"/> + <source>Menu PB</source> + <translation>Menü PB</translation> + </message> + <message> + <location line="+1"/> + <source>My Sites</source> + <translation>Meine Orte</translation> + </message> + <message> + <location line="+1"/> + <source>News</source> + <translation>Nachrichten</translation> + </message> + <message> + <location line="+1"/> + <source>Home Office</source> + <translation>Home Office</translation> + </message> + <message> + <location line="+1"/> + <source>Option</source> + <translation>Option</translation> + </message> + <message> + <location line="+1"/> + <source>Paste</source> + <translation>Einfügen</translation> + </message> + <message> + <location line="+1"/> + <source>Phone</source> + <translation>Telefon</translation> + </message> + <message> + <location line="+1"/> + <source>Reply</source> + <translation>Antworten</translation> + </message> + <message> + <location line="+1"/> + <source>Reload</source> + <translation>Neu laden</translation> + </message> + <message> + <location line="+1"/> + <source>Rotate Windows</source> + <translation>Fenster rotieren</translation> + </message> + <message> + <location line="+1"/> + <source>Rotation PB</source> + <translation>Rotation PB</translation> + </message> + <message> + <location line="+1"/> + <source>Rotation KB</source> + <translation>Rotation KB</translation> + </message> + <message> + <location line="+1"/> + <source>Save</source> + <translation>Speichern</translation> + </message> + <message> + <location line="+1"/> + <source>Send</source> + <translation>Senden</translation> + </message> + <message> + <location line="+1"/> + <source>Spellchecker</source> + <translation>Rechtschreibprüfung</translation> + </message> + <message> + <location line="+1"/> + <source>Split Screen</source> + <translation>Bildschirm teilen</translation> + </message> + <message> + <location line="+1"/> + <source>Support</source> + <translation>Hilfe</translation> + </message> + <message> + <location line="+1"/> + <source>Task Panel</source> + <translation>Task-Leiste</translation> + </message> + <message> + <location line="+1"/> + <source>Terminal</source> + <translation>Terminal</translation> + </message> + <message> + <location line="+1"/> + <source>Tools</source> + <translation>Werkzeuge</translation> + </message> + <message> + <location line="+1"/> + <source>Travel</source> + <translation>Reise</translation> + </message> + <message> + <location line="+1"/> + <source>Video</source> + <translation>Video</translation> + </message> + <message> + <location line="+1"/> + <source>Word Processor</source> + <translation>Textverarbeitung</translation> + </message> + <message> + <location line="+1"/> + <source>XFer</source> + <translation>XFer</translation> + </message> + <message> + <location line="+1"/> + <source>Zoom In</source> + <translation>Vergrößern</translation> + </message> + <message> + <location line="+1"/> + <source>Zoom Out</source> + <translation>Verkleinern</translation> + </message> + <message> + <location line="+1"/> + <source>Away</source> + <translation>Abwesend</translation> + </message> + <message> + <location line="+1"/> + <source>Messenger</source> + <translation>Messenger</translation> + </message> + <message> + <location line="+1"/> + <source>WebCam</source> + <translation>WebCam</translation> + </message> + <message> + <location line="+1"/> + <source>Mail Forward</source> + <translation>Weiterleitung</translation> + </message> + <message> + <location line="+1"/> + <source>Pictures</source> + <translation>Bilder</translation> + </message> + <message> + <location line="+1"/> + <source>Music</source> + <translation>Musik</translation> + </message> + <message> + <location line="+1"/> + <source>Battery</source> + <translation>Batterie</translation> + </message> + <message> + <location line="+1"/> + <source>Bluetooth</source> + <translation>Bluetooth</translation> + </message> + <message> + <location line="+1"/> + <source>Wireless</source> + <translation>Drahtlos</translation> + </message> + <message> + <location line="+1"/> + <source>Ultra Wide Band</source> + <translation>Ultra Wide Band</translation> + </message> + <message> + <location line="+1"/> + <source>Audio Forward</source> + <translation>Audio vorspulen</translation> + </message> + <message> + <location line="+1"/> + <source>Audio Repeat</source> + <translation>Audio wiederholen</translation> + </message> + <message> + <location line="+1"/> + <source>Audio Random Play</source> + <translation>Audio zufällige Auswahl spielen</translation> + </message> + <message> + <location line="+1"/> + <source>Subtitle</source> + <translation>Untertitel</translation> + </message> + <message> + <location line="+1"/> + <source>Audio Cycle Track</source> + <translation>Audiospur wechseln</translation> + </message> + <message> + <location line="+1"/> + <source>Time</source> + <translation>Zeit</translation> + </message> + <message> + <location line="+2"/> + <source>View</source> + <translation>Ansicht</translation> + </message> + <message> + <location line="+1"/> + <source>Top Menu</source> + <translation>Hauptmenü</translation> + </message> + <message> + <location line="+1"/> + <source>Suspend</source> + <translation>Pause</translation> + </message> + <message> + <location line="+1"/> + <source>Hibernate</source> + <translation>Hibernate</translation> + </message> + <message> <location line="+4"/> <source>Print Screen</source> <translation>Bildschirm drucken</translation> @@ -5625,7 +6099,8 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>System Request</translation> </message> <message> - <location line="+4"/> + <location line="-18"/> + <location line="+22"/> <source>Select</source> <translation>Auswählen</translation> </message> @@ -5675,7 +6150,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Umdrehen</translation> </message> <message> - <location line="+561"/> + <location line="+573"/> <location line="+135"/> <source>Ctrl</source> <translation>Strg</translation> @@ -5709,7 +6184,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>F%1</translation> </message> <message> - <location line="-767"/> + <location line="-869"/> <source>Home Page</source> <translation>Startseite</translation> </message> @@ -5810,7 +6285,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Unbekannten Fehlercode vom SOCKSv5-Proxy-Server erhalten: 0x%1</translation> </message> <message> - <location line="+685"/> + <location line="+689"/> <source>Network operation timed out</source> <translation>Das Zeitlimit für die Operation wurde überschritten</translation> </message> @@ -5818,7 +6293,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QSoftKeyManager</name> <message> - <location filename="../src/gui/kernel/qsoftkeymanager.cpp" line="+78"/> + <location filename="../src/gui/kernel/qsoftkeymanager.cpp" line="+79"/> <source>Ok</source> <translation>Ok</translation> </message> @@ -5843,7 +6318,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Abbrechen</translation> </message> <message> - <location line="+151"/> + <location line="+172"/> <source>Exit</source> <translation>Beenden</translation> </message> @@ -5946,7 +6421,12 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Ungültige oder leere Schlüsselliste (%1)</translation> </message> <message> - <location line="+62"/> + <location line="+42"/> + <source>Private key does not certify public key, %1</source> + <translation>Der private Schlüssel passt nicht zum öffentlichen Schlüssel, %1</translation> + </message> + <message> + <location line="+20"/> <source>Error creating SSL session, %1</source> <translation>Es konnte keine SSL-Sitzung erzeugt werden, %1</translation> </message> @@ -5971,15 +6451,125 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Der private Schlüssel konnte nicht geladen werden, %1</translation> </message> <message> - <location line="+7"/> - <source>Private key does not certificate public key, %1</source> - <translation>Die Zertifizierung des öffentlichen Schlüssels durch den privaten Schlüssel schlug fehl, %1</translation> + <location filename="../src/network/ssl/qsslerror.cpp" line="+213"/> + <source>No error</source> + <translation>Kein Fehler</translation> + </message> + <message> + <location line="+3"/> + <source>The issuer certificate could not be found</source> + <translation>Das Zertifikat des Ausstellers konnte nicht gefunden werden</translation> + </message> + <message> + <location line="+3"/> + <source>The certificate signature could not be decrypted</source> + <translation>Die Signatur des Zertifikats konnte nicht entschlüsselt werden</translation> + </message> + <message> + <location line="+3"/> + <source>The public key in the certificate could not be read</source> + <translation>Der öffentliche Schlüssel konnte nicht gelesen werden</translation> + </message> + <message> + <location line="+3"/> + <source>The signature of the certificate is invalid</source> + <translation>Die Signatur des Zertifikats ist ungültig</translation> + </message> + <message> + <location line="+3"/> + <source>The certificate is not yet valid</source> + <translation>Das Zertifikat ist noch nicht gültig</translation> + </message> + <message> + <location line="+3"/> + <source>The certificate has expired</source> + <translation>Die Gültigkeit des Zertifikats ist abgelaufen</translation> + </message> + <message> + <location line="+3"/> + <source>The certificate's notBefore field contains an invalid time</source> + <translation>Das Feld 'notBefore' des Zertifikats enthält eine ungültige Zeit</translation> + </message> + <message> + <location line="+3"/> + <source>The certificate's notAfter field contains an invalid time</source> + <translation>Das Feld 'notAfter' des Zertifikats enthält eine ungültige Zeit</translation> + </message> + <message> + <location line="+3"/> + <source>The certificate is self-signed, and untrusted</source> + <translation>Das Zertifikat ist selbstsigniert und daher nicht vertrauenswürdig</translation> + </message> + <message> + <location line="+3"/> + <source>The root certificate of the certificate chain is self-signed, and untrusted</source> + <translation>Das oberste Zertifikat der Kette ist selbstsigniert und daher nicht vertrauenswürdig</translation> + </message> + <message> + <location line="+3"/> + <source>The issuer certificate of a locally looked up certificate could not be found</source> + <translation>Das Zertifikat des Ausstellers eines lokal gefundenen Zertifikats konnte nicht gefunden werden</translation> + </message> + <message> + <location line="+3"/> + <source>No certificates could be verified</source> + <translation>Keines der Zertifikate konnte verifiziert werden</translation> + </message> + <message> + <location line="+3"/> + <source>One of the CA certificates is invalid</source> + <translation>Eines der Zertifikate der Zertifizierungsstelle ist ungültig</translation> + </message> + <message> + <location line="+3"/> + <source>The basicConstraints path length parameter has been exceeded</source> + <translation>Die Länge des basicConstraints-Pfades wurde überschritten</translation> + </message> + <message> + <location line="+3"/> + <source>The supplied certificate is unsuitable for this purpose</source> + <translation>Das angegebene Zertifikat kann in diesem Fall nicht verwendet werden</translation> + </message> + <message> + <location line="+3"/> + <source>The root CA certificate is not trusted for this purpose</source> + <translation>Das oberste Zertifikat der Zertifizierungsstelle ist für diesen Fall nicht vertrauenswürdig</translation> + </message> + <message> + <location line="+3"/> + <source>The root CA certificate is marked to reject the specified purpose</source> + <translation>Das oberste Zertifikat der Zertifizierungsstelle weist diesen Fall auf Grund einer speziellen Kennzeichnung zurück</translation> + </message> + <message> + <location line="+3"/> + <source>The current candidate issuer certificate was rejected because its subject name did not match the issuer name of the current certificate</source> + <translation>Das Zertifikat des betrachteten Ausstellers wurde zurückgewiesen da sein Subjektname nicht dem Namen des Austellers des aktuellen Zertifikats entspricht</translation> + </message> + <message> + <location line="+4"/> + <source>The current candidate issuer certificate was rejected because its issuer name and serial number was present and did not match the authority key identifier of the current certificate</source> + <translation>Das Zertifikat des betrachteten Ausstellers wurde zurückgewiesen da Ausstellername und Seriennummer vorhanden sind und nicht dem Bezeichner der Zertifizierungsstelle des aktuellen Zertifikats entsprechen</translation> + </message> + <message> + <location line="+5"/> + <source>The peer did not present any certificate</source> + <translation>Die Gegenstelle hat kein Zertifikat angegeben</translation> + </message> + <message> + <location line="+3"/> + <source>The host name did not match any of the valid hosts for this certificate</source> + <translation>Der Name des Hosts ist keiner aus der Liste der für dieses Zertifikat gültigen Hosts</translation> + </message> + <message> + <location line="+6"/> + <source>Unknown error</source> + <translation>Unbekannter Fehler</translation> </message> </context> <context> <name>QStateMachine</name> <message> - <location filename="../src/corelib/statemachine/qstatemachine.cpp" line="+998"/> + <location filename="../src/corelib/statemachine/qstatemachine.cpp" line="+1028"/> <source>Missing initial state in compound state '%1'</source> <translation>Der Anfangszustand des zusammengesetzten Zustands '%1' fehlt</translation> </message> @@ -6033,7 +6623,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QTDSDriver</name> <message> - <location filename="../src/sql/drivers/tds/qsql_tds.cpp" line="+584"/> + <location filename="../src/sql/drivers/tds/qsql_tds.cpp" line="+595"/> <source>Unable to open connection</source> <translation>Die Datenbankverbindung kann nicht geöffnet werden</translation> </message> @@ -6067,7 +6657,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QTextControl</name> <message> - <location filename="../src/gui/text/qtextcontrol.cpp" line="+2007"/> + <location filename="../src/gui/text/qtextcontrol.cpp" line="+2024"/> <source>&Undo</source> <translation>&Rückgängig</translation> </message> @@ -6110,7 +6700,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QToolButton</name> <message> - <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+254"/> + <location filename="../src/plugins/accessible/widgets/simplewidgets.cpp" line="+310"/> <location line="+6"/> <source>Press</source> <translation>Drücken</translation> @@ -6167,7 +6757,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QUnicodeControlCharacterMenu</name> <message> - <location filename="../src/gui/text/qtextcontrol.cpp" line="+884"/> + <location filename="../src/gui/text/qtextcontrol.cpp" line="+899"/> <source>LRM Left-to-right mark</source> <translation>LRM Left-to-right mark</translation> </message> @@ -6225,7 +6815,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QWebFrame</name> <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp" line="+704"/> + <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp" line="+712"/> <source>Request cancelled</source> <translation>Anfrage wurde abgebrochen</translation> </message> @@ -6258,7 +6848,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QWebPage</name> <message> - <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+41"/> + <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="+42"/> <source>Submit</source> <comment>default label for Submit buttons in forms on web pages</comment> <translation>Senden</translation> @@ -6276,7 +6866,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Rücksetzen</translation> </message> <message> - <location line="+15"/> + <location line="+16"/> <source>Choose File</source> <comment>title for file button used in HTML forms</comment> <translation>Durchsuchen</translation> @@ -6774,7 +7364,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Unbekannt</translation> </message> <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp" line="+170"/> + <location filename="../src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp" line="+167"/> <source>Web Inspector - %2</source> <translation>Web Inspector - %2</translation> </message> @@ -6785,7 +7375,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>%1 (%2x%3 Pixel)</translation> </message> <message> - <location filename="../src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp" line="+416"/> + <location filename="../src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp" line="+412"/> <source>Bad HTTP request</source> <translation>Ungültige HTTP-Anforderung</translation> </message> @@ -6870,7 +7460,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> </translation> </message> <message> - <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+1727"/> + <location filename="../src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp" line="+1822"/> <source>JavaScript Alert - %1</source> <translation>JavaScript-Hinweis - %1</translation> </message> @@ -6895,7 +7485,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Das Skript dieser Webseite ist fehlerhaft. Möchten Sie es anhalten?</translation> </message> <message> - <location line="+383"/> + <location line="+381"/> <source>Move the cursor to the next character</source> <translation>Positionsmarke auf folgendes Zeichen setzen</translation> </message> @@ -6972,7 +7562,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location line="+3"/> <source>Select to the next word</source> - <translation>Bis zum nachsten Wort markieren</translation> + <translation>Bis zum nächsten Wort markieren</translation> </message> <message> <location line="+3"/> @@ -7116,7 +7706,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <context> <name>QWidget</name> <message> - <location filename="../src/gui/kernel/qwidget.cpp" line="+5666"/> + <location filename="../src/gui/kernel/qwidget.cpp" line="+5720"/> <source>*</source> <translation>*</translation> </message> @@ -7648,7 +8238,12 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>%1 ist ein unbekannter Schema-Typ.</translation> </message> <message> - <location line="-7041"/> + <location line="-7254"/> + <source>A template with name %1 has already been declared.</source> + <translation>Eine Vorlage des Namens %1 existiert bereits.</translation> + </message> + <message> + <location line="+213"/> <source>Only one %1 declaration can occur in the query prolog.</source> <translation>Der Anfrage-Prolog darf nur eine %1-Deklaration enthalten.</translation> </message> @@ -7703,12 +8298,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Modul-Import wird nicht unterstützt</translation> </message> <message> - <location line="+52"/> - <source>No value is available for the external variable by name %1.</source> - <translation>Für die externe Variable des Namens %1 ist kein Wert verfügbar.</translation> - </message> - <message> - <location line="+126"/> + <location line="+178"/> <source>The namespace of a user defined function in a library module must be equivalent to the module namespace. In other words, it should be %1 instead of %2</source> <translation>Der Namensraum einer nutzerdefinierten Funktion aus einem Bibliotheksmodul muss dem Namensraum des Moduls entsprechen (%1 anstatt %2) </translation> </message> @@ -7723,27 +8313,12 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Externe Funktionen werden nicht unterstützt. Alle unterstützten Funktionen können direkt verwendet werden, ohne sie als extern zu deklarieren</translation> </message> <message> - <location line="+37"/> - <source>An argument by name %1 has already been declared. Every argument name must be unique.</source> - <translation>Es existiert bereits ein Argument mit dem Namen %1. Die Namen der Argumente müssen eindeutig sein.</translation> - </message> - <message> - <location line="+1672"/> + <location line="+1709"/> <source>The %1-axis is unsupported in XQuery</source> <translation>Die %1-Achse wird in XQuery nicht unterstützt</translation> </message> <message> - <location line="-5464"/> - <source>No variable by name %1 exists</source> - <translation>Es existiert keine Variable mit dem Namen %1</translation> - </message> - <message> - <location line="+5797"/> - <source>No function by name %1 is available.</source> - <translation>Es existiert keine Funktion mit dem Namen %1.</translation> - </message> - <message> - <location line="+102"/> + <location line="+435"/> <source>The namespace URI cannot be the empty string when binding to a prefix, %1.</source> <translation>Der Namensraum-URI darf nicht leer sein, wenn er an den Präfix %1 gebunden ist.</translation> </message> @@ -7760,7 +8335,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location line="+30"/> <source>Two namespace declaration attributes have the same name: %1.</source> - <translation>Es wurden zwei Namenraum-Deklarationsattribute gleichen Namens (%1) gefunden.</translation> + <translation>Es wurden zwei Namensraum-Deklarationsattribute gleichen Namens (%1) gefunden.</translation> </message> <message> <location line="+89"/> @@ -7768,12 +8343,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Ein Namensraum-URI muss eine Konstante sein und darf keine eingebetteten Ausdrücke verwenden.</translation> </message> <message> - <location line="+16"/> - <source>An attribute by name %1 has already appeared on this element.</source> - <translation>Das Element hat bereits ein Attribut mit dem Namen %1.</translation> - </message> - <message> - <location line="+683"/> + <location line="+699"/> <location line="+71"/> <source>%1 is not in the in-scope attribute declarations. Note that the schema import feature is not supported.</source> <translation>%1 befindet sich nicht unter den Attributdeklarationen im Bereich. Schema-Import wird nicht unterstützt.</translation> @@ -7975,7 +8545,12 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Ein positionales Prädikat muss sich als einfacher, numerischer Wert auswerten lassen.</translation> </message> <message> - <location filename="../src/xmlpatterns/expr/qncnameconstructor_p.h" line="+137"/> + <location filename="../src/xmlpatterns/expr/qncnameconstructor_p.h" line="+113"/> + <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, %2 is invalid.</source> + <translation>Der Zielname einer Processing-Anweisung kann nicht %1 (unabhängig von Groß/Kleinschreibung sein). %2 ist daher ungültig.</translation> + </message> + <message> + <location line="+24"/> <source>%1 is not a valid target name in a processing instruction. It must be a %2 value, e.g. %3.</source> <translation>%1 ist kein gültiger Zielname einer Processing-Anweisung, es muss ein %2 Wert wie zum Beispiel %3 sein.</translation> </message> @@ -8065,17 +8640,32 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Das Schlüsselwort %1 kann nicht mit einem anderen Modusnamen zusammen verwendet werden.</translation> </message> <message> - <location line="+29"/> - <source>The value of attribute %1 must of type %2, which %3 isn't.</source> - <translation>Der Wert des Attributs %1 muss vom Typ %2 sein. %3 ist kein gültiger Wert.</translation> + <location line="-3117"/> + <source>No variable with name %1 exists</source> + <translation>Es existiert keine Variable des Namens %1</translation> </message> <message> - <location line="+387"/> - <source>A variable by name %1 has already been declared.</source> - <translation>Es wurde bereits eine Variable mit dem Namen %1 deklariert.</translation> + <location line="+3146"/> + <source>The value of attribute %1 must be of type %2, which %3 isn't.</source> + <translation>Der Wert des Attributs %1 muss vom Typ %2 sein, was bei %3 nicht der Fall ist.</translation> </message> <message> - <location line="+135"/> + <location line="+75"/> + <source>The prefix %1 cannot be bound. By default, it is already bound to the namespace %2.</source> + <translation>Der Präfix %1 kann nicht gebunden werden. Er ist bereits per Vorgabe an den Namensraum %2 gebunden.</translation> + </message> + <message> + <location line="+312"/> + <source>A variable with name %1 has already been declared.</source> + <translation>Eine Variable des Namens %1 wurde bereits deklariert.</translation> + </message> + <message> + <location line="+39"/> + <source>No value is available for the external variable with name %1.</source> + <translation>Es ist kein Wert für die externe Variable des Namens %1 verfügbar.</translation> + </message> + <message> + <location line="+96"/> <source>A stylesheet function must have a prefixed name.</source> <translation>Der Name einer Stylesheet-Funktion muss einen Präfix haben.</translation> </message> @@ -8085,14 +8675,19 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Der Namensraum %1 ist reserviert und kann daher von nutzerdefinierten Funktionen nicht verwendet werden (für diesen Zweck gibt es den vordefinierten Präfix %2).</translation> </message> <message> - <location line="+285"/> + <location line="+106"/> + <source>An argument with name %1 has already been declared. Every argument name must be unique.</source> + <translation>Es wurde bereits ein Argument des Namens %1 deklariert. Argumentnamen müssen eindeutig sein.</translation> + </message> + <message> + <location line="+179"/> <source>When function %1 is used for matching inside a pattern, the argument must be a variable reference or a string literal.</source> - <translation>Bei der Verwendung der Funktion %1 zur Auswertung innerhalb eines Suchmusters muss das Argument eine Variablenreferenz oder ein String-Literal sein.</translation> + <translation>Bei der Verwendung der Funktion %1 zur Auswertung innerhalb eines Suchmusters muss das Argument eine Variablenreferenz oder ein Zeichenketten-Literal sein.</translation> </message> <message> <location line="+11"/> <source>In an XSL-T pattern, the first argument to function %1 must be a string literal, when used for matching.</source> - <translation>Bei einem XSL-T-Suchmuster muss das erste Argument zur Funktion %1 bei der Verwendung zur Suche ein String-Literal sein.</translation> + <translation>Bei einem XSL-T-Suchmuster muss das erste Argument zur Funktion %1 bei der Verwendung zur Suche ein Zeichenketten-Literal sein.</translation> </message> <message> <location line="+14"/> @@ -8140,7 +8735,12 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Die Namen von Vorlagenparametern müssen eindeutig sein, %1 existiert bereits.</translation> </message> <message> - <location line="-5773"/> + <location line="+462"/> + <source>No function with name %1 is available.</source> + <translation>Es ist keine Funktion des Namens %1 verfügbar.</translation> + </message> + <message> + <location line="-6235"/> <source>%1 is not a valid numeric literal.</source> <translation>%1 ist kein gültiger numerischer Literal.</translation> </message> @@ -8160,12 +8760,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Es wurde ein Sprachkonstrukt angetroffen, was in der aktuellen Sprache (%1) nicht erlaubt ist.</translation> </message> <message> - <location line="+3804"/> - <source>The prefix %1 can not be bound. By default, it is already bound to the namespace %2.</source> - <translation>Der Präfix %1 kann nicht gebunden werden. Er ist bereits durch Vorgabe an den Namensraum %2 gebunden.</translation> - </message> - <message> - <location line="+2698"/> + <location line="+6502"/> <source>Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared).</source> <translation>Der Namensraum %1 kann nur an %2 gebunden werden. Dies ist bereits vordeklariert.</translation> </message> @@ -8175,7 +8770,12 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Der Präfix %1 kann nur an %2 gebunden werden. Dies ist bereits vordeklariert.</translation> </message> <message> - <location line="+181"/> + <location line="+120"/> + <source>An attribute with name %1 has already appeared on this element.</source> + <translation>Das Element hat bereits ein Attribut des Namens %1.</translation> + </message> + <message> + <location line="+61"/> <source>A direct element constructor is not well-formed. %1 is ended with %2.</source> <translation>Es wurde ein fehlerhafter direkter Element-Konstruktor gefunden. %1 endet mit %2.</translation> </message> @@ -8197,7 +8797,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location line="+76"/> <source>%1 is not a valid name for a processing-instruction.</source> - <translation>%1 ist kein gültiger Name für eine Prozessing-Instruktion.</translation> + <translation>%1 ist kein gültiger Name für eine Processing-Instruktion.</translation> </message> <message> <location line="+188"/> @@ -8239,11 +8839,6 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <source>Modulus division (%1) by zero (%2) is undefined.</source> <translation>Die Modulo-Division (%1) durch Null (%2) ist nicht definiert.</translation> </message> - <message> - <location filename="../src/xmlpatterns/expr/qncnameconstructor_p.h" line="-24"/> - <source>The target name in a processing instruction cannot be %1 in any combination of upper and lower case. Therefore, is %2 invalid.</source> - <translation>%2 ist kein gültiger Zielname einer Processing-Anweisung, da dieser nicht %1 sein darf (ungeachtet der Groß/Kleinschreibung).</translation> - </message> <message numerus="yes"> <location filename="../src/xmlpatterns/functions/qabstractfunctionfactory.cpp" line="+77"/> <source>%1 takes at most %n argument(s). %2 is therefore invalid.</source> @@ -8277,19 +8872,14 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Die Deklaration des Default-Namensraums muss vor Funktions-, Variablen- oder Optionsdeklaration erfolgen.</translation> </message> <message> - <location line="-3458"/> - <source>A template by name %1 has already been declared.</source> - <translation>Es existiert bereits eine Vorlage des Namens %1.</translation> - </message> - <message> - <location line="+3468"/> + <location line="+10"/> <source>Namespace declarations must occur before function, variable, and option declarations.</source> <translation>Namensraums-Deklarationen müssen vor Funktions- Variablen- oder Optionsdeklarationen stehen.</translation> </message> <message> <location line="+11"/> <source>Module imports must occur before function, variable, and option declarations.</source> - <translation>Modul-Importe müssen vor Funktions- Variablen- oder Optionsdeklarationen stehen.</translation> + <translation>Modul-Importe müssen vor Funktions-, Variablen- oder Optionsdeklarationen stehen.</translation> </message> <message> <location filename="../src/xmlpatterns/functions/qtimezonefns.cpp" line="+12"/> @@ -8429,7 +9019,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location line="+31"/> <source>At least one %1-element must occur inside %2.</source> - <translation>In %2 muss mindenstens ein %1-Element stehen.</translation> + <translation>In %2 muss mindestens ein %1-Element stehen.</translation> </message> <message> <location line="+58"/> @@ -8887,7 +9477,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location line="+18"/> <source>processContent of base wildcard must be weaker than derived wildcard.</source> - <translation>Das 'processContent'-Attribut des Basisuchmusters muss schwächer sein als das des abgeleiteten Suchmusters.</translation> + <translation>Das 'processContent'-Attribut des Basissuchmusters muss schwächer sein als das des abgeleiteten Suchmusters.</translation> </message> <message> <location line="+39"/> @@ -8918,7 +9508,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> </message> <message> <location line="+5"/> - <source>Derived attribute %1 does not exists in the base definition.</source> + <source>Derived attribute %1 does not exist in the base definition.</source> <translation>Das abgeleitete Attribut %1 existiert in der Basisdefinition nicht.</translation> </message> <message> @@ -9011,7 +9601,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location line="+279"/> <source>Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type.</source> - <translation>Das Inhaltsmodell des komplexen Typs %1enthält ein Element '%2'; es kann daher nicht durch Erweiterung von einem nichtleeren Typ abgeleitet werden.</translation> + <translation>Das Inhaltsmodell des komplexen Typs %1enthält ein Element '%2'; es kann daher nicht durch Erweiterung von einem Typ abgeleitet werden, der nicht leer ist.</translation> </message> <message> <location line="+6"/> @@ -9116,7 +9706,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location filename="../src/xmlpatterns/schema/qxsdparticlechecker.cpp" line="+165"/> <source>Empty particle cannot be derived from non-empty particle.</source> - <translation>Von einem nichtleeren Partikel kann kein leerer Partikel abgeleitet werden.</translation> + <translation>Es kann kein leerer Partikel von einem Partikel abgeleitet werden, der nicht leer ist.</translation> </message> <message> <location line="+15"/> @@ -9370,8 +9960,8 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> </message> <message> <location line="+131"/> - <source>Component with id %1 has been defined previously.</source> - <translation>Die Komponente mit der Id %1 ist bereits definiert.</translation> + <source>Component with ID %1 has been defined previously.</source> + <translation>Es wurde bereits eine Komponente mit der ID %1 definiert.</translation> </message> <message> <location line="+17"/> @@ -9775,7 +10365,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location line="+8"/> <source>Attribute %1 contains invalid data: %2</source> - <translation>Das Attribut %1 enthält ungültigeDaten: %2</translation> + <translation>Das Attribut %1 enthält ungültige Daten: %2</translation> </message> <message> <location line="+8"/> @@ -9784,11 +10374,16 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> </message> <message> <location line="+6"/> - <source>Fixed value constrained not allowed if element is nillable.</source> - <translation>Eine feste Einschränkung des Werts ist nicht zulässig, wenn das Element 'nillable' spezifiert.</translation> + <source>Fixed value constraint not allowed if element is nillable.</source> + <translation>Eine Beschränkung auf einen festen Wert ist nicht zulässig, wenn das Element 'nillable' spezifiziert.</translation> </message> <message> - <location line="+32"/> + <location line="+230"/> + <source>Element %1 cannot contain other elements, as it has a fixed content.</source> + <translation>Das Element %1 kann keine anderen Element enthalten, da sein Inhalt festgelegt ist.</translation> + </message> + <message> + <location line="-198"/> <source>Specified type %1 is not validly substitutable with element type %2.</source> <translation>Der angebenene Typ %1 kann nicht durch den Elementtyp %2 substituiert werden.</translation> </message> @@ -9832,12 +10427,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <translation>Das Element %1 enthält unzulässigen Textinhalt.</translation> </message> <message> - <location line="+18"/> - <source>Element %1 can not contain other elements, as it has a fixed content.</source> - <translation>Das Element %1 darf kann keine Unterelemente haben, da es festen Inhalt enthält.</translation> - </message> - <message> - <location line="+43"/> + <location line="+61"/> <source>Element %1 is missing required attribute %2.</source> <translation>Bei dem Element %1 fehlt ein erforderliches Attribut %2.</translation> </message> diff --git a/translations/qt_fr.ts b/translations/qt_fr.ts index 9ea1f0b..20534c1 100644 --- a/translations/qt_fr.ts +++ b/translations/qt_fr.ts @@ -50,7 +50,7 @@ </message> <message> <source>remote media URL:</source> - <translation type="obsolete">URL distante :</translation> + <translation type="obsolete">URL distante :</translation> </message> <message> <source>run tests</source> @@ -58,7 +58,7 @@ </message> <message> <source>testing: %p%</source> - <translation type="obsolete">test de : %P%</translation> + <translation type="obsolete">test de : %P%</translation> </message> </context> <context> @@ -197,7 +197,7 @@ have libgstreamer-plugins-base installed.</source> </message> <message> <source>Unknown media format: %1</source> - <translation type="obsolete">Format inconnu : %1</translation> + <translation type="obsolete">Format inconnu : %1</translation> </message> <message> <source>Unable to flush media pipeline</source> @@ -332,13 +332,13 @@ have libgstreamer-plugins-base installed.</source> <message> <location line="+8"/> <source>Read: %1</source> - <translation>Lecture : %1</translation> + <translation>Lecture : %1</translation> </message> <message> <location line="+6"/> <location line="+30"/> <source>Write: %1</source> - <translation>Écriture : %1</translation> + <translation>Écriture : %1</translation> </message> <message> <location line="-22"/> @@ -388,19 +388,19 @@ have libgstreamer-plugins-base installed.</source> <message> <location line="-1991"/> <source>Look &in:</source> - <translation>Chercher &dans :</translation> + <translation>Chercher &dans :</translation> </message> <message> <location line="+1"/> <location line="+1981"/> <location line="+16"/> <source>File &name:</source> - <translation>&Nom de fichier :</translation> + <translation>&Nom de fichier :</translation> </message> <message> <location line="-1996"/> <source>File &type:</source> - <translation>&Type de fichier :</translation> + <translation>&Type de fichier :</translation> </message> <message> <location line="+7"/> @@ -581,7 +581,7 @@ have libgstreamer-plugins-base installed.</source> <message> <location line="+1"/> <source><qt>Are you sure you wish to delete %1 "%2"?</qt></source> - <translation><qt>Voulez-vous vraiment supprimer %1 "%2"?</qt></translation> + <translation><qt>Voulez-vous vraiment supprimer %1 "%2" ?</qt></translation> </message> <message> <location line="+2"/> @@ -622,7 +622,7 @@ have libgstreamer-plugins-base installed.</source> <message> <location line="-2"/> <source>Directory:</source> - <translation>Dossier :</translation> + <translation>Dossier :</translation> </message> <message> <location line="+40"/> @@ -774,7 +774,7 @@ en <message> <location line="+1"/> <source>&Redo</source> - <translation>A&nnuler Annuler</translation> + <translation>&Rétablir</translation> </message> <message> <location line="+5"/> @@ -1038,7 +1038,7 @@ en <message> <location line="+2"/> <source>Incompatible Qt Library Error</source> - <translation>Erreur : bibliothèque Qt incompatible</translation> + <translation>Erreur : bibliothèque Qt incompatible</translation> </message> <message> <location filename="../src/gui/accessible/qaccessibleobject.cpp" line="+376"/> @@ -1071,7 +1071,7 @@ en <message> <location/> <source>COM &Object:</source> - <translation>&Objet COM :</translation> + <translation>&Objet COM :</translation> </message> </context> <context> @@ -1097,37 +1097,37 @@ en <message> <location filename="../src/gui/dialogs/qcolordialog.cpp" line="+1253"/> <source>Hu&e:</source> - <translation>&Teinte :</translation> + <translation>&Teinte :</translation> </message> <message> <location line="+1"/> <source>&Sat:</source> - <translation>&Saturation :</translation> + <translation>&Saturation :</translation> </message> <message> <location line="+1"/> <source>&Val:</source> - <translation>&Valeur :</translation> + <translation>&Valeur :</translation> </message> <message> <location line="+1"/> <source>&Red:</source> - <translation>&Rouge :</translation> + <translation>&Rouge :</translation> </message> <message> <location line="+1"/> <source>&Green:</source> - <translation>&Vert :</translation> + <translation>&Vert :</translation> </message> <message> <location line="+1"/> <source>Bl&ue:</source> - <translation>Ble&u :</translation> + <translation>Ble&u :</translation> </message> <message> <location line="+1"/> <source>A&lpha channel:</source> - <translation>Canal a&lpha :</translation> + <translation>Canal a&lpha :</translation> </message> <message> <location line="+101"/> @@ -1339,7 +1339,7 @@ en <message> <location filename="../src/gui/dialogs/qdialog.cpp" line="+597"/> <source>What's This?</source> - <translation>Qu'est-ce que c'est ?</translation> + <translation>Qu'est-ce que c'est ?</translation> </message> <message> <location line="-115"/> @@ -1572,7 +1572,7 @@ en <message> <location line="-108"/> <source>Cannot remove source file</source> - <translation type="unfinished"></translation> + <translation>Impossible de supprimer le fichier source</translation> </message> <message> <location line="+120"/> @@ -1669,7 +1669,7 @@ en <location line="+1054"/> <source>%1 already exists. Do you want to replace it?</source> - <translation>Le fichier %1 existe déjà. Voulez-vous l'écraser ?</translation> + <translation>Le fichier %1 existe déjà. Voulez-vous l'écraser ?</translation> </message> <message> <location line="+20"/> @@ -1683,7 +1683,7 @@ Veuillez vérifier que le nom du fichier est correct.</translation> <message> <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+402"/> <source>My Computer</source> - <translation>Mon ordinateur</translation> + <translation>Poste de travail</translation> </message> <message> <location filename="../src/gui/dialogs/qfiledialog.ui"/> @@ -1695,13 +1695,13 @@ Veuillez vérifier que le nom du fichier est correct.</translation> <location/> <location filename="../src/gui/dialogs/qfiledialog_wince.ui"/> <source>Files of type:</source> - <translation>Fichiers de type :</translation> + <translation>Fichiers de type :</translation> </message> <message> <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-1496"/> <location line="+648"/> <source>Directory:</source> - <translation>Dossier :</translation> + <translation>Dossier :</translation> </message> <message> <source> @@ -1726,12 +1726,12 @@ Veuillez vérifier que le nom du dossier est correct.</translation> <source>'%1' is write protected. Do you want to delete it anyway?</source> <translation>'%1' est protégé en écriture. -Voulez-vous quand même le supprimer?</translation> +Voulez-vous quand même le supprimer ?</translation> </message> <message> <location line="+5"/> <source>Are sure you want to delete '%1'?</source> - <translation>Etes-vous sûr de vouloir supprimer '%1'?</translation> + <translation>Etes-vous sûr de vouloir supprimer '%1' ?</translation> </message> <message> <location line="+15"/> @@ -1805,7 +1805,7 @@ Voulez-vous quand même le supprimer?</translation> <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-687"/> <location line="+652"/> <source>File &name:</source> - <translation>&Nom de fichier :</translation> + <translation>&Nom de fichier :</translation> </message> <message> <location filename="../src/gui/dialogs/qfiledialog.ui"/> @@ -2243,7 +2243,7 @@ Voulez-vous quand même le supprimer?</translation> <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Listing directory failed: %1</source> - <translation>Échec du listage du dossier : + <translation>Échec du listage du dossier : %1</translation> </message> <message> @@ -2251,7 +2251,7 @@ Voulez-vous quand même le supprimer?</translation> <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Changing directory failed: %1</source> - <translation>Échec du changement de dossier : + <translation>Échec du changement de dossier : %1</translation> </message> <message> @@ -2259,7 +2259,7 @@ Voulez-vous quand même le supprimer?</translation> <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Downloading file failed: %1</source> - <translation>Échec du téléchargement du fichier : + <translation>Échec du téléchargement du fichier : %1</translation> </message> <message> @@ -2267,7 +2267,7 @@ Voulez-vous quand même le supprimer?</translation> <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Uploading file failed: %1</source> - <translation>Échec du télédéchargement : + <translation>Échec du télédéchargement : %1</translation> </message> <message> @@ -2275,7 +2275,7 @@ Voulez-vous quand même le supprimer?</translation> <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Removing file failed: %1</source> - <translation>Échec de la suppression d'un fichier : + <translation>Échec de la suppression d'un fichier : %1</translation> </message> <message> @@ -2283,7 +2283,7 @@ Voulez-vous quand même le supprimer?</translation> <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Creating directory failed: %1</source> - <translation>Échec de la création d'un dossier : + <translation>Échec de la création d'un dossier : %1</translation> </message> <message> @@ -2291,7 +2291,7 @@ Voulez-vous quand même le supprimer?</translation> <location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/> <source>Removing directory failed: %1</source> - <translation>Échec de la suppression d'un dossier : + <translation>Échec de la suppression d'un dossier : %1</translation> </message> <message> @@ -2440,7 +2440,7 @@ Voulez-vous quand même le supprimer?</translation> <message> <location line="+28"/> <source>Unknown authentication method</source> - <translation type="unfinished"></translation> + <translation>Méthode d'authentification inconnue</translation> </message> <message> <location line="+97"/> @@ -2718,7 +2718,7 @@ Voulez-vous quand même le supprimer?</translation> <message> <location filename="../src/gui/dialogs/qinputdialog.cpp" line="+223"/> <source>Enter a value:</source> - <translation>Entrer une valeur :</translation> + <translation>Entrer une valeur :</translation> </message> </context> <context> @@ -2738,7 +2738,7 @@ Voulez-vous quand même le supprimer?</translation> <message> <location filename="../src/corelib/plugin/qlibrary.cpp" line="+378"/> <source>Could not mmap '%1': %2</source> - <translation>Impossible d'établir la projection en mémoire de '%1' : %2</translation> + <translation>Impossible d'établir la projection en mémoire de '%1' : %2</translation> </message> <message> <location line="+22"/> @@ -2748,7 +2748,7 @@ Voulez-vous quand même le supprimer?</translation> <message> <location line="+6"/> <source>Could not unmap '%1': %2</source> - <translation>Impossible de supprimer la projection en mémoire de '%1' : %2</translation> + <translation>Impossible de supprimer la projection en mémoire de '%1' : %2</translation> </message> <message> <location line="+302"/> @@ -2785,19 +2785,19 @@ Voulez-vous quand même le supprimer?</translation> <location filename="../src/corelib/plugin/qlibrary_unix.cpp" line="+209"/> <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+99"/> <source>Cannot load library %1: %2</source> - <translation>Impossible de charger la bibliothèque %1 : %2</translation> + <translation>Impossible de charger la bibliothèque %1 : %2</translation> </message> <message> <location line="+16"/> <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+26"/> <source>Cannot unload library %1: %2</source> - <translation>Impossible de décharger la bibliothèque %1 : %2</translation> + <translation>Impossible de décharger la bibliothèque %1 : %2</translation> </message> <message> <location line="+31"/> <location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+15"/> <source>Cannot resolve symbol "%1" in %2: %3</source> - <translation>Impossible de résoudre le symbole "%1" dans %2 : %3</translation> + <translation>Impossible de résoudre le symbole "%1" dans %2 : %3</translation> </message> </context> <context> @@ -2815,7 +2815,7 @@ Voulez-vous quand même le supprimer?</translation> <message> <location line="+4"/> <source>&Redo</source> - <translation>A&nnuler Annuler</translation> + <translation>&Rétablir</translation> </message> <message> <location line="+7"/> @@ -2925,7 +2925,7 @@ Voulez-vous quand même le supprimer?</translation> <message> <location line="+4"/> <source>%1: Unknown error</source> - <translation>%1 : erreur inconnue</translation> + <translation>%1 : erreur inconnue</translation> </message> <message> <location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+4"/> @@ -3424,22 +3424,22 @@ Voulez-vous quand même le supprimer?</translation> <message> <location line="+42"/> <source>Error opening %1: %2</source> - <translation>Erreur lors de l'ouverture de %1 : %2</translation> + <translation>Erreur lors de l'ouverture de %1 : %2</translation> </message> <message> <location line="+56"/> <source>Write error writing to %1: %2</source> - <translation>Erreur d'écriture de %1 : %2</translation> + <translation>Erreur d'écriture de %1 : %2</translation> </message> <message> <location line="+33"/> <source>Cannot open %1: Path is a directory</source> - <translation>Impossible d'ouvrir %1 : le chemin est un dossier</translation> + <translation>Impossible d'ouvrir %1 : le chemin est un dossier</translation> </message> <message> <location line="+21"/> <source>Read error reading from %1: %2</source> - <translation>Erreur de lecture de %1 : %2</translation> + <translation>Erreur de lecture de %1 : %2</translation> </message> </context> <context> @@ -3452,22 +3452,22 @@ Voulez-vous quand même le supprimer?</translation> <message> <location line="+14"/> <source>Cannot open %1: is a directory</source> - <translation>Impossible d'ouvrir %1 : le chemin est un dossier</translation> + <translation>Impossible d'ouvrir %1 : le chemin est un dossier</translation> </message> <message> <location line="+130"/> <source>Logging in to %1 failed: authentication required</source> - <translation>Connexion à %1 a échoué : authentification requise</translation> + <translation>Connexion à %1 a échoué : authentification requise</translation> </message> <message> <location line="+39"/> <source>Error while downloading %1: %2</source> - <translation>Erreur lors du téléchargement de %1 : %2</translation> + <translation>Erreur lors du téléchargement de %1 : %2</translation> </message> <message> <location line="+2"/> <source>Error while uploading %1: %2</source> - <translation>Erreur lors de l'envoi de %1 : %2</translation> + <translation>Erreur lors de l'envoi de %1 : %2</translation> </message> </context> <context> @@ -3673,22 +3673,22 @@ Voulez-vous quand même le supprimer?</translation> <message> <location line="+53"/> <source>Invalid URI: %1</source> - <translation>URI invalide : %1</translation> + <translation>URI invalide : %1</translation> </message> <message> <location filename="../src/network/access/qnetworkaccessdebugpipebackend.cpp" line="+175"/> <source>Write error writing to %1: %2</source> - <translation>Erreur d'écriture sur %1 : %2</translation> + <translation>Erreur d'écriture sur %1 : %2</translation> </message> <message> <location line="+57"/> <source>Read error reading from %1: %2</source> - <translation>Erreur de lecture sur %1 : %2</translation> + <translation>Erreur de lecture sur %1 : %2</translation> </message> <message> <location line="+31"/> <source>Socket error on %1: %2</source> - <translation>Erreur de socket sur %1 : %2</translation> + <translation>Erreur de socket sur %1 : %2</translation> </message> <message> <location line="+15"/> @@ -3801,22 +3801,22 @@ Voulez-vous quand même le supprimer?</translation> <message> <location/> <source>Page size:</source> - <translation>Dimensions :</translation> + <translation>Dimensions :</translation> </message> <message> <location/> <source>Width:</source> - <translation>Largeur :</translation> + <translation>Largeur :</translation> </message> <message> <location/> <source>Height:</source> - <translation>Hauteur :</translation> + <translation>Hauteur :</translation> </message> <message> <location/> <source>Paper source:</source> - <translation>Source du papier :</translation> + <translation>Source du papier :</translation> </message> <message> <location/> @@ -3924,7 +3924,7 @@ Voulez-vous quand même le supprimer?</translation> </message> <message> <source>Number of copies:</source> - <translation type="obsolete">Nombre de copies :</translation> + <translation type="obsolete">Nombre de copies :</translation> </message> <message> <source>Paper format</source> @@ -4067,7 +4067,7 @@ Voulez-vous quand même le supprimer?</translation> <location filename="../src/gui/painting/qprinterinfo_unix.cpp" line="-647"/> <location line="+225"/> <source>Aliases: %1</source> - <translation>Alias : %1</translation> + <translation>Alias : %1</translation> </message> <message> <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-25"/> @@ -4101,15 +4101,15 @@ Voulez-vous quand même le supprimer?</translation> </message> <message> <source>Page size:</source> - <translation type="obsolete">Dimensions :</translation> + <translation type="obsolete">Dimensions :</translation> </message> <message> <source>Orientation:</source> - <translation type="obsolete">Orientation :</translation> + <translation type="obsolete">Orientation :</translation> </message> <message> <source>Paper source:</source> - <translation type="obsolete">Source du papier :</translation> + <translation type="obsolete">Source du papier :</translation> </message> <message> <location filename="../src/gui/dialogs/qabstractprintdialog.cpp" line="+110"/> @@ -4137,7 +4137,7 @@ Voulez-vous quand même le supprimer?</translation> </message> <message> <source>Size:</source> - <translation type="obsolete">Taille :</translation> + <translation type="obsolete">Taille :</translation> </message> <message> <source>Properties</source> @@ -4145,7 +4145,7 @@ Voulez-vous quand même le supprimer?</translation> </message> <message> <source>Printer info:</source> - <translation type="obsolete">Informations sur l'imprimante :</translation> + <translation type="obsolete">Informations sur l'imprimante :</translation> </message> <message> <source>Browse</source> @@ -4195,7 +4195,7 @@ Veuillez choisir un nom de fichier différent.</translation> <source>%1 already exists. Do you want to overwrite it?</source> <translation>%1 existe. -Voulez-vous l'écraser?</translation> +Voulez-vous l'écraser ?</translation> </message> <message> <location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-228"/> @@ -4205,7 +4205,7 @@ Voulez-vous l'écraser?</translation> <message> <location line="+1"/> <source><qt>Do you want to overwrite it?</qt></source> - <translation><qt>voulez-vous l'écraser?</qt></translation> + <translation><qt>voulez-vous l'écraser ?</qt></translation> </message> <message> <location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-8"/> @@ -4666,7 +4666,7 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location/> <source>&Name:</source> - <translation>&Nom :</translation> + <translation>&Nom :</translation> </message> <message> <location/> @@ -4676,7 +4676,7 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location/> <source>Location:</source> - <translation>Emplacement :</translation> + <translation>Emplacement :</translation> </message> <message> <location/> @@ -4716,7 +4716,7 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location line="+235"/> <source>Resource error (fork failure): %1</source> - <translation>Erreur de ressouce (fork) : %1</translation> + <translation>Erreur de ressouce (fork) : %1</translation> </message> <message> <location line="+259"/> @@ -4754,7 +4754,7 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location line="+912"/> <source>No program defined</source> - <translation type="unfinished"></translation> + <translation>Aucun programme défini</translation> </message> <message> <location filename="../src/corelib/io/qprocess_win.cpp" line="-341"/> @@ -5027,99 +5027,99 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location filename="../src/corelib/kernel/qsharedmemory.cpp" line="+207"/> <source>%1: unable to set key on lock</source> - <translation>%1 : impossible d'affecter la clé au verrou</translation> + <translation>%1 : impossible d'affecter la clé au verrou</translation> </message> <message> <location line="+81"/> <source>%1: create size is less then 0</source> - <translation>%1 : taille de création est inférieur à 0</translation> + <translation>%1 : taille de création est inférieur à 0</translation> </message> <message> <location line="+168"/> <location filename="../src/corelib/kernel/qsharedmemory_p.h" line="+148"/> <source>%1: unable to lock</source> - <translation>%1 : impossible de vérrouiller</translation> + <translation>%1 : impossible de vérrouiller</translation> </message> <message> <location line="+22"/> <source>%1: unable to unlock</source> - <translation>%1 : impossible de déverrouiller</translation> + <translation>%1 : impossible de déverrouiller</translation> </message> <message> <location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+78"/> <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+87"/> <source>%1: permission denied</source> - <translation>%1 : permission refusée</translation> + <translation>%1 : permission refusée</translation> </message> <message> <location line="+4"/> <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="-22"/> <source>%1: already exists</source> - <translation>%1 : existe déjà</translation> + <translation>%1 : existe déjà</translation> </message> <message> <location line="+4"/> <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+9"/> <source>%1: doesn't exists</source> - <translation>%1 : n'existe pas</translation> + <translation>%1 : n'existe pas</translation> </message> <message> <location line="+6"/> <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+9"/> <source>%1: out of resources</source> - <translation>%1 : plus de ressources disponibles</translation> + <translation>%1 : plus de ressources disponibles</translation> </message> <message> <location line="+4"/> <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+7"/> <source>%1: unknown error %2</source> - <translation>%1 : erreur inconnue %2</translation> + <translation>%1 : erreur inconnue %2</translation> </message> <message> <location line="+21"/> <source>%1: key is empty</source> - <translation>%1 : clé vide</translation> + <translation>%1 : clé vide</translation> </message> <message> <location line="+8"/> <source>%1: unix key file doesn't exists</source> - <translation>%1 : le fichier de clé unix n'existe pas</translation> + <translation>%1 : le fichier de clé unix n'existe pas</translation> </message> <message> <location line="+7"/> <source>%1: ftok failed</source> - <translation>%1 : ftok a échoué</translation> + <translation>%1 : ftok a échoué</translation> </message> <message> <location line="+51"/> <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+15"/> <source>%1: unable to make key</source> - <translation>%1 : impossible de créer la clé</translation> + <translation>%1 : impossible de créer la clé</translation> </message> <message> <location line="+20"/> <source>%1: system-imposed size restrictions</source> - <translation>%1 : le système impose des restrictions sur la taille</translation> + <translation>%1 : le système impose des restrictions sur la taille</translation> </message> <message> <location line="+53"/> <source>%1: not attached</source> - <translation>%1 : non attaché</translation> + <translation>%1 : non attaché</translation> </message> <message> <location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="-27"/> <source>%1: invalid size</source> - <translation>%1 : taille invalide</translation> + <translation>%1 : taille invalide</translation> </message> <message> <location line="+68"/> <source>%1: key error</source> - <translation>%1 : erreur de clé</translation> + <translation>%1 : erreur de clé</translation> </message> <message> <location line="+38"/> <source>%1: size query failed</source> - <translation>%1 : la requête de taille a échoué</translation> + <translation>%1 : la requête de taille a échoué</translation> </message> </context> <context> @@ -5648,7 +5648,7 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location line="+1"/> <source>Proxy authentication failed: %1</source> - <translation>L'authentification proxy a échoué : %1</translation> + <translation>L'authentification proxy a échoué : %1</translation> </message> <message> <location line="+9"/> @@ -5683,7 +5683,7 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location line="+5"/> <source>Unknown SOCKSv5 proxy error code 0x%1</source> - <translation>Erreur proxy SOCKSv5 inconnue : 0x%1</translation> + <translation>Erreur proxy SOCKSv5 inconnue : 0x%1</translation> </message> <message> <source>Socks5 timeout error connecting to socks server</source> @@ -5718,7 +5718,7 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location line="+1"/> <source>Delete this record?</source> - <translation>Supprimer cet enregistrement ?</translation> + <translation>Supprimer cet enregistrement ?</translation> </message> <message> <location line="+1"/> @@ -5747,7 +5747,7 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location line="+4"/> <source>Save edits?</source> - <translation>Enregistrer les modifications ?</translation> + <translation>Enregistrer les modifications ?</translation> </message> <message> <location line="+3"/> @@ -5762,7 +5762,7 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location line="+1"/> <source>Cancel your edits?</source> - <translation>Annuler vos modifications ?</translation> + <translation>Annuler vos modifications ?</translation> </message> </context> <context> @@ -5770,17 +5770,17 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location filename="../src/network/ssl/qsslsocket_openssl.cpp" line="+569"/> <source>Unable to write data: %1</source> - <translation>Impossible d'écrire les données : %1</translation> + <translation>Impossible d'écrire les données : %1</translation> </message> <message> <location line="+119"/> <source>Error while reading: %1</source> - <translation>Erreur lors de la lecture : %1</translation> + <translation>Erreur lors de la lecture : %1</translation> </message> <message> <location line="+96"/> <source>Error during SSL handshake: %1</source> - <translation>Erreur lors de la poignée de main SSL : %1</translation> + <translation>Erreur lors de la poignée de main SSL : %1</translation> </message> <message> <location line="-524"/> @@ -5800,7 +5800,7 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location line="+15"/> <source>Error creating SSL session: %1</source> - <translation>Erreur lors de la création de la session SSL : %1</translation> + <translation>Erreur lors de la création de la session SSL : %1</translation> </message> <message> <location line="-61"/> @@ -5844,12 +5844,12 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location line="+4"/> <source>%1: already exists</source> - <translation>%1 : existe déjà</translation> + <translation>%1 : existe déjà</translation> </message> <message> <location line="+4"/> <source>%1: does not exist</source> - <translation>%1 : n'existe pas</translation> + <translation>%1 : n'existe pas</translation> </message> <message> <location line="+9"/> @@ -6396,7 +6396,7 @@ Veuillez choisir un nom de fichier différent.</translation> <location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="-291"/> <source>This is a searchable index. Enter search keywords: </source> <comment>text that appears at the start of nearly-obsolete web pages in the form of a 'searchable index'</comment> - <translation>Ceci est un index. Veuillez saisir les mots-clé :</translation> + <translation>Ceci est un index. Veuillez saisir les mots-clé :</translation> </message> <message> <location filename="../src/3rdparty/webkit/WebCore/platform/qt/ScrollbarQt.cpp" line="+58"/> @@ -6550,7 +6550,7 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location line="+3"/> <source>Select all</source> - <translation type="unfinished"></translation> + <translation>Sélectionner tout</translation> </message> <message> <location line="+3"/> @@ -6625,12 +6625,12 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location line="+33"/> <source>Insert a new paragraph</source> - <translation type="unfinished"></translation> + <translation>Insérer un nouveau paragraphe</translation> </message> <message> <location line="+3"/> <source>Insert a new line</source> - <translation type="unfinished"></translation> + <translation>Insérer une nouvelle ligne</translation> </message> </context> <context> @@ -6638,7 +6638,7 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location filename="../src/gui/kernel/qwhatsthis.cpp" line="+522"/> <source>What's This?</source> - <translation>Qu'est-ce que c'est ?</translation> + <translation>Qu'est-ce que c'est ?</translation> </message> </context> <context> @@ -7152,7 +7152,7 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location line="+115"/> <source>Overflow: Date can't be represented.</source> - <translation>Overflow : la date ne peut pas être représentée.</translation> + <translation>Overflow : la date ne peut pas être représentée.</translation> </message> <message> <location filename="../src/xmlpatterns/data/qabstractduration.cpp" line="+99"/> @@ -7304,7 +7304,7 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location line="+8"/> <source>Failure when casting from %1 to %2: %3</source> - <translation>Echec en castant de %1 ver %2 : %3</translation> + <translation>Echec en castant de %1 ver %2 : %3</translation> </message> <message> <location filename="../src/xmlpatterns/expr/qcommentconstructor.cpp" line="+67"/> @@ -7481,7 +7481,7 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location line="+30"/> <source>%1 is an invalid flag for regular expressions. Valid flags are:</source> - <translation>%1 est un flag invalide pour des expressions régulières. Les flags valides sont :</translation> + <translation>%1 est un flag invalide pour des expressions régulières. Les flags valides sont :</translation> </message> <message> <location filename="../src/xmlpatterns/functions/qqnamefns.cpp" line="+17"/> @@ -7804,7 +7804,7 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location line="+15"/> <source>Two namespace declaration attributes have the same name: %1.</source> - <translation>Deux attributs de déclarations de namespace ont le même nom : %1.</translation> + <translation>Deux attributs de déclarations de namespace ont le même nom : %1.</translation> </message> <message> <location line="+89"/> @@ -7943,7 +7943,7 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location filename="../src/xmlpatterns/expr/qcomputednamespaceconstructor.cpp" line="+69"/> <source>In a namespace constructor, the value for a namespace cannot be an empty string.</source> - <translation type="unfinished"></translation> + <translation>Dans un constructeur d'espace de noms, la valeur pour un espace de noms ne peut pas être une chaîne vide.</translation> </message> <message> <location line="+11"/> @@ -8008,7 +8008,7 @@ Veuillez choisir un nom de fichier différent.</translation> <message> <location line="+108"/> <source>Unknown XSL-T attribute %1.</source> - <translation>Attribut XSL-T inconnu : %1.</translation> + <translation>Attribut XSL-T inconnu : %1.</translation> </message> <message> <location line="+23"/> diff --git a/translations/qt_help_de.ts b/translations/qt_help_de.ts index b1b7c76..f64e741 100644 --- a/translations/qt_help_de.ts +++ b/translations/qt_help_de.ts @@ -33,32 +33,52 @@ <name>QHelpCollectionHandler</name> <message> <location filename="../tools/assistant/lib/qhelpcollectionhandler.cpp" line="+79"/> - <source>The collection file is not set up yet!</source> - <translation>Die Katalogdatei ist noch nicht eingerichtet.</translation> + <source>The collection file '%1' is not set up yet!</source> + <translation>Die Katalogdatei '%1' ist noch nicht eingerichtet.</translation> </message> <message> - <location line="+22"/> + <location line="+23"/> <source>Cannot load sqlite database driver!</source> <translation>Der Datenbanktreiber für SQLite kann nicht geladen werden.</translation> </message> <message> <location line="+11"/> - <location line="+48"/> + <location line="+49"/> <source>Cannot open collection file: %1</source> <translation>Katalogdatei kann nicht geöffnet werden: %1</translation> </message> <message> - <location line="-39"/> + <location line="-40"/> <source>Cannot create tables in file %1!</source> <translation>In Datei %1 können keine Tabellen angelegt werden.</translation> </message> <message> <location line="+16"/> - <source>The specified collection file already exists!</source> - <translation>Die angegebene Katalogdatei existiert bereits.</translation> + <source>The collection file '%1' already exists!</source> + <translation>Die Katalogdatei '%1' existiert bereits.</translation> </message> <message> - <location line="+5"/> + <location line="+148"/> + <source>Unknown filter '%1'!</source> + <translation>Unbekannter Filter '%1'.</translation> + </message> + <message> + <location line="+105"/> + <source>Invalid documentation file '%1'!</source> + <translation>Ungültige Dokumentationsdatei '%1'.</translation> + </message> + <message> + <location line="+167"/> + <source>Cannot register namespace '%1'!</source> + <translation>Der Namensraum '%1' kann nicht registriert werden.</translation> + </message> + <message> + <location line="+24"/> + <source>Cannot open database '%1' to optimize!</source> + <translation>Die Datenbank '%1' kann nicht zur Optimierung geöffnet werden.</translation> + </message> + <message> + <location line="-438"/> <source>Cannot create directory: %1</source> <translation>Das Verzeichnis kann nicht angelegt werden: %1</translation> </message> @@ -68,12 +88,7 @@ <translation>Die Katalogdatei kann nicht kopiert werden: %1</translation> </message> <message> - <location line="+119"/> - <source>Unknown filter!</source> - <translation>Unbekannter Filter.</translation> - </message> - <message> - <location line="+55"/> + <location line="+174"/> <source>Cannot register filter %1!</source> <translation>Der Filter kann nicht registriert werden: %1</translation> </message> @@ -83,12 +98,7 @@ <translation>Die Dokumentationsdatei kann nicht geöffnet werden: %1</translation> </message> <message> - <location line="+6"/> - <source>Invalid documentation file!</source> - <translation>Ungültige Dokumentationsdatei.</translation> - </message> - <message> - <location line="+34"/> + <location line="+40"/> <source>The namespace %1 was not registered!</source> <translation>Der Namensraum %1 wurde nicht registriert.</translation> </message> @@ -97,16 +107,6 @@ <source>Namespace %1 already exists!</source> <translation>Der Namensraum %1 existiert bereits.</translation> </message> - <message> - <location line="+13"/> - <source>Cannot register namespace!</source> - <translation>Der Namensraum kann nicht registriert werden.</translation> - </message> - <message> - <location line="+24"/> - <source>Cannot open database to optimize!</source> - <translation>Die Datenbank kann nicht zur Optimierung geöffnet werden.</translation> - </message> </context> <context> <name>QHelpDBReader</name> @@ -120,7 +120,7 @@ <context> <name>QHelpEngineCore</name> <message> - <location filename="../tools/assistant/lib/qhelpenginecore.cpp" line="+524"/> + <location filename="../tools/assistant/lib/qhelpenginecore.cpp" line="+523"/> <source>The specified namespace does not exist!</source> <translation>Der angegebene Namensraum existiert nicht.</translation> </message> @@ -128,7 +128,7 @@ <context> <name>QHelpEngineCorePrivate</name> <message> - <location line="-402"/> + <location line="-401"/> <source>Cannot open documentation file %1: %2!</source> <translation>Die Dokumentationsdatei %1 kann nicht geöffnet werden: %2.</translation> </message> @@ -318,11 +318,6 @@ <context> <name>QObject</name> <message> - <location filename="../tools/assistant/lib/qhelp_global.h" line="+83"/> - <source>Untitled</source> - <translation>Ohne Titel</translation> - </message> - <message> <location filename="../tools/assistant/lib/qhelpprojectdata.cpp" line="+85"/> <source>Unknown token.</source> <translation>Unbekanntes Token.</translation> diff --git a/translations/translations.pri b/translations/translations.pri index c77876a..5eb7328 100644 --- a/translations/translations.pri +++ b/translations/translations.pri @@ -8,13 +8,8 @@ defineReplace(prependAll) { return ($$result) } -defineReplace(fixPath) { - win32:1 ~= s|/|\\| - return ($$1) -} - -LUPDATE = $$fixPath($$QT_BUILD_TREE/bin/lupdate) -locations relative -no-ui-lines -LRELEASE = $$fixPath($$QT_BUILD_TREE/bin/lrelease) +LUPDATE = $$QT_BUILD_TREE/bin/lupdate -locations relative -no-ui-lines +win32:isEmpty(QMAKE_SH):LUPDATE ~= s|/|\\|g ###### Qt Libraries @@ -41,27 +36,18 @@ ts-qt.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \ -ts $$prependAll($$QT_SOURCE_TREE/translations/qt_,$$QT_TS,.ts)) ts-qt.depends = sub-tools -qm-qt.commands = $$LRELEASE $$prependAll($$QT_SOURCE_TREE/translations/qt_,$$QT_TS,.ts) -qm-qt.depends = sub-tools - ###### Designer ts-designer.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \ ../tools/designer/translations/translations.pro) ts-designer.depends = sub-tools -qm-designer.commands = $$LRELEASE $$QT_SOURCE_TREE/tools/designer/translations/translations.pro -qm-designer.depends = sub-tools - ###### Linguist ts-linguist.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \ ../tools/linguist/linguist/linguist.pro) ts-linguist.depends = sub-tools -qm-linguist.commands = $$LRELEASE $$QT_SOURCE_TREE/tools/linguist/linguist/linguist.pro -qm-linguist.depends = sub-tools - ###### Assistant ts-assistant.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \ @@ -72,36 +58,21 @@ ts-assistant.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \ ../tools/assistant/translations/translations_adp.pro) ts-assistant.depends = sub-tools -qm-assistant.commands = ($$LRELEASE $$QT_SOURCE_TREE/tools/assistant/translations/translations.pro \ - && $$LRELEASE \ - $$QT_SOURCE_TREE/tools/assistant/translations/qt_help.pro \ - && $$LRELEASE \ - $$QT_SOURCE_TREE/tools/assistant/translations/translations_adp.pro) -qm-assistant.depends = sub-tools - ###### Qtconfig ts-qtconfig.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \ ../tools/qtconfig/translations/translations.pro) ts-qtconfig.depends = sub-tools -qm-qtconfig.commands = $$LRELEASE $$QT_SOURCE_TREE/tools/qtconfig/translations/translations.pro -qm-qtconfig.depends = sub-tools - ###### Qvfp ts-qvfb.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \ ../tools/qvfb/translations/translations.pro) ts-qvfb.depends = sub-tools -qm-qvfb.commands = $$LRELEASE $$QT_SOURCE_TREE/tools/qvfb/translations/translations.pro -qm-qvfb.depends = sub-tools - ###### Overall Rules ts.depends = ts-qt ts-designer ts-linguist ts-assistant ts-qtconfig ts-qvfb -qm.depends = qm-qt qm-designer qm-linguist qm-assistant qm-qtconfig qm-qvfb QMAKE_EXTRA_TARGETS += ts-qt ts-designer ts-linguist ts-assistant ts-qtconfig ts-qvfb \ - qm-qt qm-designer qm-linguist qm-assistant qm-qtconfig qm-qvfb \ - ts qm + ts diff --git a/translations/translations.pro b/translations/translations.pro new file mode 100644 index 0000000..60f84e6 --- /dev/null +++ b/translations/translations.pro @@ -0,0 +1,42 @@ +TRANSLATIONS = $$files(*.ts) + +LRELEASE = $$QT_BUILD_TREE/bin/lrelease +win32:isEmpty(QMAKE_SH):LRELEASE ~= s|/|\\|g + +contains(TEMPLATE_PREFIX, vc):vcproj = 1 + +TEMPLATE = app +TARGET = qm_phony_target +CONFIG -= qt separate_debug_info +QT = +LIBS = + +updateqm.input = TRANSLATIONS +updateqm.output = ${QMAKE_FILE_BASE}.qm +isEmpty(vcproj):updateqm.variable_out = PRE_TARGETDEPS +updateqm.commands = @echo lrelease ${QMAKE_FILE_IN}; $$LRELEASE ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT} +updateqm.name = LRELEASE ${QMAKE_FILE_IN} +updateqm.CONFIG += no_link +QMAKE_EXTRA_COMPILERS += updateqm + +isEmpty(vcproj) { + QMAKE_LINK = @: IGNORE THIS LINE + OBJECTS_DIR = + win32:CONFIG -= embed_manifest_exe +} else { + CONFIG += console + PHONY_DEPS = . + phony_src.input = PHONY_DEPS + phony_src.output = phony.c + phony_src.variable_out = GENERATED_SOURCES + phony_src.commands = echo int main() { return 0; } > phony.c + phony_src.name = CREATE phony.c + phony_src.CONFIG += combine + QMAKE_EXTRA_COMPILERS += phony_src +} + +translations.path = $$[QT_INSTALL_TRANSLATIONS] +translations.files = $$TRANSLATIONS +translations.files ~= s,\\.ts$,.qm,g +translations.CONFIG += no_check_exist +INSTALLS += translations diff --git a/util/qlalr/cppgenerator.cpp b/util/qlalr/cppgenerator.cpp index 39d94cd..91340d2 100644 --- a/util/qlalr/cppgenerator.cpp +++ b/util/qlalr/cppgenerator.cpp @@ -341,8 +341,8 @@ void CppGenerator::operator () () } QTextStream out (&f); - out << "// This file was generated by qlalr - DO NOT EDIT!\n"; + // copyright headers must come first, otherwise the headers tests will fail if (copyright) { out << copyrightHeader() @@ -350,8 +350,16 @@ void CppGenerator::operator () () << endl; } + out << "// This file was generated by qlalr - DO NOT EDIT!\n"; + out << startIncludeGuard(grammar.merged_output) << endl; + if (copyright) { + out << "#if defined(Q_OS_VXWORKS) && defined(ERROR)" << endl + << "# undef ERROR" << endl + << "#endif" << endl << endl; + } + generateDecl (out); generateImpl (out); out << p.decls(); @@ -371,10 +379,10 @@ void CppGenerator::operator () () QFile f (declFileName); f.open (QFile::WriteOnly); QTextStream out (&f); - out << "// This file was generated by qlalr - DO NOT EDIT!\n"; QString prot = declFileName.toUpper ().replace (QLatin1Char ('.'), QLatin1Char ('_')); + // copyright headers must come first, otherwise the headers tests will fail if (copyright) { out << copyrightHeader() @@ -382,11 +390,19 @@ void CppGenerator::operator () () << endl; } + out << "// This file was generated by qlalr - DO NOT EDIT!\n"; + out << "#ifndef " << prot << endl << "#define " << prot << endl << endl; + if (copyright) { + out << "#include <QtCore/qglobal.h>" << endl << endl; + out << "QT_BEGIN_NAMESPACE" << endl << endl; + } generateDecl (out); + if (copyright) + out << "QT_END_NAMESPACE" << endl; out << "#endif // " << prot << endl << endl; } // end decls @@ -395,13 +411,19 @@ void CppGenerator::operator () () QFile f (bitsFileName); f.open (QFile::WriteOnly); QTextStream out (&f); - out << "// This file was generated by qlalr - DO NOT EDIT!\n"; + // copyright headers must come first, otherwise the headers tests will fail if (copyright) out << copyrightHeader(); + out << "// This file was generated by qlalr - DO NOT EDIT!\n"; + out << "#include \"" << declFileName << "\"" << endl << endl; + if (copyright) + out << "QT_BEGIN_NAMESPACE" << endl << endl; generateImpl(out); + if (copyright) + out << "QT_END_NAMESPACE" << endl; } // end bits @@ -410,7 +432,6 @@ void CppGenerator::operator () () QFile f (grammar.decl_file_name); f.open (QFile::WriteOnly); QTextStream out (&f); - out << "// This file was generated by qlalr - DO NOT EDIT!\n"; out << p.decls(); } @@ -419,7 +440,6 @@ void CppGenerator::operator () () QFile f (grammar.impl_file_name); f.open (QFile::WriteOnly); QTextStream out (&f); - out << "// This file was generated by qlalr - DO NOT EDIT!\n"; out << p.impls(); } } @@ -468,9 +488,9 @@ void CppGenerator::generateDecl (QTextStream &out) << " GOTO_CHECK_OFFSET = " << compressed_action.check.size () << endl << " };" << endl << endl - << " static const char *const spell [];" << endl - << " static const int lhs [];" << endl - << " static const int rhs [];" << endl; + << " static const char *const spell [];" << endl + << " static const short lhs [];" << endl + << " static const short rhs [];" << endl; if (debug_info) { @@ -482,24 +502,19 @@ void CppGenerator::generateDecl (QTextStream &out) << "#endif // " << prot << endl << endl; } - out << " static const int goto_default [];" << endl - << " static const int action_default [];" << endl - << " static const int action_index [];" << endl - << " static const int action_info [];" << endl - << " static const int action_check [];" << endl + out << " static const short goto_default [];" << endl + << " static const short action_default [];" << endl + << " static const short action_index [];" << endl + << " static const short action_info [];" << endl + << " static const short action_check [];" << endl << endl << " static inline int nt_action (int state, int nt)" << endl << " {" << endl - << " const int *const goto_index = &action_index [GOTO_INDEX_OFFSET];" << endl - << " const int *const goto_check = &action_check [GOTO_CHECK_OFFSET];" << endl - << endl - << " const int yyn = goto_index [state] + nt;" << endl - << endl - << " if (yyn < 0 || goto_check [yyn] != nt)" << endl + << " const int yyn = action_index [GOTO_INDEX_OFFSET + state] + nt;" << endl + << " if (yyn < 0 || action_check [GOTO_CHECK_OFFSET + yyn] != nt)" << endl << " return goto_default [nt];" << endl << endl - << " const int *const goto_info = &action_info [GOTO_INFO_OFFSET];" << endl - << " return goto_info [yyn];" << endl + << " return action_info [GOTO_INFO_OFFSET + yyn];" << endl << " }" << endl << endl << " static inline int t_action (int state, int token)" << endl @@ -567,7 +582,7 @@ void CppGenerator::generateImpl (QTextStream &out) out << "};" << endl << endl; - out << "const int " << grammar.table_name << "::lhs [] = {"; + out << "const short " << grammar.table_name << "::lhs [] = {"; idx = 0; for (RulePointer rule = grammar.rules.begin (); rule != grammar.rules.end (); ++rule, ++idx) { @@ -581,7 +596,7 @@ void CppGenerator::generateImpl (QTextStream &out) } out << "};" << endl << endl; - out << "const int " << grammar.table_name << ":: rhs[] = {"; + out << "const short " << grammar.table_name << "::rhs [] = {"; idx = 0; for (RulePointer rule = grammar.rules.begin (); rule != grammar.rules.end (); ++rule, ++idx) { @@ -636,7 +651,7 @@ void CppGenerator::generateImpl (QTextStream &out) << "#endif // " << prot << endl << endl; } - out << "const int " << grammar.table_name << "::action_default [] = {"; + out << "const short " << grammar.table_name << "::action_default [] = {"; idx = 0; for (StatePointer state = aut.states.begin (); state != aut.states.end (); ++state, ++idx) { @@ -653,7 +668,7 @@ void CppGenerator::generateImpl (QTextStream &out) } out << "};" << endl << endl; - out << "const int " << grammar.table_name << "::goto_default [] = {"; + out << "const short " << grammar.table_name << "::goto_default [] = {"; for (int i = 0; i < defgoto.size (); ++i) { if (i) @@ -666,7 +681,7 @@ void CppGenerator::generateImpl (QTextStream &out) } out << "};" << endl << endl; - out << "const int " << grammar.table_name << "::action_index [] = {"; + out << "const short " << grammar.table_name << "::action_index [] = {"; for (int i = 0; i < compressed_action.index.size (); ++i) { if (! (i % 10)) @@ -687,7 +702,7 @@ void CppGenerator::generateImpl (QTextStream &out) } out << "};" << endl << endl; - out << "const int " << grammar.table_name << "::action_info [] = {"; + out << "const short " << grammar.table_name << "::action_info [] = {"; for (int i = 0; i < compressed_action.info.size (); ++i) { if (! (i % 10)) @@ -708,7 +723,7 @@ void CppGenerator::generateImpl (QTextStream &out) } out << "};" << endl << endl; - out << "const int " << grammar.table_name << "::action_check [] = {"; + out << "const short " << grammar.table_name << "::action_check [] = {"; for (int i = 0; i < compressed_action.check.size (); ++i) { if (! (i % 10)) diff --git a/util/qlalr/main.cpp b/util/qlalr/main.cpp index 7041e4a..d864796 100644 --- a/util/qlalr/main.cpp +++ b/util/qlalr/main.cpp @@ -64,7 +64,7 @@ static void help_me () << " --no-debug\t\tno debug information" << endl << " --no-lines\t\tno #line directives" << endl << " --dot\t\t\tgenerate a graph" << endl - << " --troll\t\tadd the Trolltech copyright header" << endl + << " --qt\t\tadd the Qt copyright header and Qt-specific types and macros" << endl << endl; exit (0); } @@ -100,7 +100,7 @@ int main (int argc, char *argv[]) else if (arg == QLatin1String ("--no-debug")) debug_info = false; - else if (arg == QLatin1String ("--troll")) + else if (arg == QLatin1String ("--qt")) troll_copyright = true; else if (file_name.isEmpty ()) |