summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/3rdparty/phonon/mmf/audioplayer.cpp2
-rw-r--r--src/3rdparty/webkit/.tag2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ChangeLog199
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri20
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro14
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/config.h2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/ArrayPrototype.lut.h2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/DatePrototype.lut.h2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/Grammar.cpp538
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/Grammar.h4
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/JSONObject.lut.h2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/Lexer.lut.h2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/MathObject.lut.h2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/NumberConstructor.lut.h2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/RegExpConstructor.lut.h2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/RegExpObject.lut.h2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/generated/StringPrototype.lut.h2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp22
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp4
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/Assertions.h12
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/CurrentTime.h2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h22
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/StringExtras.h2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/Threading.h2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/VMTags.h39
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h2
-rw-r--r--src/3rdparty/webkit/VERSION7
-rw-r--r--src/3rdparty/webkit/WebCore/ChangeLog984
-rw-r--r--src/3rdparty/webkit/WebCore/WebCore.gypi2
-rw-r--r--src/3rdparty/webkit/WebCore/WebCore.pri5
-rw-r--r--src/3rdparty/webkit/WebCore/WebCore.pro46
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/npapi.h4
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp18
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/qt/qt_runtime.cpp6
-rw-r--r--src/3rdparty/webkit/WebCore/css/CSSValueKeywords.in5
-rw-r--r--src/3rdparty/webkit/WebCore/css/MediaQueryEvaluator.cpp11
-rw-r--r--src/3rdparty/webkit/WebCore/css/MediaQueryExp.cpp2
-rw-r--r--src/3rdparty/webkit/WebCore/css/MediaQueryExp.h3
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Document.cpp73
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Document.h7
-rw-r--r--src/3rdparty/webkit/WebCore/dom/Element.cpp4
-rw-r--r--src/3rdparty/webkit/WebCore/dom/SelectElement.cpp8
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ViewportArguments.cpp120
-rw-r--r--src/3rdparty/webkit/WebCore/dom/ViewportArguments.h74
-rw-r--r--src/3rdparty/webkit/WebCore/generated/CSSGrammar.cpp444
-rw-r--r--src/3rdparty/webkit/WebCore/generated/CSSGrammar.h4
-rw-r--r--src/3rdparty/webkit/WebCore/generated/CSSPropertyNames.cpp5
-rw-r--r--src/3rdparty/webkit/WebCore/generated/CSSValueKeywords.c848
-rw-r--r--src/3rdparty/webkit/WebCore/generated/CSSValueKeywords.h325
-rw-r--r--src/3rdparty/webkit/WebCore/generated/ColorData.c5
-rw-r--r--src/3rdparty/webkit/WebCore/generated/DocTypeStrings.cpp5
-rw-r--r--src/3rdparty/webkit/WebCore/generated/HTMLEntityNames.c5
-rw-r--r--src/3rdparty/webkit/WebCore/generated/XPathGrammar.cpp106
-rw-r--r--src/3rdparty/webkit/WebCore/generated/XPathGrammar.h4
-rw-r--r--src/3rdparty/webkit/WebCore/generated/tokenizer.cpp2382
-rw-r--r--src/3rdparty/webkit/WebCore/history/qt/HistoryItemQt.cpp21
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLInputElement.cpp6
-rw-r--r--src/3rdparty/webkit/WebCore/html/HTMLMetaElement.cpp8
-rw-r--r--src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp6
-rw-r--r--src/3rdparty/webkit/WebCore/page/ChromeClient.h11
-rw-r--r--src/3rdparty/webkit/WebCore/page/FocusController.cpp175
-rw-r--r--src/3rdparty/webkit/WebCore/page/FocusController.h8
-rw-r--r--src/3rdparty/webkit/WebCore/page/FrameView.cpp1
-rw-r--r--src/3rdparty/webkit/WebCore/page/SpatialNavigation.cpp95
-rw-r--r--src/3rdparty/webkit/WebCore/page/SpatialNavigation.h2
-rw-r--r--src/3rdparty/webkit/WebCore/page/qt/EventHandlerQt.cpp2
-rw-r--r--src/3rdparty/webkit/WebCore/platform/Arena.h2
-rw-r--r--src/3rdparty/webkit/WebCore/platform/FileSystem.h6
-rw-r--r--src/3rdparty/webkit/WebCore/platform/MIMETypeRegistry.h4
-rw-r--r--src/3rdparty/webkit/WebCore/platform/StaticConstructors.h4
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/MediaPlayer.cpp3
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/FontPlatformDataQt.cpp3
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/FontQt.cpp4
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp306
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/transforms/TransformationMatrix.h2
-rw-r--r--src/3rdparty/webkit/WebCore/platform/mac/MIMETypeRegistryMac.mm5
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp5
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/qt/ResourceRequestQt.cpp6
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/FileSystemQt.cpp3
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/MIMETypeRegistryQt.cpp6
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/QWebPageClient.h1
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.cpp18
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.h2
-rw-r--r--src/3rdparty/webkit/WebCore/platform/qt/SharedTimerQt.cpp24
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextStream.cpp2
-rw-r--r--src/3rdparty/webkit/WebCore/platform/text/TextStream.h2
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginView.cpp10
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginView.h3
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/PluginViewNone.cpp12
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/symbian/PluginViewSymbian.cpp10
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/win/PluginViewWin.cpp8
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp14
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderLayer.cpp16
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderLayer.h1
-rw-r--r--src/3rdparty/webkit/WebCore/rendering/RenderLayerCompositor.cpp9
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp6
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebhistory.cpp4
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebkitversion.h2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp357
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp11
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h1
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp3
-rw-r--r--src/3rdparty/webkit/WebKit/qt/ChangeLog354
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp35
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ChromeClientQt.h6
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp12
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/QtFallbackWebPopup.cpp2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/qtwebkit_version.pri4
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/benchmarks/loading/loading.pro2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/benchmarks/painting/painting.pro2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/hybridPixmap/widget.ui2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qgraphicswebview/qgraphicswebview.pro2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qgraphicswebview/tst_qgraphicswebview.cpp35
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebelement/qwebelement.pro2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebframe/qwebframe.pro2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp60
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebhistory/qwebhistory.pro2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebhistoryinterface/qwebhistoryinterface.pro2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebinspector/qwebinspector.pro2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebpage/qwebpage.pro2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp81
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebplugindatabase/qwebplugindatabase.pro2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebview/qwebview.pro2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebview/tst_qwebview.cpp26
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/tests.pri1
-rw-r--r--src/corelib/codecs/qiconvcodec.cpp22
-rw-r--r--src/corelib/codecs/qtextcodec.cpp8
-rw-r--r--src/corelib/global/qglobal.cpp28
-rw-r--r--src/corelib/io/qiodevice.cpp16
-rw-r--r--src/corelib/io/qurl.cpp4
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp10
-rw-r--r--src/corelib/kernel/qeventdispatcher_symbian.cpp127
-rw-r--r--src/corelib/kernel/qeventdispatcher_symbian_p.h5
-rw-r--r--src/corelib/plugin/qfactoryloader.cpp2
-rw-r--r--src/corelib/plugin/qfactoryloader_p.h2
-rw-r--r--src/corelib/tools/qbytearray.cpp39
-rw-r--r--src/corelib/tools/qbytearray.h3
-rw-r--r--src/corelib/tools/qbytedata_p.h2
-rw-r--r--src/corelib/tools/qlist.cpp8
-rw-r--r--src/corelib/tools/qscopedpointer.cpp4
-rw-r--r--src/corelib/tools/qstring.cpp40
-rw-r--r--src/corelib/tools/qstring.h1
-rw-r--r--src/corelib/xml/qxmlstream.g2
-rw-r--r--src/corelib/xml/qxmlstream_p.h4
-rw-r--r--src/dbus/qdbusinterface.cpp2
-rw-r--r--src/declarative/graphicsitems/qdeclarativeitem.cpp5
-rw-r--r--src/gui/accessible/qaccessible.cpp4
-rw-r--r--src/gui/dialogs/qfiledialog.h1
-rw-r--r--src/gui/effects/qgraphicseffect.cpp2
-rw-r--r--src/gui/egl/qegl_p.h6
-rw-r--r--src/gui/egl/qegl_qws.cpp2
-rw-r--r--src/gui/egl/qegl_stub.cpp8
-rw-r--r--src/gui/graphicsview/qgraphicsitem.cpp33
-rw-r--r--src/gui/graphicsview/qgraphicsitem_p.h8
-rw-r--r--src/gui/graphicsview/qgraphicsproxywidget.cpp2
-rw-r--r--src/gui/graphicsview/qgraphicsscene.cpp80
-rw-r--r--src/gui/graphicsview/qgraphicsscene_p.h40
-rw-r--r--src/gui/graphicsview/qgraphicsview.cpp148
-rw-r--r--src/gui/graphicsview/qgraphicsview_p.h52
-rw-r--r--src/gui/graphicsview/qgraphicswidget.cpp10
-rw-r--r--src/gui/image/qicon.cpp2
-rw-r--r--src/gui/image/qimagereader.cpp14
-rw-r--r--src/gui/image/qimagewriter.cpp16
-rw-r--r--src/gui/inputmethod/qcoefepinputcontext_s60.cpp2
-rw-r--r--src/gui/inputmethod/qinputcontextfactory.cpp6
-rw-r--r--src/gui/itemviews/qsortfilterproxymodel.cpp2
-rw-r--r--src/gui/itemviews/qtableview.cpp8
-rw-r--r--src/gui/kernel/qapplication_s60.cpp20
-rw-r--r--src/gui/kernel/qcocoasharedwindowmethods_mac_p.h54
-rw-r--r--src/gui/kernel/qcocoaview_mac.mm3
-rw-r--r--src/gui/kernel/qguiplatformplugin.cpp2
-rw-r--r--src/gui/kernel/qpalette.cpp2
-rw-r--r--src/gui/kernel/qsoftkeymanager_s60.cpp2
-rw-r--r--src/gui/kernel/qt_cocoa_helpers_mac.mm131
-rw-r--r--src/gui/kernel/qt_cocoa_helpers_mac_p.h5
-rw-r--r--src/gui/kernel/qt_mac_p.h1
-rw-r--r--src/gui/kernel/qt_s60_p.h3
-rw-r--r--src/gui/kernel/qwidget.cpp84
-rw-r--r--src/gui/kernel/qwidget_mac.mm6
-rw-r--r--src/gui/kernel/qwidget_p.h7
-rw-r--r--src/gui/kernel/qwidget_s60.cpp91
-rw-r--r--src/gui/painting/qgraphicssystemfactory.cpp6
-rw-r--r--src/gui/painting/qpaintengine_mac.cpp8
-rw-r--r--src/gui/painting/qprintengine_ps.cpp25
-rw-r--r--src/gui/painting/qprintengine_win.cpp7
-rw-r--r--src/gui/painting/qtextureglyphcache_p.h2
-rw-r--r--src/gui/s60framework/qs60mainappui.cpp12
-rw-r--r--src/gui/styles/qs60style.cpp114
-rw-r--r--src/gui/styles/qs60style_s60.cpp8
-rw-r--r--src/gui/styles/qstylefactory.cpp2
-rw-r--r--src/gui/styles/qstylesheetstyle.cpp9
-rw-r--r--src/gui/styles/qstylesheetstyle_p.h1
-rw-r--r--src/gui/text/qfont.cpp5
-rw-r--r--src/gui/text/qfontdatabase.cpp14
-rw-r--r--src/gui/text/qfontdatabase_s60.cpp85
-rw-r--r--src/gui/text/qfontengine_s60.cpp55
-rw-r--r--src/gui/text/qfontengine_s60_p.h12
-rw-r--r--src/gui/text/qtextdocument.cpp9
-rw-r--r--src/gui/widgets/qcombobox_p.h2
-rw-r--r--src/gui/widgets/qdockarealayout.cpp46
-rw-r--r--src/gui/widgets/qdockarealayout_p.h4
-rw-r--r--src/gui/widgets/qdockwidget.cpp6
-rw-r--r--src/gui/widgets/qlineedit.cpp10
-rw-r--r--src/gui/widgets/qmenu.cpp4
-rw-r--r--src/gui/widgets/qmenu_mac.mm3
-rw-r--r--src/gui/widgets/qmenu_symbian.cpp8
-rw-r--r--src/gui/widgets/qtabbar.cpp58
-rw-r--r--src/gui/widgets/qtabwidget.cpp2
-rw-r--r--src/imports/multimedia/qdeclarativeaudio.cpp16
-rw-r--r--src/imports/multimedia/qdeclarativevideo.cpp19
-rw-r--r--src/multimedia/mediaservices/effects/qsoundeffect.cpp12
-rw-r--r--src/multimedia/multimedia/audio/qaudiodevicefactory.cpp14
-rw-r--r--src/multimedia/multimedia/audio/qaudioinput.cpp4
-rw-r--r--src/multimedia/multimedia/audio/qaudioinput_alsa_p.cpp9
-rw-r--r--src/multimedia/multimedia/audio/qaudioinput_win32_p.cpp67
-rw-r--r--src/multimedia/multimedia/audio/qaudioinput_win32_p.h3
-rw-r--r--src/multimedia/multimedia/audio/qaudiooutput_alsa_p.cpp16
-rw-r--r--src/multimedia/multimedia/audio/qaudiooutput_win32_p.cpp70
-rw-r--r--src/multimedia/multimedia/audio/qaudiooutput_win32_p.h3
-rw-r--r--src/network/access/qftp.cpp2
-rw-r--r--src/network/access/qhttpnetworkconnection.cpp6
-rw-r--r--src/network/access/qhttpnetworkconnectionchannel.cpp9
-rw-r--r--src/network/access/qnetworkaccesshttpbackend.cpp3
-rw-r--r--src/network/access/qnetworkaccessmanager.h12
-rw-r--r--src/network/access/qnetworkcookiejar.cpp3
-rw-r--r--src/network/access/qnetworkreplyimpl.cpp80
-rw-r--r--src/network/access/qnetworkreplyimpl_p.h5
-rw-r--r--src/network/bearer/qnetworkconfigmanager_p.cpp4
-rw-r--r--src/network/socket/qlocalserver_win.cpp2
-rw-r--r--src/opengl/gl2paintengineex/qglengineshadersource_p.h16
-rw-r--r--src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp86
-rw-r--r--src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h5
-rw-r--r--src/opengl/qgl.cpp41
-rw-r--r--src/openvg/qpaintengine_vg.cpp56
-rw-r--r--src/openvg/qpaintengine_vg_p.h4
-rw-r--r--src/plugins/accessible/widgets/simplewidgets.cpp4
-rw-r--r--src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglscreen.cpp2
-rw-r--r--src/plugins/imageformats/jpeg/qjpeghandler.cpp12
-rw-r--r--src/plugins/imageformats/svg/qsvgiohandler.cpp10
-rw-r--r--src/plugins/mediaservices/directshow/mediaplayer/directshowsamplescheduler.cpp23
-rw-r--r--src/plugins/mediaservices/directshow/mediaplayer/directshowsamplescheduler.h5
-rw-r--r--src/plugins/mediaservices/gstreamer/gstreamer.pro35
-rw-r--r--src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayerservice.cpp22
-rw-r--r--src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.cpp18
-rw-r--r--src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.h6
-rw-r--r--src/plugins/mediaservices/mediaservices.pro4
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/mediaplayer.pri63
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/ms60mediaplayerresolver.h58
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60audioplayersession.cpp275
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60audioplayersession.h124
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60mediametadataprovider.cpp185
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60mediametadataprovider.h81
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayeraudioendpointselector.cpp127
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayeraudioendpointselector.h81
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayercontrol.cpp274
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayercontrol.h143
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayerservice.cpp259
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayerservice.h105
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayersession.cpp496
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayersession.h167
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60mediarecognizer.cpp127
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60mediarecognizer.h83
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60videooverlay.cpp209
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60videooverlay.h109
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60videoplayersession.cpp486
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60videoplayersession.h148
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60videorenderer.cpp69
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60videorenderer.h68
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60videosurface.cpp478
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60videosurface.h112
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60videowidget.cpp208
-rw-r--r--src/plugins/mediaservices/symbian/mediaplayer/s60videowidget.h115
-rw-r--r--src/plugins/mediaservices/symbian/s60mediaserviceplugin.cpp100
-rw-r--r--src/plugins/mediaservices/symbian/s60mediaserviceplugin.h64
-rw-r--r--src/plugins/mediaservices/symbian/s60videooutputcontrol.cpp76
-rw-r--r--src/plugins/mediaservices/symbian/s60videooutputcontrol.h72
-rw-r--r--src/plugins/mediaservices/symbian/symbian.pro27
-rw-r--r--src/qt3support/widgets/q3spinwidget.cpp8
-rw-r--r--src/s60installs/bwins/QtCoreu.def4
-rw-r--r--src/s60installs/bwins/QtDeclarativeu.def2
-rw-r--r--src/s60installs/eabi/QtCoreu.def1
-rw-r--r--src/s60installs/eabi/QtDeclarativeu.def40
-rw-r--r--src/s60installs/eabi/QtNetworku.def1
-rw-r--r--src/s60installs/s60installs.pro11
-rw-r--r--src/script/bridge/qscriptqobject_p.h2
-rw-r--r--src/sql/drivers/sqlite/qsql_sqlite.cpp1
-rw-r--r--src/sql/kernel/qsqldatabase.cpp6
-rw-r--r--src/testlib/qplaintestlogger.cpp1
-rw-r--r--src/testlib/qtestlogger.cpp29
-rw-r--r--src/testlib/qtestlogger_p.h1
-rw-r--r--src/testlib/qtestxmlstreamer.cpp58
-rw-r--r--src/testlib/qxmltestlogger.cpp2
-rw-r--r--src/xmlpatterns/schema/qxsdschemaresolver.cpp9
-rw-r--r--src/xmlpatterns/type/qschematype_p.h2
-rw-r--r--src/xmlpatterns/xmlpatterns.pro15
297 files changed, 12524 insertions, 3346 deletions
diff --git a/src/3rdparty/phonon/mmf/audioplayer.cpp b/src/3rdparty/phonon/mmf/audioplayer.cpp
index 77a0964..f49e898 100644
--- a/src/3rdparty/phonon/mmf/audioplayer.cpp
+++ b/src/3rdparty/phonon/mmf/audioplayer.cpp
@@ -99,7 +99,7 @@ int MMF::AudioPlayer::setDeviceVolume(int mmfVolume)
* stack by doing a runtime check of the SDK version. */
#if !defined(__SERIES60_31__)
const int err = m_player->SetVolume(mmfVolume);
- if (QSysInfo::s60Version() >= QSysInfo::SV_S60_5_0)
+ if (QSysInfo::s60Version() >= QSysInfo::SV_S60_3_2)
return err;
else
return KErrNone;
diff --git a/src/3rdparty/webkit/.tag b/src/3rdparty/webkit/.tag
index 4813e1e..75fc5e7 100644
--- a/src/3rdparty/webkit/.tag
+++ b/src/3rdparty/webkit/.tag
@@ -1 +1 @@
-862268aeb7150d3795d05bfc05f661bb5c598a27
+b4aa5e1ddc41edab895132aba3cc66d9d7129444
diff --git a/src/3rdparty/webkit/JavaScriptCore/ChangeLog b/src/3rdparty/webkit/JavaScriptCore/ChangeLog
index 53fde39..1439ae0 100644
--- a/src/3rdparty/webkit/JavaScriptCore/ChangeLog
+++ b/src/3rdparty/webkit/JavaScriptCore/ChangeLog
@@ -1,3 +1,202 @@
+2010-05-02 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ [Qt] Enable JIT for QtWebKit on Symbian
+ https://bugs.webkit.org/show_bug.cgi?id=38339
+
+ JIT on Symbian has been stable for quite some time, it
+ is time to turn it on by default.
+
+ * wtf/Platform.h:
+
+2010-04-28 Simon Hausmann <simon.hausmann@nokia.com>, Kent Hansen <kent.hansen@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ JSC's currentThreadStackBase is not reentrant on some platforms
+ https://bugs.webkit.org/show_bug.cgi?id=37195
+
+ This function needs to be reentrant to avoid memory corruption on platforms where
+ the implementation uses global variables.
+
+ This patch adds a mutex lock where necessary and makes the Symbian implementation
+ reentrant.
+
+ * runtime/Collector.cpp:
+ (JSC::currentThreadStackBaseMutex):
+ (JSC::currentThreadStackBase):
+
+2010-04-21 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Compile fix for Visual Studio 2010
+ https://bugs.webkit.org/show_bug.cgi?id=37867
+
+ Patch by Prasanth Ullattil <prasanth.ullattil@nokia.com>
+
+ * runtime/Structure.cpp:
+ (JSC::Structure::transitionTableAdd):
+ * wtf/MathExtras.h:
+ * wtf/Platform.h:
+
+2010-04-27 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Rename COMPILER(MSVC7) to COMPILER(MSVC7_OR_LOWER)
+
+ * config.h:
+ (JSC::Structure::transitionTableAdd):
+ * wtf/Assertions.h:
+ * wtf/Atomics.h:
+ * wtf/CurrentTime.h:
+ (WTF::getLocalTime):
+ * wtf/Platform.h:
+ * wtf/StaticConstructors.h:
+ * wtf/StringExtras.h:
+ * wtf/Vector.h:
+ (WTF::::append):
+
+2010-04-15 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Fix Mac build break.
+
+ https://bugs.webkit.org/show_bug.cgi?id=37867
+ - Make sure JavaScriptCore's debug_and_release config follows that
+ of WebCore.
+ - Use different name for JavaScriptCore target in debug and release
+ since they might be written in the same path at the same time on
+ parallel builds
+ - Consolidate the DESTDIR determination logic in JavaScriptCore.pri
+
+ * JavaScriptCore.pri:
+ * JavaScriptCore.pro:
+
+2010-04-21 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Make sure WebKit is not compiled using C++0x.
+ https://bugs.webkit.org/show_bug.cgi?id=37867
+
+ As the rest of Qt compiles in the C++0x mode, people might start
+ compiling it in this mode. WebKit don't support this yet.
+
+ Patch by Thiago Macieira <thiago.macieira@nokia.com>
+
+ * JavaScriptCore.pro:
+
+2010-04-22 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Remove dependency of JSC to QtGui
+ https://bugs.webkit.org/show_bug.cgi?id=37867
+
+ The patch also make sure that hal.h is in the include path on Symbian.
+ The dependency to QtGui took care of that before.
+
+ Patch by Thiago Macieira <thiago.macieira@nokia.com>
+ and Rohan McGovern <rohan.mcgovern@nokia.com>
+
+ * JavaScriptCore.pri:
+ * JavaScriptCore.pro:
+
+2010-04-22 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Corrects symbols visibility for JavaScriptCore.
+
+ https://bugs.webkit.org/show_bug.cgi?id=37867
+
+ * JavaScriptCore.pro:
+
+2010-04-27 Thomas Zander <t.zander@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix the build on Symbian on Linux using the Makefile based mkspec
+
+ * JavaScriptCore.pri: It is necessary to specify the library search path
+ when linking against JavaScriptCore.
+
+2010-04-02 Ruben Van Boxem <vanboxem.ruben@gmail.com>
+
+ Reviewed by Eric Seidel.
+
+ Mingw-w64 fixes for JavaScriptCore
+ https://bugs.webkit.org/show_bug.cgi?id=35607
+
+ * runtime/Collector.cpp: use the msvc code for mingw-w64 (but not mingw-w32)
+ (JSC::Heap::allocateBlock):
+ (JSC::Heap::freeBlockPtr):
+ (JSC::currentThreadStackBase):
+ (JSC::currentThreadStackBase):
+ * wtf/Platform.h: added COMPILER(MINGW64) check to differentiate between mingw.org and mingw-w64 functions
+
+2010-04-14 Kent Hansen <kent.hansen@nokia.com>
+
+ Reviewed by Maciej Stachowiak.
+
+ Mac OS X: Use deployment target to determine whether memory tagging should be enabled
+ https://bugs.webkit.org/show_bug.cgi?id=34888
+
+ When building on (Snow) Leopard but targeting Tiger
+ (TARGETING_TIGER defined, BUILDING_ON_TIGER not defined),
+ WebKit would crash on Tiger because the tags passed to mmap
+ caused those function calls to fail.
+
+ Conversely, when building on Tiger but targeting Leopard
+ (BUILDING_ON_TIGER defined, TARGETING_LEOPARD defined), WebKit
+ would crash on Leopard because the tags passed to vm_map and
+ vm_allocate caused those function calls to fail.
+
+ Solution: Use TARGETING_TIGER rather than BUILDING_ON_TIGER to
+ govern the tag definitions. Use the same tags for vm_map and
+ vm_allocate regardless of target, since they work on
+ both. Fall back to the mmap tags that work on Tiger (that is,
+ "no tags") if targeting Tiger, since those tags also work on
+ Leopard.
+
+ * wtf/VMTags.h:
+
+2010-04-18 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Laszlo Gombos.
+
+ [Qt] Fix JavaScriptCore's include path for WinCE builds
+
+ https://bugs.webkit.org/show_bug.cgi?id=36751
+
+ * JavaScriptCore.pri:
+
+2010-04-19 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Build fix for WinCE.
+
+ Moved the include of the non-existing errno.h header file inside
+ platform guard macros.
+
+ * jit/ExecutableAllocatorFixedVMPool.cpp:
+
+2010-04-12 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by nobody, build fix.
+
+ [Qt] Build fix for Mac when building with build-webkit --qt
+
+ Specifying no configuration on Mac builds WebCore both in debug
+ and release. JavaScriptCore has to follow this rule as well.
+
+ * JavaScriptCore.pro:
+
2010-04-09 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
Reviewed by Simon Hausmann.
diff --git a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri
index 8aa914f..b7f6665 100644
--- a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri
+++ b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri
@@ -1,12 +1,14 @@
# JavaScriptCore - Qt4 build info
VPATH += $$PWD
-# Output in JavaScriptCore/<config>
-CONFIG(debug, debug|release): JAVASCRIPTCORE_DESTDIR = debug
-CONFIG(release, debug|release): JAVASCRIPTCORE_DESTDIR = release
-# Use different targets to prevent parallel builds file clashes on Mac
-CONFIG(debug, debug|release): JAVASCRIPTCORE_TARGET = jscored
-CONFIG(release, debug|release): JAVASCRIPTCORE_TARGET = jscore
-
+CONFIG(debug, debug|release) {
+ # Output in JavaScriptCore/<config>
+ JAVASCRIPTCORE_DESTDIR = debug
+ # Use a config-specific target to prevent parallel builds file clashes on Mac
+ JAVASCRIPTCORE_TARGET = jscored
+} else {
+ JAVASCRIPTCORE_DESTDIR = release
+ JAVASCRIPTCORE_TARGET = jscore
+}
CONFIG(standalone_package) {
isEmpty(JSC_GENERATED_SOURCES_DIR):JSC_GENERATED_SOURCES_DIR = $$PWD/generated
} else {
@@ -74,10 +76,12 @@ defineTest(addJavaScriptCoreLib) {
pathToJavaScriptCoreOutput = $$ARGS/$$JAVASCRIPTCORE_DESTDIR
win32-msvc* {
- QMAKE_LIBDIR += $$pathToJavaScriptCoreOutput
+ LIBS += -L$$pathToJavaScriptCoreOutput
LIBS += -l$$JAVASCRIPTCORE_TARGET
} else:symbian {
LIBS += -l$${JAVASCRIPTCORE_TARGET}.lib
+ # The default symbian build system does not use library paths at all. However when building with
+ # qmake's symbian makespec that uses Makefiles
QMAKE_LIBDIR += $$pathToJavaScriptCoreOutput
} else {
# Make sure jscore will be early in the list of libraries to workaround a bug in MinGW
diff --git a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro
index 280742f..8e086b3 100644
--- a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro
+++ b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro
@@ -16,10 +16,6 @@ CONFIG += depend_includepath
contains(QT_CONFIG, embedded):CONFIG += embedded
-# Add these two lines both for QTDIR_build and not because we don't include qbase.pri
-contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols
-unix:contains(QT_CONFIG, reduce_relocations):CONFIG += bsymbolic_functions
-
CONFIG(QTDIR_build) {
# Make sure we compile both debug and release on mac when inside Qt.
# This line was extracted from qbase.pri instead of including the whole file
@@ -30,8 +26,16 @@ CONFIG(QTDIR_build) {
} else { # Release
OBJECTS_DIR = obj/release
}
+ # Make sure that build_all follows the build_all config in WebCore
+ mac:contains(QT_CONFIG, qt_framework):!CONFIG(webkit_no_framework):!build_pass:CONFIG += build_all
}
+# WebCore adds these config only when in a standalone build.
+# qbase.pri takes care of that when in a QTDIR_build
+# Here we add the config for both cases since we don't include qbase.pri
+contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols
+unix:contains(QT_CONFIG, reduce_relocations):CONFIG += bsymbolic_functions
+
CONFIG(QTDIR_build) {
# Remove the following 2 lines if you want debug information in JavaScriptCore
CONFIG -= separate_debug_info
@@ -223,5 +227,5 @@ SOURCES += \
SOURCES += wtf/TCSystemAlloc.cpp
}
-# JavaScriptCore is not going to build with C++0x any time soon
+# Disable C++0x mode in JSC for those who enabled it in their Qt's mkspec
*-g++*:QMAKE_CXXFLAGS -= -std=c++0x -std=gnu++0x
diff --git a/src/3rdparty/webkit/JavaScriptCore/config.h b/src/3rdparty/webkit/JavaScriptCore/config.h
index d5fdfe9..acc162a 100644
--- a/src/3rdparty/webkit/JavaScriptCore/config.h
+++ b/src/3rdparty/webkit/JavaScriptCore/config.h
@@ -44,7 +44,7 @@
#define max max
#define min min
-#if !COMPILER(MSVC7) && !OS(WINCE)
+#if !COMPILER(MSVC7_OR_LOWER) && !OS(WINCE)
// We need to define this before the first #include of stdlib.h or it won't contain rand_s.
#ifndef _CRT_RAND_S
#define _CRT_RAND_S
diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/ArrayPrototype.lut.h b/src/3rdparty/webkit/JavaScriptCore/generated/ArrayPrototype.lut.h
index ffe067f..88d3717 100644
--- a/src/3rdparty/webkit/JavaScriptCore/generated/ArrayPrototype.lut.h
+++ b/src/3rdparty/webkit/JavaScriptCore/generated/ArrayPrototype.lut.h
@@ -1,4 +1,4 @@
-// Automatically generated from runtime\ArrayPrototype.cpp using C:/dev/webkit-2.0/JavaScriptCore/create_hash_table. DO NOT EDIT!
+// Automatically generated from runtime/ArrayPrototype.cpp using /JavaScriptCore/create_hash_table. DO NOT EDIT!
#include "Lookup.h"
diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/DatePrototype.lut.h b/src/3rdparty/webkit/JavaScriptCore/generated/DatePrototype.lut.h
index 56acdba..0174298 100644
--- a/src/3rdparty/webkit/JavaScriptCore/generated/DatePrototype.lut.h
+++ b/src/3rdparty/webkit/JavaScriptCore/generated/DatePrototype.lut.h
@@ -1,4 +1,4 @@
-// Automatically generated from runtime\DatePrototype.cpp using C:/dev/webkit-2.0/JavaScriptCore/create_hash_table. DO NOT EDIT!
+// Automatically generated from runtime/DatePrototype.cpp using /JavaScriptCore/create_hash_table. DO NOT EDIT!
#include "Lookup.h"
diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.cpp b/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.cpp
index 50ff9cd..e62a1c4 100644
--- a/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.cpp
+++ b/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.cpp
@@ -76,7 +76,7 @@
/* Copy the first part of user declarations. */
/* Line 189 of yacc.c */
-#line 3 "parser\\Grammar.y"
+#line 3 "parser/Grammar.y"
/*
@@ -221,7 +221,7 @@ static inline void appendToVarDeclarationList(JSGlobalData* globalData, ParserAr
/* Line 189 of yacc.c */
-#line 225 "C:/dev/webkit-2.0/JavaScriptCore/generated\\Grammar.tab.c"
+#line 225 "/JavaScriptCore/generated/Grammar.tab.c"
/* Enabling traces. */
#ifndef YYDEBUG
@@ -321,7 +321,7 @@ typedef union YYSTYPE
{
/* Line 214 of yacc.c */
-#line 146 "parser\\Grammar.y"
+#line 146 "parser/Grammar.y"
int intValue;
double doubleValue;
@@ -356,7 +356,7 @@ typedef union YYSTYPE
/* Line 214 of yacc.c */
-#line 360 "C:/dev/webkit-2.0/JavaScriptCore/generated\\Grammar.tab.c"
+#line 360 "/JavaScriptCore/generated/Grammar.tab.c"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -380,7 +380,7 @@ typedef struct YYLTYPE
/* Copy the second part of user declarations. */
/* Line 264 of yacc.c */
-#line 178 "parser\\Grammar.y"
+#line 178 "parser/Grammar.y"
template <typename T> inline void setStatementLocation(StatementNode* statement, const T& start, const T& end)
@@ -396,7 +396,7 @@ static inline void setExceptionLocation(ThrowableExpressionData* node, unsigned
/* Line 264 of yacc.c */
-#line 400 "C:/dev/webkit-2.0/JavaScriptCore/generated\\Grammar.tab.c"
+#line 400 "/JavaScriptCore/generated/Grammar.tab.c"
#ifdef short
# undef short
@@ -2974,42 +2974,42 @@ yyreduce:
case 2:
/* Line 1455 of yacc.c */
-#line 293 "parser\\Grammar.y"
+#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"
+#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"
+#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"
+#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"
+#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"
+#line 298 "parser/Grammar.y"
{
Lexer& l = *GLOBAL_DATA->lexer;
const Identifier* pattern;
@@ -3026,7 +3026,7 @@ yyreduce:
case 8:
/* Line 1455 of yacc.c */
-#line 309 "parser\\Grammar.y"
+#line 309 "parser/Grammar.y"
{
Lexer& l = *GLOBAL_DATA->lexer;
const Identifier* pattern;
@@ -3043,35 +3043,35 @@ yyreduce:
case 9:
/* Line 1455 of yacc.c */
-#line 323 "parser\\Grammar.y"
+#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"
+#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"
+#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"
+#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"
+#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);
if ((yyvsp[(4) - (8)].parameterList).m_features & ArgumentsFeature)
@@ -3085,7 +3085,7 @@ yyreduce:
case 14:
/* Line 1455 of yacc.c */
-#line 339 "parser\\Grammar.y"
+#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;
(yyval.propertyList).m_features = (yyvsp[(1) - (1)].propertyNode).m_features;
@@ -3095,7 +3095,7 @@ yyreduce:
case 15:
/* Line 1455 of yacc.c */
-#line 343 "parser\\Grammar.y"
+#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);
(yyval.propertyList).m_features = (yyvsp[(1) - (3)].propertyList).m_features | (yyvsp[(3) - (3)].propertyNode).m_features;
@@ -3105,70 +3105,70 @@ yyreduce:
case 17:
/* Line 1455 of yacc.c */
-#line 351 "parser\\Grammar.y"
+#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"
+#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"
+#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"
+#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"
+#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"
+#line 362 "parser/Grammar.y"
{ (yyval.expressionNode) = (yyvsp[(2) - (3)].expressionNode); ;}
break;
case 25:
/* Line 1455 of yacc.c */
-#line 366 "parser\\Grammar.y"
+#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"
+#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"
+#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"
+#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;
(yyval.elementList).m_features = (yyvsp[(2) - (2)].expressionNode).m_features;
@@ -3178,7 +3178,7 @@ yyreduce:
case 29:
/* Line 1455 of yacc.c */
-#line 377 "parser\\Grammar.y"
+#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);
(yyval.elementList).m_features = (yyvsp[(1) - (4)].elementList).m_features | (yyvsp[(4) - (4)].expressionNode).m_features;
@@ -3188,35 +3188,35 @@ yyreduce:
case 30:
/* Line 1455 of yacc.c */
-#line 384 "parser\\Grammar.y"
+#line 384 "parser/Grammar.y"
{ (yyval.intValue) = 0; ;}
break;
case 32:
/* Line 1455 of yacc.c */
-#line 389 "parser\\Grammar.y"
+#line 389 "parser/Grammar.y"
{ (yyval.intValue) = 1; ;}
break;
case 33:
/* Line 1455 of yacc.c */
-#line 390 "parser\\Grammar.y"
+#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"
+#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"
+#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);
(yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (4)].expressionNode).m_features | (yyvsp[(3) - (4)].expressionNode).m_features, (yyvsp[(1) - (4)].expressionNode).m_numConstants + (yyvsp[(3) - (4)].expressionNode).m_numConstants);
@@ -3226,7 +3226,7 @@ yyreduce:
case 37:
/* Line 1455 of yacc.c */
-#line 400 "parser\\Grammar.y"
+#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);
(yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants);
@@ -3236,7 +3236,7 @@ yyreduce:
case 38:
/* Line 1455 of yacc.c */
-#line 404 "parser\\Grammar.y"
+#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);
(yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(2) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].argumentsNode).m_features, (yyvsp[(2) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].argumentsNode).m_numConstants);
@@ -3246,7 +3246,7 @@ yyreduce:
case 40:
/* Line 1455 of yacc.c */
-#line 412 "parser\\Grammar.y"
+#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);
(yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (4)].expressionNode).m_features | (yyvsp[(3) - (4)].expressionNode).m_features, (yyvsp[(1) - (4)].expressionNode).m_numConstants + (yyvsp[(3) - (4)].expressionNode).m_numConstants);
@@ -3256,7 +3256,7 @@ yyreduce:
case 41:
/* Line 1455 of yacc.c */
-#line 416 "parser\\Grammar.y"
+#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);
(yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants);
@@ -3266,7 +3266,7 @@ yyreduce:
case 42:
/* Line 1455 of yacc.c */
-#line 420 "parser\\Grammar.y"
+#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);
(yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(2) - (3)].expressionNode).m_features | (yyvsp[(3) - (3)].argumentsNode).m_features, (yyvsp[(2) - (3)].expressionNode).m_numConstants + (yyvsp[(3) - (3)].argumentsNode).m_numConstants);
@@ -3276,7 +3276,7 @@ yyreduce:
case 44:
/* Line 1455 of yacc.c */
-#line 428 "parser\\Grammar.y"
+#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);
(yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants);
@@ -3286,7 +3286,7 @@ yyreduce:
case 46:
/* Line 1455 of yacc.c */
-#line 436 "parser\\Grammar.y"
+#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);
(yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(2) - (2)].expressionNode).m_features, (yyvsp[(2) - (2)].expressionNode).m_numConstants);
@@ -3296,21 +3296,21 @@ yyreduce:
case 47:
/* Line 1455 of yacc.c */
-#line 443 "parser\\Grammar.y"
+#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"
+#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"
+#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);
(yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (4)].expressionNode).m_features | (yyvsp[(3) - (4)].expressionNode).m_features, (yyvsp[(1) - (4)].expressionNode).m_numConstants + (yyvsp[(3) - (4)].expressionNode).m_numConstants);
@@ -3320,7 +3320,7 @@ yyreduce:
case 50:
/* Line 1455 of yacc.c */
-#line 449 "parser\\Grammar.y"
+#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);
(yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants); ;}
@@ -3329,21 +3329,21 @@ yyreduce:
case 51:
/* Line 1455 of yacc.c */
-#line 455 "parser\\Grammar.y"
+#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"
+#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"
+#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);
(yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (4)].expressionNode).m_features | (yyvsp[(3) - (4)].expressionNode).m_features, (yyvsp[(1) - (4)].expressionNode).m_numConstants + (yyvsp[(3) - (4)].expressionNode).m_numConstants);
@@ -3353,7 +3353,7 @@ yyreduce:
case 54:
/* Line 1455 of yacc.c */
-#line 461 "parser\\Grammar.y"
+#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);
(yyval.expressionNode) = createNodeInfo<ExpressionNode*>(node, (yyvsp[(1) - (3)].expressionNode).m_features, (yyvsp[(1) - (3)].expressionNode).m_numConstants);
@@ -3363,21 +3363,21 @@ yyreduce:
case 55:
/* Line 1455 of yacc.c */
-#line 468 "parser\\Grammar.y"
+#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"
+#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"
+#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;
(yyval.argumentList).m_features = (yyvsp[(1) - (1)].expressionNode).m_features;
@@ -3387,7 +3387,7 @@ yyreduce:
case 58:
/* Line 1455 of yacc.c */
-#line 477 "parser\\Grammar.y"
+#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);
(yyval.argumentList).m_features = (yyvsp[(1) - (3)].argumentList).m_features | (yyvsp[(3) - (3)].expressionNode).m_features;
@@ -3397,252 +3397,252 @@ yyreduce:
case 64:
/* Line 1455 of yacc.c */
-#line 495 "parser\\Grammar.y"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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);
(yyval.expressionNode) = createNodeInfo<ExpressionNode*>(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); ;}
@@ -3651,7 +3651,7 @@ yyreduce:
case 112:
/* Line 1455 of yacc.c */
-#line 582 "parser\\Grammar.y"
+#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);
(yyval.expressionNode) = createNodeInfo<ExpressionNode*>(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); ;}
@@ -3660,35 +3660,35 @@ yyreduce:
case 114:
/* Line 1455 of yacc.c */
-#line 589 "parser\\Grammar.y"
+#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"
+#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"
+#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"
+#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"
+#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);
(yyval.expressionNode) = createNodeInfo<ExpressionNode*>(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); ;}
@@ -3697,35 +3697,35 @@ yyreduce:
case 120:
/* Line 1455 of yacc.c */
-#line 601 "parser\\Grammar.y"
+#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"
+#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"
+#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"
+#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"
+#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);
(yyval.expressionNode) = createNodeInfo<ExpressionNode*>(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); ;}
@@ -3734,7 +3734,7 @@ yyreduce:
case 125:
/* Line 1455 of yacc.c */
-#line 610 "parser\\Grammar.y"
+#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);
(yyval.expressionNode) = createNodeInfo<ExpressionNode*>(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); ;}
@@ -3743,217 +3743,217 @@ yyreduce:
case 127:
/* Line 1455 of yacc.c */
-#line 617 "parser\\Grammar.y"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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"
+#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);
;}
@@ -3962,7 +3962,7 @@ yyreduce:
case 180:
/* Line 1455 of yacc.c */
-#line 758 "parser\\Grammar.y"
+#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);
;}
@@ -3971,7 +3971,7 @@ yyreduce:
case 182:
/* Line 1455 of yacc.c */
-#line 766 "parser\\Grammar.y"
+#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);
;}
@@ -3980,112 +3980,112 @@ yyreduce:
case 183:
/* Line 1455 of yacc.c */
-#line 772 "parser\\Grammar.y"
+#line 772 "parser/Grammar.y"
{ (yyval.op) = OpEqual; ;}
break;
case 184:
/* Line 1455 of yacc.c */
-#line 773 "parser\\Grammar.y"
+#line 773 "parser/Grammar.y"
{ (yyval.op) = OpPlusEq; ;}
break;
case 185:
/* Line 1455 of yacc.c */
-#line 774 "parser\\Grammar.y"
+#line 774 "parser/Grammar.y"
{ (yyval.op) = OpMinusEq; ;}
break;
case 186:
/* Line 1455 of yacc.c */
-#line 775 "parser\\Grammar.y"
+#line 775 "parser/Grammar.y"
{ (yyval.op) = OpMultEq; ;}
break;
case 187:
/* Line 1455 of yacc.c */
-#line 776 "parser\\Grammar.y"
+#line 776 "parser/Grammar.y"
{ (yyval.op) = OpDivEq; ;}
break;
case 188:
/* Line 1455 of yacc.c */
-#line 777 "parser\\Grammar.y"
+#line 777 "parser/Grammar.y"
{ (yyval.op) = OpLShift; ;}
break;
case 189:
/* Line 1455 of yacc.c */
-#line 778 "parser\\Grammar.y"
+#line 778 "parser/Grammar.y"
{ (yyval.op) = OpRShift; ;}
break;
case 190:
/* Line 1455 of yacc.c */
-#line 779 "parser\\Grammar.y"
+#line 779 "parser/Grammar.y"
{ (yyval.op) = OpURShift; ;}
break;
case 191:
/* Line 1455 of yacc.c */
-#line 780 "parser\\Grammar.y"
+#line 780 "parser/Grammar.y"
{ (yyval.op) = OpAndEq; ;}
break;
case 192:
/* Line 1455 of yacc.c */
-#line 781 "parser\\Grammar.y"
+#line 781 "parser/Grammar.y"
{ (yyval.op) = OpXOrEq; ;}
break;
case 193:
/* Line 1455 of yacc.c */
-#line 782 "parser\\Grammar.y"
+#line 782 "parser/Grammar.y"
{ (yyval.op) = OpOrEq; ;}
break;
case 194:
/* Line 1455 of yacc.c */
-#line 783 "parser\\Grammar.y"
+#line 783 "parser/Grammar.y"
{ (yyval.op) = OpModEq; ;}
break;
case 196:
/* Line 1455 of yacc.c */
-#line 788 "parser\\Grammar.y"
+#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"
+#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"
+#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"
+#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;
@@ -4093,7 +4093,7 @@ yyreduce:
case 219:
/* Line 1455 of yacc.c */
-#line 824 "parser\\Grammar.y"
+#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;
@@ -4101,7 +4101,7 @@ yyreduce:
case 220:
/* Line 1455 of yacc.c */
-#line 829 "parser\\Grammar.y"
+#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;
@@ -4109,7 +4109,7 @@ yyreduce:
case 221:
/* Line 1455 of yacc.c */
-#line 831 "parser\\Grammar.y"
+#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)]));
AUTO_SEMICOLON; ;}
@@ -4118,7 +4118,7 @@ yyreduce:
case 222:
/* Line 1455 of yacc.c */
-#line 837 "parser\\Grammar.y"
+#line 837 "parser/Grammar.y"
{ (yyval.varDeclList).m_node = 0;
(yyval.varDeclList).m_varDeclarations = new (GLOBAL_DATA) ParserArenaData<DeclarationStacks::VarStack>;
appendToVarDeclarationList(GLOBAL_DATA, (yyval.varDeclList).m_varDeclarations, *(yyvsp[(1) - (1)].ident), 0);
@@ -4131,7 +4131,7 @@ yyreduce:
case 223:
/* Line 1455 of yacc.c */
-#line 844 "parser\\Grammar.y"
+#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);
(yyval.varDeclList).m_node = node;
@@ -4146,7 +4146,7 @@ yyreduce:
case 224:
/* Line 1455 of yacc.c */
-#line 854 "parser\\Grammar.y"
+#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;
appendToVarDeclarationList(GLOBAL_DATA, (yyval.varDeclList).m_varDeclarations, *(yyvsp[(3) - (3)].ident), 0);
@@ -4159,7 +4159,7 @@ yyreduce:
case 225:
/* Line 1455 of yacc.c */
-#line 862 "parser\\Grammar.y"
+#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);
(yyval.varDeclList).m_node = combineCommaNodes(GLOBAL_DATA, (yyvsp[(1) - (4)].varDeclList).m_node, node);
@@ -4174,7 +4174,7 @@ yyreduce:
case 226:
/* Line 1455 of yacc.c */
-#line 874 "parser\\Grammar.y"
+#line 874 "parser/Grammar.y"
{ (yyval.varDeclList).m_node = 0;
(yyval.varDeclList).m_varDeclarations = new (GLOBAL_DATA) ParserArenaData<DeclarationStacks::VarStack>;
appendToVarDeclarationList(GLOBAL_DATA, (yyval.varDeclList).m_varDeclarations, *(yyvsp[(1) - (1)].ident), 0);
@@ -4187,7 +4187,7 @@ yyreduce:
case 227:
/* Line 1455 of yacc.c */
-#line 881 "parser\\Grammar.y"
+#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);
(yyval.varDeclList).m_node = node;
@@ -4202,7 +4202,7 @@ yyreduce:
case 228:
/* Line 1455 of yacc.c */
-#line 891 "parser\\Grammar.y"
+#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;
appendToVarDeclarationList(GLOBAL_DATA, (yyval.varDeclList).m_varDeclarations, *(yyvsp[(3) - (3)].ident), 0);
@@ -4215,7 +4215,7 @@ yyreduce:
case 229:
/* Line 1455 of yacc.c */
-#line 899 "parser\\Grammar.y"
+#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);
(yyval.varDeclList).m_node = combineCommaNodes(GLOBAL_DATA, (yyvsp[(1) - (4)].varDeclList).m_node, node);
@@ -4230,7 +4230,7 @@ yyreduce:
case 230:
/* Line 1455 of yacc.c */
-#line 911 "parser\\Grammar.y"
+#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;
@@ -4238,7 +4238,7 @@ yyreduce:
case 231:
/* Line 1455 of yacc.c */
-#line 914 "parser\\Grammar.y"
+#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;
@@ -4246,7 +4246,7 @@ yyreduce:
case 232:
/* Line 1455 of yacc.c */
-#line 919 "parser\\Grammar.y"
+#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;
(yyval.constDeclList).m_varDeclarations = new (GLOBAL_DATA) ParserArenaData<DeclarationStacks::VarStack>;
@@ -4260,7 +4260,7 @@ yyreduce:
case 233:
/* Line 1455 of yacc.c */
-#line 928 "parser\\Grammar.y"
+#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;
(yyval.constDeclList).m_node.tail = (yyvsp[(3) - (3)].constDeclNode).m_node;
@@ -4274,42 +4274,42 @@ yyreduce:
case 234:
/* Line 1455 of yacc.c */
-#line 939 "parser\\Grammar.y"
+#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"
+#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"
+#line 944 "parser/Grammar.y"
{ (yyval.expressionNode) = (yyvsp[(2) - (2)].expressionNode); ;}
break;
case 237:
/* Line 1455 of yacc.c */
-#line 948 "parser\\Grammar.y"
+#line 948 "parser/Grammar.y"
{ (yyval.expressionNode) = (yyvsp[(2) - (2)].expressionNode); ;}
break;
case 238:
/* Line 1455 of yacc.c */
-#line 952 "parser\\Grammar.y"
+#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"
+#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;
@@ -4317,7 +4317,7 @@ yyreduce:
case 240:
/* Line 1455 of yacc.c */
-#line 958 "parser\\Grammar.y"
+#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;
@@ -4325,7 +4325,7 @@ yyreduce:
case 241:
/* Line 1455 of yacc.c */
-#line 964 "parser\\Grammar.y"
+#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;
@@ -4333,7 +4333,7 @@ yyreduce:
case 242:
/* Line 1455 of yacc.c */
-#line 967 "parser\\Grammar.y"
+#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),
mergeDeclarationLists((yyvsp[(5) - (7)].statementNode).m_funcDeclarations, (yyvsp[(7) - (7)].statementNode).m_funcDeclarations),
@@ -4345,7 +4345,7 @@ yyreduce:
case 243:
/* Line 1455 of yacc.c */
-#line 976 "parser\\Grammar.y"
+#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;
@@ -4353,7 +4353,7 @@ yyreduce:
case 244:
/* Line 1455 of yacc.c */
-#line 978 "parser\\Grammar.y"
+#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;
@@ -4361,7 +4361,7 @@ yyreduce:
case 245:
/* Line 1455 of yacc.c */
-#line 980 "parser\\Grammar.y"
+#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;
@@ -4369,7 +4369,7 @@ yyreduce:
case 246:
/* Line 1455 of yacc.c */
-#line 983 "parser\\Grammar.y"
+#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,
(yyvsp[(3) - (9)].expressionNode).m_numConstants + (yyvsp[(5) - (9)].expressionNode).m_numConstants + (yyvsp[(7) - (9)].expressionNode).m_numConstants + (yyvsp[(9) - (9)].statementNode).m_numConstants);
@@ -4380,7 +4380,7 @@ yyreduce:
case 247:
/* Line 1455 of yacc.c */
-#line 989 "parser\\Grammar.y"
+#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),
mergeDeclarationLists((yyvsp[(4) - (10)].varDeclList).m_funcDeclarations, (yyvsp[(10) - (10)].statementNode).m_funcDeclarations),
@@ -4392,7 +4392,7 @@ yyreduce:
case 248:
/* Line 1455 of yacc.c */
-#line 996 "parser\\Grammar.y"
+#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);
setExceptionLocation(node, (yylsp[(3) - (7)]).first_column, (yylsp[(3) - (7)]).last_column, (yylsp[(5) - (7)]).last_column);
@@ -4406,7 +4406,7 @@ yyreduce:
case 249:
/* Line 1455 of yacc.c */
-#line 1005 "parser\\Grammar.y"
+#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);
appendToVarDeclarationList(GLOBAL_DATA, (yyvsp[(8) - (8)].statementNode).m_varDeclarations, *(yyvsp[(4) - (8)].ident), DeclarationStacks::HasInitializer);
@@ -4417,7 +4417,7 @@ yyreduce:
case 250:
/* Line 1455 of yacc.c */
-#line 1011 "parser\\Grammar.y"
+#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);
appendToVarDeclarationList(GLOBAL_DATA, (yyvsp[(9) - (9)].statementNode).m_varDeclarations, *(yyvsp[(4) - (9)].ident), DeclarationStacks::HasInitializer);
@@ -4430,21 +4430,21 @@ yyreduce:
case 251:
/* Line 1455 of yacc.c */
-#line 1021 "parser\\Grammar.y"
+#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"
+#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"
+#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);
(yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, 0, 0);
@@ -4454,7 +4454,7 @@ yyreduce:
case 256:
/* Line 1455 of yacc.c */
-#line 1035 "parser\\Grammar.y"
+#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);
(yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, 0, 0);
@@ -4464,7 +4464,7 @@ yyreduce:
case 257:
/* Line 1455 of yacc.c */
-#line 1039 "parser\\Grammar.y"
+#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);
(yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, 0, 0);
@@ -4474,7 +4474,7 @@ yyreduce:
case 258:
/* Line 1455 of yacc.c */
-#line 1043 "parser\\Grammar.y"
+#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);
(yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, 0, 0);
@@ -4484,7 +4484,7 @@ yyreduce:
case 259:
/* Line 1455 of yacc.c */
-#line 1050 "parser\\Grammar.y"
+#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);
(yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(2) - (2)])); ;}
@@ -4493,7 +4493,7 @@ yyreduce:
case 260:
/* Line 1455 of yacc.c */
-#line 1053 "parser\\Grammar.y"
+#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);
(yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) BreakNode(GLOBAL_DATA), 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(1) - (2)])); AUTO_SEMICOLON; ;}
@@ -4502,7 +4502,7 @@ yyreduce:
case 261:
/* Line 1455 of yacc.c */
-#line 1056 "parser\\Grammar.y"
+#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);
(yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(3) - (3)])); ;}
@@ -4511,7 +4511,7 @@ yyreduce:
case 262:
/* Line 1455 of yacc.c */
-#line 1059 "parser\\Grammar.y"
+#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);
(yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(new (GLOBAL_DATA) BreakNode(GLOBAL_DATA, *(yyvsp[(2) - (3)].ident)), 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(2) - (3)])); AUTO_SEMICOLON; ;}
@@ -4520,7 +4520,7 @@ yyreduce:
case 263:
/* Line 1455 of yacc.c */
-#line 1065 "parser\\Grammar.y"
+#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);
(yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(2) - (2)])); ;}
@@ -4529,7 +4529,7 @@ yyreduce:
case 264:
/* Line 1455 of yacc.c */
-#line 1068 "parser\\Grammar.y"
+#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);
(yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, 0, 0); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (2)]), (yylsp[(1) - (2)])); AUTO_SEMICOLON; ;}
@@ -4538,7 +4538,7 @@ yyreduce:
case 265:
/* Line 1455 of yacc.c */
-#line 1071 "parser\\Grammar.y"
+#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);
(yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, (yyvsp[(2) - (3)].expressionNode).m_features, (yyvsp[(2) - (3)].expressionNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(3) - (3)])); ;}
@@ -4547,7 +4547,7 @@ yyreduce:
case 266:
/* Line 1455 of yacc.c */
-#line 1074 "parser\\Grammar.y"
+#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);
(yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, (yyvsp[(2) - (3)].expressionNode).m_features, (yyvsp[(2) - (3)].expressionNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(2) - (3)])); AUTO_SEMICOLON; ;}
@@ -4556,7 +4556,7 @@ yyreduce:
case 267:
/* Line 1455 of yacc.c */
-#line 1080 "parser\\Grammar.y"
+#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);
setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (5)]), (yylsp[(4) - (5)])); ;}
@@ -4565,7 +4565,7 @@ yyreduce:
case 268:
/* Line 1455 of yacc.c */
-#line 1086 "parser\\Grammar.y"
+#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);
setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (5)]), (yylsp[(4) - (5)])); ;}
@@ -4574,14 +4574,14 @@ yyreduce:
case 269:
/* Line 1455 of yacc.c */
-#line 1092 "parser\\Grammar.y"
+#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"
+#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),
mergeDeclarationLists(mergeDeclarationLists((yyvsp[(2) - (5)].clauseList).m_funcDeclarations, (yyvsp[(3) - (5)].caseClauseNode).m_funcDeclarations), (yyvsp[(4) - (5)].clauseList).m_funcDeclarations),
@@ -4592,14 +4592,14 @@ yyreduce:
case 271:
/* Line 1455 of yacc.c */
-#line 1102 "parser\\Grammar.y"
+#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"
+#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;
(yyval.clauseList).m_varDeclarations = (yyvsp[(1) - (1)].caseClauseNode).m_varDeclarations;
@@ -4611,7 +4611,7 @@ yyreduce:
case 274:
/* Line 1455 of yacc.c */
-#line 1113 "parser\\Grammar.y"
+#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);
(yyval.clauseList).m_varDeclarations = mergeDeclarationLists((yyvsp[(1) - (2)].clauseList).m_varDeclarations, (yyvsp[(2) - (2)].caseClauseNode).m_varDeclarations);
@@ -4624,35 +4624,35 @@ yyreduce:
case 275:
/* Line 1455 of yacc.c */
-#line 1123 "parser\\Grammar.y"
+#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"
+#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"
+#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"
+#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"
+#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);
(yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, (yyvsp[(3) - (3)].statementNode).m_varDeclarations, (yyvsp[(3) - (3)].statementNode).m_funcDeclarations, (yyvsp[(3) - (3)].statementNode).m_features, (yyvsp[(3) - (3)].statementNode).m_numConstants); ;}
@@ -4661,7 +4661,7 @@ yyreduce:
case 280:
/* Line 1455 of yacc.c */
-#line 1139 "parser\\Grammar.y"
+#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);
(yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, (yyvsp[(2) - (3)].expressionNode).m_features, (yyvsp[(2) - (3)].expressionNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(2) - (3)]));
@@ -4671,7 +4671,7 @@ yyreduce:
case 281:
/* Line 1455 of yacc.c */
-#line 1143 "parser\\Grammar.y"
+#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);
(yyval.statementNode) = createNodeDeclarationInfo<StatementNode*>(node, 0, 0, (yyvsp[(2) - (3)].expressionNode).m_features, (yyvsp[(2) - (3)].expressionNode).m_numConstants); setStatementLocation((yyval.statementNode).m_node, (yylsp[(1) - (3)]), (yylsp[(2) - (3)])); AUTO_SEMICOLON;
@@ -4681,7 +4681,7 @@ yyreduce:
case 282:
/* Line 1455 of yacc.c */
-#line 1150 "parser\\Grammar.y"
+#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),
mergeDeclarationLists((yyvsp[(2) - (4)].statementNode).m_funcDeclarations, (yyvsp[(4) - (4)].statementNode).m_funcDeclarations),
@@ -4693,7 +4693,7 @@ yyreduce:
case 283:
/* Line 1455 of yacc.c */
-#line 1156 "parser\\Grammar.y"
+#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),
mergeDeclarationLists((yyvsp[(2) - (7)].statementNode).m_funcDeclarations, (yyvsp[(7) - (7)].statementNode).m_funcDeclarations),
@@ -4705,7 +4705,7 @@ yyreduce:
case 284:
/* Line 1455 of yacc.c */
-#line 1163 "parser\\Grammar.y"
+#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),
mergeDeclarationLists(mergeDeclarationLists((yyvsp[(2) - (9)].statementNode).m_funcDeclarations, (yyvsp[(7) - (9)].statementNode).m_funcDeclarations), (yyvsp[(9) - (9)].statementNode).m_funcDeclarations),
@@ -4717,7 +4717,7 @@ yyreduce:
case 285:
/* Line 1455 of yacc.c */
-#line 1172 "parser\\Grammar.y"
+#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;
@@ -4725,7 +4725,7 @@ yyreduce:
case 286:
/* Line 1455 of yacc.c */
-#line 1174 "parser\\Grammar.y"
+#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;
@@ -4733,14 +4733,14 @@ yyreduce:
case 287:
/* Line 1455 of yacc.c */
-#line 1179 "parser\\Grammar.y"
+#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"
+#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);
if ((yyvsp[(4) - (8)].parameterList).m_features & ArgumentsFeature)
@@ -4753,14 +4753,14 @@ yyreduce:
case 289:
/* Line 1455 of yacc.c */
-#line 1191 "parser\\Grammar.y"
+#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"
+#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);
if ((yyvsp[(3) - (7)].parameterList).m_features & ArgumentsFeature)
@@ -4772,14 +4772,14 @@ yyreduce:
case 291:
/* Line 1455 of yacc.c */
-#line 1199 "parser\\Grammar.y"
+#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"
+#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);
if ((yyvsp[(4) - (8)].parameterList).m_features & ArgumentsFeature)
@@ -4791,7 +4791,7 @@ yyreduce:
case 293:
/* Line 1455 of yacc.c */
-#line 1210 "parser\\Grammar.y"
+#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;
(yyval.parameterList).m_node.tail = (yyval.parameterList).m_node.head; ;}
@@ -4800,7 +4800,7 @@ yyreduce:
case 294:
/* Line 1455 of yacc.c */
-#line 1213 "parser\\Grammar.y"
+#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);
(yyval.parameterList).m_node.tail = new (GLOBAL_DATA) ParameterNode(GLOBAL_DATA, (yyvsp[(1) - (3)].parameterList).m_node.tail, *(yyvsp[(3) - (3)].ident)); ;}
@@ -4809,28 +4809,28 @@ yyreduce:
case 295:
/* Line 1455 of yacc.c */
-#line 1219 "parser\\Grammar.y"
+#line 1219 "parser/Grammar.y"
{ (yyval.functionBodyNode) = FunctionBodyNode::create(GLOBAL_DATA); ;}
break;
case 296:
/* Line 1455 of yacc.c */
-#line 1220 "parser\\Grammar.y"
+#line 1220 "parser/Grammar.y"
{ (yyval.functionBodyNode) = FunctionBodyNode::create(GLOBAL_DATA); ;}
break;
case 297:
/* Line 1455 of yacc.c */
-#line 1224 "parser\\Grammar.y"
+#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"
+#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;
@@ -4838,7 +4838,7 @@ yyreduce:
case 299:
/* Line 1455 of yacc.c */
-#line 1230 "parser\\Grammar.y"
+#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);
(yyval.sourceElements).m_varDeclarations = (yyvsp[(1) - (1)].statementNode).m_varDeclarations;
@@ -4851,7 +4851,7 @@ yyreduce:
case 300:
/* Line 1455 of yacc.c */
-#line 1237 "parser\\Grammar.y"
+#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);
(yyval.sourceElements).m_funcDeclarations = mergeDeclarationLists((yyvsp[(1) - (2)].sourceElements).m_funcDeclarations, (yyvsp[(2) - (2)].statementNode).m_funcDeclarations);
@@ -4863,259 +4863,259 @@ yyreduce:
case 304:
/* Line 1455 of yacc.c */
-#line 1251 "parser\\Grammar.y"
+#line 1251 "parser/Grammar.y"
{ ;}
break;
case 305:
/* Line 1455 of yacc.c */
-#line 1252 "parser\\Grammar.y"
+#line 1252 "parser/Grammar.y"
{ ;}
break;
case 306:
/* Line 1455 of yacc.c */
-#line 1253 "parser\\Grammar.y"
+#line 1253 "parser/Grammar.y"
{ if (!GLOBAL_DATA->lexer->skipRegExp()) YYABORT; ;}
break;
case 307:
/* Line 1455 of yacc.c */
-#line 1254 "parser\\Grammar.y"
+#line 1254 "parser/Grammar.y"
{ if (!GLOBAL_DATA->lexer->skipRegExp()) YYABORT; ;}
break;
case 308:
/* Line 1455 of yacc.c */
-#line 1258 "parser\\Grammar.y"
+#line 1258 "parser/Grammar.y"
{ ;}
break;
case 309:
/* Line 1455 of yacc.c */
-#line 1259 "parser\\Grammar.y"
+#line 1259 "parser/Grammar.y"
{ ;}
break;
case 310:
/* Line 1455 of yacc.c */
-#line 1260 "parser\\Grammar.y"
+#line 1260 "parser/Grammar.y"
{ ;}
break;
case 311:
/* Line 1455 of yacc.c */
-#line 1261 "parser\\Grammar.y"
+#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"
+#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"
+#line 1272 "parser/Grammar.y"
{ ;}
break;
case 317:
/* Line 1455 of yacc.c */
-#line 1273 "parser\\Grammar.y"
+#line 1273 "parser/Grammar.y"
{ ;}
break;
case 318:
/* Line 1455 of yacc.c */
-#line 1275 "parser\\Grammar.y"
+#line 1275 "parser/Grammar.y"
{ ;}
break;
case 322:
/* Line 1455 of yacc.c */
-#line 1282 "parser\\Grammar.y"
+#line 1282 "parser/Grammar.y"
{ ;}
break;
case 517:
/* Line 1455 of yacc.c */
-#line 1650 "parser\\Grammar.y"
+#line 1650 "parser/Grammar.y"
{ ;}
break;
case 518:
/* Line 1455 of yacc.c */
-#line 1651 "parser\\Grammar.y"
+#line 1651 "parser/Grammar.y"
{ ;}
break;
case 520:
/* Line 1455 of yacc.c */
-#line 1656 "parser\\Grammar.y"
+#line 1656 "parser/Grammar.y"
{ AUTO_SEMICOLON; ;}
break;
case 521:
/* Line 1455 of yacc.c */
-#line 1660 "parser\\Grammar.y"
+#line 1660 "parser/Grammar.y"
{ ;}
break;
case 522:
/* Line 1455 of yacc.c */
-#line 1661 "parser\\Grammar.y"
+#line 1661 "parser/Grammar.y"
{ ;}
break;
case 525:
/* Line 1455 of yacc.c */
-#line 1667 "parser\\Grammar.y"
+#line 1667 "parser/Grammar.y"
{ ;}
break;
case 526:
/* Line 1455 of yacc.c */
-#line 1668 "parser\\Grammar.y"
+#line 1668 "parser/Grammar.y"
{ ;}
break;
case 530:
/* Line 1455 of yacc.c */
-#line 1675 "parser\\Grammar.y"
+#line 1675 "parser/Grammar.y"
{ AUTO_SEMICOLON; ;}
break;
case 533:
/* Line 1455 of yacc.c */
-#line 1684 "parser\\Grammar.y"
+#line 1684 "parser/Grammar.y"
{ ;}
break;
case 534:
/* Line 1455 of yacc.c */
-#line 1685 "parser\\Grammar.y"
+#line 1685 "parser/Grammar.y"
{ ;}
break;
case 539:
/* Line 1455 of yacc.c */
-#line 1702 "parser\\Grammar.y"
+#line 1702 "parser/Grammar.y"
{ AUTO_SEMICOLON; ;}
break;
case 555:
/* Line 1455 of yacc.c */
-#line 1733 "parser\\Grammar.y"
+#line 1733 "parser/Grammar.y"
{ AUTO_SEMICOLON; ;}
break;
case 557:
/* Line 1455 of yacc.c */
-#line 1735 "parser\\Grammar.y"
+#line 1735 "parser/Grammar.y"
{ AUTO_SEMICOLON; ;}
break;
case 559:
/* Line 1455 of yacc.c */
-#line 1740 "parser\\Grammar.y"
+#line 1740 "parser/Grammar.y"
{ AUTO_SEMICOLON; ;}
break;
case 561:
/* Line 1455 of yacc.c */
-#line 1742 "parser\\Grammar.y"
+#line 1742 "parser/Grammar.y"
{ AUTO_SEMICOLON; ;}
break;
case 563:
/* Line 1455 of yacc.c */
-#line 1747 "parser\\Grammar.y"
+#line 1747 "parser/Grammar.y"
{ AUTO_SEMICOLON; ;}
break;
case 565:
/* Line 1455 of yacc.c */
-#line 1749 "parser\\Grammar.y"
+#line 1749 "parser/Grammar.y"
{ AUTO_SEMICOLON; ;}
break;
case 568:
/* Line 1455 of yacc.c */
-#line 1761 "parser\\Grammar.y"
+#line 1761 "parser/Grammar.y"
{ ;}
break;
case 569:
/* Line 1455 of yacc.c */
-#line 1762 "parser\\Grammar.y"
+#line 1762 "parser/Grammar.y"
{ ;}
break;
case 578:
/* Line 1455 of yacc.c */
-#line 1786 "parser\\Grammar.y"
+#line 1786 "parser/Grammar.y"
{ ;}
break;
case 580:
/* Line 1455 of yacc.c */
-#line 1791 "parser\\Grammar.y"
+#line 1791 "parser/Grammar.y"
{ AUTO_SEMICOLON; ;}
break;
case 585:
/* Line 1455 of yacc.c */
-#line 1802 "parser\\Grammar.y"
+#line 1802 "parser/Grammar.y"
{ AUTO_SEMICOLON; ;}
break;
case 592:
/* Line 1455 of yacc.c */
-#line 1818 "parser\\Grammar.y"
+#line 1818 "parser/Grammar.y"
{ ;}
break;
/* Line 1455 of yacc.c */
-#line 5119 "C:/dev/webkit-2.0/JavaScriptCore/generated\\Grammar.tab.c"
+#line 5119 "/JavaScriptCore/generated/Grammar.tab.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5334,7 +5334,7 @@ yyreturn:
/* Line 1675 of yacc.c */
-#line 1834 "parser\\Grammar.y"
+#line 1834 "parser/Grammar.y"
#undef GLOBAL_DATA
diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.h b/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.h
index 69942f7..04dfeb1 100644
--- a/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.h
+++ b/src/3rdparty/webkit/JavaScriptCore/generated/Grammar.h
@@ -112,7 +112,7 @@ typedef union YYSTYPE
{
/* Line 1676 of yacc.c */
-#line 146 "parser\\Grammar.y"
+#line 146 "parser/Grammar.y"
int intValue;
double doubleValue;
@@ -147,7 +147,7 @@ typedef union YYSTYPE
/* Line 1676 of yacc.c */
-#line 151 "C:/dev/webkit-2.0/JavaScriptCore/generated\\Grammar.tab.h"
+#line 151 "/JavaScriptCore/generated/Grammar.tab.h"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/JSONObject.lut.h b/src/3rdparty/webkit/JavaScriptCore/generated/JSONObject.lut.h
index acfe7d2..4ec868e 100644
--- a/src/3rdparty/webkit/JavaScriptCore/generated/JSONObject.lut.h
+++ b/src/3rdparty/webkit/JavaScriptCore/generated/JSONObject.lut.h
@@ -1,4 +1,4 @@
-// Automatically generated from runtime\JSONObject.cpp using C:/dev/webkit-2.0/JavaScriptCore/create_hash_table. DO NOT EDIT!
+// Automatically generated from runtime/JSONObject.cpp using /JavaScriptCore/create_hash_table. DO NOT EDIT!
#include "Lookup.h"
diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/Lexer.lut.h b/src/3rdparty/webkit/JavaScriptCore/generated/Lexer.lut.h
index 556a6f4..c17f34d 100644
--- a/src/3rdparty/webkit/JavaScriptCore/generated/Lexer.lut.h
+++ b/src/3rdparty/webkit/JavaScriptCore/generated/Lexer.lut.h
@@ -1,4 +1,4 @@
-// Automatically generated from parser\Keywords.table using C:/dev/webkit-2.0/JavaScriptCore/create_hash_table. DO NOT EDIT!
+// Automatically generated from parser/Keywords.table using /JavaScriptCore/create_hash_table. DO NOT EDIT!
#include "Lookup.h"
diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/MathObject.lut.h b/src/3rdparty/webkit/JavaScriptCore/generated/MathObject.lut.h
index 85a1bb6..6222ef9 100644
--- a/src/3rdparty/webkit/JavaScriptCore/generated/MathObject.lut.h
+++ b/src/3rdparty/webkit/JavaScriptCore/generated/MathObject.lut.h
@@ -1,4 +1,4 @@
-// Automatically generated from runtime\MathObject.cpp using C:/dev/webkit-2.0/JavaScriptCore/create_hash_table. DO NOT EDIT!
+// Automatically generated from runtime/MathObject.cpp using /JavaScriptCore/create_hash_table. DO NOT EDIT!
#include "Lookup.h"
diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/NumberConstructor.lut.h b/src/3rdparty/webkit/JavaScriptCore/generated/NumberConstructor.lut.h
index 1cd4117..bfa6341 100644
--- a/src/3rdparty/webkit/JavaScriptCore/generated/NumberConstructor.lut.h
+++ b/src/3rdparty/webkit/JavaScriptCore/generated/NumberConstructor.lut.h
@@ -1,4 +1,4 @@
-// Automatically generated from runtime\NumberConstructor.cpp using C:/dev/webkit-2.0/JavaScriptCore/create_hash_table. DO NOT EDIT!
+// Automatically generated from runtime/NumberConstructor.cpp using /JavaScriptCore/create_hash_table. DO NOT EDIT!
#include "Lookup.h"
diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/RegExpConstructor.lut.h b/src/3rdparty/webkit/JavaScriptCore/generated/RegExpConstructor.lut.h
index 938d368..d45db01 100644
--- a/src/3rdparty/webkit/JavaScriptCore/generated/RegExpConstructor.lut.h
+++ b/src/3rdparty/webkit/JavaScriptCore/generated/RegExpConstructor.lut.h
@@ -1,4 +1,4 @@
-// Automatically generated from runtime\RegExpConstructor.cpp using C:/dev/webkit-2.0/JavaScriptCore/create_hash_table. DO NOT EDIT!
+// Automatically generated from runtime/RegExpConstructor.cpp using /JavaScriptCore/create_hash_table. DO NOT EDIT!
#include "Lookup.h"
diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/RegExpObject.lut.h b/src/3rdparty/webkit/JavaScriptCore/generated/RegExpObject.lut.h
index aadd236..8dcb7c9 100644
--- a/src/3rdparty/webkit/JavaScriptCore/generated/RegExpObject.lut.h
+++ b/src/3rdparty/webkit/JavaScriptCore/generated/RegExpObject.lut.h
@@ -1,4 +1,4 @@
-// Automatically generated from runtime\RegExpObject.cpp using C:/dev/webkit-2.0/JavaScriptCore/create_hash_table. DO NOT EDIT!
+// Automatically generated from runtime/RegExpObject.cpp using /JavaScriptCore/create_hash_table. DO NOT EDIT!
#include "Lookup.h"
diff --git a/src/3rdparty/webkit/JavaScriptCore/generated/StringPrototype.lut.h b/src/3rdparty/webkit/JavaScriptCore/generated/StringPrototype.lut.h
index 2d08eac..6ea0803 100644
--- a/src/3rdparty/webkit/JavaScriptCore/generated/StringPrototype.lut.h
+++ b/src/3rdparty/webkit/JavaScriptCore/generated/StringPrototype.lut.h
@@ -1,4 +1,4 @@
-// Automatically generated from runtime\StringPrototype.cpp using C:/dev/webkit-2.0/JavaScriptCore/create_hash_table. DO NOT EDIT!
+// Automatically generated from runtime/StringPrototype.cpp using /JavaScriptCore/create_hash_table. DO NOT EDIT!
#include "Lookup.h"
diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp
index 2859290..0eca610 100644
--- a/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp
+++ b/src/3rdparty/webkit/JavaScriptCore/runtime/Collector.cpp
@@ -201,7 +201,7 @@ NEVER_INLINE CollectorBlock* Heap::allocateBlock()
#elif OS(WINCE)
void* address = VirtualAlloc(NULL, BLOCK_SIZE, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
#elif OS(WINDOWS)
-#if COMPILER(MINGW) && !defined(__MINGW64_VERSION_MAJOR)
+#if COMPILER(MINGW) && !COMPILER(MINGW64)
void* address = __mingw_aligned_malloc(BLOCK_SIZE, BLOCK_SIZE);
#else
void* address = _aligned_malloc(BLOCK_SIZE, BLOCK_SIZE);
@@ -292,7 +292,7 @@ NEVER_INLINE void Heap::freeBlockPtr(CollectorBlock* block)
#elif OS(WINCE)
VirtualFree(block, 0, MEM_RELEASE);
#elif OS(WINDOWS)
-#if COMPILER(MINGW) && !defined(__MINGW64_VERSION_MAJOR)
+#if COMPILER(MINGW) && !COMPILER(MINGW64)
__mingw_aligned_free(block);
#else
_aligned_free(block);
@@ -558,6 +558,8 @@ static inline void* currentThreadStackBase()
PNT_TIB64 pTib = reinterpret_cast<PNT_TIB64>(NtCurrentTeb());
return reinterpret_cast<void*>(pTib->StackBase);
#elif OS(QNX)
+ AtomicallyInitializedStatic(Mutex&, mutex = *new Mutex);
+ MutexLocker locker(mutex);
return currentThreadStackBaseQNX();
#elif OS(SOLARIS)
stack_t s;
@@ -569,19 +571,17 @@ static inline void* currentThreadStackBase()
pthread_stackseg_np(thread, &stack);
return stack.ss_sp;
#elif OS(SYMBIAN)
- static void* stackBase = 0;
- if (stackBase == 0) {
- TThreadStackInfo info;
- RThread thread;
- thread.StackInfo(info);
- stackBase = (void*)info.iBase;
- }
- return (void*)stackBase;
+ TThreadStackInfo info;
+ RThread thread;
+ thread.StackInfo(info);
+ return (void*)info.iBase;
#elif OS(HAIKU)
thread_info threadInfo;
get_thread_info(find_thread(NULL), &threadInfo);
return threadInfo.stack_end;
#elif OS(UNIX)
+ AtomicallyInitializedStatic(Mutex&, mutex = *new Mutex);
+ MutexLocker locker(mutex);
static void* stackBase = 0;
static size_t stackSize = 0;
static pthread_t stackThread;
@@ -604,6 +604,8 @@ static inline void* currentThreadStackBase()
}
return static_cast<char*>(stackBase) + stackSize;
#elif OS(WINCE)
+ AtomicallyInitializedStatic(Mutex&, mutex = *new Mutex);
+ MutexLocker locker(mutex);
if (g_stackBase)
return g_stackBase;
else {
diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp
index dab7f51..6d13f4b 100644
--- a/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp
+++ b/src/3rdparty/webkit/JavaScriptCore/runtime/Structure.cpp
@@ -168,14 +168,14 @@ inline void Structure::transitionTableAdd(const StructureTransitionTableHash::Ke
if (!specificValue) {
TransitionTable::iterator find = transitionTable()->find(key);
if (find == transitionTable()->end())
- transitionTable()->add(key, Transition(structure, (Structure*)0));
+ transitionTable()->add(key, Transition(structure, static_cast<Structure*>(0)));
else
find->second.first = structure;
} else {
// If we're adding a transition to a specific value, then there cannot be
// an existing transition
ASSERT(!transitionTable()->contains(key));
- transitionTable()->add(key, Transition((Structure*)0, structure));
+ transitionTable()->add(key, Transition(static_cast<Structure*>(0), structure));
}
}
diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/Assertions.h b/src/3rdparty/webkit/JavaScriptCore/wtf/Assertions.h
index 0e02af5..8b6d09a 100644
--- a/src/3rdparty/webkit/JavaScriptCore/wtf/Assertions.h
+++ b/src/3rdparty/webkit/JavaScriptCore/wtf/Assertions.h
@@ -61,7 +61,7 @@
#define ASSERTIONS_DISABLED_DEFAULT 0
#endif
-#if COMPILER(MSVC7) || COMPILER(WINSCW)
+#if COMPILER(MSVC7_OR_LOWER) || COMPILER(WINSCW)
#define HAVE_VARIADIC_MACRO 0
#else
#define HAVE_VARIADIC_MACRO 1
@@ -213,7 +213,7 @@ while (0)
/* ASSERT_WITH_MESSAGE */
-#if COMPILER(MSVC7)
+#if COMPILER(MSVC7_OR_LOWER)
#define ASSERT_WITH_MESSAGE(assertion) ((void)0)
#elif COMPILER(WINSCW)
#define ASSERT_WITH_MESSAGE(assertion, arg...) ((void)0)
@@ -253,7 +253,7 @@ while (0)
/* FATAL */
-#if COMPILER(MSVC7)
+#if COMPILER(MSVC7_OR_LOWER)
#define FATAL() ((void)0)
#elif COMPILER(WINSCW)
#define FATAL(arg...) ((void)0)
@@ -268,7 +268,7 @@ while (0)
/* LOG_ERROR */
-#if COMPILER(MSVC7)
+#if COMPILER(MSVC7_OR_LOWER)
#define LOG_ERROR() ((void)0)
#elif COMPILER(WINSCW)
#define LOG_ERROR(arg...) ((void)0)
@@ -280,7 +280,7 @@ while (0)
/* LOG */
-#if COMPILER(MSVC7)
+#if COMPILER(MSVC7_OR_LOWER)
#define LOG() ((void)0)
#elif COMPILER(WINSCW)
#define LOG(arg...) ((void)0)
@@ -294,7 +294,7 @@ while (0)
/* LOG_VERBOSE */
-#if COMPILER(MSVC7)
+#if COMPILER(MSVC7_OR_LOWER)
#define LOG_VERBOSE(channel) ((void)0)
#elif COMPILER(WINSCW)
#define LOG_VERBOSE(channel, arg...) ((void)0)
diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/CurrentTime.h b/src/3rdparty/webkit/JavaScriptCore/wtf/CurrentTime.h
index 033448f..dcb1f6c 100644
--- a/src/3rdparty/webkit/JavaScriptCore/wtf/CurrentTime.h
+++ b/src/3rdparty/webkit/JavaScriptCore/wtf/CurrentTime.h
@@ -49,7 +49,7 @@ namespace WTF {
inline void getLocalTime(const time_t* localTime, struct tm* localTM)
{
- #if COMPILER(MSVC7) || COMPILER(MINGW) || OS(WINCE)
+ #if COMPILER(MSVC7_OR_LOWER) || COMPILER(MINGW) || OS(WINCE)
*localTM = *localtime(localTime);
#elif COMPILER(MSVC)
localtime_s(localTM, localTime);
diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h b/src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h
index 49d6ec3..f8bace4 100644
--- a/src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h
+++ b/src/3rdparty/webkit/JavaScriptCore/wtf/MathExtras.h
@@ -123,7 +123,7 @@ inline double trunc(double num) { return num > 0 ? floor(num) : ceil(num); }
#if COMPILER(MSVC)
// The 64bit version of abs() is already defined in stdlib.h which comes with VC10
-#if COMPILER(MSVC9)
+#if COMPILER(MSVC9_OR_LOWER)
inline long long abs(long long num) { return _abs64(num); }
#endif
diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h b/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h
index 2a5a48f..c582905 100644
--- a/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h
+++ b/src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h
@@ -58,13 +58,14 @@
/* ==== COMPILER() - the compiler being used to build the project ==== */
/* COMPILER(MSVC) Microsoft Visual C++ */
-/* COMPILER(MSVC7) Microsoft Visual C++ v7 or lower*/
+/* COMPILER(MSVC7_OR_LOWER) Microsoft Visual C++ 2003 or lower*/
+/* COMPILER(MSVC9_OR_LOWER) Microsoft Visual C++ 2008 or lower*/
#if defined(_MSC_VER)
#define WTF_COMPILER_MSVC 1
#if _MSC_VER < 1400
-#define WTF_COMPILER_MSVC7 1
+#define WTF_COMPILER_MSVC7_OR_LOWER 1
#elif _MSC_VER < 1600
-#define WTF_COMPILER_MSVC9 1
+#define WTF_COMPILER_MSVC9_OR_LOWER 1
#endif
#endif
@@ -81,9 +82,14 @@
#endif
/* COMPILER(MINGW) - MinGW GCC */
-#if defined(MINGW) || defined(__MINGW32__)
+/* COMPILER(MINGW64) - mingw-w64 GCC - only used as additional check to exclude mingw.org specific functions */
+#if defined(__MINGW32__)
#define WTF_COMPILER_MINGW 1
-#endif
+#include <_mingw.h> /* private MinGW header */
+ #if defined(__MINGW64_VERSION_MAJOR) /* best way to check for mingw-w64 vs mingw.org */
+ #define WTF_COMPILER_MINGW64 1
+ #endif /* __MINGW64_VERSION_MAJOR */
+#endif /* __MINGW32__ */
/* COMPILER(WINSCW) - CodeWarrior for Symbian emulator */
#if defined(__WINSCW__)
@@ -921,6 +927,8 @@ on MinGW. See https://bugs.webkit.org/show_bug.cgi?id=29268 */
#elif CPU(X86) && OS(WINDOWS) && COMPILER(MINGW) && GCC_VERSION >= 40100
#define ENABLE_JIT 1
#define WTF_USE_JIT_STUB_ARGUMENT_VA_LIST 1
+#elif CPU(X86_64) && OS(WINDOWS) && COMPILER(MINGW64) && GCC_VERSION >= 40100
+ #define ENABLE_JIT 1
#elif CPU(X86) && OS(WINDOWS) && COMPILER(MSVC)
#define ENABLE_JIT 1
#define WTF_USE_JIT_STUB_ARGUMENT_REGISTER 1
@@ -931,6 +939,8 @@ on MinGW. See https://bugs.webkit.org/show_bug.cgi?id=29268 */
#define ENABLE_JIT 1
#elif CPU(ARM_TRADITIONAL) && OS(LINUX)
#define ENABLE_JIT 1
+#elif CPU(ARM_TRADITIONAL) && OS(SYMBIAN) && COMPILER(RVCT)
+ #define ENABLE_JIT 1
#endif
#endif /* PLATFORM(QT) */
@@ -995,10 +1005,12 @@ on MinGW. See https://bugs.webkit.org/show_bug.cgi?id=29268 */
#if PLATFORM(QT)
#if (CPU(X86) && OS(WINDOWS) && COMPILER(MINGW) && GCC_VERSION >= 40100) \
+ || (CPU(X86_64) && OS(WINDOWS) && COMPILER(MINGW64) && GCC_VERSION >= 40100) \
|| (CPU(X86) && OS(WINDOWS) && COMPILER(MSVC)) \
|| (CPU(X86) && OS(LINUX) && GCC_VERSION >= 40100) \
|| (CPU(X86_64) && OS(LINUX) && GCC_VERSION >= 40100) \
|| (CPU(ARM_TRADITIONAL) && OS(LINUX)) \
+ || (CPU(ARM_TRADITIONAL) && OS(SYMBIAN) && COMPILER(RVCT)) \
|| (CPU(MIPS) && OS(LINUX))
#define ENABLE_YARR 1
#define ENABLE_YARR_JIT 1
diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/StringExtras.h b/src/3rdparty/webkit/JavaScriptCore/wtf/StringExtras.h
index b1ec09f..28e80b8 100644
--- a/src/3rdparty/webkit/JavaScriptCore/wtf/StringExtras.h
+++ b/src/3rdparty/webkit/JavaScriptCore/wtf/StringExtras.h
@@ -46,7 +46,7 @@ inline int snprintf(char* buffer, size_t count, const char* format, ...)
return result;
}
-#if COMPILER(MSVC7) || OS(WINCE)
+#if COMPILER(MSVC7_OR_LOWER) || OS(WINCE)
inline int vsnprintf(char* buffer, size_t count, const char* format, va_list args)
{
diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/Threading.h b/src/3rdparty/webkit/JavaScriptCore/wtf/Threading.h
index 768aecf..50e08bd 100644
--- a/src/3rdparty/webkit/JavaScriptCore/wtf/Threading.h
+++ b/src/3rdparty/webkit/JavaScriptCore/wtf/Threading.h
@@ -220,7 +220,7 @@ private:
#if OS(WINDOWS)
#define WTF_USE_LOCKFREE_THREADSAFESHARED 1
-#if COMPILER(MINGW) || COMPILER(MSVC7) || OS(WINCE)
+#if COMPILER(MINGW) || COMPILER(MSVC7_OR_LOWER) || OS(WINCE)
inline int atomicIncrement(int* addend) { return InterlockedIncrement(reinterpret_cast<long*>(addend)); }
inline int atomicDecrement(int* addend) { return InterlockedDecrement(reinterpret_cast<long*>(addend)); }
#else
diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/VMTags.h b/src/3rdparty/webkit/JavaScriptCore/wtf/VMTags.h
index 7ac02da..6600050 100644
--- a/src/3rdparty/webkit/JavaScriptCore/wtf/VMTags.h
+++ b/src/3rdparty/webkit/JavaScriptCore/wtf/VMTags.h
@@ -28,25 +28,48 @@
// On Mac OS X, the VM subsystem allows tagging memory requested from mmap and vm_map
// in order to aid tools that inspect system memory use.
-#if OS(DARWIN) && !defined(BUILDING_ON_TIGER)
+#if OS(DARWIN)
#include <mach/vm_statistics.h>
+#if !defined(TARGETING_TIGER)
+
#if defined(VM_MEMORY_TCMALLOC)
#define VM_TAG_FOR_TCMALLOC_MEMORY VM_MAKE_TAG(VM_MEMORY_TCMALLOC)
#else
#define VM_TAG_FOR_TCMALLOC_MEMORY VM_MAKE_TAG(53)
#endif // defined(VM_MEMORY_TCMALLOC)
-#if defined(VM_MEMORY_JAVASCRIPT_CORE) && defined(VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE) && defined(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR) && defined(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR)
-#define VM_TAG_FOR_COLLECTOR_MEMORY VM_MAKE_TAG(VM_MEMORY_JAVASCRIPT_CORE)
-#define VM_TAG_FOR_REGISTERFILE_MEMORY VM_MAKE_TAG(VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE)
+#if defined(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR)
#define VM_TAG_FOR_EXECUTABLEALLOCATOR_MEMORY VM_MAKE_TAG(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR)
#else
-#define VM_TAG_FOR_COLLECTOR_MEMORY VM_MAKE_TAG(63)
#define VM_TAG_FOR_EXECUTABLEALLOCATOR_MEMORY VM_MAKE_TAG(64)
+#endif // defined(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR)
+
+#if defined(VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE)
+#define VM_TAG_FOR_REGISTERFILE_MEMORY VM_MAKE_TAG(VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE)
+#else
#define VM_TAG_FOR_REGISTERFILE_MEMORY VM_MAKE_TAG(65)
-#endif // defined(VM_MEMORY_JAVASCRIPT_CORE) && defined(VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE) && defined(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR) && defined(VM_MEMORY_JAVASCRIPT_JIT_EXECUTABLE_ALLOCATOR)
+#endif // defined(VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE)
+
+#else // !defined(TARGETING_TIGER)
+
+// mmap on Tiger fails with tags that work on Leopard, so fall
+// back to Tiger-compatible tags (that also work on Leopard)
+// when targeting Tiger.
+#define VM_TAG_FOR_TCMALLOC_MEMORY -1
+#define VM_TAG_FOR_EXECUTABLEALLOCATOR_MEMORY -1
+#define VM_TAG_FOR_REGISTERFILE_MEMORY -1
+
+#endif // !defined(TARGETING_TIGER)
+
+// Tags for vm_map and vm_allocate work on both Tiger and Leopard.
+
+#if defined(VM_MEMORY_JAVASCRIPT_CORE)
+#define VM_TAG_FOR_COLLECTOR_MEMORY VM_MAKE_TAG(VM_MEMORY_JAVASCRIPT_CORE)
+#else
+#define VM_TAG_FOR_COLLECTOR_MEMORY VM_MAKE_TAG(63)
+#endif // defined(VM_MEMORY_JAVASCRIPT_CORE)
#if defined(VM_MEMORY_WEBCORE_PURGEABLE_BUFFERS)
#define VM_TAG_FOR_WEBCORE_PURGEABLE_MEMORY VM_MAKE_TAG(VM_MEMORY_WEBCORE_PURGEABLE_BUFFERS)
@@ -54,7 +77,7 @@
#define VM_TAG_FOR_WEBCORE_PURGEABLE_MEMORY VM_MAKE_TAG(69)
#endif // defined(VM_MEMORY_WEBCORE_PURGEABLE_BUFFERS)
-#else // OS(DARWIN) && !defined(BUILDING_ON_TIGER)
+#else // OS(DARWIN)
#define VM_TAG_FOR_TCMALLOC_MEMORY -1
#define VM_TAG_FOR_COLLECTOR_MEMORY -1
@@ -62,6 +85,6 @@
#define VM_TAG_FOR_REGISTERFILE_MEMORY -1
#define VM_TAG_FOR_WEBCORE_PURGEABLE_MEMORY -1
-#endif // OS(DARWIN) && !defined(BUILDING_ON_TIGER)
+#endif // OS(DARWIN)
#endif // VMTags_h
diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h b/src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h
index 6f55e53..e495067 100644
--- a/src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h
+++ b/src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h
@@ -939,7 +939,7 @@ namespace WTF {
return;
}
-#if COMPILER(MSVC7)
+#if COMPILER(MSVC7_OR_LOWER)
// FIXME: MSVC7 generates compilation errors when trying to assign
// a pointer to a Vector of its base class (i.e. can't downcast). So far
// I've been unable to determine any logical reason for this, so I can
diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION
new file mode 100644
index 0000000..98debf6
--- /dev/null
+++ b/src/3rdparty/webkit/VERSION
@@ -0,0 +1,7 @@
+This is a snapshot of the Qt port of WebKit from
+
+ git://gitorious.org/qtwebkit/qtwebkit.git
+
+and has the sha1 checksum
+
+ 07b60cf799680fcfb7785ee88e14f8030a5dbfa2
diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog
index f52872c..6617b66 100644
--- a/src/3rdparty/webkit/WebCore/ChangeLog
+++ b/src/3rdparty/webkit/WebCore/ChangeLog
@@ -1,3 +1,987 @@
+2010-05-04 Luiz Agostini <luiz.agostini@openbossa.org>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] QT_MOBILE_THEME compile time flag
+ https://bugs.webkit.org/show_bug.cgi?id=38439
+
+ Replacing preprocessor conditional used in RenderThemeQt from Q_WS_MAEMO_5 to
+ USE(QT_MOBILE_THEME).
+
+ * WebCore.pro:
+ * platform/qt/RenderThemeQt.cpp:
+ (WebCore::RenderThemeQt::RenderThemeQt):
+ (WebCore::RenderThemeQt::qStyle):
+ (WebCore::RenderThemeQt::extraDefaultStyleSheet):
+ (WebCore::RenderThemeQt::adjustMenuListButtonStyle):
+ (WebCore::RenderThemeQt::setPaletteFromPageClientIfExists):
+ * platform/qt/RenderThemeQt.h:
+
+2010-03-25 Tasuku Suzuki <tasuku.suzuki@nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ [Qt]Fix compile error with QT_NO_LIBRARY
+ https://bugs.webkit.org/show_bug.cgi?id=36533
+
+ * platform/FileSystem.h:
+ * platform/qt/FileSystemQt.cpp:
+ (WebCore::unloadModule):
+
+2010-05-06 Csaba Osztrogonác <ossy@webkit.org>
+
+ Unreviewed WinCE buildfix after r58842.
+ Preprocessor doesn't understand "true", changed to "1"
+
+ * platform/graphics/MediaPlayer.cpp:
+
+2010-05-06 Antonio Gomes <tonikitoo@webkit.org>
+
+ Reviewed by Kenneth Christiansen.
+
+ Spatial Navigation: adapt the logic of {deep}findFocusableNodeInDirection to do traversal starting from Node* not Document*
+ https://bugs.webkit.org/show_bug.cgi?id=37803
+
+ Instead of receiving a Document pointer as incoming parameter, patch modifies
+ findFocusableNodeInDirection and deepFindFocusableNodeInDirection methods to
+ receive a Node pointer as start for content traversal.
+ This way we can make good use of deepFindFocusableNodeInDirection to traverse
+ other scrollable container like scrollable div's, and not only frames or iframes.
+
+ Patch also makes use of 'while' instead of 'for' to loop control, that gives move
+ flexibility to the incremental step: e.g. if a scrollable div was processed, the incremental
+ step in the loop does not have to do node->traverseNextNode() but node->traverseNextSibling().
+
+ No behavior change. It is a preparation for supporting scrollable containers in Spatial
+ Navigation.
+
+ * page/FocusController.cpp:
+ (WebCore::FocusController::advanceFocusDirectionally):
+ (WebCore::FocusController::findFocusableNodeInDirection):
+ (WebCore::FocusController::deepFindFocusableNodeInDirection):
+ * page/FocusController.h:
+
+2010-05-06 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] REGRESSION: Loading of external CSS and JS files over network fails in some cases
+ https://bugs.webkit.org/show_bug.cgi?id=36755
+
+ Enable the direct connection between QtNetwork and QtWebKit only for Qt versions
+ greater than 4.6.2, due to a bug in Qt that's been fixed after 4.6.2.
+
+ * platform/network/qt/QNetworkReplyHandler.cpp:
+
+2010-05-05 Csaba Osztrogonác <ossy@webkit.org>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt]Disable Qt Multimedia backend for HTML 5 Audio and Video elements
+ Fall back to the Phonon backend until the release situation has been cleared up.
+
+ https://bugs.webkit.org/show_bug.cgi?id=38612
+
+ Buildfix for QT_VERSION >= 0x040700 after r58810.
+
+ * platform/graphics/MediaPlayer.cpp:
+
+2010-05-03 Tor Arne Vestbø <tor.arne.vestbo@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix rendering of <button> elements on Mac OS X
+
+ The <button> element has ButtonPart appearance, not PushButton part,
+ so we have to include ButtonPart when we decide if we should draw the
+ button as raised on Mac OS X.
+
+ https://bugs.webkit.org/show_bug.cgi?id=38458
+
+ * platform/qt/RenderThemeQt.cpp:
+ (WebCore::RenderThemeQt::initializeCommonQStyleOptions):
+
+2010-04-26 Luiz Agostini <luiz.agostini@openbossa.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ View modes names in CSSValueKeywords.in
+ https://bugs.webkit.org/show_bug.cgi?id=38125
+
+ View mode names has changed in previous patch but CSSValueKeywords.in file was
+ not updated.
+
+ * css/CSSValueKeywords.in:
+
+2010-04-28 Luiz Agostini <luiz.agostini@openbossa.org>
+
+ Reviewed by Simon Fraser.
+
+ Media queries empty values
+ https://bugs.webkit.org/show_bug.cgi?id=38116
+
+ Adding isValid() method to MediaQueryExp to make it possible to differentiate
+ between queries with empty values and queries with invalid values.
+
+ Test: fast/media/media-query-invalid-value.html
+
+ * css/MediaQueryEvaluator.cpp:
+ (WebCore::MediaQueryEvaluator::eval):
+ * css/MediaQueryExp.cpp:
+ (WebCore::MediaQueryExp::MediaQueryExp):
+ * css/MediaQueryExp.h:
+ (WebCore::MediaQueryExp::isValid):
+
+2010-05-05 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Disable Qt Multimedia backend for HTML 5 Audio and Video elements
+
+ Fall back to the Phonon backend until the release situation has been cleared up.
+
+ * WebCore.pro:
+
+2010-05-03 Janne Koskinen <janne.p.koskinen@digia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix qtlibraryinfix not to contain space
+
+ List catenation with += adds whitespace cutting the infix
+ from the final target.
+
+ * WebCore.pro:
+
+2010-05-03 Thomas Zander <t.zander@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix library infix usage when compiling inside of Qt
+
+ Don't apply the infix when building inside Qt, as that's done through the
+ inclusion of qbase.pri.
+
+ * WebCore.pro:
+
+2010-04-29 Janne Koskinen <janne.p.koskinen@digia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] QtWebKit versioning added
+ https://bugs.webkit.org/show_bug.cgi?id=37207
+
+ QtWebkit releases separated from Qt release cycle.
+
+ * WebCore.pro:
+
+2010-03-27 Robert Hogan <robert@webkit.org>
+
+ Reviewed by nobody, fix typo in previous commit.
+
+ Allow plugins implemented by the application, such as mimetype 'x-qt-plugin',
+ when pluginsEnabled is false
+
+ Fix parentheses typo in r56661. This happened while rebasing and was not present
+ in the reviewed patch, so committing unreviewed.
+
+ https://bugs.webkit.org/attachment.cgi?id=49515
+
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::requestObject):
+
+2010-03-26 Robert Hogan <robert@roberthogan.net>
+
+ Reviewed by Simon Hausmann.
+
+ Allow plugins implemented by the application, such as mimetype 'x-qt-plugin',
+ when pluginsEnabled is false.
+
+ The purpose of disabling plugins is to prevent the execution of third-party code
+ that may be untrustworthy. Qt plugins are implemented by the client rather than
+ loaded from an external source, so the client should have the opportunity to
+ consider them separately from other plugins.
+
+ Add a function MimeTypeRegistry::isApplicationPluginMIMEType() that WebKit
+ uses in conjunction with arePluginsEnabled() to determine if it should attempt
+ to load a plugin. If isApplicationPluginMIMEType() returns true, WebKit will load
+ the plugin even if arePluginsEnabled() is false.
+
+ Currently, only Qt has application-implemented plugins: these use the mimetype
+ 'x-qt-plugin' and 'x-qt-styled-widget'. This patch permits Qt clients'
+ reimplementation of QWebPage::createPlugin() to decide whether or not
+ to create a Qt plugin, even when arePluginsEnabled is false.
+
+ For all platforms apart from Qt, isApplicationPluginMIMEType() returns false.
+
+ https://bugs.webkit.org/show_bug.cgi?id=32196
+
+ Test: plugins/application-plugin-plugins-disabled.html
+
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::requestObject):
+ * platform/MIMETypeRegistry.h:
+ * platform/brew/MIMETypeRegistryBrew.cpp:
+ (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
+ * platform/chromium/MIMETypeRegistryChromium.cpp:
+ (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
+ * platform/gtk/MIMETypeRegistryGtk.cpp:
+ (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
+ * platform/haiku/MIMETypeRegistryHaiku.cpp:
+ (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
+ * platform/mac/MIMETypeRegistryMac.mm:
+ (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
+ * platform/qt/MIMETypeRegistryQt.cpp:
+ (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
+ * platform/win/MIMETypeRegistryWin.cpp:
+ (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
+ * platform/wince/MIMETypeRegistryWince.cpp:
+ (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
+ * platform/wx/MimeTypeRegistryWx.cpp:
+ (WebCore::MIMETypeRegistry::isApplicationPluginMIMEType):
+
+2010-04-29 Noam Rosenthal <noam.rosenthal@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] GraphicsLayer: flicker when starting an animation before the previous one ended.
+ https://bugs.webkit.org/show_bug.cgi?id=38076
+
+ This was due to the cude in the removeAnimations functions, which called deleteLater() without stopping the
+ animation synchronously. The delay between the call to that function and the actual call to the animation's destructor
+ is when the flicker occured. We fix this by calling stop() synchronously, and making sure that the value is reverted
+ upon stop (updateState) and not upon the object's destruction.
+
+ http://staff.washington.edu/fmf/2009/03/25/iphone-3d-css-transformations/ now doesn't flicker when
+ the animation is toggled frequently.
+
+ * platform/graphics/qt/GraphicsLayerQt.cpp:
+ (WebCore::TransformAnimationQt::~TransformAnimationQt):
+ (WebCore::TransformAnimationQt::applyFrame):
+ (WebCore::TransformAnimationQt::updateState):
+ (WebCore::OpacityAnimationQt::~OpacityAnimationQt):
+ (WebCore::OpacityAnimationQt::updateState):
+ (WebCore::GraphicsLayerQt::removeAnimationsForProperty):
+ (WebCore::GraphicsLayerQt::removeAnimationsForKeyframes):
+
+2010-04-29 Noam Rosenthal <noam.rosenthal@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Reverse animations don't work in some use cases
+ https://bugs.webkit.org/show_bug.cgi?id=38075
+
+ This was due to a code path special-casing reverse animations, that became obselete when we aligned our animation code
+ with the CA implementation. That special case code path is now a bug - and this patch removes it.
+
+ http://staff.washington.edu/fmf/2009/03/25/iphone-3d-css-transformations/ now runs the reverse
+ animation correctly.
+
+ * platform/graphics/qt/GraphicsLayerQt.cpp:
+ (WebCore::TransformAnimationQt::applyFrame):
+
+2010-04-29 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Speed up text layouting
+ https://bugs.webkit.org/show_bug.cgi?id=31719
+
+ Use QFontMetrics::width() for the text width calculation instead
+ of QTextLayout. This avoids expensive bearing calculations and the
+ line breaking code.
+
+ * platform/graphics/qt/FontQt.cpp:
+ (WebCore::Font::floatWidthForComplexText):
+
+2010-04-29 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] REGRESSION(r57638): tst_qwebframe::objectDeleted() fails
+ https://bugs.webkit.org/show_bug.cgi?id=38316
+
+ Accessing properties of a deleted objects doesn't throw an exception
+ anymore.
+
+ Continue to expose the QObject class wrapper for objects that
+ previously existed but don't exist anymore. QtClass is safe to
+ use with a deleted QObject.
+
+ * bridge/qt/qt_instance.cpp:
+ (JSC::Bindings::QtInstance::getClass): Return null only if m_class
+ doesn't exist yet and there's no m_object.
+
+2010-04-28 Noam Rosenthal <noam.rosenthal@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] GraphicsLayer: preserves-3d and backface visibility
+ https://bugs.webkit.org/show_bug.cgi?id=35312
+
+ Implement preserves-3d by maintaining the 3D transformation heirarchy inside GraphicsLayerQt, and extrapolating
+ the relative QTransform. When the extrapolation fails (un-invertible matrix) we ignore the transformation change.
+
+ WebKitSite/blog-files/3d-transforms test now work with Qt.
+
+ * platform/graphics/qt/GraphicsLayerQt.cpp:
+ (WebCore::GraphicsLayerQtImpl::updateTransform):
+ (WebCore::GraphicsLayerQtImpl::opaqueArea):
+ (WebCore::GraphicsLayerQtImpl::boundingRect):
+ (WebCore::GraphicsLayerQtImpl::paint):
+ (WebCore::GraphicsLayerQtImpl::flushChanges):
+
+2010-04-28 Justin McPherson <justin.mcpherson@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix detection of Qt 4.7's multimedia libraries
+
+ QtMultimedia has been split into an additional media services library, which
+ we're using. mediaservices depends on multimedia.
+
+ * WebCore.pro:
+
+2010-04-26 Andreas Kling <andreas.kling@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] Fix compilation against Qt 4.7
+
+ Some QtMultimedia things have been moved into QtMediaServices
+ https://bugs.webkit.org/show_bug.cgi?id=38111
+
+ * WebCore.pro:
+ * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
+ (WebCore::MediaPlayerPrivate::supportsType):
+ (WebCore::MediaPlayerPrivate::totalBytes):
+
+2010-04-21 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Make sure WebKit is not compiled using C++0x.
+ https://bugs.webkit.org/show_bug.cgi?id=37867
+
+ As the rest of Qt compiles in the C++0x mode, people might start
+ compiling it in this mode. WebKit don't support this yet.
+
+ Patch by Thiago Macieira <thiago.macieira@nokia.com>
+
+ * WebCore.pro:
+
+2010-04-22 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Hide the OpenGL and QtMultimedia dependencies from syncqt.
+
+ This prevents the dependent headers from being included by
+ qt/include/QtWebKit/QtWebKit
+
+ * WebCore.pro:
+
+2010-04-27 Thomas Zander <t.zander@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix linking on Symbian on Linux using the Makefile based mkspec.
+
+ Disable thumb mode due to library size limitations, just like it's done
+ for the sbs/sbsv2 based build system.
+
+ * WebCore.pro:
+
+2010-04-26 Ruben Van Boxem <vanboxem.ruben@gmail.com>
+
+ Reviewed by Adam Roben.
+
+ Fixes for Win64 compilation under gcc (mingw-w64)
+
+ * WebCore/bridge/npapi.h: for win64 compatibility, mirroring mozilla-central, see Mozilla bug 560298
+ * WebCore/platform/Arena.h: uword is used to cast from pointers here. unsigned long is 32-bit on Windows (but 64-bit on mac), and too small to hold a pointer. uintptr_t is 32-bit on 32-bit systems (mac, linux and windows) and 64-bit on all 64-bit systems
+ * WebCore/platform/graphics/transforms/TransformationMatrix.h: let mingw-w64/w32 use MSVC codepath
+ * WebCore/platform/text/TextStream.cpp: let mingw-w64 use MSVC codepath
+ * WebCore/platform/text/TextStream.h: let mingw-w64 use MSVC codepath
+ * WebCore/plugins/PluginView.cpp: fix pointer casts on WIN64 and let mingw-w64 use MSVC codepath
+ * WebCore/plugins/win/PluginViewWin.cpp: fix pointer casts on WIN64
+
+2010-01-07 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by NOBODY (OOPS!).
+
+ [RVCT] ACID3 test crash
+ https://bugs.webkit.org/show_bug.cgi?id=33280
+
+ Workaround developed by Yongjun Zhang.
+
+ * dom/Element.cpp:
+ (WebCore::Element::setAttribute):
+
+2010-04-26 Markus Goetz <Markus.Goetz@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] HTTP pipelining efficiency increase
+ https://bugs.webkit.org/show_bug.cgi?id=38062
+
+ Increase number of network requests that are fed into
+ QNetworkAccessManager.
+
+ * platform/network/qt/ResourceRequestQt.cpp:
+ (WebCore::initializeMaximumHTTPConnectionCountPerHost):
+
+2010-04-26 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Fix compilation with RVCT 4
+ https://bugs.webkit.org/show_bug.cgi?id=37727
+
+ Swap extern and declspec to fix visibility of symbol imported from QtGui.
+
+ * page/qt/EventHandlerQt.cpp:
+
+2010-04-26 Bruno Schmidt <bruno.schmidt@gmail.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Exposing an QVariantMap containing QObjectStar to Javascript
+ causes Segmentation Fault
+ https://bugs.webkit.org/show_bug.cgi?id=34729
+
+ If an QVariantMap containing QObjectStar is added to the to QtWebkit
+ Javascript, it's use causes Segmentation Fault.
+ It happens because, in the case QMetaType::QVariantMap, the "root"
+ object that is inside of a PassRefPtr is passed recursively inside a
+ loop to recover the content of the map, but the PassRefPtr semantics
+ prohibit its use inside a loop, so the "root" object mus be passed
+ using the method "PassRefPtr::get" in order to keep the current
+ reference.
+
+ * bridge/qt/qt_runtime.cpp:
+ (JSC::Bindings::convertValueToQVariant):
+ (JSC::Bindings::convertQVariantToValue): change to root.get()
+
+2010-04-22 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ Fix the MSVC 64bit build.
+ https://bugs.webkit.org/show_bug.cgi?id=37980
+
+ * platform/text/TextStream.cpp:
+ * platform/text/TextStream.h:
+ * plugins/win/PluginViewWin.cpp:
+ (WebCore::PluginView::platformStart):
+
+2010-04-22 Ray Rischpater <Raymond.Rischpater@Nokia.com>
+
+ Reviewed by Darin Adler.
+
+ In HTMLInputElement.cpp, shouldUseInputMethod does not return true for
+ some text input types (TELEPHONE, NUMBER, URL, and EMAIL). Addressed
+ this by changing shouldUseInputMethod to use internal methods to
+ check that the field is a text field that isn't a password field.
+
+ No new tests.
+
+ Fixes <https://bugs.webkit.org/show_bug.cgi?id=37719>
+
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::shouldUseInputMethod):
+
+2010-04-22 Gustavo Sverzut Barbieri <barbieri@profusion.mobi>
+
+ Reviewed by Eric Seidel.
+
+ Fix build if NPAPI support is disabled
+ https://bugs.webkit.org/show_bug.cgi?id=36621
+
+ No new tests, this is a build fix.
+ Re-submit r58043 with fix for EFL.
+
+ * plugins/PluginViewNone.cpp:
+
+2010-03-25 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Darin Adler.
+
+ Fix build if NPAPI support is disabled
+ https://bugs.webkit.org/show_bug.cgi?id=36621
+
+ No new tests, this is a build fix.
+
+ * plugins/PluginView.cpp: Guard getValueStatic() with
+ NETSCAPE_PLUGIN_API
+ (WebCore::PluginView::getValue):
+ * plugins/PluginView.h: Guard getValue() with NETSCAPE_PLUGIN_API
+ * plugins/PluginViewNone.cpp: Guard platformGetValue() and
+ platformGetValueStatic with NETSCAPE_PLUGIN_API;
+ Guard privateBrowsingStateChanged() and setJavaScriptPaused() with
+ PLATFORM(MAC)
+
+2010-04-14 Simon Fraser <simon.fraser@apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Repaint of fixed, transformed element is broken
+ https://bugs.webkit.org/show_bug.cgi?id=37637
+
+ RenderBox::computeRectForRepaint() failed to set the 'fixed' flag correctly
+ for elements that had both fixed position and a transform. If the element has
+ a transform, 'fixed' should only remain true if the element itself is fixed
+ position.
+
+ Also cache style()->position() in a local variable for performance.
+
+ Test: fast/repaint/fixed-tranformed.html
+
+ * rendering/RenderBox.cpp:
+ (WebCore::RenderBox::computeRectForRepaint):
+
+2010-04-19 Antonio Gomes <tonikitoo@webkit.org>
+
+ Reviewed by Simon Fraser.
+
+ Spatial Navigation: at @updateFocusCandidateIfCloser make an assignment shortcut when FocusCandidate is null
+ https://bugs.webkit.org/show_bug.cgi?id=37802
+
+ In updateFocusCandidateIfCloser method, we do all bail out checks in the begining of
+ the method body. If after those bail out checks, no "best FocusCandidate" has been taken
+ yet (i.e. focusCandidate.isNull() == true), we can safely take the current candidate,
+ and exit earlier.
+
+ No behavior change, it is just a safe assignment shortcut.
+
+ * page/FocusController.cpp:
+ (WebCore::updateFocusCandidateIfCloser):
+
+2010-04-21 No'am Rosenthal <noam.rosenthal@nokia.com>
+
+ Reviewed by Simon Fraser.
+
+ [Qt] Fix or remove the runtime flag for accelerated compositing.
+
+ This adds a way for a chrome client to disallow layers from becoming composited,
+ even if the settings enable accelerated compositing. This is necessary for platforms
+ where different views can be applied with the same settings to the same page.
+
+ We enable an API through ChromeClient to ask the chrome-client whether or not
+ it can render composited layers, which is taken into account when the compositor
+ decides whether or not to start compositing.
+
+ https://bugs.webkit.org/show_bug.cgi?id=37313
+
+ Pages under LayoutTests/compositing now work under QWebView, even when
+ QWebSettings::AcceleratedCompositingEnabled is on.
+
+ * page/ChromeClient.h:
+ (WebCore::ChromeClient::allowsAcceleratedCompositing):
+ * platform/qt/QWebPageClient.h:
+ (QWebPageClient::allowsAcceleratedCompositing):
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::RenderLayerCompositor::canBeComposited):
+
+2010-04-23 No'am Rosenthal <noam.rosenthal@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] [Performance] GraphicsLayer: constructing the layers takes too long
+ https://bugs.webkit.org/show_bug.cgi?id=36365
+
+ The issue came from using QGraphicsView's cache as is. The problem is that
+ several code-paths require re-rendering of the item, but not re-rendering
+ of the web content into the cache.
+
+ The way to solve it is by having GraphicsLayerQt manage the cache directly
+ via QPixmapCache, instead of using QGraphicsItem cache modes.
+
+ FPS measurement shows significant improvement (20FPS before, 40FPS after)
+ on several use-cases, including blog-files/leaves on a desktop environment.
+
+ * platform/graphics/qt/GraphicsLayerQt.cpp:
+ (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl):
+ (WebCore::GraphicsLayerQtImpl::recache):
+ (WebCore::GraphicsLayerQtImpl::paint):
+ (WebCore::GraphicsLayerQtImpl::flushChanges):
+
+2010-04-21 Benjamin Poulain <ikipou@gmail.com>
+
+ Reviewed by Simon Fraser.
+
+ Update of fixed elements is not made correctly when the page has been scrolled
+ https://bugs.webkit.org/show_bug.cgi?id=36783
+
+ When a fixed element was updated, the old geometry was not repainted correctly
+ because the repaint rect was cached during the layout and not updated when
+ scrolling.
+
+ The rect is now updated while scrolling so the region updated correspond to the
+ region of the element on the screen.
+
+ The method RenderLayer::updateRepaintRectsAfterScroll() updates
+ the repaint rect of all fixed tree after scroll.
+
+ Tests: fast/repaint/fixed-child-move-after-scroll.html
+ fast/repaint/fixed-child-of-fixed-move-after-scroll.html
+ fast/repaint/fixed-child-of-transformed-move-after-scroll.html
+ fast/repaint/fixed-move-after-scroll.html
+
+ * page/FrameView.cpp:
+ (WebCore::FrameView::scrollPositionChanged):
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::updateRepaintRectsAfterScroll):
+ * rendering/RenderLayer.h:
+
+2010-04-21 David Leong <david.leong@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Symbian apps crash on exit due to a bad qObject_cast.
+
+ https://bugs.webkit.org/show_bug.cgi?id=37303
+
+ Added check for NULL to avoid the crash. Reworked to fix memory leak
+
+ * plugins/symbian/PluginViewSymbian.cpp:
+ (WebCore::PluginView::platformDestroy):
+
+2010-04-14 Antonio Gomes <tonikitoo@webkit.org>
+
+ Reviewed by Simon Fraser.
+
+ Spatial Navigation: make hasOffscreenRect() to earlier return 'true' if absoluteClippedOverflowRect() gives an empty rect
+ https://bugs.webkit.org/show_bug.cgi?id=37635
+
+ absoluteClippedOverflowRect method of RenderObject does return an empty IntRect for offscreen nodes.
+ So hasOffscreenRect method (SpatialNavigation.cpp) can safily bail out earlier in such cases.
+
+ * page/SpatialNavigation.cpp:
+ (WebCore::hasOffscreenRect):
+
+2010-04-12 Antonio Gomes <tonikitoo@webkit.org>
+
+ Reviewed by Simon Fraser.
+
+ Spatial Navigation: make renderRectRelativeToRootDocument method to fallback to getRect() of Element when needed
+ https://bugs.webkit.org/show_bug.cgi?id=37461
+
+ getRect() of Element can be used instead of absoluteClippedOverflowRect of RenderObject when
+ the node is currently offscreen in an scroll overflowed content.
+
+ Test: fast/events/spatial-navigation/snav-simple-content-overflow.html
+
+ * page/SpatialNavigation.cpp:
+ (WebCore::renderRectRelativeToRootDocument):
+
+2010-03-29 Antonio Gomes <tonikitoo@webkit.org>
+
+ Reviewed by Simon Fraser.
+
+ Spatial Navigation: proper handle negative x or y coordinates
+ https://bugs.webkit.org/show_bug.cgi?id=36773
+
+ In Spatial Navigation logic, during rect acquisition in renderRectRelativeToRootDocument,
+ sometimes negative x() or y() values are got, and the current algorithm bails out in
+ any of such cases.
+
+ However, when a node is in a scrollable content (content overflow <div>) and
+ this scrollable container scrolled up, element gets offscreen, and gets negative values
+ for y(), for example. In such cases, they are still valid to be used in Spatial Navigation
+ logic.
+
+ Test: fast/events/spatial-navigation/snav-offscreen-content.html
+
+ * page/SpatialNavigation.cpp:
+ (WebCore::distanceDataForNode):
+ (WebCore::checkNegativeCoordsForNode):
+
+2010-04-05 Antonio Gomes <tonikitoo@webkit.org>
+
+ Reviewed by Kenneth Christiansen.
+
+ Spatial Navigation: bail out as soon as algorithm finds a focus candidate is not applicable
+ https://bugs.webkit.org/show_bug.cgi?id=37135
+
+ It happens, for example, when distanceDataForNode assigns numeric_limits<long long> to
+ current focus candidate's. It means that current candidate is not in direction, or not
+ a valid target node.
+
+ * page/FocusController.cpp:
+ (WebCore::FocusController::findFocusableNodeInDirection):
+
+2010-03-29 Antonio Gomes <tonikitoo@webkit.org>
+
+ Reviewed by Simon Fraser.
+ Patch by Antonio Gomes <tonikitoo@webkit.org>
+
+ Spatial Navigation: Initial code simplification in FocusController.cpp and SpatialNavigation.cpp
+
+ WebCore::distanceInDirection method was handling much of the logic not
+ strictly only related to the distance between nodes acquisition. This
+ method was simplified and renamed to 'WebCore::distanceDataForNode'.
+ The latter is now responsible for only getting the distance and alignment
+ data, while all assignement logic previously in distanceInDirection method
+ was moved place to updateFocusCandidateIfCloser.
+
+ Parent document distance and alignment acquisitions, in turn, have also
+ changed location: they are both got from deepFindFocusableNodeInDirection,
+ and passed in a recursive call to findFocusableNodeInDirection via the
+ candidateParent variable (optional parameter). In addition, the need for
+ the 'focusCandidateCopy' variable in deepFindFocusableNodeInDirection method
+ was removed, making the code much cleaner.
+
+ No behaviour change at this point. Mostly moving code around to the place
+ where it should live in.
+
+ * page/FocusController.cpp:
+ (WebCore::FocusController::advanceFocusDirectionally):
+ (WebCore::updateFocusCandidateIfCloser):
+ (WebCore::FocusController::findFocusableNodeInDirection):
+ (WebCore::FocusController::deepFindFocusableNodeInDirection):
+ * page/FocusController.h:
+ * page/SpatialNavigation.cpp:
+ (WebCore::distanceDataForNode):
+ (WebCore::renderRectRelativeToRootDocument):
+ * page/SpatialNavigation.h:
+
+2010-04-20 No'am Rosenthal <noam.rosenthal@nokia.com>
+
+ Reviewed by Antti Koivisto.
+
+ [Qt] GraphicsLayer: support fill-modes
+ https://bugs.webkit.org/show_bug.cgi?id=36216
+ Implement the CSS-animation "fill mode" concept in GraphicsLayerQt. The concept
+ enables a key-frame animation to go to the animation's starting point before the delay,
+ and/or to stay at the animation's ending point after its ended, without reverting to the default
+ value.
+ We do that by manually setting the value to keyframe-0 before the delay if fill-mode is backwards/both,
+ and manually modifying the default value to the animated value as we animate, with fill-mode forwards/both.
+
+ * platform/graphics/qt/GraphicsLayerQt.cpp:
+ (WebCore::AnimationQtBase::AnimationQtBase):
+ (WebCore::TransformAnimationQt::~TransformAnimationQt):
+ (WebCore::TransformAnimationQt::applyFrame):
+ (WebCore::GraphicsLayerQt::addAnimation):
+
+2010-04-13 Eskil Blomfeldt <eblomfel@trolltech.com>, Jesus Sanchez-Palencia <jesus.palencia@openbossa.org>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Use integer pixel metric QFont API to fix rounding errors in text rendering on the Mac
+ https://bugs.webkit.org/show_bug.cgi?id=36532
+
+ * platform/graphics/qt/FontQt.cpp:
+ (WebCore::Font::floatWidthForComplexText):
+ (WebCore::Font::font):
+
+2010-04-16 Daniel Bates <dbates@rim.com>
+
+ Reviewed by Adam Treat.
+
+ https://bugs.webkit.org/show_bug.cgi?id=36312
+
+ Adds support for the viewport meta tag. The code is largely derived in whole
+ or in part from the WebCore-528.15 source published as part of the iPhone 3.1.3
+ source code <http://www.opensource.apple.com/source/WebCore/WebCore-528.15/>.
+
+ * Android.mk: Added file ViewportArguments.cpp.
+ * GNUmakefile.am: Added files ViewportArguments.cpp and ViewportArguments.h.
+ * WebCore.gypi: Ditto.
+ * WebCore.pro: Ditto.
+ * WebCore.vcproj/WebCore.vcproj: Ditto.
+ * WebCore.xcodeproj/project.pbxproj: Ditto.
+ * dom/Document.cpp:
+ (WebCore::isSeparator): Added.
+ (WebCore::Document::processArguments): Added.
+ (WebCore::Document::processViewport): Added.
+ * dom/Document.h:
+ * dom/ViewportArguments.cpp: Added.
+ (WebCore::setViewportFeature):
+ (WebCore::viewportErrorMessageTemplate):
+ (WebCore::viewportErrorMessageLevel):
+ (WebCore::reportViewportWarning):
+ * dom/ViewportArguments.h: Added.
+ (WebCore::):
+ (WebCore::ViewportArguments::):
+ (WebCore::ViewportArguments::ViewportArguments):
+ (WebCore::ViewportArguments::hasCustomArgument):
+ * html/HTMLMetaElement.cpp:
+ (WebCore::HTMLMetaElement::process): Modified to call Document::processViewport.
+ * page/ChromeClient.h:
+ (WebCore::ChromeClient::didReceiveViewportArguments): Added.
+
+2010-04-15 Luiz Agostini <luiz.agostini@openbossa.org>
+
+ Reviewed by Antti Koivisto.
+
+ No default selection for <select multiple> menu lists.
+ https://bugs.webkit.org/show_bug.cgi?id=37530
+
+ Manual test: manual-tests/no-listbox-rendering.html
+
+ For menu lists, if the selection is not indicated by the html file, the first <option> will be
+ selected after loading the page or reseting the form. On the other hand listboxes may have no
+ element selected after loading the page or reseting the form.
+
+ When NO_LISTBOX_RENDERING is enabled listboxes becomes menu lists. Those <select multiple>
+ that did not have selected elements, now being menu lists, will have the first <option>
+ selected. That is the behavior difference that this patch corrects.
+
+ When NO_LISTBOX_RENDERING is enabled usesMenuList() always returns true then usesMenuList() cannot
+ be used to decide about initial selection of the elements. This patch replaces (usesMenuLists())
+ by (!multiple && size <= 1) where initial selection is considered.
+
+ * dom/SelectElement.cpp:
+ (WebCore::SelectElement::recalcListItems):
+ (WebCore::SelectElement::reset):
+ * manual-tests/no-listbox-rendering.html: Added.
+
+2010-04-19 Balazs Kelemen <kb@inf.u-szeged.hu>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Destroy SharedTimerQt before destruction of QCoreApplication.
+
+ To avoid unsafe situations caused by running WebCore code (through firing timers) when destruction of QCoreApplication
+ has been started, we should explicitly destroy the SharedTimerQt instance on application exit.
+ We can achieve that through installing a self-destroying slot for the QCoreApplication::aboutToQuit() signal
+ into the SharedTimerQt instance.
+
+ https://bugs.webkit.org/show_bug.cgi?id=36832
+
+ No functional change so no new tests.
+
+ * platform/qt/SharedTimerQt.cpp:
+ (WebCore::SharedTimerQt::SharedTimerQt):
+ (WebCore::SharedTimerQt::destroy):
+ (WebCore::SharedTimerQt::inst):
+
+2010-04-16 Noam Rosenthal <noam.rosenthal@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Make GraphicsLayerQt always use ItemCoordinateCache, and remove ItemUsesExtendedStyleOption.
+ This aligns our implementation with the Safari implementation - layers are always uploaded
+ to textures in item units, and WebCore is responsible for the heuristics.
+
+ [Qt] GraphicsLayer: performance optimizations
+ https://bugs.webkit.org/show_bug.cgi?id=35393
+
+ No new tests. Still no FPS benchmarks available (on any platform)
+ but animations are noticably better.
+
+ * platform/graphics/qt/GraphicsLayerQt.cpp:
+ (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl):
+ (WebCore::GraphicsLayerQtImpl::paint):
+ (WebCore::GraphicsLayerQtImpl::flushChanges):
+ (WebCore::TransformAnimationQt::updateState):
+
+2010-04-16 Antonio Gomes <tonikitoo@webkit.org>
+
+ Unreviewed QtWebKit (with Qt 4.7) build fix.
+
+ Bug 37683 moved code from FontQt.cpp to FontPlatformDataQt.cpp but did not
+ renamed the variable used.
+
+ * platform/graphics/qt/FontPlatformDataQt.cpp:
+ (WebCore::FontPlatformData::FontPlatformData):
+
+2010-04-16 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] WebCore::Font::font() causes a QFont detach
+ https://bugs.webkit.org/show_bug.cgi?id=37683
+
+ Moved the setStyleStrategy call to FontPlatformData
+ to avoid the detach.
+
+ Thanks to Holger for spotting this.
+
+ * platform/graphics/qt/FontPlatformDataQt.cpp:
+ (WebCore::FontPlatformData::FontPlatformData):
+ * platform/graphics/qt/FontQt.cpp:
+ (WebCore::Font::font):
+
+2010-04-16 No'am Rosenthal <noam.rosenthal@nokia.com>
+
+ Reviewed by Antti Koivisto.
+
+ [Qt]QtLauncher crash on page with CSS 3D transform
+ https://bugs.webkit.org/show_bug.cgi?id=36859
+
+ Added a neccessary null-pointer check, lack of which created the crash circumstances.
+
+ Tested by http://css-vfx.googlecode.com/svn/trunk/snowstack/snowstack.html
+
+ * platform/graphics/qt/GraphicsLayerQt.cpp:
+ (WebCore::GraphicsLayerQtImpl::flushChanges):
+
+2010-04-18 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Laszlo Gombos.
+
+ [Qt] Fix JavaScriptCore's include path for WinCE builds
+
+ https://bugs.webkit.org/show_bug.cgi?id=36751
+
+ * WebCore.pro:
+
+2010-04-19 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix compilation against namespaced Qt.
+
+ * platform/graphics/GraphicsLayer.h:
+ * platform/graphics/Tile.h:
+ * platform/graphics/qt/MediaPlayerPrivateQt.h:
+ * platform/network/qt/NetworkStateNotifierPrivate.h:
+
+2010-04-14 Luiz Agostini <luiz.agostini@openbossa.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Changing view mode names due to specification changes
+ https://bugs.webkit.org/show_bug.cgi?id=37615
+
+ test: fast/media/media-feature-wgt-view-mode.html
+
+ specification: http://dev.w3.org/2006/waf/widgets-vmmf/
+
+ * css/MediaQueryEvaluator.cpp:
+ (WebCore::view_modeMediaFeatureEval):
+ * page/ChromeClient.h:
+ (WebCore::ChromeClient::isWindowed):
+ (WebCore::ChromeClient::isMaximized):
+ (WebCore::ChromeClient::isMinimized):
+
+2010-04-15 Bruno Schmidt <bruno.schmidt@gmail.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Null QObjects properties cause Segmentation Fault
+ https://bugs.webkit.org/show_bug.cgi?id=34730
+
+ QObjects exported to the QWebkit javascript with properties that are
+ a null "QObject*" cause Segmentation Fault.
+
+ If an QObject is added to the javascript context and it contains
+ properties of the type QObject* with NULL value, calling the property
+ causes Segmentation Fault.
+ So now the code below properly checks for null pointers:
+
+ * bridge/qt/qt_instance.cpp:
+ (JSC::Bindings::QtInstance::getClass): may return NULL
+ (JSC::Bindings::QtInstance::getMethod): may return jsNull()
+ (JSC::Bindings::QtInstance::stringValue): may return jsNull()
+ (JSC::Bindings::QtInstance::booleanValue): may return false
+ * bridge/qt/qt_runtime.cpp:
+ (JSC::Bindings::convertValueToQVariant):
+ (JSC::Bindings::convertQVariantToValue): May return jsNull on QObjectStar
+
2010-04-09 Kenneth Rohde Christiansen <kenneth@webkit.org>
Reviewed by Simon Fraser.
diff --git a/src/3rdparty/webkit/WebCore/WebCore.gypi b/src/3rdparty/webkit/WebCore/WebCore.gypi
index 9746b46..caa79f2 100644
--- a/src/3rdparty/webkit/WebCore/WebCore.gypi
+++ b/src/3rdparty/webkit/WebCore/WebCore.gypi
@@ -1226,6 +1226,8 @@
'dom/UIEvent.h',
'dom/UIEventWithKeyState.cpp',
'dom/UIEventWithKeyState.h',
+ 'dom/ViewportArguments.cpp',
+ 'dom/ViewportArguments.h',
'dom/WebKitAnimationEvent.cpp',
'dom/WebKitAnimationEvent.h',
'dom/WebKitTransitionEvent.cpp',
diff --git a/src/3rdparty/webkit/WebCore/WebCore.pri b/src/3rdparty/webkit/WebCore/WebCore.pri
index 039f26c..ad514a2 100644
--- a/src/3rdparty/webkit/WebCore/WebCore.pri
+++ b/src/3rdparty/webkit/WebCore/WebCore.pri
@@ -96,10 +96,9 @@ greaterThan(QT_MINOR_VERSION, 5) {
# Web Socket support.
!contains(DEFINES, ENABLE_WEB_SOCKETS=.): DEFINES += ENABLE_WEB_SOCKETS=1
-# XSLT support with QtXmlPatterns
+# Disable XSLT support with QtXmlPatterns in the 2.0 release
!contains(DEFINES, ENABLE_XSLT=.) {
- contains(QT_CONFIG, xmlpatterns):DEFINES += ENABLE_XSLT=1
- else:DEFINES += ENABLE_XSLT=0
+ DEFINES += ENABLE_XSLT=0
}
!CONFIG(QTDIR_build):!contains(DEFINES, ENABLE_QT_BEARER=.) {
diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro
index 276ca04..beeb529 100644
--- a/src/3rdparty/webkit/WebCore/WebCore.pro
+++ b/src/3rdparty/webkit/WebCore/WebCore.pro
@@ -35,13 +35,13 @@ symbian: {
# Move RW-section base address to start from 0xE00000 instead of the toolchain default 0x400000.
QMAKE_LFLAGS.ARMCC += --rw-base 0xE00000
MMP_RULES += ALWAYS_BUILD_AS_ARM
- } else {
+ } else {
QMAKE_CFLAGS -= --thumb
QMAKE_CXXFLAGS -= --thumb
}
+ CONFIG(release, debug|release): QMAKE_CXXFLAGS.ARMCC += -OTime -O3
}
-
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ..
include($$PWD/../WebKit.pri)
@@ -55,8 +55,6 @@ CONFIG(standalone_package) {
isEmpty(JSC_GENERATED_SOURCES_DIR):JSC_GENERATED_SOURCES_DIR = $$PWD/../JavaScriptCore/generated
PRECOMPILED_HEADER = $$PWD/../WebKit/qt/WebKit_pch.h
-
- symbian: TARGET += $${QT_LIBINFIX}
} else {
isEmpty(WC_GENERATED_SOURCES_DIR):WC_GENERATED_SOURCES_DIR = generated
isEmpty(JSC_GENERATED_SOURCES_DIR):JSC_GENERATED_SOURCES_DIR = ../JavaScriptCore/generated
@@ -71,12 +69,13 @@ CONFIG(standalone_package) {
CONFIG(QTDIR_build) {
include($$QT_SOURCE_TREE/src/qbase.pri)
- # Qt will set the version for us when building in Qt's tree
} else {
- VERSION = $${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}
DESTDIR = $$OUTPUT_DIR/lib
!static: DEFINES += QT_MAKEDLL
+ symbian: TARGET =$$TARGET$${QT_LIBINFIX}
}
+include($$PWD/../WebKit/qt/qtwebkit_version.pri)
+VERSION = $${QT_WEBKIT_MAJOR_VERSION}.$${QT_WEBKIT_MINOR_VERSION}.$${QT_WEBKIT_PATCH_VERSION}
unix {
QMAKE_PKGCONFIG_REQUIRES = QtCore QtGui QtNetwork
@@ -127,6 +126,10 @@ maemo5|symbian|embedded {
}
maemo5 {
+ DEFINES += WTF_USE_QT_MOBILE_THEME=1
+}
+
+contains(DEFINES, WTF_USE_QT_MOBILE_THEME=1) {
DEFINES += ENABLE_NO_LISTBOX_RENDERING=1
}
@@ -135,17 +138,12 @@ addJavaScriptCoreLib(../JavaScriptCore)
# HTML5 Media Support
-# We require phonon for versions of Qt < 4.7
-# We require QtMultimedia for versions of Qt >= 4.7
+# We require phonon. QtMultimedia support is disabled currently.
!contains(DEFINES, ENABLE_VIDEO=.) {
DEFINES -= ENABLE_VIDEO=1
DEFINES += ENABLE_VIDEO=0
- lessThan(QT_MINOR_VERSION, 7):contains(QT_CONFIG, phonon) {
- DEFINES -= ENABLE_VIDEO=0
- DEFINES += ENABLE_VIDEO=1
- }
- !lessThan(QT_MINOR_VERSION, 7):contains(QT_CONFIG, mediaservices) {
+ contains(QT_CONFIG, phonon) {
DEFINES -= ENABLE_VIDEO=0
DEFINES += ENABLE_VIDEO=1
}
@@ -531,6 +529,7 @@ SOURCES += \
dom/TreeWalker.cpp \
dom/UIEvent.cpp \
dom/UIEventWithKeyState.cpp \
+ dom/ViewportArguments.cpp \
dom/WebKitAnimationEvent.cpp \
dom/WebKitTransitionEvent.cpp \
dom/WheelEvent.cpp \
@@ -1242,6 +1241,7 @@ HEADERS += \
dom/TreeWalker.h \
dom/UIEvent.h \
dom/UIEventWithKeyState.h \
+ dom/ViewportArguments.h \
dom/WebKitAnimationEvent.h \
dom/WebKitTransitionEvent.h \
dom/WheelEvent.h \
@@ -2111,13 +2111,15 @@ SOURCES += \
../WebKit/qt/Api/qwebinspector.cpp \
../WebKit/qt/Api/qwebkitversion.cpp
+
+contains(DEFINES, WTF_USE_QT_MOBILE_THEME=1) {
+ HEADERS += platform/qt/Maemo5Webstyle.h
+ SOURCES += platform/qt/Maemo5Webstyle.cpp
+}
+
maemo5 {
- HEADERS += \
- ../WebKit/qt/WebCoreSupport/QtMaemoWebPopup.h \
- platform/qt/Maemo5Webstyle.h
- SOURCES += \
- ../WebKit/qt/WebCoreSupport/QtMaemoWebPopup.cpp \
- platform/qt/Maemo5Webstyle.cpp
+ HEADERS += ../WebKit/qt/WebCoreSupport/QtMaemoWebPopup.h
+ SOURCES += ../WebKit/qt/WebCoreSupport/QtMaemoWebPopup.cpp
}
@@ -2368,8 +2370,8 @@ contains(DEFINES, ENABLE_VIDEO=1) {
rendering/RenderMedia.cpp \
bindings/js/JSAudioConstructor.cpp
- # QtMultimedia since 4.7
- greaterThan(QT_MINOR_VERSION, 6) {
+ # QtMultimedia disabled currently
+ false:greaterThan(QT_MINOR_VERSION, 6) {
HEADERS += platform/graphics/qt/MediaPlayerPrivateQt.h
SOURCES += platform/graphics/qt/MediaPlayerPrivateQt.cpp
@@ -2950,5 +2952,5 @@ symbian {
}
}
-# WebKit doesn't compile in C++0x mode
+# Disable C++0x mode in WebCore for those who enabled it in their Qt's mkspec
*-g++*:QMAKE_CXXFLAGS -= -std=c++0x -std=gnu++0x
diff --git a/src/3rdparty/webkit/WebCore/bridge/npapi.h b/src/3rdparty/webkit/WebCore/bridge/npapi.h
index 4a8492e..533fcba 100644
--- a/src/3rdparty/webkit/WebCore/bridge/npapi.h
+++ b/src/3rdparty/webkit/WebCore/bridge/npapi.h
@@ -590,8 +590,8 @@ typedef QEvent NPEvent;
typedef struct _NPEvent
{
uint16 event;
- uint32 wParam;
- uint32 lParam;
+ uintptr_t wParam;
+ uintptr_t lParam;
} NPEvent;
#elif defined (XP_UNIX)
typedef XEvent NPEvent;
diff --git a/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp b/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp
index dc6df14..f6f368b 100644
--- a/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp
+++ b/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp
@@ -171,8 +171,11 @@ QtInstance* QtInstance::getInstance(JSObject* object)
Class* QtInstance::getClass() const
{
- if (!m_class)
+ if (!m_class) {
+ if (!m_object)
+ return 0;
m_class = QtClass::classForObject(m_object);
+ }
return m_class;
}
@@ -238,7 +241,9 @@ void QtInstance::getPropertyNames(ExecState* exec, PropertyNameArray& array)
JSValue QtInstance::getMethod(ExecState* exec, const Identifier& propertyName)
{
- MethodList methodList = getClass()->methodsNamed(propertyName, this);
+ if (!getClass())
+ return jsNull();
+ MethodList methodList = m_class->methodsNamed(propertyName, this);
return new (exec) RuntimeMethod(exec, propertyName, methodList);
}
@@ -259,12 +264,15 @@ JSValue QtInstance::defaultValue(ExecState* exec, PreferredPrimitiveType hint) c
JSValue QtInstance::stringValue(ExecState* exec) const
{
+ QObject* obj = getObject();
+ if (!obj)
+ return jsNull();
+
// Hmm.. see if there is a toString defined
QByteArray buf;
bool useDefault = true;
getClass();
- QObject* obj = getObject();
- if (m_class && obj) {
+ if (m_class) {
// Cheat and don't use the full name resolution
int index = obj->metaObject()->indexOfMethod("toString()");
if (index >= 0) {
@@ -309,7 +317,7 @@ JSValue QtInstance::numberValue(ExecState* exec) const
JSValue QtInstance::booleanValue() const
{
// ECMA 9.2
- return jsBoolean(true);
+ return jsBoolean(getObject());
}
JSValue QtInstance::valueOf(ExecState* exec) const
diff --git a/src/3rdparty/webkit/WebCore/bridge/qt/qt_runtime.cpp b/src/3rdparty/webkit/WebCore/bridge/qt/qt_runtime.cpp
index 3bd5190..1775815 100644
--- a/src/3rdparty/webkit/WebCore/bridge/qt/qt_runtime.cpp
+++ b/src/3rdparty/webkit/WebCore/bridge/qt/qt_runtime.cpp
@@ -332,7 +332,7 @@ QVariant convertValueToQVariant(ExecState* exec, JSValue value, QMetaType::Type
break;
}
- case QMetaType::QVariantMap:
+ case QMetaType::QVariantMap:
if (type == Object || type == Array || type == RTArray) {
// Enumerate the contents of the object
PropertyNameArray properties(exec);
@@ -871,6 +871,8 @@ JSValue convertQVariantToValue(ExecState* exec, PassRefPtr<RootObject> root, con
if (type == QMetaType::QObjectStar || type == QMetaType::QWidgetStar) {
QObject* obj = variant.value<QObject*>();
+ if (!obj)
+ return jsNull();
return QtInstance::getQtInstance(obj, root, QScriptEngine::QtOwnership)->createRuntimeObject(exec);
}
@@ -895,7 +897,7 @@ JSValue convertQVariantToValue(ExecState* exec, PassRefPtr<RootObject> root, con
QVariantMap::const_iterator i = map.constBegin();
while (i != map.constEnd()) {
QString s = i.key();
- JSValue val = convertQVariantToValue(exec, root, i.value());
+ JSValue val = convertQVariantToValue(exec, root.get(), i.value());
if (val) {
PutPropertySlot slot;
ret->put(exec, Identifier(exec, (const UChar *)s.constData(), s.length()), val, slot);
diff --git a/src/3rdparty/webkit/WebCore/css/CSSValueKeywords.in b/src/3rdparty/webkit/WebCore/css/CSSValueKeywords.in
index 09d969a..1028dcf 100644
--- a/src/3rdparty/webkit/WebCore/css/CSSValueKeywords.in
+++ b/src/3rdparty/webkit/WebCore/css/CSSValueKeywords.in
@@ -711,7 +711,8 @@ geometricPrecision
sRGB
# (-webkit-view-mode:) media feature:
-mini
floating
-application
fullscreen
+maximized
+minimized
+windowed
diff --git a/src/3rdparty/webkit/WebCore/css/MediaQueryEvaluator.cpp b/src/3rdparty/webkit/WebCore/css/MediaQueryEvaluator.cpp
index 4fda075..20c7bb9 100644
--- a/src/3rdparty/webkit/WebCore/css/MediaQueryEvaluator.cpp
+++ b/src/3rdparty/webkit/WebCore/css/MediaQueryEvaluator.cpp
@@ -501,14 +501,16 @@ static bool view_modeMediaFeatureEval(CSSValue* value, RenderStyle*, Frame* fram
if (value) {
String mode = static_cast<CSSPrimitiveValue*>(value)->getStringValue();
if (ChromeClient* client = frame->page()->chrome()->client()) {
- if (mode == "mini" && client->isDocked())
+ if (mode == "windowed" && client->isWindowed())
return true;
if (mode == "floating" && client->isFloating())
return true;
- if (mode == "application" && client->isApplication())
- return true;
if (mode == "fullscreen" && client->isFullscreen())
return true;
+ if (mode == "maximized" && client->isMaximized())
+ return true;
+ if (mode == "minimized" && client->isMinimized())
+ return true;
return false;
}
}
@@ -531,6 +533,9 @@ bool MediaQueryEvaluator::eval(const MediaQueryExp* expr) const
if (!m_frame || !m_style)
return m_expResult;
+ if (!expr->isValid())
+ return false;
+
if (!gFunctionMap)
createFunctionMap();
diff --git a/src/3rdparty/webkit/WebCore/css/MediaQueryExp.cpp b/src/3rdparty/webkit/WebCore/css/MediaQueryExp.cpp
index 7ba6d84..53c0b73 100644
--- a/src/3rdparty/webkit/WebCore/css/MediaQueryExp.cpp
+++ b/src/3rdparty/webkit/WebCore/css/MediaQueryExp.cpp
@@ -37,6 +37,7 @@ namespace WebCore {
MediaQueryExp::MediaQueryExp(const AtomicString& mediaFeature, CSSParserValueList* valueList)
: m_mediaFeature(mediaFeature)
, m_value(0)
+ , m_isValid(true)
{
if (valueList) {
if (valueList->size() == 1) {
@@ -73,6 +74,7 @@ MediaQueryExp::MediaQueryExp(const AtomicString& mediaFeature, CSSParserValueLis
if (isValid)
m_value = list.release();
}
+ m_isValid = m_value;
}
}
diff --git a/src/3rdparty/webkit/WebCore/css/MediaQueryExp.h b/src/3rdparty/webkit/WebCore/css/MediaQueryExp.h
index fd55cf6..9272402 100644
--- a/src/3rdparty/webkit/WebCore/css/MediaQueryExp.h
+++ b/src/3rdparty/webkit/WebCore/css/MediaQueryExp.h
@@ -52,6 +52,8 @@ public:
|| (other.m_value && m_value && other.m_value->cssText() == m_value->cssText()));
}
+ bool isValid() const { return m_isValid; }
+
bool isViewportDependent() const { return m_mediaFeature == MediaFeatureNames::widthMediaFeature ||
m_mediaFeature == MediaFeatureNames::heightMediaFeature ||
m_mediaFeature == MediaFeatureNames::min_widthMediaFeature ||
@@ -65,6 +67,7 @@ public:
private:
AtomicString m_mediaFeature;
RefPtr<CSSValue> m_value;
+ bool m_isValid;
};
} // namespace
diff --git a/src/3rdparty/webkit/WebCore/dom/Document.cpp b/src/3rdparty/webkit/WebCore/dom/Document.cpp
index aedba0d..545819d 100644
--- a/src/3rdparty/webkit/WebCore/dom/Document.cpp
+++ b/src/3rdparty/webkit/WebCore/dom/Document.cpp
@@ -127,6 +127,7 @@
#include "TreeWalker.h"
#include "UIEvent.h"
#include "UserContentURLPattern.h"
+#include "ViewportArguments.h"
#include "WebKitAnimationEvent.h"
#include "WebKitTransitionEvent.h"
#include "WheelEvent.h"
@@ -2282,6 +2283,78 @@ void Document::processHttpEquiv(const String& equiv, const String& content)
}
}
+// Though isspace() considers \t and \v to be whitespace, Win IE doesn't.
+static bool isSeparator(UChar c)
+{
+ return c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '=' || c == ',' || c == '\0';
+}
+
+void Document::processArguments(const String& features, void* data, ArgumentsCallback callback)
+{
+ // Tread lightly in this code -- it was specifically designed to mimic Win IE's parsing behavior.
+ int keyBegin, keyEnd;
+ int valueBegin, valueEnd;
+
+ int i = 0;
+ int length = features.length();
+ String buffer = features.lower();
+ while (i < length) {
+ // skip to first non-separator, but don't skip past the end of the string
+ while (isSeparator(buffer[i])) {
+ if (i >= length)
+ break;
+ i++;
+ }
+ keyBegin = i;
+
+ // skip to first separator
+ while (!isSeparator(buffer[i]))
+ i++;
+ keyEnd = i;
+
+ // skip to first '=', but don't skip past a ',' or the end of the string
+ while (buffer[i] != '=') {
+ if (buffer[i] == ',' || i >= length)
+ break;
+ i++;
+ }
+
+ // skip to first non-separator, but don't skip past a ',' or the end of the string
+ while (isSeparator(buffer[i])) {
+ if (buffer[i] == ',' || i >= length)
+ break;
+ i++;
+ }
+ valueBegin = i;
+
+ // skip to first separator
+ while (!isSeparator(buffer[i]))
+ i++;
+ valueEnd = i;
+
+ ASSERT(i <= length);
+
+ String keyString = buffer.substring(keyBegin, keyEnd - keyBegin);
+ String valueString = buffer.substring(valueBegin, valueEnd - valueBegin);
+ callback(keyString, valueString, this, data);
+ }
+}
+
+void Document::processViewport(const String& features)
+{
+ ASSERT(!features.isNull());
+
+ Frame* frame = this->frame();
+ if (!frame)
+ return;
+
+ ViewportArguments arguments;
+ processArguments(features, (void*)&arguments, &setViewportFeature);
+
+ if (frame->page())
+ frame->page()->chrome()->client()->didReceiveViewportArguments(frame, arguments);
+}
+
MouseEventWithHitTestResults Document::prepareMouseEvent(const HitTestRequest& request, const IntPoint& documentPoint, const PlatformMouseEvent& event)
{
ASSERT(!renderer() || renderer()->isRenderView());
diff --git a/src/3rdparty/webkit/WebCore/dom/Document.h b/src/3rdparty/webkit/WebCore/dom/Document.h
index cc3e559..44cdf0d 100644
--- a/src/3rdparty/webkit/WebCore/dom/Document.h
+++ b/src/3rdparty/webkit/WebCore/dom/Document.h
@@ -698,7 +698,8 @@ public:
* @param content The header value (value of the meta tag's "content" attribute)
*/
void processHttpEquiv(const String& equiv, const String& content);
-
+ void processViewport(const String& features);
+
// Returns the owning element in the parent document.
// Returns 0 if this is the top level document.
Element* ownerElement() const;
@@ -972,6 +973,10 @@ protected:
void clearXMLVersion() { m_xmlVersion = String(); }
private:
+
+ typedef void (*ArgumentsCallback)(const String& keyString, const String& valueString, Document*, void* data);
+ void processArguments(const String& features, void* data, ArgumentsCallback);
+
virtual bool isDocument() const { return true; }
virtual void removedLastRef();
virtual void determineParseMode() { }
diff --git a/src/3rdparty/webkit/WebCore/dom/Element.cpp b/src/3rdparty/webkit/WebCore/dom/Element.cpp
index 8711110..6bd512d 100644
--- a/src/3rdparty/webkit/WebCore/dom/Element.cpp
+++ b/src/3rdparty/webkit/WebCore/dom/Element.cpp
@@ -561,7 +561,11 @@ void Element::setAttribute(const AtomicString& name, const AtomicString& value,
return;
}
+#if COMPILER(RVCT)
+ const AtomicString localName = shouldIgnoreAttributeCase(this) ? name.lower() : name;
+#else
const AtomicString& localName = shouldIgnoreAttributeCase(this) ? name.lower() : name;
+#endif
// allocate attributemap if necessary
Attribute* old = attributes(false)->getAttributeItem(localName, false);
diff --git a/src/3rdparty/webkit/WebCore/dom/SelectElement.cpp b/src/3rdparty/webkit/WebCore/dom/SelectElement.cpp
index e900245..4af90c9 100644
--- a/src/3rdparty/webkit/WebCore/dom/SelectElement.cpp
+++ b/src/3rdparty/webkit/WebCore/dom/SelectElement.cpp
@@ -270,11 +270,11 @@ void SelectElement::recalcListItems(SelectElementData& data, const Element* elem
if (OptionElement* optionElement = toOptionElement(current)) {
listItems.append(current);
- if (updateSelectedStates) {
- if (!foundSelected && (data.usesMenuList() || (!data.multiple() && optionElement->selected()))) {
+ if (updateSelectedStates && !data.multiple()) {
+ if (!foundSelected && (data.size() <= 1 || optionElement->selected())) {
foundSelected = optionElement;
foundSelected->setSelectedState(true);
- } else if (foundSelected && !data.multiple() && optionElement->selected()) {
+ } else if (foundSelected && optionElement->selected()) {
foundSelected->setSelectedState(false);
foundSelected = optionElement;
}
@@ -499,7 +499,7 @@ void SelectElement::reset(SelectElementData& data, Element* element)
firstOption = optionElement;
}
- if (!selectedOption && firstOption && data.usesMenuList())
+ if (!selectedOption && firstOption && !data.multiple() && data.size() <= 1)
firstOption->setSelectedState(true);
setOptionsChangedOnRenderer(data, element);
diff --git a/src/3rdparty/webkit/WebCore/dom/ViewportArguments.cpp b/src/3rdparty/webkit/WebCore/dom/ViewportArguments.cpp
new file mode 100644
index 0000000..d585896
--- /dev/null
+++ b/src/3rdparty/webkit/WebCore/dom/ViewportArguments.cpp
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
+ * (C) 1999 Antti Koivisto (koivisto@kde.org)
+ * (C) 2001 Dirk Mueller (mueller@kde.org)
+ * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
+ *
+ * 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.
+ *
+ */
+
+#include "config.h"
+#include "ViewportArguments.h"
+
+#include "Chrome.h"
+#include "Console.h"
+#include "DOMWindow.h"
+#include "Document.h"
+#include "Frame.h"
+#include "Page.h"
+#include "PlatformString.h"
+#include "Tokenizer.h"
+
+namespace WebCore {
+
+void setViewportFeature(const String& keyString, const String& valueString, Document* document, void* data)
+{
+ ViewportArguments* arguments = static_cast<ViewportArguments*>(data);
+ float value = ViewportArguments::ValueUndefined;
+ bool didUseConstants = false;
+
+ if (equalIgnoringCase(valueString, "yes"))
+ value = 1;
+ else if (equalIgnoringCase(valueString, "device-width")) {
+ didUseConstants = true;
+ if (document->page())
+ value = document->page()->chrome()->windowRect().width();
+ } else if (equalIgnoringCase(valueString, "device-height")) {
+ didUseConstants = true;
+ if (document->page())
+ value = document->page()->chrome()->windowRect().height();
+ } else if (equalIgnoringCase(valueString, "default")) // This allows us to distinguish the omission of a key from asking for the default value.
+ value = -2;
+ else if (valueString.length()) // listing a key with no value is shorthand for key=default
+ value = valueString.toFloat();
+
+ if (keyString == "initial-scale")
+ arguments->initialScale = value;
+ else if (keyString == "minimum-scale")
+ arguments->minimumScale = value;
+ else if (keyString == "maximum-scale") {
+ arguments->maximumScale = value;
+ if (value > 10.0)
+ reportViewportWarning(document, MaximumScaleTooLargeError, keyString);
+ } else if (keyString == "user-scalable")
+ arguments->userScalable = value;
+ else if (keyString == "width") {
+ if (document->page() && value == document->page()->chrome()->windowRect().width() && !didUseConstants)
+ reportViewportWarning(document, DeviceWidthShouldBeUsedWarning, keyString);
+ else if (document->page() && value == document->page()->chrome()->windowRect().height() && !didUseConstants)
+ reportViewportWarning(document, DeviceHeightShouldBeUsedWarning, keyString);
+
+ arguments->width = value;
+ } else if (keyString == "height") {
+ if (document->page() && value == document->page()->chrome()->windowRect().width() && !didUseConstants)
+ reportViewportWarning(document, DeviceWidthShouldBeUsedWarning, keyString);
+ else if (document->page() && value == document->page()->chrome()->windowRect().height() && !didUseConstants)
+ reportViewportWarning(document, DeviceHeightShouldBeUsedWarning, keyString);
+
+ arguments->height = value;
+ } else
+ reportViewportWarning(document, UnrecognizedViewportArgumentError, keyString);
+}
+
+static const char* viewportErrorMessageTemplate(ViewportErrorCode errorCode)
+{
+ static const char* const errors[] = {
+ "Viewport width or height set to physical device width, try using \"device-width\" constant instead for future compatibility.",
+ "Viewport height or height set to physical device height, try using \"device-height\" constant instead for future compatibility.",
+ "Viewport argument \"%replacement\" not recognized. Content ignored.",
+ "Viewport maximum-scale cannot be larger than 10.0. The maximum-scale will be set to 10.0."
+ };
+
+ return errors[errorCode];
+}
+
+static MessageLevel viewportErrorMessageLevel(ViewportErrorCode errorCode)
+{
+ return errorCode == UnrecognizedViewportArgumentError || errorCode == MaximumScaleTooLargeError ? ErrorMessageLevel : TipMessageLevel;
+}
+
+void reportViewportWarning(Document* document, ViewportErrorCode errorCode, const String& replacement)
+{
+ Tokenizer* tokenizer = document->tokenizer();
+
+ Frame* frame = document->frame();
+ if (!frame)
+ return;
+
+ String message = viewportErrorMessageTemplate(errorCode);
+ message.replace("%replacement", replacement);
+
+ frame->domWindow()->console()->addMessage(HTMLMessageSource, LogMessageType, viewportErrorMessageLevel(errorCode), message, tokenizer ? tokenizer->lineNumber() + 1 : 0, document->url().string());
+}
+
+} // namespace WebCore
diff --git a/src/3rdparty/webkit/WebCore/dom/ViewportArguments.h b/src/3rdparty/webkit/WebCore/dom/ViewportArguments.h
new file mode 100644
index 0000000..29eec8e
--- /dev/null
+++ b/src/3rdparty/webkit/WebCore/dom/ViewportArguments.h
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
+ * (C) 1999 Antti Koivisto (koivisto@kde.org)
+ * (C) 2001 Dirk Mueller (mueller@kde.org)
+ * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
+ *
+ * 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.
+ *
+ */
+
+#ifndef ViewportArguments_h
+#define ViewportArguments_h
+
+namespace WebCore {
+
+class Document;
+class String;
+
+enum ViewportErrorCode {
+ DeviceWidthShouldBeUsedWarning,
+ DeviceHeightShouldBeUsedWarning,
+ UnrecognizedViewportArgumentError,
+ MaximumScaleTooLargeError
+};
+
+struct ViewportArguments {
+
+ enum { ValueUndefined = -1 };
+
+ ViewportArguments()
+ : initialScale(ValueUndefined)
+ , minimumScale(ValueUndefined)
+ , maximumScale(ValueUndefined)
+ , width(ValueUndefined)
+ , height(ValueUndefined)
+ , userScalable(ValueUndefined)
+ {
+ }
+
+ float initialScale;
+ float minimumScale;
+ float maximumScale;
+ float width;
+ float height;
+
+ float userScalable;
+
+ bool hasCustomArgument() const
+ {
+ return initialScale != ValueUndefined || minimumScale != ValueUndefined || maximumScale != ValueUndefined || width != ValueUndefined || height != ValueUndefined || userScalable != ValueUndefined;
+ }
+};
+
+void setViewportFeature(const String& keyString, const String& valueString, Document*, void* data);
+void reportViewportWarning(Document*, ViewportErrorCode, const String& replacement);
+
+} // namespace WebCore
+
+#endif // ViewportArguments_h
diff --git a/src/3rdparty/webkit/WebCore/generated/CSSGrammar.cpp b/src/3rdparty/webkit/WebCore/generated/CSSGrammar.cpp
index de39328..9f3db9d 100644
--- a/src/3rdparty/webkit/WebCore/generated/CSSGrammar.cpp
+++ b/src/3rdparty/webkit/WebCore/generated/CSSGrammar.cpp
@@ -76,7 +76,7 @@
/* Copy the first part of user declarations. */
/* Line 189 of yacc.c */
-#line 1 "css\\CSSGrammar.y"
+#line 1 "css/CSSGrammar.y"
/*
@@ -137,7 +137,7 @@ using namespace HTMLNames;
/* Line 189 of yacc.c */
-#line 141 "C:/dev/webkit-2.0/WebCore/generated/CSSGrammar.tab.c"
+#line 141 "/WebCore/generated/CSSGrammar.tab.c"
/* Enabling traces. */
#ifndef YYDEBUG
@@ -238,7 +238,7 @@ typedef union YYSTYPE
{
/* Line 214 of yacc.c */
-#line 62 "css\\CSSGrammar.y"
+#line 62 "css/CSSGrammar.y"
bool boolean;
char character;
@@ -265,7 +265,7 @@ typedef union YYSTYPE
/* Line 214 of yacc.c */
-#line 269 "C:/dev/webkit-2.0/WebCore/generated/CSSGrammar.tab.c"
+#line 269 "/WebCore/generated/CSSGrammar.tab.c"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -276,7 +276,7 @@ typedef union YYSTYPE
/* Copy the second part of user declarations. */
/* Line 264 of yacc.c */
-#line 86 "css\\CSSGrammar.y"
+#line 86 "css/CSSGrammar.y"
static inline int cssyyerror(const char*)
@@ -292,7 +292,7 @@ static int cssyylex(YYSTYPE* yylval, void* parser)
/* Line 264 of yacc.c */
-#line 296 "C:/dev/webkit-2.0/WebCore/generated/CSSGrammar.tab.c"
+#line 296 "/WebCore/generated/CSSGrammar.tab.c"
#ifdef short
# undef short
@@ -2170,7 +2170,7 @@ yyreduce:
case 10:
/* Line 1455 of yacc.c */
-#line 280 "css\\CSSGrammar.y"
+#line 280 "css/CSSGrammar.y"
{
static_cast<CSSParser*>(parser)->m_rule = (yyvsp[(4) - (6)].rule);
;}
@@ -2179,7 +2179,7 @@ yyreduce:
case 11:
/* Line 1455 of yacc.c */
-#line 286 "css\\CSSGrammar.y"
+#line 286 "css/CSSGrammar.y"
{
static_cast<CSSParser*>(parser)->m_keyframe = (yyvsp[(4) - (6)].keyframeRule);
;}
@@ -2188,7 +2188,7 @@ yyreduce:
case 12:
/* Line 1455 of yacc.c */
-#line 292 "css\\CSSGrammar.y"
+#line 292 "css/CSSGrammar.y"
{
/* can be empty */
;}
@@ -2197,7 +2197,7 @@ yyreduce:
case 13:
/* Line 1455 of yacc.c */
-#line 298 "css\\CSSGrammar.y"
+#line 298 "css/CSSGrammar.y"
{
/* can be empty */
;}
@@ -2206,7 +2206,7 @@ yyreduce:
case 14:
/* Line 1455 of yacc.c */
-#line 304 "css\\CSSGrammar.y"
+#line 304 "css/CSSGrammar.y"
{
CSSParser* p = static_cast<CSSParser*>(parser);
if ((yyvsp[(4) - (5)].valueList)) {
@@ -2223,7 +2223,7 @@ yyreduce:
case 15:
/* Line 1455 of yacc.c */
-#line 318 "css\\CSSGrammar.y"
+#line 318 "css/CSSGrammar.y"
{
CSSParser* p = static_cast<CSSParser*>(parser);
p->m_mediaQuery = p->sinkFloatingMediaQuery((yyvsp[(4) - (5)].mediaQuery));
@@ -2233,7 +2233,7 @@ yyreduce:
case 16:
/* Line 1455 of yacc.c */
-#line 325 "css\\CSSGrammar.y"
+#line 325 "css/CSSGrammar.y"
{
if ((yyvsp[(4) - (5)].selectorList)) {
CSSParser* p = static_cast<CSSParser*>(parser);
@@ -2246,7 +2246,7 @@ yyreduce:
case 23:
/* Line 1455 of yacc.c */
-#line 347 "css\\CSSGrammar.y"
+#line 347 "css/CSSGrammar.y"
{
;}
break;
@@ -2254,7 +2254,7 @@ yyreduce:
case 26:
/* Line 1455 of yacc.c */
-#line 357 "css\\CSSGrammar.y"
+#line 357 "css/CSSGrammar.y"
{
CSSParser* p = static_cast<CSSParser*>(parser);
(yyval.rule) = static_cast<CSSParser*>(parser)->createCharsetRule((yyvsp[(3) - (5)].string));
@@ -2266,7 +2266,7 @@ yyreduce:
case 27:
/* Line 1455 of yacc.c */
-#line 363 "css\\CSSGrammar.y"
+#line 363 "css/CSSGrammar.y"
{
;}
break;
@@ -2274,7 +2274,7 @@ yyreduce:
case 28:
/* Line 1455 of yacc.c */
-#line 365 "css\\CSSGrammar.y"
+#line 365 "css/CSSGrammar.y"
{
;}
break;
@@ -2282,7 +2282,7 @@ yyreduce:
case 30:
/* Line 1455 of yacc.c */
-#line 371 "css\\CSSGrammar.y"
+#line 371 "css/CSSGrammar.y"
{
CSSParser* p = static_cast<CSSParser*>(parser);
if ((yyvsp[(2) - (3)].rule) && p->m_styleSheet)
@@ -2293,7 +2293,7 @@ yyreduce:
case 39:
/* Line 1455 of yacc.c */
-#line 390 "css\\CSSGrammar.y"
+#line 390 "css/CSSGrammar.y"
{
static_cast<CSSParser*>(parser)->m_hadSyntacticallyValidCSSRule = true;
;}
@@ -2302,14 +2302,14 @@ yyreduce:
case 42:
/* Line 1455 of yacc.c */
-#line 398 "css\\CSSGrammar.y"
+#line 398 "css/CSSGrammar.y"
{ (yyval.ruleList) = 0; ;}
break;
case 43:
/* Line 1455 of yacc.c */
-#line 399 "css\\CSSGrammar.y"
+#line 399 "css/CSSGrammar.y"
{
(yyval.ruleList) = (yyvsp[(1) - (3)].ruleList);
if ((yyvsp[(2) - (3)].rule)) {
@@ -2323,7 +2323,7 @@ yyreduce:
case 55:
/* Line 1455 of yacc.c */
-#line 428 "css\\CSSGrammar.y"
+#line 428 "css/CSSGrammar.y"
{
(yyval.rule) = static_cast<CSSParser*>(parser)->createImportRule((yyvsp[(3) - (6)].string), (yyvsp[(5) - (6)].mediaList));
;}
@@ -2332,7 +2332,7 @@ yyreduce:
case 56:
/* Line 1455 of yacc.c */
-#line 431 "css\\CSSGrammar.y"
+#line 431 "css/CSSGrammar.y"
{
(yyval.rule) = 0;
;}
@@ -2341,7 +2341,7 @@ yyreduce:
case 57:
/* Line 1455 of yacc.c */
-#line 434 "css\\CSSGrammar.y"
+#line 434 "css/CSSGrammar.y"
{
(yyval.rule) = 0;
;}
@@ -2350,7 +2350,7 @@ yyreduce:
case 58:
/* Line 1455 of yacc.c */
-#line 437 "css\\CSSGrammar.y"
+#line 437 "css/CSSGrammar.y"
{
(yyval.rule) = 0;
;}
@@ -2359,7 +2359,7 @@ yyreduce:
case 59:
/* Line 1455 of yacc.c */
-#line 443 "css\\CSSGrammar.y"
+#line 443 "css/CSSGrammar.y"
{
(yyval.rule) = static_cast<CSSParser*>(parser)->createVariablesRule((yyvsp[(3) - (7)].mediaList), true);
;}
@@ -2368,7 +2368,7 @@ yyreduce:
case 60:
/* Line 1455 of yacc.c */
-#line 447 "css\\CSSGrammar.y"
+#line 447 "css/CSSGrammar.y"
{
(yyval.rule) = static_cast<CSSParser*>(parser)->createVariablesRule((yyvsp[(3) - (7)].mediaList), false);
;}
@@ -2377,7 +2377,7 @@ yyreduce:
case 61:
/* Line 1455 of yacc.c */
-#line 453 "css\\CSSGrammar.y"
+#line 453 "css/CSSGrammar.y"
{
(yyval.mediaList) = static_cast<CSSParser*>(parser)->createMediaList();
;}
@@ -2386,7 +2386,7 @@ yyreduce:
case 62:
/* Line 1455 of yacc.c */
-#line 457 "css\\CSSGrammar.y"
+#line 457 "css/CSSGrammar.y"
{
(yyval.mediaList) = (yyvsp[(3) - (3)].mediaList);
;}
@@ -2395,7 +2395,7 @@ yyreduce:
case 63:
/* Line 1455 of yacc.c */
-#line 463 "css\\CSSGrammar.y"
+#line 463 "css/CSSGrammar.y"
{
(yyval.boolean) = (yyvsp[(1) - (1)].boolean);
;}
@@ -2404,7 +2404,7 @@ yyreduce:
case 64:
/* Line 1455 of yacc.c */
-#line 466 "css\\CSSGrammar.y"
+#line 466 "css/CSSGrammar.y"
{
(yyval.boolean) = (yyvsp[(1) - (2)].boolean);
if ((yyvsp[(2) - (2)].boolean))
@@ -2415,7 +2415,7 @@ yyreduce:
case 65:
/* Line 1455 of yacc.c */
-#line 471 "css\\CSSGrammar.y"
+#line 471 "css/CSSGrammar.y"
{
(yyval.boolean) = (yyvsp[(1) - (1)].boolean);
;}
@@ -2424,7 +2424,7 @@ yyreduce:
case 66:
/* Line 1455 of yacc.c */
-#line 474 "css\\CSSGrammar.y"
+#line 474 "css/CSSGrammar.y"
{
(yyval.boolean) = false;
;}
@@ -2433,7 +2433,7 @@ yyreduce:
case 67:
/* Line 1455 of yacc.c */
-#line 477 "css\\CSSGrammar.y"
+#line 477 "css/CSSGrammar.y"
{
(yyval.boolean) = false;
;}
@@ -2442,7 +2442,7 @@ yyreduce:
case 68:
/* Line 1455 of yacc.c */
-#line 480 "css\\CSSGrammar.y"
+#line 480 "css/CSSGrammar.y"
{
(yyval.boolean) = (yyvsp[(1) - (2)].boolean);
;}
@@ -2451,7 +2451,7 @@ yyreduce:
case 69:
/* Line 1455 of yacc.c */
-#line 486 "css\\CSSGrammar.y"
+#line 486 "css/CSSGrammar.y"
{
(yyval.boolean) = (yyvsp[(1) - (3)].boolean);
;}
@@ -2460,7 +2460,7 @@ yyreduce:
case 70:
/* Line 1455 of yacc.c */
-#line 489 "css\\CSSGrammar.y"
+#line 489 "css/CSSGrammar.y"
{
(yyval.boolean) = false;
;}
@@ -2469,7 +2469,7 @@ yyreduce:
case 71:
/* Line 1455 of yacc.c */
-#line 492 "css\\CSSGrammar.y"
+#line 492 "css/CSSGrammar.y"
{
(yyval.boolean) = false;
;}
@@ -2478,7 +2478,7 @@ yyreduce:
case 72:
/* Line 1455 of yacc.c */
-#line 495 "css\\CSSGrammar.y"
+#line 495 "css/CSSGrammar.y"
{
(yyval.boolean) = false;
;}
@@ -2487,7 +2487,7 @@ yyreduce:
case 73:
/* Line 1455 of yacc.c */
-#line 498 "css\\CSSGrammar.y"
+#line 498 "css/CSSGrammar.y"
{
(yyval.boolean) = (yyvsp[(1) - (4)].boolean);
if ((yyvsp[(2) - (4)].boolean))
@@ -2498,7 +2498,7 @@ yyreduce:
case 74:
/* Line 1455 of yacc.c */
-#line 503 "css\\CSSGrammar.y"
+#line 503 "css/CSSGrammar.y"
{
(yyval.boolean) = (yyvsp[(1) - (4)].boolean);
;}
@@ -2507,7 +2507,7 @@ yyreduce:
case 75:
/* Line 1455 of yacc.c */
-#line 506 "css\\CSSGrammar.y"
+#line 506 "css/CSSGrammar.y"
{
(yyval.boolean) = (yyvsp[(1) - (6)].boolean);
;}
@@ -2516,7 +2516,7 @@ yyreduce:
case 76:
/* Line 1455 of yacc.c */
-#line 512 "css\\CSSGrammar.y"
+#line 512 "css/CSSGrammar.y"
{
(yyval.boolean) = static_cast<CSSParser*>(parser)->addVariable((yyvsp[(1) - (4)].string), (yyvsp[(4) - (4)].valueList));
;}
@@ -2525,7 +2525,7 @@ yyreduce:
case 77:
/* Line 1455 of yacc.c */
-#line 516 "css\\CSSGrammar.y"
+#line 516 "css/CSSGrammar.y"
{
(yyval.boolean) = static_cast<CSSParser*>(parser)->addVariableDeclarationBlock((yyvsp[(1) - (7)].string));
;}
@@ -2534,7 +2534,7 @@ yyreduce:
case 78:
/* Line 1455 of yacc.c */
-#line 520 "css\\CSSGrammar.y"
+#line 520 "css/CSSGrammar.y"
{
(yyval.boolean) = false;
;}
@@ -2543,7 +2543,7 @@ yyreduce:
case 79:
/* Line 1455 of yacc.c */
-#line 524 "css\\CSSGrammar.y"
+#line 524 "css/CSSGrammar.y"
{
(yyval.boolean) = false;
;}
@@ -2552,7 +2552,7 @@ yyreduce:
case 80:
/* Line 1455 of yacc.c */
-#line 528 "css\\CSSGrammar.y"
+#line 528 "css/CSSGrammar.y"
{
/* @variables { varname: } Just reduce away this variable with no value. */
(yyval.boolean) = false;
@@ -2562,7 +2562,7 @@ yyreduce:
case 81:
/* Line 1455 of yacc.c */
-#line 533 "css\\CSSGrammar.y"
+#line 533 "css/CSSGrammar.y"
{
/* if we come across rules with invalid values like this case: @variables { varname: *; }, just discard the property/value pair */
(yyval.boolean) = false;
@@ -2572,7 +2572,7 @@ yyreduce:
case 82:
/* Line 1455 of yacc.c */
-#line 540 "css\\CSSGrammar.y"
+#line 540 "css/CSSGrammar.y"
{
(yyval.string) = (yyvsp[(1) - (2)].string);
;}
@@ -2581,7 +2581,7 @@ yyreduce:
case 83:
/* Line 1455 of yacc.c */
-#line 546 "css\\CSSGrammar.y"
+#line 546 "css/CSSGrammar.y"
{
static_cast<CSSParser*>(parser)->addNamespace((yyvsp[(3) - (6)].string), (yyvsp[(4) - (6)].string));
(yyval.rule) = 0;
@@ -2591,7 +2591,7 @@ yyreduce:
case 84:
/* Line 1455 of yacc.c */
-#line 550 "css\\CSSGrammar.y"
+#line 550 "css/CSSGrammar.y"
{
(yyval.rule) = 0;
;}
@@ -2600,7 +2600,7 @@ yyreduce:
case 85:
/* Line 1455 of yacc.c */
-#line 553 "css\\CSSGrammar.y"
+#line 553 "css/CSSGrammar.y"
{
(yyval.rule) = 0;
;}
@@ -2609,7 +2609,7 @@ yyreduce:
case 86:
/* Line 1455 of yacc.c */
-#line 556 "css\\CSSGrammar.y"
+#line 556 "css/CSSGrammar.y"
{
(yyval.rule) = 0;
;}
@@ -2618,21 +2618,21 @@ yyreduce:
case 87:
/* Line 1455 of yacc.c */
-#line 562 "css\\CSSGrammar.y"
+#line 562 "css/CSSGrammar.y"
{ (yyval.string).characters = 0; ;}
break;
case 88:
/* Line 1455 of yacc.c */
-#line 563 "css\\CSSGrammar.y"
+#line 563 "css/CSSGrammar.y"
{ (yyval.string) = (yyvsp[(1) - (2)].string); ;}
break;
case 91:
/* Line 1455 of yacc.c */
-#line 572 "css\\CSSGrammar.y"
+#line 572 "css/CSSGrammar.y"
{
(yyval.string) = (yyvsp[(1) - (2)].string);
;}
@@ -2641,7 +2641,7 @@ yyreduce:
case 92:
/* Line 1455 of yacc.c */
-#line 578 "css\\CSSGrammar.y"
+#line 578 "css/CSSGrammar.y"
{
(yyval.valueList) = 0;
;}
@@ -2650,7 +2650,7 @@ yyreduce:
case 93:
/* Line 1455 of yacc.c */
-#line 581 "css\\CSSGrammar.y"
+#line 581 "css/CSSGrammar.y"
{
(yyval.valueList) = (yyvsp[(3) - (4)].valueList);
;}
@@ -2659,7 +2659,7 @@ yyreduce:
case 94:
/* Line 1455 of yacc.c */
-#line 587 "css\\CSSGrammar.y"
+#line 587 "css/CSSGrammar.y"
{
(yyvsp[(3) - (7)].string).lower();
(yyval.mediaQueryExp) = static_cast<CSSParser*>(parser)->createFloatingMediaQueryExp((yyvsp[(3) - (7)].string), (yyvsp[(5) - (7)].valueList));
@@ -2669,7 +2669,7 @@ yyreduce:
case 95:
/* Line 1455 of yacc.c */
-#line 594 "css\\CSSGrammar.y"
+#line 594 "css/CSSGrammar.y"
{
CSSParser* p = static_cast<CSSParser*>(parser);
(yyval.mediaQueryExpList) = p->createFloatingMediaQueryExpList();
@@ -2680,7 +2680,7 @@ yyreduce:
case 96:
/* Line 1455 of yacc.c */
-#line 599 "css\\CSSGrammar.y"
+#line 599 "css/CSSGrammar.y"
{
(yyval.mediaQueryExpList) = (yyvsp[(1) - (5)].mediaQueryExpList);
(yyval.mediaQueryExpList)->append(static_cast<CSSParser*>(parser)->sinkFloatingMediaQueryExp((yyvsp[(5) - (5)].mediaQueryExp)));
@@ -2690,7 +2690,7 @@ yyreduce:
case 97:
/* Line 1455 of yacc.c */
-#line 606 "css\\CSSGrammar.y"
+#line 606 "css/CSSGrammar.y"
{
(yyval.mediaQueryExpList) = static_cast<CSSParser*>(parser)->createFloatingMediaQueryExpList();
;}
@@ -2699,7 +2699,7 @@ yyreduce:
case 98:
/* Line 1455 of yacc.c */
-#line 609 "css\\CSSGrammar.y"
+#line 609 "css/CSSGrammar.y"
{
(yyval.mediaQueryExpList) = (yyvsp[(3) - (3)].mediaQueryExpList);
;}
@@ -2708,7 +2708,7 @@ yyreduce:
case 99:
/* Line 1455 of yacc.c */
-#line 615 "css\\CSSGrammar.y"
+#line 615 "css/CSSGrammar.y"
{
(yyval.mediaQueryRestrictor) = MediaQuery::None;
;}
@@ -2717,7 +2717,7 @@ yyreduce:
case 100:
/* Line 1455 of yacc.c */
-#line 618 "css\\CSSGrammar.y"
+#line 618 "css/CSSGrammar.y"
{
(yyval.mediaQueryRestrictor) = MediaQuery::Only;
;}
@@ -2726,7 +2726,7 @@ yyreduce:
case 101:
/* Line 1455 of yacc.c */
-#line 621 "css\\CSSGrammar.y"
+#line 621 "css/CSSGrammar.y"
{
(yyval.mediaQueryRestrictor) = MediaQuery::Not;
;}
@@ -2735,7 +2735,7 @@ yyreduce:
case 102:
/* Line 1455 of yacc.c */
-#line 627 "css\\CSSGrammar.y"
+#line 627 "css/CSSGrammar.y"
{
CSSParser* p = static_cast<CSSParser*>(parser);
(yyval.mediaQuery) = p->createFloatingMediaQuery(p->sinkFloatingMediaQueryExpList((yyvsp[(1) - (1)].mediaQueryExpList)));
@@ -2745,7 +2745,7 @@ yyreduce:
case 103:
/* Line 1455 of yacc.c */
-#line 632 "css\\CSSGrammar.y"
+#line 632 "css/CSSGrammar.y"
{
CSSParser* p = static_cast<CSSParser*>(parser);
(yyvsp[(3) - (4)].string).lower();
@@ -2756,7 +2756,7 @@ yyreduce:
case 104:
/* Line 1455 of yacc.c */
-#line 640 "css\\CSSGrammar.y"
+#line 640 "css/CSSGrammar.y"
{
(yyval.mediaList) = static_cast<CSSParser*>(parser)->createMediaList();
;}
@@ -2765,7 +2765,7 @@ yyreduce:
case 106:
/* Line 1455 of yacc.c */
-#line 647 "css\\CSSGrammar.y"
+#line 647 "css/CSSGrammar.y"
{
CSSParser* p = static_cast<CSSParser*>(parser);
(yyval.mediaList) = p->createMediaList();
@@ -2776,7 +2776,7 @@ yyreduce:
case 107:
/* Line 1455 of yacc.c */
-#line 652 "css\\CSSGrammar.y"
+#line 652 "css/CSSGrammar.y"
{
(yyval.mediaList) = (yyvsp[(1) - (4)].mediaList);
if ((yyval.mediaList))
@@ -2787,7 +2787,7 @@ yyreduce:
case 108:
/* Line 1455 of yacc.c */
-#line 657 "css\\CSSGrammar.y"
+#line 657 "css/CSSGrammar.y"
{
(yyval.mediaList) = 0;
;}
@@ -2796,7 +2796,7 @@ yyreduce:
case 109:
/* Line 1455 of yacc.c */
-#line 663 "css\\CSSGrammar.y"
+#line 663 "css/CSSGrammar.y"
{
(yyval.rule) = static_cast<CSSParser*>(parser)->createMediaRule((yyvsp[(3) - (7)].mediaList), (yyvsp[(6) - (7)].ruleList));
;}
@@ -2805,7 +2805,7 @@ yyreduce:
case 110:
/* Line 1455 of yacc.c */
-#line 666 "css\\CSSGrammar.y"
+#line 666 "css/CSSGrammar.y"
{
(yyval.rule) = static_cast<CSSParser*>(parser)->createMediaRule(0, (yyvsp[(5) - (6)].ruleList));
;}
@@ -2814,7 +2814,7 @@ yyreduce:
case 111:
/* Line 1455 of yacc.c */
-#line 672 "css\\CSSGrammar.y"
+#line 672 "css/CSSGrammar.y"
{
(yyval.string) = (yyvsp[(1) - (2)].string);
;}
@@ -2823,7 +2823,7 @@ yyreduce:
case 112:
/* Line 1455 of yacc.c */
-#line 678 "css\\CSSGrammar.y"
+#line 678 "css/CSSGrammar.y"
{
(yyval.rule) = (yyvsp[(7) - (8)].keyframesRule);
(yyvsp[(7) - (8)].keyframesRule)->setNameInternal((yyvsp[(3) - (8)].string));
@@ -2833,14 +2833,14 @@ yyreduce:
case 115:
/* Line 1455 of yacc.c */
-#line 690 "css\\CSSGrammar.y"
+#line 690 "css/CSSGrammar.y"
{ (yyval.keyframesRule) = static_cast<CSSParser*>(parser)->createKeyframesRule(); ;}
break;
case 116:
/* Line 1455 of yacc.c */
-#line 691 "css\\CSSGrammar.y"
+#line 691 "css/CSSGrammar.y"
{
(yyval.keyframesRule) = (yyvsp[(1) - (3)].keyframesRule);
if ((yyvsp[(2) - (3)].keyframeRule))
@@ -2851,7 +2851,7 @@ yyreduce:
case 117:
/* Line 1455 of yacc.c */
-#line 699 "css\\CSSGrammar.y"
+#line 699 "css/CSSGrammar.y"
{
(yyval.keyframeRule) = static_cast<CSSParser*>(parser)->createKeyframeRule((yyvsp[(1) - (6)].valueList));
;}
@@ -2860,7 +2860,7 @@ yyreduce:
case 118:
/* Line 1455 of yacc.c */
-#line 705 "css\\CSSGrammar.y"
+#line 705 "css/CSSGrammar.y"
{
CSSParser* p = static_cast<CSSParser*>(parser);
(yyval.valueList) = p->createFloatingValueList();
@@ -2871,7 +2871,7 @@ yyreduce:
case 119:
/* Line 1455 of yacc.c */
-#line 710 "css\\CSSGrammar.y"
+#line 710 "css/CSSGrammar.y"
{
CSSParser* p = static_cast<CSSParser*>(parser);
(yyval.valueList) = (yyvsp[(1) - (5)].valueList);
@@ -2883,14 +2883,14 @@ yyreduce:
case 120:
/* Line 1455 of yacc.c */
-#line 719 "css\\CSSGrammar.y"
+#line 719 "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 121:
/* Line 1455 of yacc.c */
-#line 720 "css\\CSSGrammar.y"
+#line 720 "css/CSSGrammar.y"
{
(yyval.value).id = 0; (yyval.value).isInt = false; (yyval.value).unit = CSSPrimitiveValue::CSS_NUMBER;
CSSParserString& str = (yyvsp[(1) - (1)].string);
@@ -2906,7 +2906,7 @@ yyreduce:
case 122:
/* Line 1455 of yacc.c */
-#line 744 "css\\CSSGrammar.y"
+#line 744 "css/CSSGrammar.y"
{
(yyval.rule) = 0;
;}
@@ -2915,7 +2915,7 @@ yyreduce:
case 123:
/* Line 1455 of yacc.c */
-#line 747 "css\\CSSGrammar.y"
+#line 747 "css/CSSGrammar.y"
{
(yyval.rule) = 0;
;}
@@ -2924,7 +2924,7 @@ yyreduce:
case 124:
/* Line 1455 of yacc.c */
-#line 754 "css\\CSSGrammar.y"
+#line 754 "css/CSSGrammar.y"
{
(yyval.rule) = static_cast<CSSParser*>(parser)->createFontFaceRule();
;}
@@ -2933,7 +2933,7 @@ yyreduce:
case 125:
/* Line 1455 of yacc.c */
-#line 757 "css\\CSSGrammar.y"
+#line 757 "css/CSSGrammar.y"
{
(yyval.rule) = 0;
;}
@@ -2942,7 +2942,7 @@ yyreduce:
case 126:
/* Line 1455 of yacc.c */
-#line 760 "css\\CSSGrammar.y"
+#line 760 "css/CSSGrammar.y"
{
(yyval.rule) = 0;
;}
@@ -2951,56 +2951,56 @@ yyreduce:
case 127:
/* Line 1455 of yacc.c */
-#line 766 "css\\CSSGrammar.y"
+#line 766 "css/CSSGrammar.y"
{ (yyval.relation) = CSSSelector::DirectAdjacent; ;}
break;
case 128:
/* Line 1455 of yacc.c */
-#line 767 "css\\CSSGrammar.y"
+#line 767 "css/CSSGrammar.y"
{ (yyval.relation) = CSSSelector::IndirectAdjacent; ;}
break;
case 129:
/* Line 1455 of yacc.c */
-#line 768 "css\\CSSGrammar.y"
+#line 768 "css/CSSGrammar.y"
{ (yyval.relation) = CSSSelector::Child; ;}
break;
case 130:
/* Line 1455 of yacc.c */
-#line 772 "css\\CSSGrammar.y"
+#line 772 "css/CSSGrammar.y"
{ (yyval.integer) = (yyvsp[(1) - (1)].integer); ;}
break;
case 131:
/* Line 1455 of yacc.c */
-#line 773 "css\\CSSGrammar.y"
+#line 773 "css/CSSGrammar.y"
{ (yyval.integer) = 1; ;}
break;
case 132:
/* Line 1455 of yacc.c */
-#line 777 "css\\CSSGrammar.y"
+#line 777 "css/CSSGrammar.y"
{ (yyval.integer) = -1; ;}
break;
case 133:
/* Line 1455 of yacc.c */
-#line 778 "css\\CSSGrammar.y"
+#line 778 "css/CSSGrammar.y"
{ (yyval.integer) = 1; ;}
break;
case 134:
/* Line 1455 of yacc.c */
-#line 782 "css\\CSSGrammar.y"
+#line 782 "css/CSSGrammar.y"
{
(yyval.rule) = static_cast<CSSParser*>(parser)->createStyleRule((yyvsp[(1) - (5)].selectorList));
;}
@@ -3009,7 +3009,7 @@ yyreduce:
case 135:
/* Line 1455 of yacc.c */
-#line 788 "css\\CSSGrammar.y"
+#line 788 "css/CSSGrammar.y"
{
if ((yyvsp[(1) - (1)].selector)) {
CSSParser* p = static_cast<CSSParser*>(parser);
@@ -3025,7 +3025,7 @@ yyreduce:
case 136:
/* Line 1455 of yacc.c */
-#line 798 "css\\CSSGrammar.y"
+#line 798 "css/CSSGrammar.y"
{
if ((yyvsp[(1) - (4)].selectorList) && (yyvsp[(4) - (4)].selector)) {
CSSParser* p = static_cast<CSSParser*>(parser);
@@ -3040,7 +3040,7 @@ yyreduce:
case 137:
/* Line 1455 of yacc.c */
-#line 807 "css\\CSSGrammar.y"
+#line 807 "css/CSSGrammar.y"
{
(yyval.selectorList) = 0;
;}
@@ -3049,7 +3049,7 @@ yyreduce:
case 138:
/* Line 1455 of yacc.c */
-#line 813 "css\\CSSGrammar.y"
+#line 813 "css/CSSGrammar.y"
{
(yyval.selector) = (yyvsp[(1) - (2)].selector);
;}
@@ -3058,7 +3058,7 @@ yyreduce:
case 139:
/* Line 1455 of yacc.c */
-#line 819 "css\\CSSGrammar.y"
+#line 819 "css/CSSGrammar.y"
{
(yyval.selector) = (yyvsp[(1) - (1)].selector);
;}
@@ -3067,7 +3067,7 @@ yyreduce:
case 140:
/* Line 1455 of yacc.c */
-#line 823 "css\\CSSGrammar.y"
+#line 823 "css/CSSGrammar.y"
{
(yyval.selector) = (yyvsp[(1) - (1)].selector);
;}
@@ -3076,7 +3076,7 @@ yyreduce:
case 141:
/* Line 1455 of yacc.c */
-#line 827 "css\\CSSGrammar.y"
+#line 827 "css/CSSGrammar.y"
{
(yyval.selector) = (yyvsp[(2) - (2)].selector);
if (!(yyvsp[(1) - (2)].selector))
@@ -3097,7 +3097,7 @@ yyreduce:
case 142:
/* Line 1455 of yacc.c */
-#line 842 "css\\CSSGrammar.y"
+#line 842 "css/CSSGrammar.y"
{
(yyval.selector) = (yyvsp[(3) - (3)].selector);
if (!(yyvsp[(1) - (3)].selector))
@@ -3123,7 +3123,7 @@ yyreduce:
case 143:
/* Line 1455 of yacc.c */
-#line 862 "css\\CSSGrammar.y"
+#line 862 "css/CSSGrammar.y"
{
(yyval.selector) = 0;
;}
@@ -3132,28 +3132,28 @@ yyreduce:
case 144:
/* Line 1455 of yacc.c */
-#line 868 "css\\CSSGrammar.y"
+#line 868 "css/CSSGrammar.y"
{ (yyval.string).characters = 0; (yyval.string).length = 0; ;}
break;
case 145:
/* Line 1455 of yacc.c */
-#line 869 "css\\CSSGrammar.y"
+#line 869 "css/CSSGrammar.y"
{ static UChar star = '*'; (yyval.string).characters = &star; (yyval.string).length = 1; ;}
break;
case 146:
/* Line 1455 of yacc.c */
-#line 870 "css\\CSSGrammar.y"
+#line 870 "css/CSSGrammar.y"
{ (yyval.string) = (yyvsp[(1) - (2)].string); ;}
break;
case 147:
/* Line 1455 of yacc.c */
-#line 874 "css\\CSSGrammar.y"
+#line 874 "css/CSSGrammar.y"
{
CSSParser* p = static_cast<CSSParser*>(parser);
(yyval.selector) = p->createFloatingSelector();
@@ -3164,7 +3164,7 @@ yyreduce:
case 148:
/* Line 1455 of yacc.c */
-#line 879 "css\\CSSGrammar.y"
+#line 879 "css/CSSGrammar.y"
{
(yyval.selector) = (yyvsp[(2) - (2)].selector);
if ((yyval.selector)) {
@@ -3177,7 +3177,7 @@ yyreduce:
case 149:
/* Line 1455 of yacc.c */
-#line 886 "css\\CSSGrammar.y"
+#line 886 "css/CSSGrammar.y"
{
(yyval.selector) = (yyvsp[(1) - (1)].selector);
CSSParser* p = static_cast<CSSParser*>(parser);
@@ -3189,7 +3189,7 @@ yyreduce:
case 150:
/* Line 1455 of yacc.c */
-#line 892 "css\\CSSGrammar.y"
+#line 892 "css/CSSGrammar.y"
{
AtomicString namespacePrefix = (yyvsp[(1) - (2)].string);
CSSParser* p = static_cast<CSSParser*>(parser);
@@ -3205,7 +3205,7 @@ yyreduce:
case 151:
/* Line 1455 of yacc.c */
-#line 902 "css\\CSSGrammar.y"
+#line 902 "css/CSSGrammar.y"
{
(yyval.selector) = (yyvsp[(3) - (3)].selector);
if ((yyval.selector)) {
@@ -3223,7 +3223,7 @@ yyreduce:
case 152:
/* Line 1455 of yacc.c */
-#line 914 "css\\CSSGrammar.y"
+#line 914 "css/CSSGrammar.y"
{
(yyval.selector) = (yyvsp[(2) - (2)].selector);
if ((yyval.selector)) {
@@ -3239,7 +3239,7 @@ yyreduce:
case 153:
/* Line 1455 of yacc.c */
-#line 927 "css\\CSSGrammar.y"
+#line 927 "css/CSSGrammar.y"
{
CSSParserString& str = (yyvsp[(1) - (1)].string);
CSSParser* p = static_cast<CSSParser*>(parser);
@@ -3253,7 +3253,7 @@ yyreduce:
case 154:
/* Line 1455 of yacc.c */
-#line 935 "css\\CSSGrammar.y"
+#line 935 "css/CSSGrammar.y"
{
static UChar star = '*';
(yyval.string).characters = &star;
@@ -3264,7 +3264,7 @@ yyreduce:
case 155:
/* Line 1455 of yacc.c */
-#line 943 "css\\CSSGrammar.y"
+#line 943 "css/CSSGrammar.y"
{
(yyval.selector) = (yyvsp[(1) - (1)].selector);
;}
@@ -3273,7 +3273,7 @@ yyreduce:
case 156:
/* Line 1455 of yacc.c */
-#line 946 "css\\CSSGrammar.y"
+#line 946 "css/CSSGrammar.y"
{
if (!(yyvsp[(2) - (2)].selector))
(yyval.selector) = 0;
@@ -3292,7 +3292,7 @@ yyreduce:
case 157:
/* Line 1455 of yacc.c */
-#line 959 "css\\CSSGrammar.y"
+#line 959 "css/CSSGrammar.y"
{
(yyval.selector) = 0;
;}
@@ -3301,7 +3301,7 @@ yyreduce:
case 158:
/* Line 1455 of yacc.c */
-#line 965 "css\\CSSGrammar.y"
+#line 965 "css/CSSGrammar.y"
{
CSSParser* p = static_cast<CSSParser*>(parser);
(yyval.selector) = p->createFloatingSelector();
@@ -3315,7 +3315,7 @@ yyreduce:
case 159:
/* Line 1455 of yacc.c */
-#line 973 "css\\CSSGrammar.y"
+#line 973 "css/CSSGrammar.y"
{
if ((yyvsp[(1) - (1)].string).characters[0] >= '0' && (yyvsp[(1) - (1)].string).characters[0] <= '9') {
(yyval.selector) = 0;
@@ -3333,7 +3333,7 @@ yyreduce:
case 163:
/* Line 1455 of yacc.c */
-#line 991 "css\\CSSGrammar.y"
+#line 991 "css/CSSGrammar.y"
{
CSSParser* p = static_cast<CSSParser*>(parser);
(yyval.selector) = p->createFloatingSelector();
@@ -3347,7 +3347,7 @@ yyreduce:
case 164:
/* Line 1455 of yacc.c */
-#line 1002 "css\\CSSGrammar.y"
+#line 1002 "css/CSSGrammar.y"
{
CSSParserString& str = (yyvsp[(1) - (2)].string);
CSSParser* p = static_cast<CSSParser*>(parser);
@@ -3361,7 +3361,7 @@ yyreduce:
case 165:
/* Line 1455 of yacc.c */
-#line 1013 "css\\CSSGrammar.y"
+#line 1013 "css/CSSGrammar.y"
{
(yyval.selector) = static_cast<CSSParser*>(parser)->createFloatingSelector();
(yyval.selector)->setAttribute(QualifiedName(nullAtom, (yyvsp[(3) - (4)].string), nullAtom));
@@ -3372,7 +3372,7 @@ yyreduce:
case 166:
/* Line 1455 of yacc.c */
-#line 1018 "css\\CSSGrammar.y"
+#line 1018 "css/CSSGrammar.y"
{
(yyval.selector) = static_cast<CSSParser*>(parser)->createFloatingSelector();
(yyval.selector)->setAttribute(QualifiedName(nullAtom, (yyvsp[(3) - (8)].string), nullAtom));
@@ -3384,7 +3384,7 @@ yyreduce:
case 167:
/* Line 1455 of yacc.c */
-#line 1024 "css\\CSSGrammar.y"
+#line 1024 "css/CSSGrammar.y"
{
AtomicString namespacePrefix = (yyvsp[(3) - (5)].string);
CSSParser* p = static_cast<CSSParser*>(parser);
@@ -3398,7 +3398,7 @@ yyreduce:
case 168:
/* Line 1455 of yacc.c */
-#line 1032 "css\\CSSGrammar.y"
+#line 1032 "css/CSSGrammar.y"
{
AtomicString namespacePrefix = (yyvsp[(3) - (9)].string);
CSSParser* p = static_cast<CSSParser*>(parser);
@@ -3413,7 +3413,7 @@ yyreduce:
case 169:
/* Line 1455 of yacc.c */
-#line 1044 "css\\CSSGrammar.y"
+#line 1044 "css/CSSGrammar.y"
{
(yyval.integer) = CSSSelector::Exact;
;}
@@ -3422,7 +3422,7 @@ yyreduce:
case 170:
/* Line 1455 of yacc.c */
-#line 1047 "css\\CSSGrammar.y"
+#line 1047 "css/CSSGrammar.y"
{
(yyval.integer) = CSSSelector::List;
;}
@@ -3431,7 +3431,7 @@ yyreduce:
case 171:
/* Line 1455 of yacc.c */
-#line 1050 "css\\CSSGrammar.y"
+#line 1050 "css/CSSGrammar.y"
{
(yyval.integer) = CSSSelector::Hyphen;
;}
@@ -3440,7 +3440,7 @@ yyreduce:
case 172:
/* Line 1455 of yacc.c */
-#line 1053 "css\\CSSGrammar.y"
+#line 1053 "css/CSSGrammar.y"
{
(yyval.integer) = CSSSelector::Begin;
;}
@@ -3449,7 +3449,7 @@ yyreduce:
case 173:
/* Line 1455 of yacc.c */
-#line 1056 "css\\CSSGrammar.y"
+#line 1056 "css/CSSGrammar.y"
{
(yyval.integer) = CSSSelector::End;
;}
@@ -3458,7 +3458,7 @@ yyreduce:
case 174:
/* Line 1455 of yacc.c */
-#line 1059 "css\\CSSGrammar.y"
+#line 1059 "css/CSSGrammar.y"
{
(yyval.integer) = CSSSelector::Contain;
;}
@@ -3467,7 +3467,7 @@ yyreduce:
case 177:
/* Line 1455 of yacc.c */
-#line 1070 "css\\CSSGrammar.y"
+#line 1070 "css/CSSGrammar.y"
{
(yyval.selector) = static_cast<CSSParser*>(parser)->createFloatingSelector();
(yyval.selector)->m_match = CSSSelector::PseudoClass;
@@ -3503,7 +3503,7 @@ yyreduce:
case 178:
/* Line 1455 of yacc.c */
-#line 1100 "css\\CSSGrammar.y"
+#line 1100 "css/CSSGrammar.y"
{
(yyval.selector) = static_cast<CSSParser*>(parser)->createFloatingSelector();
(yyval.selector)->m_match = CSSSelector::PseudoElement;
@@ -3528,7 +3528,7 @@ yyreduce:
case 179:
/* Line 1455 of yacc.c */
-#line 1120 "css\\CSSGrammar.y"
+#line 1120 "css/CSSGrammar.y"
{
CSSParser *p = static_cast<CSSParser*>(parser);
(yyval.selector) = p->createFloatingSelector();
@@ -3551,7 +3551,7 @@ yyreduce:
case 180:
/* Line 1455 of yacc.c */
-#line 1138 "css\\CSSGrammar.y"
+#line 1138 "css/CSSGrammar.y"
{
CSSParser *p = static_cast<CSSParser*>(parser);
(yyval.selector) = p->createFloatingSelector();
@@ -3574,7 +3574,7 @@ yyreduce:
case 181:
/* Line 1455 of yacc.c */
-#line 1156 "css\\CSSGrammar.y"
+#line 1156 "css/CSSGrammar.y"
{
CSSParser *p = static_cast<CSSParser*>(parser);
(yyval.selector) = p->createFloatingSelector();
@@ -3598,7 +3598,7 @@ yyreduce:
case 182:
/* Line 1455 of yacc.c */
-#line 1175 "css\\CSSGrammar.y"
+#line 1175 "css/CSSGrammar.y"
{
if (!(yyvsp[(4) - (6)].selector) || (yyvsp[(4) - (6)].selector)->simpleSelector() || (yyvsp[(4) - (6)].selector)->tagHistory() || (yyvsp[(4) - (6)].selector)->matchesPseudoElement())
(yyval.selector) = 0;
@@ -3616,7 +3616,7 @@ yyreduce:
case 183:
/* Line 1455 of yacc.c */
-#line 1190 "css\\CSSGrammar.y"
+#line 1190 "css/CSSGrammar.y"
{
(yyval.boolean) = (yyvsp[(1) - (1)].boolean);
;}
@@ -3625,7 +3625,7 @@ yyreduce:
case 184:
/* Line 1455 of yacc.c */
-#line 1193 "css\\CSSGrammar.y"
+#line 1193 "css/CSSGrammar.y"
{
(yyval.boolean) = (yyvsp[(1) - (2)].boolean);
if ( (yyvsp[(2) - (2)].boolean) )
@@ -3636,7 +3636,7 @@ yyreduce:
case 185:
/* Line 1455 of yacc.c */
-#line 1198 "css\\CSSGrammar.y"
+#line 1198 "css/CSSGrammar.y"
{
(yyval.boolean) = (yyvsp[(1) - (1)].boolean);
;}
@@ -3645,7 +3645,7 @@ yyreduce:
case 186:
/* Line 1455 of yacc.c */
-#line 1201 "css\\CSSGrammar.y"
+#line 1201 "css/CSSGrammar.y"
{
(yyval.boolean) = false;
;}
@@ -3654,7 +3654,7 @@ yyreduce:
case 187:
/* Line 1455 of yacc.c */
-#line 1204 "css\\CSSGrammar.y"
+#line 1204 "css/CSSGrammar.y"
{
(yyval.boolean) = false;
;}
@@ -3663,7 +3663,7 @@ yyreduce:
case 188:
/* Line 1455 of yacc.c */
-#line 1207 "css\\CSSGrammar.y"
+#line 1207 "css/CSSGrammar.y"
{
(yyval.boolean) = (yyvsp[(1) - (2)].boolean);
;}
@@ -3672,7 +3672,7 @@ yyreduce:
case 189:
/* Line 1455 of yacc.c */
-#line 1210 "css\\CSSGrammar.y"
+#line 1210 "css/CSSGrammar.y"
{
(yyval.boolean) = (yyvsp[(1) - (2)].boolean);
;}
@@ -3681,7 +3681,7 @@ yyreduce:
case 190:
/* Line 1455 of yacc.c */
-#line 1216 "css\\CSSGrammar.y"
+#line 1216 "css/CSSGrammar.y"
{
(yyval.boolean) = (yyvsp[(1) - (3)].boolean);
;}
@@ -3690,7 +3690,7 @@ yyreduce:
case 191:
/* Line 1455 of yacc.c */
-#line 1219 "css\\CSSGrammar.y"
+#line 1219 "css/CSSGrammar.y"
{
(yyval.boolean) = false;
;}
@@ -3699,7 +3699,7 @@ yyreduce:
case 192:
/* Line 1455 of yacc.c */
-#line 1222 "css\\CSSGrammar.y"
+#line 1222 "css/CSSGrammar.y"
{
(yyval.boolean) = false;
;}
@@ -3708,7 +3708,7 @@ yyreduce:
case 193:
/* Line 1455 of yacc.c */
-#line 1225 "css\\CSSGrammar.y"
+#line 1225 "css/CSSGrammar.y"
{
(yyval.boolean) = false;
;}
@@ -3717,7 +3717,7 @@ yyreduce:
case 194:
/* Line 1455 of yacc.c */
-#line 1228 "css\\CSSGrammar.y"
+#line 1228 "css/CSSGrammar.y"
{
(yyval.boolean) = false;
;}
@@ -3726,7 +3726,7 @@ yyreduce:
case 195:
/* Line 1455 of yacc.c */
-#line 1231 "css\\CSSGrammar.y"
+#line 1231 "css/CSSGrammar.y"
{
(yyval.boolean) = (yyvsp[(1) - (4)].boolean);
if ((yyvsp[(2) - (4)].boolean))
@@ -3737,7 +3737,7 @@ yyreduce:
case 196:
/* Line 1455 of yacc.c */
-#line 1236 "css\\CSSGrammar.y"
+#line 1236 "css/CSSGrammar.y"
{
(yyval.boolean) = (yyvsp[(1) - (4)].boolean);
;}
@@ -3746,7 +3746,7 @@ yyreduce:
case 197:
/* Line 1455 of yacc.c */
-#line 1239 "css\\CSSGrammar.y"
+#line 1239 "css/CSSGrammar.y"
{
(yyval.boolean) = (yyvsp[(1) - (6)].boolean);
;}
@@ -3755,7 +3755,7 @@ yyreduce:
case 198:
/* Line 1455 of yacc.c */
-#line 1245 "css\\CSSGrammar.y"
+#line 1245 "css/CSSGrammar.y"
{
(yyval.boolean) = false;
CSSParser* p = static_cast<CSSParser*>(parser);
@@ -3774,7 +3774,7 @@ yyreduce:
case 199:
/* Line 1455 of yacc.c */
-#line 1259 "css\\CSSGrammar.y"
+#line 1259 "css/CSSGrammar.y"
{
CSSParser* p = static_cast<CSSParser*>(parser);
p->m_valueList = new CSSParserValueList;
@@ -3791,7 +3791,7 @@ yyreduce:
case 200:
/* Line 1455 of yacc.c */
-#line 1271 "css\\CSSGrammar.y"
+#line 1271 "css/CSSGrammar.y"
{
(yyval.boolean) = false;
;}
@@ -3800,7 +3800,7 @@ yyreduce:
case 201:
/* Line 1455 of yacc.c */
-#line 1275 "css\\CSSGrammar.y"
+#line 1275 "css/CSSGrammar.y"
{
/* The default movable type template has letter-spacing: .none; Handle this by looking for
error tokens at the start of an expr, recover the expr and then treat as an error, cleaning
@@ -3812,7 +3812,7 @@ yyreduce:
case 202:
/* Line 1455 of yacc.c */
-#line 1282 "css\\CSSGrammar.y"
+#line 1282 "css/CSSGrammar.y"
{
/* When we encounter something like p {color: red !important fail;} we should drop the declaration */
(yyval.boolean) = false;
@@ -3822,7 +3822,7 @@ yyreduce:
case 203:
/* Line 1455 of yacc.c */
-#line 1287 "css\\CSSGrammar.y"
+#line 1287 "css/CSSGrammar.y"
{
/* Handle this case: div { text-align: center; !important } Just reduce away the stray !important. */
(yyval.boolean) = false;
@@ -3832,7 +3832,7 @@ yyreduce:
case 204:
/* Line 1455 of yacc.c */
-#line 1292 "css\\CSSGrammar.y"
+#line 1292 "css/CSSGrammar.y"
{
/* div { font-family: } Just reduce away this property with no value. */
(yyval.boolean) = false;
@@ -3842,7 +3842,7 @@ yyreduce:
case 205:
/* Line 1455 of yacc.c */
-#line 1297 "css\\CSSGrammar.y"
+#line 1297 "css/CSSGrammar.y"
{
/* if we come across rules with invalid values like this case: p { weight: *; }, just discard the rule */
(yyval.boolean) = false;
@@ -3852,7 +3852,7 @@ yyreduce:
case 206:
/* Line 1455 of yacc.c */
-#line 1302 "css\\CSSGrammar.y"
+#line 1302 "css/CSSGrammar.y"
{
/* if we come across: div { color{;color:maroon} }, ignore everything within curly brackets */
(yyval.boolean) = false;
@@ -3862,7 +3862,7 @@ yyreduce:
case 207:
/* Line 1455 of yacc.c */
-#line 1309 "css\\CSSGrammar.y"
+#line 1309 "css/CSSGrammar.y"
{
(yyval.integer) = cssPropertyID((yyvsp[(1) - (2)].string));
;}
@@ -3871,21 +3871,21 @@ yyreduce:
case 208:
/* Line 1455 of yacc.c */
-#line 1315 "css\\CSSGrammar.y"
+#line 1315 "css/CSSGrammar.y"
{ (yyval.boolean) = true; ;}
break;
case 209:
/* Line 1455 of yacc.c */
-#line 1316 "css\\CSSGrammar.y"
+#line 1316 "css/CSSGrammar.y"
{ (yyval.boolean) = false; ;}
break;
case 210:
/* Line 1455 of yacc.c */
-#line 1320 "css\\CSSGrammar.y"
+#line 1320 "css/CSSGrammar.y"
{
CSSParser* p = static_cast<CSSParser*>(parser);
(yyval.valueList) = p->createFloatingValueList();
@@ -3896,7 +3896,7 @@ yyreduce:
case 211:
/* Line 1455 of yacc.c */
-#line 1325 "css\\CSSGrammar.y"
+#line 1325 "css/CSSGrammar.y"
{
CSSParser* p = static_cast<CSSParser*>(parser);
(yyval.valueList) = (yyvsp[(1) - (3)].valueList);
@@ -3916,7 +3916,7 @@ yyreduce:
case 212:
/* Line 1455 of yacc.c */
-#line 1339 "css\\CSSGrammar.y"
+#line 1339 "css/CSSGrammar.y"
{
(yyval.valueList) = 0;
;}
@@ -3925,7 +3925,7 @@ yyreduce:
case 213:
/* Line 1455 of yacc.c */
-#line 1342 "css\\CSSGrammar.y"
+#line 1342 "css/CSSGrammar.y"
{
(yyval.valueList) = 0;
;}
@@ -3934,7 +3934,7 @@ yyreduce:
case 214:
/* Line 1455 of yacc.c */
-#line 1345 "css\\CSSGrammar.y"
+#line 1345 "css/CSSGrammar.y"
{
(yyval.valueList) = 0;
;}
@@ -3943,7 +3943,7 @@ yyreduce:
case 215:
/* Line 1455 of yacc.c */
-#line 1351 "css\\CSSGrammar.y"
+#line 1351 "css/CSSGrammar.y"
{
(yyval.character) = '/';
;}
@@ -3952,7 +3952,7 @@ yyreduce:
case 216:
/* Line 1455 of yacc.c */
-#line 1354 "css\\CSSGrammar.y"
+#line 1354 "css/CSSGrammar.y"
{
(yyval.character) = ',';
;}
@@ -3961,7 +3961,7 @@ yyreduce:
case 217:
/* Line 1455 of yacc.c */
-#line 1357 "css\\CSSGrammar.y"
+#line 1357 "css/CSSGrammar.y"
{
(yyval.character) = 0;
;}
@@ -3970,28 +3970,28 @@ yyreduce:
case 218:
/* Line 1455 of yacc.c */
-#line 1363 "css\\CSSGrammar.y"
+#line 1363 "css/CSSGrammar.y"
{ (yyval.value) = (yyvsp[(1) - (1)].value); ;}
break;
case 219:
/* Line 1455 of yacc.c */
-#line 1364 "css\\CSSGrammar.y"
+#line 1364 "css/CSSGrammar.y"
{ (yyval.value) = (yyvsp[(2) - (2)].value); (yyval.value).fValue *= (yyvsp[(1) - (2)].integer); ;}
break;
case 220:
/* Line 1455 of yacc.c */
-#line 1365 "css\\CSSGrammar.y"
+#line 1365 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_STRING; ;}
break;
case 221:
/* Line 1455 of yacc.c */
-#line 1366 "css\\CSSGrammar.y"
+#line 1366 "css/CSSGrammar.y"
{
(yyval.value).id = cssValueKeywordID((yyvsp[(1) - (2)].string));
(yyval.value).unit = CSSPrimitiveValue::CSS_IDENT;
@@ -4002,49 +4002,49 @@ yyreduce:
case 222:
/* Line 1455 of yacc.c */
-#line 1372 "css\\CSSGrammar.y"
+#line 1372 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_DIMENSION; ;}
break;
case 223:
/* Line 1455 of yacc.c */
-#line 1373 "css\\CSSGrammar.y"
+#line 1373 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).string = (yyvsp[(2) - (3)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_DIMENSION; ;}
break;
case 224:
/* Line 1455 of yacc.c */
-#line 1374 "css\\CSSGrammar.y"
+#line 1374 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_URI; ;}
break;
case 225:
/* Line 1455 of yacc.c */
-#line 1375 "css\\CSSGrammar.y"
+#line 1375 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (2)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_UNICODE_RANGE; ;}
break;
case 226:
/* Line 1455 of yacc.c */
-#line 1376 "css\\CSSGrammar.y"
+#line 1376 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).string = (yyvsp[(1) - (1)].string); (yyval.value).unit = CSSPrimitiveValue::CSS_PARSER_HEXCOLOR; ;}
break;
case 227:
/* Line 1455 of yacc.c */
-#line 1377 "css\\CSSGrammar.y"
+#line 1377 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).string = CSSParserString(); (yyval.value).unit = CSSPrimitiveValue::CSS_PARSER_HEXCOLOR; ;}
break;
case 228:
/* Line 1455 of yacc.c */
-#line 1379 "css\\CSSGrammar.y"
+#line 1379 "css/CSSGrammar.y"
{
(yyval.value) = (yyvsp[(1) - (1)].value);
;}
@@ -4053,7 +4053,7 @@ yyreduce:
case 229:
/* Line 1455 of yacc.c */
-#line 1382 "css\\CSSGrammar.y"
+#line 1382 "css/CSSGrammar.y"
{
(yyval.value) = (yyvsp[(1) - (2)].value);
;}
@@ -4062,7 +4062,7 @@ yyreduce:
case 230:
/* Line 1455 of yacc.c */
-#line 1385 "css\\CSSGrammar.y"
+#line 1385 "css/CSSGrammar.y"
{ /* Handle width: %; */
(yyval.value).id = 0; (yyval.value).unit = 0;
;}
@@ -4071,147 +4071,147 @@ yyreduce:
case 231:
/* Line 1455 of yacc.c */
-#line 1391 "css\\CSSGrammar.y"
+#line 1391 "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 232:
/* Line 1455 of yacc.c */
-#line 1392 "css\\CSSGrammar.y"
+#line 1392 "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 233:
/* Line 1455 of yacc.c */
-#line 1393 "css\\CSSGrammar.y"
+#line 1393 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PERCENTAGE; ;}
break;
case 234:
/* Line 1455 of yacc.c */
-#line 1394 "css\\CSSGrammar.y"
+#line 1394 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PX; ;}
break;
case 235:
/* Line 1455 of yacc.c */
-#line 1395 "css\\CSSGrammar.y"
+#line 1395 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_CM; ;}
break;
case 236:
/* Line 1455 of yacc.c */
-#line 1396 "css\\CSSGrammar.y"
+#line 1396 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_MM; ;}
break;
case 237:
/* Line 1455 of yacc.c */
-#line 1397 "css\\CSSGrammar.y"
+#line 1397 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_IN; ;}
break;
case 238:
/* Line 1455 of yacc.c */
-#line 1398 "css\\CSSGrammar.y"
+#line 1398 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PT; ;}
break;
case 239:
/* Line 1455 of yacc.c */
-#line 1399 "css\\CSSGrammar.y"
+#line 1399 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_PC; ;}
break;
case 240:
/* Line 1455 of yacc.c */
-#line 1400 "css\\CSSGrammar.y"
+#line 1400 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_DEG; ;}
break;
case 241:
/* Line 1455 of yacc.c */
-#line 1401 "css\\CSSGrammar.y"
+#line 1401 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_RAD; ;}
break;
case 242:
/* Line 1455 of yacc.c */
-#line 1402 "css\\CSSGrammar.y"
+#line 1402 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_GRAD; ;}
break;
case 243:
/* Line 1455 of yacc.c */
-#line 1403 "css\\CSSGrammar.y"
+#line 1403 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_TURN; ;}
break;
case 244:
/* Line 1455 of yacc.c */
-#line 1404 "css\\CSSGrammar.y"
+#line 1404 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_MS; ;}
break;
case 245:
/* Line 1455 of yacc.c */
-#line 1405 "css\\CSSGrammar.y"
+#line 1405 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_S; ;}
break;
case 246:
/* Line 1455 of yacc.c */
-#line 1406 "css\\CSSGrammar.y"
+#line 1406 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_HZ; ;}
break;
case 247:
/* Line 1455 of yacc.c */
-#line 1407 "css\\CSSGrammar.y"
+#line 1407 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_KHZ; ;}
break;
case 248:
/* Line 1455 of yacc.c */
-#line 1408 "css\\CSSGrammar.y"
+#line 1408 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_EMS; ;}
break;
case 249:
/* Line 1455 of yacc.c */
-#line 1409 "css\\CSSGrammar.y"
+#line 1409 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSParserValue::Q_EMS; ;}
break;
case 250:
/* Line 1455 of yacc.c */
-#line 1410 "css\\CSSGrammar.y"
+#line 1410 "css/CSSGrammar.y"
{ (yyval.value).id = 0; (yyval.value).fValue = (yyvsp[(1) - (2)].number); (yyval.value).unit = CSSPrimitiveValue::CSS_EXS; ;}
break;
case 251:
/* Line 1455 of yacc.c */
-#line 1411 "css\\CSSGrammar.y"
+#line 1411 "css/CSSGrammar.y"
{
(yyval.value).id = 0;
(yyval.value).fValue = (yyvsp[(1) - (2)].number);
@@ -4225,7 +4225,7 @@ yyreduce:
case 252:
/* Line 1455 of yacc.c */
-#line 1422 "css\\CSSGrammar.y"
+#line 1422 "css/CSSGrammar.y"
{
(yyval.value).id = 0;
(yyval.value).string = (yyvsp[(1) - (1)].string);
@@ -4236,7 +4236,7 @@ yyreduce:
case 253:
/* Line 1455 of yacc.c */
-#line 1430 "css\\CSSGrammar.y"
+#line 1430 "css/CSSGrammar.y"
{
CSSParser* p = static_cast<CSSParser*>(parser);
CSSParserFunction* f = p->createFloatingFunction();
@@ -4251,7 +4251,7 @@ yyreduce:
case 254:
/* Line 1455 of yacc.c */
-#line 1439 "css\\CSSGrammar.y"
+#line 1439 "css/CSSGrammar.y"
{
CSSParser* p = static_cast<CSSParser*>(parser);
CSSParserFunction* f = p->createFloatingFunction();
@@ -4266,21 +4266,21 @@ yyreduce:
case 255:
/* Line 1455 of yacc.c */
-#line 1455 "css\\CSSGrammar.y"
+#line 1455 "css/CSSGrammar.y"
{ (yyval.string) = (yyvsp[(1) - (2)].string); ;}
break;
case 256:
/* Line 1455 of yacc.c */
-#line 1456 "css\\CSSGrammar.y"
+#line 1456 "css/CSSGrammar.y"
{ (yyval.string) = (yyvsp[(1) - (2)].string); ;}
break;
case 257:
/* Line 1455 of yacc.c */
-#line 1463 "css\\CSSGrammar.y"
+#line 1463 "css/CSSGrammar.y"
{
(yyval.rule) = 0;
;}
@@ -4289,7 +4289,7 @@ yyreduce:
case 258:
/* Line 1455 of yacc.c */
-#line 1466 "css\\CSSGrammar.y"
+#line 1466 "css/CSSGrammar.y"
{
(yyval.rule) = 0;
;}
@@ -4298,7 +4298,7 @@ yyreduce:
case 259:
/* Line 1455 of yacc.c */
-#line 1472 "css\\CSSGrammar.y"
+#line 1472 "css/CSSGrammar.y"
{
(yyval.rule) = 0;
;}
@@ -4307,7 +4307,7 @@ yyreduce:
case 260:
/* Line 1455 of yacc.c */
-#line 1475 "css\\CSSGrammar.y"
+#line 1475 "css/CSSGrammar.y"
{
(yyval.rule) = 0;
;}
@@ -4316,7 +4316,7 @@ yyreduce:
case 261:
/* Line 1455 of yacc.c */
-#line 1481 "css\\CSSGrammar.y"
+#line 1481 "css/CSSGrammar.y"
{
(yyval.rule) = 0;
;}
@@ -4325,7 +4325,7 @@ yyreduce:
case 262:
/* Line 1455 of yacc.c */
-#line 1499 "css\\CSSGrammar.y"
+#line 1499 "css/CSSGrammar.y"
{
static_cast<CSSParser*>(parser)->invalidBlockHit();
;}
@@ -4334,7 +4334,7 @@ yyreduce:
case 263:
/* Line 1455 of yacc.c */
-#line 1502 "css\\CSSGrammar.y"
+#line 1502 "css/CSSGrammar.y"
{
static_cast<CSSParser*>(parser)->invalidBlockHit();
;}
@@ -4343,7 +4343,7 @@ yyreduce:
/* Line 1455 of yacc.c */
-#line 4347 "C:/dev/webkit-2.0/WebCore/generated/CSSGrammar.tab.c"
+#line 4347 "/WebCore/generated/CSSGrammar.tab.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -4555,6 +4555,6 @@ yyreturn:
/* Line 1675 of yacc.c */
-#line 1512 "css\\CSSGrammar.y"
+#line 1512 "css/CSSGrammar.y"
diff --git a/src/3rdparty/webkit/WebCore/generated/CSSGrammar.h b/src/3rdparty/webkit/WebCore/generated/CSSGrammar.h
index 31d6cce..8e0f4bb 100644
--- a/src/3rdparty/webkit/WebCore/generated/CSSGrammar.h
+++ b/src/3rdparty/webkit/WebCore/generated/CSSGrammar.h
@@ -115,7 +115,7 @@ typedef union YYSTYPE
{
/* Line 1676 of yacc.c */
-#line 62 "css\\CSSGrammar.y"
+#line 62 "css/CSSGrammar.y"
bool boolean;
char character;
@@ -142,7 +142,7 @@ typedef union YYSTYPE
/* Line 1676 of yacc.c */
-#line 144 "C:/dev/webkit-2.0/WebCore/generated/CSSGrammar.tab.h"
+#line 144 "/WebCore/generated/CSSGrammar.tab.h"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
diff --git a/src/3rdparty/webkit/WebCore/generated/CSSPropertyNames.cpp b/src/3rdparty/webkit/WebCore/generated/CSSPropertyNames.cpp
index e6ed010..87fb55b 100644
--- a/src/3rdparty/webkit/WebCore/generated/CSSPropertyNames.cpp
+++ b/src/3rdparty/webkit/WebCore/generated/CSSPropertyNames.cpp
@@ -1,4 +1,4 @@
-/* ANSI-C code produced by gperf version 3.0.1 */
+/* ANSI-C code produced by gperf version 3.0.3 */
/* Command-line: gperf -a -L ANSI-C -E -C -c -o -t --key-positions='*' -NfindProp -Hhash_prop -Wwordlist_prop -D -s 2 CSSPropertyNames.gperf */
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
@@ -217,6 +217,9 @@ hash_prop (register const char *str, register unsigned int len)
#ifdef __GNUC__
__inline
+#ifdef __GNUC_STDC_INLINE__
+__attribute__ ((__gnu_inline__))
+#endif
#endif
const struct props *
findProp (register const char *str, register unsigned int len)
diff --git a/src/3rdparty/webkit/WebCore/generated/CSSValueKeywords.c b/src/3rdparty/webkit/WebCore/generated/CSSValueKeywords.c
index 89b1c4a..b7bf3de 100644
--- a/src/3rdparty/webkit/WebCore/generated/CSSValueKeywords.c
+++ b/src/3rdparty/webkit/WebCore/generated/CSSValueKeywords.c
@@ -1,4 +1,4 @@
-/* ANSI-C code produced by gperf version 3.0.1 */
+/* ANSI-C code produced by gperf version 3.0.3 */
/* Command-line: gperf -L ANSI-C -E -C -n -o -t --key-positions='*' -NfindValue -Hhash_val -Wwordlist_value -D CSSValueKeywords.gperf */
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
@@ -194,13 +194,16 @@ hash_val (register const char *str, register unsigned int len)
#ifdef __GNUC__
__inline
+#ifdef __GNUC_STDC_INLINE__
+__attribute__ ((__gnu_inline__))
+#endif
#endif
const struct css_value *
findValue (register const char *str, register unsigned int len)
{
enum
{
- TOTAL_KEYWORDS = 613,
+ TOTAL_KEYWORDS = 614,
MIN_WORD_LENGTH = 2,
MAX_WORD_LENGTH = 35,
MIN_HASH_VALUE = 0,
@@ -223,7 +226,7 @@ findValue (register const char *str, register unsigned int len)
{"end", CSSValueEnd},
#line 46 "CSSValueKeywords.gperf"
{"700", CSSValue700},
-#line 621 "CSSValueKeywords.gperf"
+#line 622 "CSSValueKeywords.gperf"
{"lr", CSSValueLr},
#line 45 "CSSValueKeywords.gperf"
{"600", CSSValue600},
@@ -233,17 +236,17 @@ findValue (register const char *str, register unsigned int len)
{"400", CSSValue400},
#line 41 "CSSValueKeywords.gperf"
{"200", CSSValue200},
-#line 623 "CSSValueKeywords.gperf"
+#line 624 "CSSValueKeywords.gperf"
{"tb", CSSValueTb},
#line 15 "CSSValueKeywords.gperf"
{"inset", CSSValueInset},
#line 146 "CSSValueKeywords.gperf"
{"sub", CSSValueSub},
-#line 520 "CSSValueKeywords.gperf"
+#line 521 "CSSValueKeywords.gperf"
{"indigo", CSSValueIndigo},
-#line 559 "CSSValueKeywords.gperf"
+#line 560 "CSSValueKeywords.gperf"
{"oldlace", CSSValueOldlace},
-#line 571 "CSSValueKeywords.gperf"
+#line 572 "CSSValueKeywords.gperf"
{"plum", CSSValuePlum},
#line 71 "CSSValueKeywords.gperf"
{"cursive", CSSValueCursive},
@@ -261,7 +264,7 @@ findValue (register const char *str, register unsigned int len)
{"armenian", CSSValueArmenian},
#line 299 "CSSValueKeywords.gperf"
{"above", CSSValueAbove},
-#line 590 "CSSValueKeywords.gperf"
+#line 591 "CSSValueKeywords.gperf"
{"tomato", CSSValueTomato},
#line 36 "CSSValueKeywords.gperf"
{"normal", CSSValueNormal},
@@ -269,7 +272,7 @@ findValue (register const char *str, register unsigned int len)
{"cross", CSSValueCross},
#line 352 "CSSValueKeywords.gperf"
{"multiple", CSSValueMultiple},
-#line 480 "CSSValueKeywords.gperf"
+#line 481 "CSSValueKeywords.gperf"
{"coral", CSSValueCoral},
#line 371 "CSSValueKeywords.gperf"
{"ellipsis", CSSValueEllipsis},
@@ -291,7 +294,7 @@ findValue (register const char *str, register unsigned int len)
{"contain", CSSValueContain},
#line 437 "CSSValueKeywords.gperf"
{"logical", CSSValueLogical},
-#line 616 "CSSValueKeywords.gperf"
+#line 617 "CSSValueKeywords.gperf"
{"no-change", CSSValueNoChange},
#line 308 "CSSValueKeywords.gperf"
{"crop", CSSValueCrop},
@@ -299,17 +302,17 @@ findValue (register const char *str, register unsigned int len)
{"blue", CSSValueBlue},
#line 444 "CSSValueKeywords.gperf"
{"ease", CSSValueEase},
-#line 588 "CSSValueKeywords.gperf"
+#line 589 "CSSValueKeywords.gperf"
{"tan", CSSValueTan},
#line 462 "CSSValueKeywords.gperf"
{"srgb", CSSValueSrgb},
#line 53 "CSSValueKeywords.gperf"
{"large", CSSValueLarge},
-#line 479 "CSSValueKeywords.gperf"
+#line 480 "CSSValueKeywords.gperf"
{"chocolate", CSSValueChocolate},
#line 258 "CSSValueKeywords.gperf"
{"auto", CSSValueAuto},
-#line 618 "CSSValueKeywords.gperf"
+#line 619 "CSSValueKeywords.gperf"
{"lr-tb", CSSValueLrTb},
#line 298 "CSSValueKeywords.gperf"
{"collapse", CSSValueCollapse},
@@ -323,9 +326,9 @@ findValue (register const char *str, register unsigned int len)
{"orange", CSSValueOrange},
#line 18 "CSSValueKeywords.gperf"
{"outset", CSSValueOutset},
-#line 576 "CSSValueKeywords.gperf"
+#line 577 "CSSValueKeywords.gperf"
{"salmon", CSSValueSalmon},
-#line 544 "CSSValueKeywords.gperf"
+#line 545 "CSSValueKeywords.gperf"
{"magenta", CSSValueMagenta},
#line 419 "CSSValueKeywords.gperf"
{"caret", CSSValueCaret},
@@ -335,9 +338,9 @@ findValue (register const char *str, register unsigned int len)
{"table", CSSValueTable},
#line 51 "CSSValueKeywords.gperf"
{"small", CSSValueSmall},
-#line 613 "CSSValueKeywords.gperf"
+#line 614 "CSSValueKeywords.gperf"
{"hanging", CSSValueHanging},
-#line 474 "CSSValueKeywords.gperf"
+#line 475 "CSSValueKeywords.gperf"
{"blueviolet", CSSValueBlueviolet},
#line 243 "CSSValueKeywords.gperf"
{"compact", CSSValueCompact},
@@ -365,10 +368,8 @@ findValue (register const char *str, register unsigned int len)
{"top", CSSValueTop},
#line 310 "CSSValueKeywords.gperf"
{"embed", CSSValueEmbed},
-#line 514 "CSSValueKeywords.gperf"
+#line 515 "CSSValueKeywords.gperf"
{"gold", CSSValueGold},
-#line 463 "CSSValueKeywords.gperf"
- {"mini", CSSValueMini},
#line 439 "CSSValueKeywords.gperf"
{"lines", CSSValueLines},
#line 351 "CSSValueKeywords.gperf"
@@ -383,11 +384,11 @@ findValue (register const char *str, register unsigned int len)
{"thin", CSSValueThin},
#line 21 "CSSValueKeywords.gperf"
{"solid", CSSValueSolid},
-#line 543 "CSSValueKeywords.gperf"
+#line 544 "CSSValueKeywords.gperf"
{"linen", CSSValueLinen},
#line 319 "CSSValueKeywords.gperf"
{"local", CSSValueLocal},
-#line 589 "CSSValueKeywords.gperf"
+#line 590 "CSSValueKeywords.gperf"
{"thistle", CSSValueThistle},
#line 392 "CSSValueKeywords.gperf"
{"listitem", CSSValueListitem},
@@ -399,31 +400,31 @@ findValue (register const char *str, register unsigned int len)
{"tibetan", CSSValueTibetan},
#line 105 "CSSValueKeywords.gperf"
{"highlight", CSSValueHighlight},
-#line 484 "CSSValueKeywords.gperf"
+#line 485 "CSSValueKeywords.gperf"
{"cyan", CSSValueCyan},
-#line 483 "CSSValueKeywords.gperf"
+#line 484 "CSSValueKeywords.gperf"
{"crimson", CSSValueCrimson},
#line 117 "CSSValueKeywords.gperf"
{"threedhighlight", CSSValueThreedhighlight},
-#line 592 "CSSValueKeywords.gperf"
+#line 593 "CSSValueKeywords.gperf"
{"violet", CSSValueViolet},
#line 164 "CSSValueKeywords.gperf"
{"circle", CSSValueCircle},
#line 370 "CSSValueKeywords.gperf"
{"clip", CSSValueClip},
-#line 535 "CSSValueKeywords.gperf"
+#line 536 "CSSValueKeywords.gperf"
{"lightsalmon", CSSValueLightsalmon},
-#line 557 "CSSValueKeywords.gperf"
+#line 558 "CSSValueKeywords.gperf"
{"moccasin", CSSValueMoccasin},
#line 206 "CSSValueKeywords.gperf"
{"ethiopic", CSSValueEthiopic},
-#line 603 "CSSValueKeywords.gperf"
+#line 604 "CSSValueKeywords.gperf"
{"butt", CSSValueButt},
#line 356 "CSSValueKeywords.gperf"
{"up", CSSValueUp},
#line 185 "CSSValueKeywords.gperf"
{"urdu", CSSValueUrdu},
-#line 622 "CSSValueKeywords.gperf"
+#line 623 "CSSValueKeywords.gperf"
{"rl", CSSValueRl},
#line 312 "CSSValueKeywords.gperf"
{"hand", CSSValueHand},
@@ -431,7 +432,7 @@ findValue (register const char *str, register unsigned int len)
{"aqua", CSSValueAqua},
#line 211 "CSSValueKeywords.gperf"
{"hangul", CSSValueHangul},
-#line 470 "CSSValueKeywords.gperf"
+#line 471 "CSSValueKeywords.gperf"
{"azure", CSSValueAzure},
#line 386 "CSSValueKeywords.gperf"
{"button", CSSValueButton},
@@ -447,7 +448,7 @@ findValue (register const char *str, register unsigned int len)
{"slow", CSSValueSlow},
#line 144 "CSSValueKeywords.gperf"
{"baseline", CSSValueBaseline},
-#line 585 "CSSValueKeywords.gperf"
+#line 586 "CSSValueKeywords.gperf"
{"snow", CSSValueSnow},
#line 338 "CSSValueKeywords.gperf"
{"static", CSSValueStatic},
@@ -457,7 +458,7 @@ findValue (register const char *str, register unsigned int len)
{"outside", CSSValueOutside},
#line 306 "CSSValueKeywords.gperf"
{"both", CSSValueBoth},
-#line 591 "CSSValueKeywords.gperf"
+#line 592 "CSSValueKeywords.gperf"
{"turquoise", CSSValueTurquoise},
#line 37 "CSSValueKeywords.gperf"
{"bold", CSSValueBold},
@@ -467,11 +468,11 @@ findValue (register const char *str, register unsigned int len)
{"inactivecaption", CSSValueInactivecaption},
#line 151 "CSSValueKeywords.gperf"
{"bottom", CSSValueBottom},
-#line 612 "CSSValueKeywords.gperf"
+#line 613 "CSSValueKeywords.gperf"
{"alphabetic", CSSValueAlphabetic},
-#line 562 "CSSValueKeywords.gperf"
+#line 563 "CSSValueKeywords.gperf"
{"orchid", CSSValueOrchid},
-#line 620 "CSSValueKeywords.gperf"
+#line 621 "CSSValueKeywords.gperf"
{"tb-rl", CSSValueTbRl},
#line 32 "CSSValueKeywords.gperf"
{"italic", CSSValueItalic},
@@ -483,7 +484,7 @@ findValue (register const char *str, register unsigned int len)
{"oblique", CSSValueOblique},
#line 438 "CSSValueKeywords.gperf"
{"visual", CSSValueVisual},
-#line 614 "CSSValueKeywords.gperf"
+#line 615 "CSSValueKeywords.gperf"
{"mathematical", CSSValueMathematical},
#line 22 "CSSValueKeywords.gperf"
{"double", CSSValueDouble},
@@ -503,7 +504,7 @@ findValue (register const char *str, register unsigned int len)
{"running", CSSValueRunning},
#line 279 "CSSValueKeywords.gperf"
{"w-resize", CSSValueWResize},
-#line 513 "CSSValueKeywords.gperf"
+#line 514 "CSSValueKeywords.gperf"
{"ghostwhite", CSSValueGhostwhite},
#line 163 "CSSValueKeywords.gperf"
{"disc", CSSValueDisc},
@@ -513,7 +514,7 @@ findValue (register const char *str, register unsigned int len)
{"padding", CSSValuePadding},
#line 200 "CSSValueKeywords.gperf"
{"amharic", CSSValueAmharic},
-#line 581 "CSSValueKeywords.gperf"
+#line 582 "CSSValueKeywords.gperf"
{"skyblue", CSSValueSkyblue},
#line 100 "CSSValueKeywords.gperf"
{"buttonhighlight", CSSValueButtonhighlight},
@@ -521,8 +522,6 @@ findValue (register const char *str, register unsigned int len)
{"landscape", CSSValueLandscape},
#line 246 "CSSValueKeywords.gperf"
{"inline-table", CSSValueInlineTable},
-#line 465 "CSSValueKeywords.gperf"
- {"application", CSSValueApplication},
#line 259 "CSSValueKeywords.gperf"
{"crosshair", CSSValueCrosshair},
#line 267 "CSSValueKeywords.gperf"
@@ -543,13 +542,13 @@ findValue (register const char *str, register unsigned int len)
{"portrait", CSSValuePortrait},
#line 130 "CSSValueKeywords.gperf"
{"no-repeat", CSSValueNoRepeat},
-#line 582 "CSSValueKeywords.gperf"
+#line 583 "CSSValueKeywords.gperf"
{"slateblue", CSSValueSlateblue},
#line 294 "CSSValueKeywords.gperf"
{"capitalize", CSSValueCapitalize},
-#line 619 "CSSValueKeywords.gperf"
+#line 620 "CSSValueKeywords.gperf"
{"rl-tb", CSSValueRlTb},
-#line 602 "CSSValueKeywords.gperf"
+#line 603 "CSSValueKeywords.gperf"
{"crispedges", CSSValueCrispedges},
#line 293 "CSSValueKeywords.gperf"
{"rtl", CSSValueRtl},
@@ -565,11 +564,13 @@ findValue (register const char *str, register unsigned int len)
{"small-caps", CSSValueSmallCaps},
#line 147 "CSSValueKeywords.gperf"
{"super", CSSValueSuper},
-#line 477 "CSSValueKeywords.gperf"
+#line 478 "CSSValueKeywords.gperf"
{"cadetblue", CSSValueCadetblue},
-#line 596 "CSSValueKeywords.gperf"
+#line 466 "CSSValueKeywords.gperf"
+ {"minimized", CSSValueMinimized},
+#line 597 "CSSValueKeywords.gperf"
{"nonzero", CSSValueNonzero},
-#line 475 "CSSValueKeywords.gperf"
+#line 476 "CSSValueKeywords.gperf"
{"brown", CSSValueBrown},
#line 90 "CSSValueKeywords.gperf"
{"white", CSSValueWhite},
@@ -603,29 +604,29 @@ findValue (register const char *str, register unsigned int len)
{"linear", CSSValueLinear},
#line 171 "CSSValueKeywords.gperf"
{"cambodian", CSSValueCambodian},
-#line 467 "CSSValueKeywords.gperf"
+#line 468 "CSSValueKeywords.gperf"
{"aliceblue", CSSValueAliceblue},
-#line 527 "CSSValueKeywords.gperf"
+#line 528 "CSSValueKeywords.gperf"
{"lightblue", CSSValueLightblue},
#line 314 "CSSValueKeywords.gperf"
{"higher", CSSValueHigher},
#line 19 "CSSValueKeywords.gperf"
{"dotted", CSSValueDotted},
-#line 564 "CSSValueKeywords.gperf"
+#line 565 "CSSValueKeywords.gperf"
{"palegreen", CSSValuePalegreen},
#line 141 "CSSValueKeywords.gperf"
{"xor", CSSValueXor},
#line 154 "CSSValueKeywords.gperf"
{"left", CSSValueLeft},
-#line 519 "CSSValueKeywords.gperf"
+#line 520 "CSSValueKeywords.gperf"
{"indianred", CSSValueIndianred},
#line 39 "CSSValueKeywords.gperf"
{"lighter", CSSValueLighter},
-#line 586 "CSSValueKeywords.gperf"
+#line 587 "CSSValueKeywords.gperf"
{"springgreen", CSSValueSpringgreen},
#line 80 "CSSValueKeywords.gperf"
{"green", CSSValueGreen},
-#line 482 "CSSValueKeywords.gperf"
+#line 483 "CSSValueKeywords.gperf"
{"cornsilk", CSSValueCornsilk},
#line 79 "CSSValueKeywords.gperf"
{"gray", CSSValueGray},
@@ -633,27 +634,27 @@ findValue (register const char *str, register unsigned int len)
{"round", CSSValueRound},
#line 181 "CSSValueKeywords.gperf"
{"myanmar", CSSValueMyanmar},
-#line 554 "CSSValueKeywords.gperf"
+#line 555 "CSSValueKeywords.gperf"
{"midnightblue", CSSValueMidnightblue},
#line 366 "CSSValueKeywords.gperf"
{"element", CSSValueElement},
-#line 555 "CSSValueKeywords.gperf"
+#line 556 "CSSValueKeywords.gperf"
{"mintcream", CSSValueMintcream},
#line 242 "CSSValueKeywords.gperf"
{"run-in", CSSValueRunIn},
#line 449 "CSSValueKeywords.gperf"
{"document", CSSValueDocument},
-#line 540 "CSSValueKeywords.gperf"
+#line 541 "CSSValueKeywords.gperf"
{"lightsteelblue", CSSValueLightsteelblue},
#line 264 "CSSValueKeywords.gperf"
{"cell", CSSValueCell},
#line 179 "CSSValueKeywords.gperf"
{"malayalam", CSSValueMalayalam},
-#line 532 "CSSValueKeywords.gperf"
+#line 533 "CSSValueKeywords.gperf"
{"lightgreen", CSSValueLightgreen},
#line 92 "CSSValueKeywords.gperf"
{"transparent", CSSValueTransparent},
-#line 542 "CSSValueKeywords.gperf"
+#line 543 "CSSValueKeywords.gperf"
{"limegreen", CSSValueLimegreen},
#line 456 "CSSValueKeywords.gperf"
{"stroke", CSSValueStroke},
@@ -661,7 +662,7 @@ findValue (register const char *str, register unsigned int len)
{"intrinsic", CSSValueIntrinsic},
#line 454 "CSSValueKeywords.gperf"
{"painted", CSSValuePainted},
-#line 536 "CSSValueKeywords.gperf"
+#line 537 "CSSValueKeywords.gperf"
{"lightseagreen", CSSValueLightseagreen},
#line 331 "CSSValueKeywords.gperf"
{"pre", CSSValuePre},
@@ -673,7 +674,7 @@ findValue (register const char *str, register unsigned int len)
{"gurmukhi", CSSValueGurmukhi},
#line 348 "CSSValueKeywords.gperf"
{"vertical", CSSValueVertical},
-#line 528 "CSSValueKeywords.gperf"
+#line 529 "CSSValueKeywords.gperf"
{"lightcoral", CSSValueLightcoral},
#line 384 "CSSValueKeywords.gperf"
{"push-button", CSSValuePushButton},
@@ -693,7 +694,7 @@ findValue (register const char *str, register unsigned int len)
{"close-quote", CSSValueCloseQuote},
#line 183 "CSSValueKeywords.gperf"
{"oriya", CSSValueOriya},
-#line 464 "CSSValueKeywords.gperf"
+#line 463 "CSSValueKeywords.gperf"
{"floating", CSSValueFloating},
#line 143 "CSSValueKeywords.gperf"
{"plus-lighter", CSSValuePlusLighter},
@@ -711,15 +712,15 @@ findValue (register const char *str, register unsigned int len)
{"source-in", CSSValueSourceIn},
#line 261 "CSSValueKeywords.gperf"
{"pointer", CSSValuePointer},
-#line 472 "CSSValueKeywords.gperf"
+#line 473 "CSSValueKeywords.gperf"
{"bisque", CSSValueBisque},
-#line 598 "CSSValueKeywords.gperf"
+#line 599 "CSSValueKeywords.gperf"
{"accumulate", CSSValueAccumulate},
#line 119 "CSSValueKeywords.gperf"
{"threedshadow", CSSValueThreedshadow},
#line 339 "CSSValueKeywords.gperf"
{"thick", CSSValueThick},
-#line 561 "CSSValueKeywords.gperf"
+#line 562 "CSSValueKeywords.gperf"
{"orangered", CSSValueOrangered},
#line 132 "CSSValueKeywords.gperf"
{"copy", CSSValueCopy},
@@ -729,9 +730,9 @@ findValue (register const char *str, register unsigned int len)
{"no-close-quote", CSSValueNoCloseQuote},
#line 459 "CSSValueKeywords.gperf"
{"optimizespeed", CSSValueOptimizespeed},
-#line 570 "CSSValueKeywords.gperf"
+#line 571 "CSSValueKeywords.gperf"
{"pink", CSSValuePink},
-#line 604 "CSSValueKeywords.gperf"
+#line 605 "CSSValueKeywords.gperf"
{"miter", CSSValueMiter},
#line 442 "CSSValueKeywords.gperf"
{"flat", CSSValueFlat},
@@ -741,7 +742,7 @@ findValue (register const char *str, register unsigned int len)
{"bolder", CSSValueBolder},
#line 436 "CSSValueKeywords.gperf"
{"cover", CSSValueCover},
-#line 469 "CSSValueKeywords.gperf"
+#line 470 "CSSValueKeywords.gperf"
{"aquamarine", CSSValueAquamarine},
#line 429 "CSSValueKeywords.gperf"
{"border", CSSValueBorder},
@@ -757,7 +758,7 @@ findValue (register const char *str, register unsigned int len)
{"button-bevel", CSSValueButtonBevel},
#line 325 "CSSValueKeywords.gperf"
{"no-open-quote", CSSValueNoOpenQuote},
-#line 529 "CSSValueKeywords.gperf"
+#line 530 "CSSValueKeywords.gperf"
{"lightcyan", CSSValueLightcyan},
#line 118 "CSSValueKeywords.gperf"
{"threedlightshadow", CSSValueThreedlightshadow},
@@ -769,13 +770,13 @@ findValue (register const char *str, register unsigned int len)
{"ahead", CSSValueAhead},
#line 284 "CSSValueKeywords.gperf"
{"col-resize", CSSValueColResize},
-#line 579 "CSSValueKeywords.gperf"
+#line 580 "CSSValueKeywords.gperf"
{"seashell", CSSValueSeashell},
-#line 473 "CSSValueKeywords.gperf"
+#line 474 "CSSValueKeywords.gperf"
{"blanchedalmond", CSSValueBlanchedalmond},
#line 76 "CSSValueKeywords.gperf"
{"black", CSSValueBlack},
-#line 518 "CSSValueKeywords.gperf"
+#line 519 "CSSValueKeywords.gperf"
{"hotpink", CSSValueHotpink},
#line 78 "CSSValueKeywords.gperf"
{"fuchsia", CSSValueFuchsia},
@@ -783,13 +784,13 @@ findValue (register const char *str, register unsigned int len)
{"down", CSSValueDown},
#line 409 "CSSValueKeywords.gperf"
{"menulist", CSSValueMenulist},
-#line 566 "CSSValueKeywords.gperf"
+#line 567 "CSSValueKeywords.gperf"
{"palevioletred", CSSValuePalevioletred},
-#line 515 "CSSValueKeywords.gperf"
+#line 516 "CSSValueKeywords.gperf"
{"goldenrod", CSSValueGoldenrod},
-#line 534 "CSSValueKeywords.gperf"
+#line 535 "CSSValueKeywords.gperf"
{"lightpink", CSSValueLightpink},
-#line 569 "CSSValueKeywords.gperf"
+#line 570 "CSSValueKeywords.gperf"
{"peru", CSSValuePeru},
#line 455 "CSSValueKeywords.gperf"
{"fill", CSSValueFill},
@@ -797,7 +798,7 @@ findValue (register const char *str, register unsigned int len)
{"kannada", CSSValueKannada},
#line 373 "CSSValueKeywords.gperf"
{"dot-dash", CSSValueDotDash},
-#line 492 "CSSValueKeywords.gperf"
+#line 493 "CSSValueKeywords.gperf"
{"darkmagenta", CSSValueDarkmagenta},
#line 174 "CSSValueKeywords.gperf"
{"gujarati", CSSValueGujarati},
@@ -813,17 +814,17 @@ findValue (register const char *str, register unsigned int len)
{"currentcolor", CSSValueCurrentcolor},
#line 172 "CSSValueKeywords.gperf"
{"khmer", CSSValueKhmer},
-#line 503 "CSSValueKeywords.gperf"
+#line 504 "CSSValueKeywords.gperf"
{"darkviolet", CSSValueDarkviolet},
#line 106 "CSSValueKeywords.gperf"
{"highlighttext", CSSValueHighlighttext},
-#line 497 "CSSValueKeywords.gperf"
+#line 498 "CSSValueKeywords.gperf"
{"darksalmon", CSSValueDarksalmon},
#line 305 "CSSValueKeywords.gperf"
{"blink", CSSValueBlink},
-#line 574 "CSSValueKeywords.gperf"
+#line 575 "CSSValueKeywords.gperf"
{"royalblue", CSSValueRoyalblue},
-#line 580 "CSSValueKeywords.gperf"
+#line 581 "CSSValueKeywords.gperf"
{"sienna", CSSValueSienna},
#line 349 "CSSValueKeywords.gperf"
{"inline-axis", CSSValueInlineAxis},
@@ -837,7 +838,7 @@ findValue (register const char *str, register unsigned int len)
{"buttonshadow", CSSValueButtonshadow},
#line 59 "CSSValueKeywords.gperf"
{"wider", CSSValueWider},
-#line 468 "CSSValueKeywords.gperf"
+#line 469 "CSSValueKeywords.gperf"
{"antiquewhite", CSSValueAntiquewhite},
#line 54 "CSSValueKeywords.gperf"
{"x-large", CSSValueXLarge},
@@ -845,7 +846,7 @@ findValue (register const char *str, register unsigned int len)
{"ethiopic-abegede", CSSValueEthiopicAbegede},
#line 207 "CSSValueKeywords.gperf"
{"ethiopic-halehame-gez", CSSValueEthiopicHalehameGez},
-#line 593 "CSSValueKeywords.gperf"
+#line 594 "CSSValueKeywords.gperf"
{"wheat", CSSValueWheat},
#line 295 "CSSValueKeywords.gperf"
{"uppercase", CSSValueUppercase},
@@ -853,19 +854,21 @@ findValue (register const char *str, register unsigned int len)
{"buttontext", CSSValueButtontext},
#line 317 "CSSValueKeywords.gperf"
{"level", CSSValueLevel},
-#line 560 "CSSValueKeywords.gperf"
+#line 561 "CSSValueKeywords.gperf"
{"olivedrab", CSSValueOlivedrab},
-#line 512 "CSSValueKeywords.gperf"
+#line 513 "CSSValueKeywords.gperf"
{"gainsboro", CSSValueGainsboro},
+#line 465 "CSSValueKeywords.gperf"
+ {"maximized", CSSValueMaximized},
#line 186 "CSSValueKeywords.gperf"
{"telugu", CSSValueTelugu},
-#line 607 "CSSValueKeywords.gperf"
+#line 608 "CSSValueKeywords.gperf"
{"after-edge", CSSValueAfterEdge},
#line 332 "CSSValueKeywords.gperf"
{"pre-line", CSSValuePreLine},
#line 87 "CSSValueKeywords.gperf"
{"red", CSSValueRed},
-#line 508 "CSSValueKeywords.gperf"
+#line 509 "CSSValueKeywords.gperf"
{"dodgerblue", CSSValueDodgerblue},
#line 83 "CSSValueKeywords.gperf"
{"navy", CSSValueNavy},
@@ -879,7 +882,7 @@ findValue (register const char *str, register unsigned int len)
{"inactivecaptiontext", CSSValueInactivecaptiontext},
#line 260 "CSSValueKeywords.gperf"
{"default", CSSValueDefault},
-#line 471 "CSSValueKeywords.gperf"
+#line 472 "CSSValueKeywords.gperf"
{"beige", CSSValueBeige},
#line 244 "CSSValueKeywords.gperf"
{"inline-block", CSSValueInlineBlock},
@@ -895,17 +898,17 @@ findValue (register const char *str, register unsigned int len)
{"captiontext", CSSValueCaptiontext},
#line 166 "CSSValueKeywords.gperf"
{"decimal", CSSValueDecimal},
-#line 583 "CSSValueKeywords.gperf"
+#line 584 "CSSValueKeywords.gperf"
{"slategray", CSSValueSlategray},
#line 156 "CSSValueKeywords.gperf"
{"center", CSSValueCenter},
-#line 584 "CSSValueKeywords.gperf"
+#line 585 "CSSValueKeywords.gperf"
{"slategrey", CSSValueSlategrey},
#line 99 "CSSValueKeywords.gperf"
{"buttonface", CSSValueButtonface},
-#line 563 "CSSValueKeywords.gperf"
+#line 564 "CSSValueKeywords.gperf"
{"palegoldenrod", CSSValuePalegoldenrod},
-#line 608 "CSSValueKeywords.gperf"
+#line 609 "CSSValueKeywords.gperf"
{"central", CSSValueCentral},
#line 269 "CSSValueKeywords.gperf"
{"not-allowed", CSSValueNotAllowed},
@@ -921,21 +924,21 @@ findValue (register const char *str, register unsigned int len)
{"sw-resize", CSSValueSwResize},
#line 318 "CSSValueKeywords.gperf"
{"line-through", CSSValueLineThrough},
-#line 594 "CSSValueKeywords.gperf"
+#line 595 "CSSValueKeywords.gperf"
{"whitesmoke", CSSValueWhitesmoke},
-#line 466 "CSSValueKeywords.gperf"
+#line 464 "CSSValueKeywords.gperf"
{"fullscreen", CSSValueFullscreen},
#line 120 "CSSValueKeywords.gperf"
{"window", CSSValueWindow},
#line 66 "CSSValueKeywords.gperf"
{"expanded", CSSValueExpanded},
-#line 517 "CSSValueKeywords.gperf"
+#line 518 "CSSValueKeywords.gperf"
{"honeydew", CSSValueHoneydew},
#line 274 "CSSValueKeywords.gperf"
{"nw-resize", CSSValueNwResize},
#line 326 "CSSValueKeywords.gperf"
{"nowrap", CSSValueNowrap},
-#line 523 "CSSValueKeywords.gperf"
+#line 524 "CSSValueKeywords.gperf"
{"lavender", CSSValueLavender},
#line 233 "CSSValueKeywords.gperf"
{"georgian", CSSValueGeorgian},
@@ -943,7 +946,7 @@ findValue (register const char *str, register unsigned int len)
{"xx-small", CSSValueXxSmall},
#line 133 "CSSValueKeywords.gperf"
{"source-over", CSSValueSourceOver},
-#line 511 "CSSValueKeywords.gperf"
+#line 512 "CSSValueKeywords.gperf"
{"forestgreen", CSSValueForestgreen},
#line 198 "CSSValueKeywords.gperf"
{"ethiopic-halehame-aa-et", CSSValueEthiopicHalehameAaEt},
@@ -953,99 +956,99 @@ findValue (register const char *str, register unsigned int len)
{"ethiopic-halehame-am-et", CSSValueEthiopicHalehameAmEt},
#line 452 "CSSValueKeywords.gperf"
{"visiblefill", CSSValueVisiblefill},
-#line 558 "CSSValueKeywords.gperf"
+#line 559 "CSSValueKeywords.gperf"
{"navajowhite", CSSValueNavajowhite},
#line 303 "CSSValueKeywords.gperf"
{"below", CSSValueBelow},
#line 286 "CSSValueKeywords.gperf"
{"text", CSSValueText},
-#line 605 "CSSValueKeywords.gperf"
+#line 606 "CSSValueKeywords.gperf"
{"bevel", CSSValueBevel},
#line 214 "CSSValueKeywords.gperf"
{"ethiopic-halehame-om-et", CSSValueEthiopicHalehameOmEt},
#line 276 "CSSValueKeywords.gperf"
{"se-resize", CSSValueSeResize},
-#line 556 "CSSValueKeywords.gperf"
+#line 557 "CSSValueKeywords.gperf"
{"mistyrose", CSSValueMistyrose},
#line 218 "CSSValueKeywords.gperf"
{"ethiopic-halehame-so-et", CSSValueEthiopicHalehameSoEt},
#line 432 "CSSValueKeywords.gperf"
{"content-box", CSSValueContentBox},
-#line 541 "CSSValueKeywords.gperf"
+#line 542 "CSSValueKeywords.gperf"
{"lightyellow", CSSValueLightyellow},
-#line 531 "CSSValueKeywords.gperf"
+#line 532 "CSSValueKeywords.gperf"
{"lightgray", CSSValueLightgray},
#line 226 "CSSValueKeywords.gperf"
{"ethiopic-halehame-ti-et", CSSValueEthiopicHalehameTiEt},
-#line 533 "CSSValueKeywords.gperf"
+#line 534 "CSSValueKeywords.gperf"
{"lightgrey", CSSValueLightgrey},
#line 265 "CSSValueKeywords.gperf"
{"context-menu", CSSValueContextMenu},
#line 273 "CSSValueKeywords.gperf"
{"ne-resize", CSSValueNeResize},
-#line 611 "CSSValueKeywords.gperf"
+#line 612 "CSSValueKeywords.gperf"
{"ideographic", CSSValueIdeographic},
-#line 478 "CSSValueKeywords.gperf"
+#line 479 "CSSValueKeywords.gperf"
{"chartreuse", CSSValueChartreuse},
-#line 522 "CSSValueKeywords.gperf"
+#line 523 "CSSValueKeywords.gperf"
{"khaki", CSSValueKhaki},
#line 250 "CSSValueKeywords.gperf"
{"table-row", CSSValueTableRow},
-#line 600 "CSSValueKeywords.gperf"
+#line 601 "CSSValueKeywords.gperf"
{"linearrgb", CSSValueLinearrgb},
-#line 538 "CSSValueKeywords.gperf"
- {"lightslategray", CSSValueLightslategray},
#line 539 "CSSValueKeywords.gperf"
+ {"lightslategray", CSSValueLightslategray},
+#line 540 "CSSValueKeywords.gperf"
{"lightslategrey", CSSValueLightslategrey},
-#line 525 "CSSValueKeywords.gperf"
+#line 526 "CSSValueKeywords.gperf"
{"lawngreen", CSSValueLawngreen},
-#line 587 "CSSValueKeywords.gperf"
+#line 588 "CSSValueKeywords.gperf"
{"steelblue", CSSValueSteelblue},
#line 127 "CSSValueKeywords.gperf"
{"repeat", CSSValueRepeat},
-#line 546 "CSSValueKeywords.gperf"
+#line 547 "CSSValueKeywords.gperf"
{"mediumblue", CSSValueMediumblue},
-#line 578 "CSSValueKeywords.gperf"
+#line 579 "CSSValueKeywords.gperf"
{"seagreen", CSSValueSeagreen},
#line 336 "CSSValueKeywords.gperf"
{"separate", CSSValueSeparate},
-#line 565 "CSSValueKeywords.gperf"
+#line 566 "CSSValueKeywords.gperf"
{"paleturquoise", CSSValuePaleturquoise},
-#line 485 "CSSValueKeywords.gperf"
+#line 486 "CSSValueKeywords.gperf"
{"darkblue", CSSValueDarkblue},
#line 138 "CSSValueKeywords.gperf"
{"destination-in", CSSValueDestinationIn},
-#line 476 "CSSValueKeywords.gperf"
+#line 477 "CSSValueKeywords.gperf"
{"burlywood", CSSValueBurlywood},
-#line 599 "CSSValueKeywords.gperf"
+#line 600 "CSSValueKeywords.gperf"
{"new", CSSValueNew},
-#line 550 "CSSValueKeywords.gperf"
+#line 551 "CSSValueKeywords.gperf"
{"mediumslateblue", CSSValueMediumslateblue},
#line 196 "CSSValueKeywords.gperf"
{"upper-latin", CSSValueUpperLatin},
-#line 499 "CSSValueKeywords.gperf"
+#line 500 "CSSValueKeywords.gperf"
{"darkslateblue", CSSValueDarkslateblue},
-#line 549 "CSSValueKeywords.gperf"
+#line 550 "CSSValueKeywords.gperf"
{"mediumseagreen", CSSValueMediumseagreen},
#line 104 "CSSValueKeywords.gperf"
{"graytext", CSSValueGraytext},
#line 458 "CSSValueKeywords.gperf"
{"subpixel-antialiased", CSSValueSubpixelAntialiased},
-#line 489 "CSSValueKeywords.gperf"
+#line 490 "CSSValueKeywords.gperf"
{"darkgreen", CSSValueDarkgreen},
#line 140 "CSSValueKeywords.gperf"
{"destination-atop", CSSValueDestinationAtop},
-#line 494 "CSSValueKeywords.gperf"
+#line 495 "CSSValueKeywords.gperf"
{"darkorange", CSSValueDarkorange},
#line 195 "CSSValueKeywords.gperf"
{"upper-alpha", CSSValueUpperAlpha},
-#line 498 "CSSValueKeywords.gperf"
+#line 499 "CSSValueKeywords.gperf"
{"darkseagreen", CSSValueDarkseagreen},
#line 377 "CSSValueKeywords.gperf"
{"skip-white-space", CSSValueSkipWhiteSpace},
#line 169 "CSSValueKeywords.gperf"
{"binary", CSSValueBinary},
-#line 521 "CSSValueKeywords.gperf"
+#line 522 "CSSValueKeywords.gperf"
{"ivory", CSSValueIvory},
#line 460 "CSSValueKeywords.gperf"
{"optimizelegibility", CSSValueOptimizelegibility},
@@ -1053,23 +1056,25 @@ findValue (register const char *str, register unsigned int len)
{"serif", CSSValueSerif},
#line 60 "CSSValueKeywords.gperf"
{"narrower", CSSValueNarrower},
-#line 575 "CSSValueKeywords.gperf"
+#line 576 "CSSValueKeywords.gperf"
{"saddlebrown", CSSValueSaddlebrown},
#line 209 "CSSValueKeywords.gperf"
{"ethiopic-abegede-gez", CSSValueEthiopicAbegedeGez},
+#line 467 "CSSValueKeywords.gperf"
+ {"windowed", CSSValueWindowed},
#line 72 "CSSValueKeywords.gperf"
{"fantasy", CSSValueFantasy},
#line 414 "CSSValueKeywords.gperf"
{"progress-bar", CSSValueProgressBar},
-#line 493 "CSSValueKeywords.gperf"
+#line 494 "CSSValueKeywords.gperf"
{"darkolivegreen", CSSValueDarkolivegreen},
#line 31 "CSSValueKeywords.gperf"
{"status-bar", CSSValueStatusBar},
-#line 506 "CSSValueKeywords.gperf"
- {"dimgray", CSSValueDimgray},
#line 507 "CSSValueKeywords.gperf"
+ {"dimgray", CSSValueDimgray},
+#line 508 "CSSValueKeywords.gperf"
{"dimgrey", CSSValueDimgrey},
-#line 567 "CSSValueKeywords.gperf"
+#line 568 "CSSValueKeywords.gperf"
{"papayawhip", CSSValuePapayawhip},
#line 453 "CSSValueKeywords.gperf"
{"visiblestroke", CSSValueVisiblestroke},
@@ -1089,9 +1094,9 @@ findValue (register const char *str, register unsigned int len)
{"destination-out", CSSValueDestinationOut},
#line 231 "CSSValueKeywords.gperf"
{"hebrew", CSSValueHebrew},
-#line 617 "CSSValueKeywords.gperf"
+#line 618 "CSSValueKeywords.gperf"
{"reset-size", CSSValueResetSize},
-#line 597 "CSSValueKeywords.gperf"
+#line 598 "CSSValueKeywords.gperf"
{"evenodd", CSSValueEvenodd},
#line 107 "CSSValueKeywords.gperf"
{"inactiveborder", CSSValueInactiveborder},
@@ -1103,7 +1108,7 @@ findValue (register const char *str, register unsigned int len)
{"overline", CSSValueOverline},
#line 389 "CSSValueKeywords.gperf"
{"inner-spin-button", CSSValueInnerSpinButton},
-#line 486 "CSSValueKeywords.gperf"
+#line 487 "CSSValueKeywords.gperf"
{"darkcyan", CSSValueDarkcyan},
#line 113 "CSSValueKeywords.gperf"
{"menutext", CSSValueMenutext},
@@ -1111,15 +1116,15 @@ findValue (register const char *str, register unsigned int len)
{"tigrinya-et", CSSValueTigrinyaEt},
#line 64 "CSSValueKeywords.gperf"
{"semi-condensed", CSSValueSemiCondensed},
-#line 496 "CSSValueKeywords.gperf"
+#line 497 "CSSValueKeywords.gperf"
{"darkred", CSSValueDarkred},
-#line 601 "CSSValueKeywords.gperf"
+#line 602 "CSSValueKeywords.gperf"
{"optimizequality", CSSValueOptimizequality},
#line 203 "CSSValueKeywords.gperf"
{"ethiopic-abegede-am-et", CSSValueEthiopicAbegedeAmEt},
#line 148 "CSSValueKeywords.gperf"
{"text-top", CSSValueTextTop},
-#line 510 "CSSValueKeywords.gperf"
+#line 511 "CSSValueKeywords.gperf"
{"floralwhite", CSSValueFloralwhite},
#line 70 "CSSValueKeywords.gperf"
{"sans-serif", CSSValueSansSerif},
@@ -1127,7 +1132,7 @@ findValue (register const char *str, register unsigned int len)
{"padding-box", CSSValuePaddingBox},
#line 55 "CSSValueKeywords.gperf"
{"xx-large", CSSValueXxLarge},
-#line 553 "CSSValueKeywords.gperf"
+#line 554 "CSSValueKeywords.gperf"
{"mediumvioletred", CSSValueMediumvioletred},
#line 228 "CSSValueKeywords.gperf"
{"ethiopic-abegede-ti-et", CSSValueEthiopicAbegedeTiEt},
@@ -1137,13 +1142,13 @@ findValue (register const char *str, register unsigned int len)
{"open-quote", CSSValueOpenQuote},
#line 61 "CSSValueKeywords.gperf"
{"ultra-condensed", CSSValueUltraCondensed},
-#line 547 "CSSValueKeywords.gperf"
+#line 548 "CSSValueKeywords.gperf"
{"mediumorchid", CSSValueMediumorchid},
-#line 524 "CSSValueKeywords.gperf"
+#line 525 "CSSValueKeywords.gperf"
{"lavenderblush", CSSValueLavenderblush},
#line 199 "CSSValueKeywords.gperf"
{"ethiopic-halehame-aa-er", CSSValueEthiopicHalehameAaEr},
-#line 495 "CSSValueKeywords.gperf"
+#line 496 "CSSValueKeywords.gperf"
{"darkorchid", CSSValueDarkorchid},
#line 410 "CSSValueKeywords.gperf"
{"menulist-button", CSSValueMenulistButton},
@@ -1163,11 +1168,11 @@ findValue (register const char *str, register unsigned int len)
{"ethiopic-halehame-ti-er", CSSValueEthiopicHalehameTiEr},
#line 95 "CSSValueKeywords.gperf"
{"activeborder", CSSValueActiveborder},
-#line 516 "CSSValueKeywords.gperf"
+#line 517 "CSSValueKeywords.gperf"
{"greenyellow", CSSValueGreenyellow},
#line 443 "CSSValueKeywords.gperf"
{"preserve-3d", CSSValuePreserve3d},
-#line 548 "CSSValueKeywords.gperf"
+#line 549 "CSSValueKeywords.gperf"
{"mediumpurple", CSSValueMediumpurple},
#line 263 "CSSValueKeywords.gperf"
{"vertical-text", CSSValueVerticalText},
@@ -1175,7 +1180,7 @@ findValue (register const char *str, register unsigned int len)
{"fixed", CSSValueFixed},
#line 378 "CSSValueKeywords.gperf"
{"break-all", CSSValueBreakAll},
-#line 615 "CSSValueKeywords.gperf"
+#line 616 "CSSValueKeywords.gperf"
{"use-script", CSSValueUseScript},
#line 413 "CSSValueKeywords.gperf"
{"outer-spin-button", CSSValueOuterSpinButton},
@@ -1195,23 +1200,23 @@ findValue (register const char *str, register unsigned int len)
{"forwards", CSSValueForwards},
#line 251 "CSSValueKeywords.gperf"
{"table-column-group", CSSValueTableColumnGroup},
-#line 606 "CSSValueKeywords.gperf"
+#line 607 "CSSValueKeywords.gperf"
{"before-edge", CSSValueBeforeEdge},
#line 415 "CSSValueKeywords.gperf"
{"slider-horizontal", CSSValueSliderHorizontal},
-#line 537 "CSSValueKeywords.gperf"
+#line 538 "CSSValueKeywords.gperf"
{"lightskyblue", CSSValueLightskyblue},
#line 26 "CSSValueKeywords.gperf"
{"message-box", CSSValueMessageBox},
-#line 545 "CSSValueKeywords.gperf"
+#line 546 "CSSValueKeywords.gperf"
{"mediumaquamarine", CSSValueMediumaquamarine},
#line 304 "CSSValueKeywords.gperf"
{"bidi-override", CSSValueBidiOverride},
-#line 572 "CSSValueKeywords.gperf"
+#line 573 "CSSValueKeywords.gperf"
{"powderblue", CSSValuePowderblue},
#line 388 "CSSValueKeywords.gperf"
{"default-button", CSSValueDefaultButton},
-#line 487 "CSSValueKeywords.gperf"
+#line 488 "CSSValueKeywords.gperf"
{"darkgoldenrod", CSSValueDarkgoldenrod},
#line 97 "CSSValueKeywords.gperf"
{"appworkspace", CSSValueAppworkspace},
@@ -1229,23 +1234,23 @@ findValue (register const char *str, register unsigned int len)
{"media-mute-button", CSSValueMediaMuteButton},
#line 346 "CSSValueKeywords.gperf"
{"reverse", CSSValueReverse},
-#line 488 "CSSValueKeywords.gperf"
+#line 489 "CSSValueKeywords.gperf"
{"darkgray", CSSValueDarkgray},
-#line 490 "CSSValueKeywords.gperf"
+#line 491 "CSSValueKeywords.gperf"
{"darkgrey", CSSValueDarkgrey},
#line 282 "CSSValueKeywords.gperf"
{"nesw-resize", CSSValueNeswResize},
-#line 551 "CSSValueKeywords.gperf"
+#line 552 "CSSValueKeywords.gperf"
{"mediumspringgreen", CSSValueMediumspringgreen},
#line 142 "CSSValueKeywords.gperf"
{"plus-darker", CSSValuePlusDarker},
-#line 500 "CSSValueKeywords.gperf"
- {"darkslategray", CSSValueDarkslategray},
#line 501 "CSSValueKeywords.gperf"
+ {"darkslategray", CSSValueDarkslategray},
+#line 502 "CSSValueKeywords.gperf"
{"darkslategrey", CSSValueDarkslategrey},
#line 285 "CSSValueKeywords.gperf"
{"row-resize", CSSValueRowResize},
-#line 577 "CSSValueKeywords.gperf"
+#line 578 "CSSValueKeywords.gperf"
{"sandybrown", CSSValueSandybrown},
#line 221 "CSSValueKeywords.gperf"
{"tigrinya-er", CSSValueTigrinyaEr},
@@ -1255,27 +1260,27 @@ findValue (register const char *str, register unsigned int len)
{"background", CSSValueBackground},
#line 430 "CSSValueKeywords.gperf"
{"border-box", CSSValueBorderBox},
-#line 552 "CSSValueKeywords.gperf"
+#line 553 "CSSValueKeywords.gperf"
{"mediumturquoise", CSSValueMediumturquoise},
-#line 502 "CSSValueKeywords.gperf"
+#line 503 "CSSValueKeywords.gperf"
{"darkturquoise", CSSValueDarkturquoise},
#line 115 "CSSValueKeywords.gperf"
{"threeddarkshadow", CSSValueThreeddarkshadow},
#line 224 "CSSValueKeywords.gperf"
{"ethiopic-abegede-ti-er", CSSValueEthiopicAbegedeTiEr},
-#line 573 "CSSValueKeywords.gperf"
+#line 574 "CSSValueKeywords.gperf"
{"rosybrown", CSSValueRosybrown},
#line 328 "CSSValueKeywords.gperf"
{"overlay", CSSValueOverlay},
-#line 491 "CSSValueKeywords.gperf"
+#line 492 "CSSValueKeywords.gperf"
{"darkkhaki", CSSValueDarkkhaki},
-#line 481 "CSSValueKeywords.gperf"
+#line 482 "CSSValueKeywords.gperf"
{"cornflowerblue", CSSValueCornflowerblue},
#line 402 "CSSValueKeywords.gperf"
{"media-sliderthumb", CSSValueMediaSliderthumb},
#line 418 "CSSValueKeywords.gperf"
{"sliderthumb-vertical", CSSValueSliderthumbVertical},
-#line 595 "CSSValueKeywords.gperf"
+#line 596 "CSSValueKeywords.gperf"
{"yellowgreen", CSSValueYellowgreen},
#line 354 "CSSValueKeywords.gperf"
{"backwards", CSSValueBackwards},
@@ -1283,7 +1288,7 @@ findValue (register const char *str, register unsigned int len)
{"table-header-group", CSSValueTableHeaderGroup},
#line 129 "CSSValueKeywords.gperf"
{"repeat-y", CSSValueRepeatY},
-#line 509 "CSSValueKeywords.gperf"
+#line 510 "CSSValueKeywords.gperf"
{"firebrick", CSSValueFirebrick},
#line 382 "CSSValueKeywords.gperf"
{"checkbox", CSSValueCheckbox},
@@ -1291,7 +1296,7 @@ findValue (register const char *str, register unsigned int len)
{"media-volume-slider", CSSValueMediaVolumeSlider},
#line 230 "CSSValueKeywords.gperf"
{"upper-norwegian", CSSValueUpperNorwegian},
-#line 530 "CSSValueKeywords.gperf"
+#line 531 "CSSValueKeywords.gperf"
{"lightgoldenrodyellow", CSSValueLightgoldenrodyellow},
#line 65 "CSSValueKeywords.gperf"
{"semi-expanded", CSSValueSemiExpanded},
@@ -1315,7 +1320,7 @@ findValue (register const char *str, register unsigned int len)
{"upper-greek", CSSValueUpperGreek},
#line 247 "CSSValueKeywords.gperf"
{"table-row-group", CSSValueTableRowGroup},
-#line 526 "CSSValueKeywords.gperf"
+#line 527 "CSSValueKeywords.gperf"
{"lemonchiffon", CSSValueLemonchiffon},
#line 212 "CSSValueKeywords.gperf"
{"lower-norwegian", CSSValueLowerNorwegian},
@@ -1325,7 +1330,7 @@ findValue (register const char *str, register unsigned int len)
{"media-play-button", CSSValueMediaPlayButton},
#line 427 "CSSValueKeywords.gperf"
{"caps-lock-indicator", CSSValueCapsLockIndicator},
-#line 504 "CSSValueKeywords.gperf"
+#line 505 "CSSValueKeywords.gperf"
{"deeppink", CSSValueDeeppink},
#line 121 "CSSValueKeywords.gperf"
{"windowframe", CSSValueWindowframe},
@@ -1347,7 +1352,7 @@ findValue (register const char *str, register unsigned int len)
{"table-footer-group", CSSValueTableFooterGroup},
#line 223 "CSSValueKeywords.gperf"
{"tigrinya-er-abegede", CSSValueTigrinyaErAbegede},
-#line 568 "CSSValueKeywords.gperf"
+#line 569 "CSSValueKeywords.gperf"
{"peachpuff", CSSValuePeachpuff},
#line 379 "CSSValueKeywords.gperf"
{"break-word", CSSValueBreakWord},
@@ -1373,11 +1378,11 @@ findValue (register const char *str, register unsigned int len)
{"-webkit-center", CSSValueWebkitCenter},
#line 393 "CSSValueKeywords.gperf"
{"media-fullscreen-button", CSSValueMediaFullscreenButton},
-#line 610 "CSSValueKeywords.gperf"
+#line 611 "CSSValueKeywords.gperf"
{"text-after-edge", CSSValueTextAfterEdge},
#line 30 "CSSValueKeywords.gperf"
{"-webkit-control", CSSValueWebkitControl},
-#line 505 "CSSValueKeywords.gperf"
+#line 506 "CSSValueKeywords.gperf"
{"deepskyblue", CSSValueDeepskyblue},
#line 290 "CSSValueKeywords.gperf"
{"-webkit-grab", CSSValueWebkitGrab},
@@ -1391,7 +1396,7 @@ findValue (register const char *str, register unsigned int len)
{"-webkit-text", CSSValueWebkitText},
#line 94 "CSSValueKeywords.gperf"
{"-webkit-activelink", CSSValueWebkitActivelink},
-#line 609 "CSSValueKeywords.gperf"
+#line 610 "CSSValueKeywords.gperf"
{"text-before-edge", CSSValueTextBeforeEdge},
#line 421 "CSSValueKeywords.gperf"
{"searchfield-decoration", CSSValueSearchfieldDecoration},
@@ -1479,118 +1484,118 @@ findValue (register const char *str, register unsigned int len)
-1, 66, -1, -1, -1, 67, 68, -1, -1, -1,
69, 70, 71, -1, -1, 72, -1, -1, 73, -1,
-1, 74, -1, -1, -1, 75, -1, 76, -1, -1,
- 77, 78, -1, -1, -1, -1, 79, -1, -1, -1,
- -1, 80, 81, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 82, -1, -1, 83, 84, -1, -1,
- -1, -1, -1, -1, -1, -1, 85, -1, -1, -1,
- 86, 87, -1, -1, -1, 88, 89, -1, -1, -1,
- -1, 90, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 91, 92, -1, -1, -1,
+ 77, 78, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 79, 80, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 81, -1, -1, 82, 83, -1, -1,
+ -1, -1, -1, -1, -1, -1, 84, -1, -1, -1,
+ 85, 86, -1, -1, -1, 87, 88, -1, -1, -1,
+ -1, 89, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 90, 91, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 92, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 93, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 94, -1, -1, -1,
- 95, 96, -1, -1, -1, -1, -1, -1, -1, -1,
- 97, -1, -1, 98, -1, -1, 99, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 100, -1, 101, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 102, -1, -1, -1, -1,
- 103, -1, 104, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 105, -1, -1, 106, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 107, 108, 109, -1, -1,
- -1, -1, 110, -1, -1, -1, -1, 111, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 112, -1, -1,
- -1, 113, -1, -1, -1, -1, 114, 115, -1, -1,
- 116, 117, -1, -1, -1, 118, -1, -1, -1, -1,
- -1, 119, -1, -1, -1, -1, -1, -1, -1, -1,
- 120, -1, -1, -1, -1, -1, 121, 122, -1, -1,
- -1, 123, -1, -1, -1, -1, -1, -1, -1, 124,
- 125, 126, 127, -1, -1, 128, -1, -1, 129, -1,
- -1, 130, -1, 131, -1, 132, -1, 133, -1, -1,
- -1, 134, 135, 136, -1, -1, 137, -1, -1, -1,
- -1, -1, 138, 139, -1, 140, -1, 141, -1, -1,
- 142, 143, -1, -1, -1, -1, -1, -1, -1, -1,
- 144, -1, -1, 145, 146, -1, -1, -1, 147, -1,
- -1, -1, -1, -1, -1, -1, 148, 149, -1, -1,
- -1, 150, -1, -1, -1, 151, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 152, -1, -1, -1, -1,
- -1, -1, 153, -1, -1, -1, -1, -1, -1, -1,
+ 94, 95, -1, -1, -1, -1, -1, -1, -1, -1,
+ 96, -1, -1, 97, -1, -1, 98, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 99, -1, 100, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 101, -1, -1, -1, -1,
+ 102, -1, 103, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 104, -1, -1, 105, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 106, 107, 108, -1, -1,
+ -1, -1, 109, -1, -1, -1, -1, 110, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 111, -1, -1,
+ -1, 112, -1, -1, -1, -1, 113, 114, -1, -1,
+ 115, 116, -1, -1, -1, 117, -1, -1, -1, -1,
+ -1, 118, -1, -1, -1, -1, -1, -1, -1, -1,
+ 119, -1, -1, -1, -1, -1, 120, 121, -1, -1,
+ -1, 122, -1, -1, -1, -1, -1, -1, -1, 123,
+ 124, 125, 126, -1, -1, 127, -1, -1, 128, -1,
+ -1, 129, -1, 130, -1, 131, -1, 132, -1, -1,
+ -1, 133, 134, 135, -1, -1, 136, -1, -1, -1,
+ -1, -1, 137, 138, -1, 139, -1, 140, -1, -1,
+ 141, 142, -1, -1, -1, -1, -1, -1, -1, -1,
+ 143, -1, -1, 144, 145, -1, -1, -1, 146, -1,
+ -1, -1, -1, -1, -1, -1, 147, 148, -1, -1,
+ -1, 149, -1, -1, -1, 150, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 151, -1, -1, -1, -1,
+ -1, -1, 152, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 153, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 154, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 155, -1, -1, -1, 156,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 157, -1, -1, -1, -1, 158, -1, -1, -1,
- -1, 159, -1, -1, -1, 160, -1, -1, 161, -1,
- 162, 163, -1, -1, -1, 164, -1, -1, -1, -1,
- 165, -1, -1, 166, -1, 167, -1, 168, 169, -1,
- -1, -1, -1, -1, -1, -1, -1, 170, -1, -1,
- 171, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 172, 173, -1, -1, -1, -1, -1, -1, -1,
- 174, 175, -1, -1, -1, 176, -1, -1, -1, 177,
- 178, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 179, -1, -1, -1, -1, -1, 180, 181, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 182, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 183, -1, -1, -1, 184, -1, -1, -1, -1,
- 185, -1, -1, -1, -1, -1, -1, 186, -1, -1,
- -1, -1, -1, 187, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 188, -1, 189, -1, 190, -1, -1,
- 191, 192, -1, -1, -1, -1, -1, -1, 193, -1,
- 194, 195, -1, -1, -1, 196, 197, -1, 198, 199,
- 200, 201, -1, -1, -1, 202, 203, -1, -1, -1,
- 204, -1, -1, -1, -1, -1, -1, -1, 205, 206,
- -1, -1, -1, -1, -1, -1, 207, 208, -1, -1,
- -1, 209, 210, -1, -1, 211, -1, -1, 212, -1,
- 213, 214, 215, -1, -1, 216, -1, -1, -1, -1,
- -1, -1, -1, 217, -1, 218, -1, -1, -1, -1,
- 219, -1, -1, -1, 220, 221, -1, 222, -1, -1,
- -1, -1, 223, -1, -1, 224, 225, -1, -1, 226,
- 227, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 228, 229, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 230, -1, -1, -1, -1, -1, 231, 232, -1,
- -1, -1, -1, 233, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 234, 235, -1, -1, 236, -1, -1, -1, -1,
- 237, -1, -1, 238, -1, -1, 239, 240, -1, -1,
- -1, 241, -1, -1, -1, -1, 242, -1, -1, 243,
- 244, -1, -1, -1, -1, -1, -1, 245, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 246, 247, -1, -1, -1, 248, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 249, -1, -1,
- -1, 250, -1, 251, -1, 252, -1, 253, 254, -1,
- -1, 255, 256, -1, -1, -1, -1, -1, -1, -1,
- 257, -1, -1, -1, -1, 258, -1, 259, 260, -1,
- -1, 261, -1, -1, -1, 262, -1, -1, -1, -1,
- 263, -1, -1, -1, -1, 264, 265, 266, -1, -1,
- 267, -1, 268, -1, -1, 269, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 270, -1, 271, -1, 272,
- -1, -1, -1, -1, -1, 273, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 274, 275,
- 276, 277, -1, -1, -1, 278, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 279, -1, -1, -1, -1,
- -1, 280, -1, -1, -1, -1, 281, 282, 283, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 284, -1,
- 285, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 286, -1, 287, -1, -1, -1, 288, -1, -1, -1,
- 289, -1, -1, -1, -1, 290, 291, 292, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 293, -1, 294, -1, 295, -1, -1, -1, -1,
- 296, 297, -1, -1, -1, 298, -1, -1, -1, -1,
- -1, -1, -1, 299, -1, -1, -1, 300, -1, -1,
- -1, -1, 301, -1, 302, -1, 303, 304, 305, -1,
- -1, -1, -1, -1, -1, 306, 307, -1, -1, -1,
- 308, -1, -1, -1, -1, 309, -1, 310, -1, -1,
- -1, -1, -1, -1, 311, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 312,
- -1, -1, 313, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 314, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 315,
- -1, 316, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 317, -1, -1, 318, -1, -1, -1,
- -1, -1, -1, -1, 319, -1, -1, 320, -1, -1,
- -1, 321, -1, 322, -1, -1, -1, 323, -1, -1,
- -1, -1, -1, -1, -1, -1, 324, 325, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 155, -1, -1, -1, -1, 156, -1, -1, -1,
+ -1, 157, -1, -1, -1, 158, -1, -1, 159, -1,
+ 160, 161, -1, -1, -1, 162, -1, -1, -1, -1,
+ 163, -1, -1, 164, -1, 165, -1, 166, 167, -1,
+ -1, -1, -1, -1, -1, -1, -1, 168, -1, -1,
+ 169, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 170, 171, -1, -1, -1, -1, -1, -1, -1,
+ 172, 173, -1, -1, -1, 174, -1, -1, -1, 175,
+ 176, -1, -1, -1, -1, -1, 177, -1, -1, -1,
+ 178, -1, -1, -1, -1, -1, 179, 180, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 181, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 182, -1, -1, -1, 183, -1, -1, -1, -1,
+ 184, -1, -1, -1, -1, -1, -1, 185, -1, -1,
+ -1, -1, -1, 186, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 187, -1, 188, -1, 189, -1, -1,
+ 190, 191, -1, -1, -1, -1, -1, -1, 192, -1,
+ 193, 194, -1, -1, -1, 195, 196, -1, 197, 198,
+ 199, 200, -1, -1, -1, 201, 202, -1, -1, -1,
+ 203, -1, -1, -1, -1, -1, -1, -1, 204, 205,
+ -1, -1, -1, -1, -1, -1, 206, 207, -1, -1,
+ -1, 208, 209, -1, -1, 210, -1, -1, 211, -1,
+ 212, 213, 214, -1, -1, 215, -1, -1, -1, -1,
+ -1, -1, -1, 216, -1, 217, -1, -1, -1, -1,
+ 218, -1, -1, -1, 219, 220, -1, 221, -1, -1,
+ -1, -1, 222, -1, -1, 223, 224, -1, -1, 225,
+ 226, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 227, 228, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 229, -1, -1, -1, -1, -1, 230, 231, -1,
+ -1, -1, -1, 232, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 233, 234, -1, -1, 235, -1, -1, -1, -1,
+ 236, -1, -1, 237, -1, -1, 238, 239, -1, -1,
+ -1, 240, -1, -1, -1, -1, 241, -1, -1, 242,
+ 243, -1, -1, -1, -1, -1, -1, 244, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 245, 246, -1, -1, -1, 247, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 248, -1, -1,
+ -1, 249, -1, 250, -1, 251, -1, 252, 253, -1,
+ -1, 254, 255, -1, -1, -1, -1, -1, -1, -1,
+ 256, -1, -1, -1, -1, 257, -1, 258, 259, -1,
+ -1, 260, -1, -1, -1, 261, -1, -1, -1, -1,
+ 262, -1, -1, -1, -1, 263, 264, 265, -1, -1,
+ 266, -1, 267, -1, -1, 268, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 269, -1, 270, -1, 271,
+ -1, -1, -1, -1, -1, 272, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 273, 274,
+ 275, 276, -1, -1, -1, 277, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 278, -1, -1, -1, -1,
+ -1, 279, -1, -1, -1, -1, 280, 281, 282, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 283, -1,
+ 284, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 285, -1, 286, -1, -1, -1, 287, -1, -1, -1,
+ 288, -1, -1, -1, -1, 289, 290, 291, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 292, -1, 293, -1, 294, -1, -1, -1, -1,
+ 295, 296, -1, -1, -1, 297, -1, -1, -1, -1,
+ -1, -1, -1, 298, -1, -1, -1, 299, -1, -1,
+ -1, -1, 300, -1, 301, -1, 302, 303, 304, -1,
+ -1, -1, -1, -1, -1, 305, 306, -1, -1, -1,
+ 307, -1, -1, -1, -1, 308, -1, 309, -1, -1,
+ -1, -1, -1, -1, 310, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 311,
+ -1, -1, 312, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 313, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 314,
+ -1, 315, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 316, -1, -1, 317, -1, -1, -1,
+ -1, -1, -1, -1, 318, -1, -1, 319, -1, -1,
+ -1, 320, -1, 321, -1, -1, -1, 322, -1, -1,
+ -1, -1, -1, -1, -1, 323, 324, 325, -1, -1,
326, -1, -1, -1, -1, 327, -1, -1, -1, -1,
-1, 328, -1, -1, -1, -1, 329, -1, -1, -1,
-1, 330, -1, -1, -1, 331, -1, -1, -1, -1,
@@ -1636,136 +1641,135 @@ findValue (register const char *str, register unsigned int len)
-1, 417, -1, -1, -1, -1, 418, -1, 419, -1,
420, -1, -1, -1, -1, -1, 421, -1, -1, -1,
-1, 422, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 423, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 424, 425, -1, -1, -1,
- -1, -1, -1, -1, -1, 426, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 427, -1, 428, -1, -1, -1, -1, 429, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 430,
- 431, 432, -1, -1, -1, -1, -1, -1, -1, 433,
- 434, -1, 435, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 436, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 437, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 438, -1, 439, -1, -1, 440, 441, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 442, -1, -1,
- -1, -1, -1, 443, -1, -1, -1, -1, -1, -1,
- -1, -1, 444, -1, -1, -1, -1, -1, -1, -1,
- -1, 445, -1, -1, -1, 446, -1, 447, -1, -1,
- -1, -1, -1, -1, -1, 448, -1, 449, -1, -1,
- 450, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 451, -1, -1, -1, -1, -1, -1, 452,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 453, -1, -1, -1, 454, -1, 455, -1, -1,
- 456, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 457, -1, -1, -1, -1, -1, -1, -1, 458,
- -1, -1, 459, -1, -1, -1, 460, -1, -1, -1,
- -1, 461, -1, -1, 462, 463, -1, -1, -1, -1,
- -1, 464, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 465, -1, -1, -1, -1, 466, -1, -1,
- -1, -1, -1, 467, -1, -1, -1, -1, -1, -1,
- 468, -1, -1, -1, -1, 469, -1, -1, -1, -1,
- -1, -1, -1, -1, 470, 471, -1, -1, 472, 473,
- -1, -1, -1, 474, -1, -1, -1, 475, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 476, -1, -1,
- -1, -1, 477, -1, -1, -1, -1, 478, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 479, -1, 480, -1, -1,
- -1, -1, -1, -1, -1, -1, 481, 482, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 483, -1, 484, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 485, -1, -1, 486, -1, 487, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 488, 489, -1, -1, -1, -1,
- -1, -1, 490, -1, -1, -1, -1, -1, -1, -1,
- -1, 491, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 423, 424, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 425, 426, -1, -1, -1,
+ -1, -1, -1, -1, -1, 427, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 428, -1, 429, -1, -1, -1, -1, 430, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 431,
+ 432, 433, -1, -1, -1, -1, -1, -1, -1, 434,
+ 435, -1, 436, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 437, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 438, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 439, -1, 440, -1, -1, 441, 442, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 443, -1, -1,
+ -1, -1, -1, 444, -1, -1, -1, -1, -1, -1,
+ -1, -1, 445, -1, -1, -1, -1, -1, -1, -1,
+ -1, 446, -1, -1, -1, 447, -1, 448, -1, -1,
+ -1, -1, -1, -1, -1, 449, -1, 450, -1, -1,
+ 451, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 452, -1, -1, -1, -1, -1, -1, 453,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 454, -1, -1, -1, 455, -1, 456, -1, -1,
+ 457, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 458, -1, -1, -1, -1, -1, -1, -1, 459,
+ -1, -1, 460, -1, -1, -1, 461, -1, -1, -1,
+ -1, 462, -1, -1, 463, 464, -1, -1, -1, -1,
+ -1, 465, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 466, -1, -1, -1, -1, 467, -1, -1,
+ -1, -1, -1, 468, -1, -1, -1, -1, -1, -1,
+ 469, -1, -1, -1, -1, 470, -1, -1, -1, -1,
+ -1, -1, -1, -1, 471, 472, -1, -1, 473, 474,
+ -1, -1, -1, 475, -1, -1, -1, 476, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 477, -1, -1,
+ -1, -1, 478, -1, -1, -1, -1, 479, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 480, -1, 481, -1, -1,
+ -1, -1, -1, -1, -1, -1, 482, 483, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 484, -1, 485, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 486, -1, -1, 487, -1, 488, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 489, 490, -1, -1, -1, -1,
+ -1, -1, 491, -1, -1, -1, -1, -1, -1, -1,
-1, 492, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 493, -1, -1,
+ -1, 493, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 494, -1, -1,
- -1, -1, -1, -1, -1, 495, -1, -1, -1, -1,
- -1, 496, 497, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 498, -1,
- 499, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 500, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 495, -1, -1,
+ -1, -1, -1, -1, -1, 496, -1, -1, -1, -1,
+ -1, 497, 498, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 499, -1,
+ 500, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 501, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 501, -1, -1, -1, -1, -1, -1,
- -1, -1, 502, -1, -1, 503, -1, -1, -1, -1,
- -1, -1, -1, 504, -1, -1, -1, -1, -1, -1,
- 505, 506, -1, -1, -1, -1, 507, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 508, 509, -1, -1, -1,
- -1, -1, -1, 510, -1, -1, -1, -1, 511, -1,
- -1, 512, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 502, -1, -1, -1, -1, -1, -1,
+ -1, -1, 503, -1, -1, 504, -1, -1, -1, -1,
+ -1, -1, -1, 505, -1, -1, -1, -1, -1, -1,
+ 506, 507, -1, -1, -1, -1, 508, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 513, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 514,
- -1, -1, -1, 515, -1, -1, -1, -1, 516, -1,
- 517, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 509, 510, -1, -1, -1,
+ -1, -1, -1, 511, -1, -1, -1, -1, 512, -1,
+ -1, 513, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 518, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 519, -1, -1,
+ -1, -1, 514, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 515,
+ -1, -1, -1, 516, -1, -1, -1, -1, 517, -1,
+ 518, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 520, -1, -1, -1, -1, -1, -1, -1, 521, -1,
- 522, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 523, -1, -1,
+ -1, 519, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 520, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 524,
+ 521, -1, -1, -1, -1, -1, -1, -1, 522, -1,
+ 523, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 524, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 525,
- -1, -1, -1, -1, -1, -1, 526, -1, -1, -1,
- -1, 527, -1, -1, -1, -1, 528, -1, -1, -1,
- -1, -1, 529, -1, -1, -1, -1, -1, -1, -1,
- -1, 530, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 526,
+ -1, -1, -1, -1, -1, -1, 527, -1, -1, -1,
+ -1, 528, -1, -1, -1, -1, 529, -1, -1, -1,
+ -1, -1, 530, -1, -1, -1, -1, -1, -1, -1,
-1, 531, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 532,
- -1, -1, 533, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 532, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 533,
+ -1, -1, 534, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 534, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 535, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 536, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 535, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 536, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 537, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 537, -1, -1, -1, 538, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 539, -1, -1,
- -1, 540, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 541, -1, -1, -1, -1, 542, -1, -1, -1, -1,
+ -1, -1, -1, 538, -1, -1, -1, 539, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 540, -1, -1,
+ -1, 541, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 543, -1, 544, -1, -1, -1, -1,
- 545, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 542, -1, -1, -1, -1, 543, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 546, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 547, -1,
+ -1, -1, -1, 544, -1, 545, -1, -1, -1, -1,
+ 546, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 547, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 548, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 548, -1, -1, 549, -1, -1, -1, -1,
- 550, -1, 551, -1, -1, -1, -1, 552, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 553, -1, -1, -1,
- -1, -1, 554, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 549, -1, -1, 550, -1, -1, -1, -1,
+ 551, -1, 552, -1, -1, -1, -1, 553, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 555, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 554, -1, -1, -1,
+ -1, -1, 555, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 556, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 556, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 557,
- -1, -1, 558, 559, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 557, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 558,
+ -1, -1, 559, 560, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 560, -1, -1, -1,
- -1, -1, -1, 561, -1, 562, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 561, -1, -1, -1,
+ -1, -1, -1, 562, -1, 563, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
@@ -1784,38 +1788,38 @@ findValue (register const char *str, register unsigned int len)
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 563, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 564, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 564, -1, -1, 565, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 565, -1, -1, 566, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 566, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 567, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 567, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 568, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 568, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 569, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 569, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 570, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 570, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 571, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 571, -1, -1, -1,
- -1, -1, 572, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 572, -1, -1, -1,
+ -1, -1, 573, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
@@ -1823,12 +1827,12 @@ findValue (register const char *str, register unsigned int len)
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 573, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 574, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 574, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 575, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 575, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 576, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
@@ -1844,58 +1848,59 @@ findValue (register const char *str, register unsigned int len)
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 576, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 577, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 577, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 578, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 578, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 579,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 579, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 580,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 580, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 581, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 582, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 583, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 581, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 582, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 583, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 584, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 584, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 585, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 585, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 586, -1, -1, -1, -1, -1,
- -1, -1, 587, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 586, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 587, -1, -1, -1, -1, -1,
+ -1, -1, 588, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 588,
- -1, -1, 589, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 589,
+ -1, -1, 590, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 590, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 591, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 592, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 593, -1, -1, -1, -1, -1, -1, -1,
+ -1, 593, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 594, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
@@ -1904,37 +1909,37 @@ findValue (register const char *str, register unsigned int len)
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 594, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 595, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 595, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 596, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 596, -1, 597, -1, -1, -1, -1, 598,
- -1, -1, -1, -1, -1, -1, -1, 599, -1, -1,
+ -1, -1, 597, -1, 598, -1, -1, -1, -1, 599,
+ -1, -1, -1, -1, -1, -1, -1, 600, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 600, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 601, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 601, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 602, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 602, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 603, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 603, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 604, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 604, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 605, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
@@ -1956,14 +1961,14 @@ findValue (register const char *str, register unsigned int len)
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 605, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 606, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 606, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 607, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
@@ -1977,7 +1982,7 @@ findValue (register const char *str, register unsigned int len)
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 607, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 608, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
@@ -2020,7 +2025,7 @@ findValue (register const char *str, register unsigned int len)
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 608, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 609, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
@@ -2057,7 +2062,7 @@ findValue (register const char *str, register unsigned int len)
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 609, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 610, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
@@ -2071,7 +2076,7 @@ findValue (register const char *str, register unsigned int len)
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 610, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 611, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
@@ -2130,7 +2135,7 @@ findValue (register const char *str, register unsigned int len)
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 611, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 612, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
@@ -2154,7 +2159,7 @@ findValue (register const char *str, register unsigned int len)
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 612
+ -1, -1, -1, -1, -1, -1, -1, -1, 613
};
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
@@ -2176,7 +2181,7 @@ findValue (register const char *str, register unsigned int len)
}
return 0;
}
-#line 624 "CSSValueKeywords.gperf"
+#line 625 "CSSValueKeywords.gperf"
static const char * const valueList[] = {
"",
@@ -2632,10 +2637,11 @@ static const char * const valueList[] = {
"optimizelegibility",
"geometricprecision",
"srgb",
-"mini",
"floating",
-"application",
"fullscreen",
+"maximized",
+"minimized",
+"windowed",
"aliceblue",
"antiquewhite",
"aquamarine",
diff --git a/src/3rdparty/webkit/WebCore/generated/CSSValueKeywords.h b/src/3rdparty/webkit/WebCore/generated/CSSValueKeywords.h
index d79e658..71e8514 100644
--- a/src/3rdparty/webkit/WebCore/generated/CSSValueKeywords.h
+++ b/src/3rdparty/webkit/WebCore/generated/CSSValueKeywords.h
@@ -456,168 +456,169 @@ const int CSSValueOptimizespeed = 449;
const int CSSValueOptimizelegibility = 450;
const int CSSValueGeometricprecision = 451;
const int CSSValueSrgb = 452;
-const int CSSValueMini = 453;
-const int CSSValueFloating = 454;
-const int CSSValueApplication = 455;
-const int CSSValueFullscreen = 456;
-const int CSSValueAliceblue = 457;
-const int CSSValueAntiquewhite = 458;
-const int CSSValueAquamarine = 459;
-const int CSSValueAzure = 460;
-const int CSSValueBeige = 461;
-const int CSSValueBisque = 462;
-const int CSSValueBlanchedalmond = 463;
-const int CSSValueBlueviolet = 464;
-const int CSSValueBrown = 465;
-const int CSSValueBurlywood = 466;
-const int CSSValueCadetblue = 467;
-const int CSSValueChartreuse = 468;
-const int CSSValueChocolate = 469;
-const int CSSValueCoral = 470;
-const int CSSValueCornflowerblue = 471;
-const int CSSValueCornsilk = 472;
-const int CSSValueCrimson = 473;
-const int CSSValueCyan = 474;
-const int CSSValueDarkblue = 475;
-const int CSSValueDarkcyan = 476;
-const int CSSValueDarkgoldenrod = 477;
-const int CSSValueDarkgray = 478;
-const int CSSValueDarkgreen = 479;
-const int CSSValueDarkgrey = 480;
-const int CSSValueDarkkhaki = 481;
-const int CSSValueDarkmagenta = 482;
-const int CSSValueDarkolivegreen = 483;
-const int CSSValueDarkorange = 484;
-const int CSSValueDarkorchid = 485;
-const int CSSValueDarkred = 486;
-const int CSSValueDarksalmon = 487;
-const int CSSValueDarkseagreen = 488;
-const int CSSValueDarkslateblue = 489;
-const int CSSValueDarkslategray = 490;
-const int CSSValueDarkslategrey = 491;
-const int CSSValueDarkturquoise = 492;
-const int CSSValueDarkviolet = 493;
-const int CSSValueDeeppink = 494;
-const int CSSValueDeepskyblue = 495;
-const int CSSValueDimgray = 496;
-const int CSSValueDimgrey = 497;
-const int CSSValueDodgerblue = 498;
-const int CSSValueFirebrick = 499;
-const int CSSValueFloralwhite = 500;
-const int CSSValueForestgreen = 501;
-const int CSSValueGainsboro = 502;
-const int CSSValueGhostwhite = 503;
-const int CSSValueGold = 504;
-const int CSSValueGoldenrod = 505;
-const int CSSValueGreenyellow = 506;
-const int CSSValueHoneydew = 507;
-const int CSSValueHotpink = 508;
-const int CSSValueIndianred = 509;
-const int CSSValueIndigo = 510;
-const int CSSValueIvory = 511;
-const int CSSValueKhaki = 512;
-const int CSSValueLavender = 513;
-const int CSSValueLavenderblush = 514;
-const int CSSValueLawngreen = 515;
-const int CSSValueLemonchiffon = 516;
-const int CSSValueLightblue = 517;
-const int CSSValueLightcoral = 518;
-const int CSSValueLightcyan = 519;
-const int CSSValueLightgoldenrodyellow = 520;
-const int CSSValueLightgray = 521;
-const int CSSValueLightgreen = 522;
-const int CSSValueLightgrey = 523;
-const int CSSValueLightpink = 524;
-const int CSSValueLightsalmon = 525;
-const int CSSValueLightseagreen = 526;
-const int CSSValueLightskyblue = 527;
-const int CSSValueLightslategray = 528;
-const int CSSValueLightslategrey = 529;
-const int CSSValueLightsteelblue = 530;
-const int CSSValueLightyellow = 531;
-const int CSSValueLimegreen = 532;
-const int CSSValueLinen = 533;
-const int CSSValueMagenta = 534;
-const int CSSValueMediumaquamarine = 535;
-const int CSSValueMediumblue = 536;
-const int CSSValueMediumorchid = 537;
-const int CSSValueMediumpurple = 538;
-const int CSSValueMediumseagreen = 539;
-const int CSSValueMediumslateblue = 540;
-const int CSSValueMediumspringgreen = 541;
-const int CSSValueMediumturquoise = 542;
-const int CSSValueMediumvioletred = 543;
-const int CSSValueMidnightblue = 544;
-const int CSSValueMintcream = 545;
-const int CSSValueMistyrose = 546;
-const int CSSValueMoccasin = 547;
-const int CSSValueNavajowhite = 548;
-const int CSSValueOldlace = 549;
-const int CSSValueOlivedrab = 550;
-const int CSSValueOrangered = 551;
-const int CSSValueOrchid = 552;
-const int CSSValuePalegoldenrod = 553;
-const int CSSValuePalegreen = 554;
-const int CSSValuePaleturquoise = 555;
-const int CSSValuePalevioletred = 556;
-const int CSSValuePapayawhip = 557;
-const int CSSValuePeachpuff = 558;
-const int CSSValuePeru = 559;
-const int CSSValuePink = 560;
-const int CSSValuePlum = 561;
-const int CSSValuePowderblue = 562;
-const int CSSValueRosybrown = 563;
-const int CSSValueRoyalblue = 564;
-const int CSSValueSaddlebrown = 565;
-const int CSSValueSalmon = 566;
-const int CSSValueSandybrown = 567;
-const int CSSValueSeagreen = 568;
-const int CSSValueSeashell = 569;
-const int CSSValueSienna = 570;
-const int CSSValueSkyblue = 571;
-const int CSSValueSlateblue = 572;
-const int CSSValueSlategray = 573;
-const int CSSValueSlategrey = 574;
-const int CSSValueSnow = 575;
-const int CSSValueSpringgreen = 576;
-const int CSSValueSteelblue = 577;
-const int CSSValueTan = 578;
-const int CSSValueThistle = 579;
-const int CSSValueTomato = 580;
-const int CSSValueTurquoise = 581;
-const int CSSValueViolet = 582;
-const int CSSValueWheat = 583;
-const int CSSValueWhitesmoke = 584;
-const int CSSValueYellowgreen = 585;
-const int CSSValueNonzero = 586;
-const int CSSValueEvenodd = 587;
-const int CSSValueAccumulate = 588;
-const int CSSValueNew = 589;
-const int CSSValueLinearrgb = 590;
-const int CSSValueOptimizequality = 591;
-const int CSSValueCrispedges = 592;
-const int CSSValueButt = 593;
-const int CSSValueMiter = 594;
-const int CSSValueBevel = 595;
-const int CSSValueBeforeEdge = 596;
-const int CSSValueAfterEdge = 597;
-const int CSSValueCentral = 598;
-const int CSSValueTextBeforeEdge = 599;
-const int CSSValueTextAfterEdge = 600;
-const int CSSValueIdeographic = 601;
-const int CSSValueAlphabetic = 602;
-const int CSSValueHanging = 603;
-const int CSSValueMathematical = 604;
-const int CSSValueUseScript = 605;
-const int CSSValueNoChange = 606;
-const int CSSValueResetSize = 607;
-const int CSSValueLrTb = 608;
-const int CSSValueRlTb = 609;
-const int CSSValueTbRl = 610;
-const int CSSValueLr = 611;
-const int CSSValueRl = 612;
-const int CSSValueTb = 613;
-const int numCSSValueKeywords = 614;
+const int CSSValueFloating = 453;
+const int CSSValueFullscreen = 454;
+const int CSSValueMaximized = 455;
+const int CSSValueMinimized = 456;
+const int CSSValueWindowed = 457;
+const int CSSValueAliceblue = 458;
+const int CSSValueAntiquewhite = 459;
+const int CSSValueAquamarine = 460;
+const int CSSValueAzure = 461;
+const int CSSValueBeige = 462;
+const int CSSValueBisque = 463;
+const int CSSValueBlanchedalmond = 464;
+const int CSSValueBlueviolet = 465;
+const int CSSValueBrown = 466;
+const int CSSValueBurlywood = 467;
+const int CSSValueCadetblue = 468;
+const int CSSValueChartreuse = 469;
+const int CSSValueChocolate = 470;
+const int CSSValueCoral = 471;
+const int CSSValueCornflowerblue = 472;
+const int CSSValueCornsilk = 473;
+const int CSSValueCrimson = 474;
+const int CSSValueCyan = 475;
+const int CSSValueDarkblue = 476;
+const int CSSValueDarkcyan = 477;
+const int CSSValueDarkgoldenrod = 478;
+const int CSSValueDarkgray = 479;
+const int CSSValueDarkgreen = 480;
+const int CSSValueDarkgrey = 481;
+const int CSSValueDarkkhaki = 482;
+const int CSSValueDarkmagenta = 483;
+const int CSSValueDarkolivegreen = 484;
+const int CSSValueDarkorange = 485;
+const int CSSValueDarkorchid = 486;
+const int CSSValueDarkred = 487;
+const int CSSValueDarksalmon = 488;
+const int CSSValueDarkseagreen = 489;
+const int CSSValueDarkslateblue = 490;
+const int CSSValueDarkslategray = 491;
+const int CSSValueDarkslategrey = 492;
+const int CSSValueDarkturquoise = 493;
+const int CSSValueDarkviolet = 494;
+const int CSSValueDeeppink = 495;
+const int CSSValueDeepskyblue = 496;
+const int CSSValueDimgray = 497;
+const int CSSValueDimgrey = 498;
+const int CSSValueDodgerblue = 499;
+const int CSSValueFirebrick = 500;
+const int CSSValueFloralwhite = 501;
+const int CSSValueForestgreen = 502;
+const int CSSValueGainsboro = 503;
+const int CSSValueGhostwhite = 504;
+const int CSSValueGold = 505;
+const int CSSValueGoldenrod = 506;
+const int CSSValueGreenyellow = 507;
+const int CSSValueHoneydew = 508;
+const int CSSValueHotpink = 509;
+const int CSSValueIndianred = 510;
+const int CSSValueIndigo = 511;
+const int CSSValueIvory = 512;
+const int CSSValueKhaki = 513;
+const int CSSValueLavender = 514;
+const int CSSValueLavenderblush = 515;
+const int CSSValueLawngreen = 516;
+const int CSSValueLemonchiffon = 517;
+const int CSSValueLightblue = 518;
+const int CSSValueLightcoral = 519;
+const int CSSValueLightcyan = 520;
+const int CSSValueLightgoldenrodyellow = 521;
+const int CSSValueLightgray = 522;
+const int CSSValueLightgreen = 523;
+const int CSSValueLightgrey = 524;
+const int CSSValueLightpink = 525;
+const int CSSValueLightsalmon = 526;
+const int CSSValueLightseagreen = 527;
+const int CSSValueLightskyblue = 528;
+const int CSSValueLightslategray = 529;
+const int CSSValueLightslategrey = 530;
+const int CSSValueLightsteelblue = 531;
+const int CSSValueLightyellow = 532;
+const int CSSValueLimegreen = 533;
+const int CSSValueLinen = 534;
+const int CSSValueMagenta = 535;
+const int CSSValueMediumaquamarine = 536;
+const int CSSValueMediumblue = 537;
+const int CSSValueMediumorchid = 538;
+const int CSSValueMediumpurple = 539;
+const int CSSValueMediumseagreen = 540;
+const int CSSValueMediumslateblue = 541;
+const int CSSValueMediumspringgreen = 542;
+const int CSSValueMediumturquoise = 543;
+const int CSSValueMediumvioletred = 544;
+const int CSSValueMidnightblue = 545;
+const int CSSValueMintcream = 546;
+const int CSSValueMistyrose = 547;
+const int CSSValueMoccasin = 548;
+const int CSSValueNavajowhite = 549;
+const int CSSValueOldlace = 550;
+const int CSSValueOlivedrab = 551;
+const int CSSValueOrangered = 552;
+const int CSSValueOrchid = 553;
+const int CSSValuePalegoldenrod = 554;
+const int CSSValuePalegreen = 555;
+const int CSSValuePaleturquoise = 556;
+const int CSSValuePalevioletred = 557;
+const int CSSValuePapayawhip = 558;
+const int CSSValuePeachpuff = 559;
+const int CSSValuePeru = 560;
+const int CSSValuePink = 561;
+const int CSSValuePlum = 562;
+const int CSSValuePowderblue = 563;
+const int CSSValueRosybrown = 564;
+const int CSSValueRoyalblue = 565;
+const int CSSValueSaddlebrown = 566;
+const int CSSValueSalmon = 567;
+const int CSSValueSandybrown = 568;
+const int CSSValueSeagreen = 569;
+const int CSSValueSeashell = 570;
+const int CSSValueSienna = 571;
+const int CSSValueSkyblue = 572;
+const int CSSValueSlateblue = 573;
+const int CSSValueSlategray = 574;
+const int CSSValueSlategrey = 575;
+const int CSSValueSnow = 576;
+const int CSSValueSpringgreen = 577;
+const int CSSValueSteelblue = 578;
+const int CSSValueTan = 579;
+const int CSSValueThistle = 580;
+const int CSSValueTomato = 581;
+const int CSSValueTurquoise = 582;
+const int CSSValueViolet = 583;
+const int CSSValueWheat = 584;
+const int CSSValueWhitesmoke = 585;
+const int CSSValueYellowgreen = 586;
+const int CSSValueNonzero = 587;
+const int CSSValueEvenodd = 588;
+const int CSSValueAccumulate = 589;
+const int CSSValueNew = 590;
+const int CSSValueLinearrgb = 591;
+const int CSSValueOptimizequality = 592;
+const int CSSValueCrispedges = 593;
+const int CSSValueButt = 594;
+const int CSSValueMiter = 595;
+const int CSSValueBevel = 596;
+const int CSSValueBeforeEdge = 597;
+const int CSSValueAfterEdge = 598;
+const int CSSValueCentral = 599;
+const int CSSValueTextBeforeEdge = 600;
+const int CSSValueTextAfterEdge = 601;
+const int CSSValueIdeographic = 602;
+const int CSSValueAlphabetic = 603;
+const int CSSValueHanging = 604;
+const int CSSValueMathematical = 605;
+const int CSSValueUseScript = 606;
+const int CSSValueNoChange = 607;
+const int CSSValueResetSize = 608;
+const int CSSValueLrTb = 609;
+const int CSSValueRlTb = 610;
+const int CSSValueTbRl = 611;
+const int CSSValueLr = 612;
+const int CSSValueRl = 613;
+const int CSSValueTb = 614;
+const int numCSSValueKeywords = 615;
const size_t maxCSSValueKeywordLength = 35;
const char* getValueName(unsigned short id);
diff --git a/src/3rdparty/webkit/WebCore/generated/ColorData.c b/src/3rdparty/webkit/WebCore/generated/ColorData.c
index 4fb1bea..5d64dda 100644
--- a/src/3rdparty/webkit/WebCore/generated/ColorData.c
+++ b/src/3rdparty/webkit/WebCore/generated/ColorData.c
@@ -1,4 +1,4 @@
-/* ANSI-C code produced by gperf version 3.0.1 */
+/* ANSI-C code produced by gperf version 3.0.3 */
/* Command-line: gperf -CDEot -L ANSI-C --includes --key-positions='*' -N findColor -D -s 2 */
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
@@ -141,6 +141,9 @@ hash (register const char *str, register unsigned int len)
#ifdef __GNUC__
__inline
+#ifdef __GNUC_STDC_INLINE__
+__attribute__ ((__gnu_inline__))
+#endif
#endif
const struct NamedColor *
findColor (register const char *str, register unsigned int len)
diff --git a/src/3rdparty/webkit/WebCore/generated/DocTypeStrings.cpp b/src/3rdparty/webkit/WebCore/generated/DocTypeStrings.cpp
index 2aab9b9..d69b1b6 100644
--- a/src/3rdparty/webkit/WebCore/generated/DocTypeStrings.cpp
+++ b/src/3rdparty/webkit/WebCore/generated/DocTypeStrings.cpp
@@ -1,4 +1,4 @@
-/* ANSI-C code produced by gperf version 3.0.1 */
+/* ANSI-C code produced by gperf version 3.0.3 */
/* Command-line: gperf -CEot -L ANSI-C --includes --key-positions='*' -N findDoctypeEntry -F ,PubIDInfo::eAlmostStandards,PubIDInfo::eAlmostStandards */
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
@@ -331,6 +331,9 @@ hash (register const char *str, register unsigned int len)
#ifdef __GNUC__
__inline
+#ifdef __GNUC_STDC_INLINE__
+__attribute__ ((__gnu_inline__))
+#endif
#endif
const struct PubIDInfo *
findDoctypeEntry (register const char *str, register unsigned int len)
diff --git a/src/3rdparty/webkit/WebCore/generated/HTMLEntityNames.c b/src/3rdparty/webkit/WebCore/generated/HTMLEntityNames.c
index 8bd9d97..761f29d 100644
--- a/src/3rdparty/webkit/WebCore/generated/HTMLEntityNames.c
+++ b/src/3rdparty/webkit/WebCore/generated/HTMLEntityNames.c
@@ -1,4 +1,4 @@
-/* ANSI-C code produced by gperf version 3.0.1 */
+/* ANSI-C code produced by gperf version 3.0.3 */
/* Command-line: gperf -a -L ANSI-C -C -G -c -o -t --includes --key-positions='*' -N findEntity -D -s 2 */
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
@@ -521,6 +521,9 @@ static const short lookup[] =
#ifdef __GNUC__
__inline
+#ifdef __GNUC_STDC_INLINE__
+__attribute__ ((__gnu_inline__))
+#endif
#endif
const struct Entity *
findEntity (register const char *str, register unsigned int len)
diff --git a/src/3rdparty/webkit/WebCore/generated/XPathGrammar.cpp b/src/3rdparty/webkit/WebCore/generated/XPathGrammar.cpp
index 7a54748..0859634 100644
--- a/src/3rdparty/webkit/WebCore/generated/XPathGrammar.cpp
+++ b/src/3rdparty/webkit/WebCore/generated/XPathGrammar.cpp
@@ -76,7 +76,7 @@
/* Copy the first part of user declarations. */
/* Line 189 of yacc.c */
-#line 28 "xml\\XPathGrammar.y"
+#line 28 "xml/XPathGrammar.y"
#include "config.h"
@@ -107,7 +107,7 @@ using namespace XPath;
/* Line 189 of yacc.c */
-#line 111 "C:/dev/webkit-2.0/WebCore/generated/XPathGrammar.tab.c"
+#line 111 "/WebCore/generated/XPathGrammar.tab.c"
/* Enabling traces. */
#ifndef YYDEBUG
@@ -162,7 +162,7 @@ typedef union YYSTYPE
{
/* Line 214 of yacc.c */
-#line 60 "xml\\XPathGrammar.y"
+#line 60 "xml/XPathGrammar.y"
Step::Axis axis;
Step::NodeTest* nodeTest;
@@ -178,7 +178,7 @@ typedef union YYSTYPE
/* Line 214 of yacc.c */
-#line 182 "C:/dev/webkit-2.0/WebCore/generated/XPathGrammar.tab.c"
+#line 182 "/WebCore/generated/XPathGrammar.tab.c"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -189,7 +189,7 @@ typedef union YYSTYPE
/* Copy the second part of user declarations. */
/* Line 264 of yacc.c */
-#line 73 "xml\\XPathGrammar.y"
+#line 73 "xml/XPathGrammar.y"
static int xpathyylex(YYSTYPE* yylval) { return Parser::current()->lex(yylval); }
@@ -198,7 +198,7 @@ static void xpathyyerror(const char*) { }
/* Line 264 of yacc.c */
-#line 202 "C:/dev/webkit-2.0/WebCore/generated/XPathGrammar.tab.c"
+#line 202 "/WebCore/generated/XPathGrammar.tab.c"
#ifdef short
# undef short
@@ -1483,7 +1483,7 @@ yyreduce:
case 2:
/* Line 1455 of yacc.c */
-#line 122 "xml\\XPathGrammar.y"
+#line 122 "xml/XPathGrammar.y"
{
PARSER->m_topExpr = (yyvsp[(1) - (1)].expr);
;}
@@ -1492,7 +1492,7 @@ yyreduce:
case 3:
/* Line 1455 of yacc.c */
-#line 129 "xml\\XPathGrammar.y"
+#line 129 "xml/XPathGrammar.y"
{
(yyval.locationPath)->setAbsolute(false);
;}
@@ -1501,7 +1501,7 @@ yyreduce:
case 4:
/* Line 1455 of yacc.c */
-#line 134 "xml\\XPathGrammar.y"
+#line 134 "xml/XPathGrammar.y"
{
(yyval.locationPath)->setAbsolute(true);
;}
@@ -1510,7 +1510,7 @@ yyreduce:
case 5:
/* Line 1455 of yacc.c */
-#line 141 "xml\\XPathGrammar.y"
+#line 141 "xml/XPathGrammar.y"
{
(yyval.locationPath) = new LocationPath;
PARSER->registerParseNode((yyval.locationPath));
@@ -1520,7 +1520,7 @@ yyreduce:
case 6:
/* Line 1455 of yacc.c */
-#line 147 "xml\\XPathGrammar.y"
+#line 147 "xml/XPathGrammar.y"
{
(yyval.locationPath) = (yyvsp[(2) - (2)].locationPath);
;}
@@ -1529,7 +1529,7 @@ yyreduce:
case 7:
/* Line 1455 of yacc.c */
-#line 152 "xml\\XPathGrammar.y"
+#line 152 "xml/XPathGrammar.y"
{
(yyval.locationPath) = (yyvsp[(2) - (2)].locationPath);
(yyval.locationPath)->insertFirstStep((yyvsp[(1) - (2)].step));
@@ -1540,7 +1540,7 @@ yyreduce:
case 8:
/* Line 1455 of yacc.c */
-#line 161 "xml\\XPathGrammar.y"
+#line 161 "xml/XPathGrammar.y"
{
(yyval.locationPath) = new LocationPath;
(yyval.locationPath)->appendStep((yyvsp[(1) - (1)].step));
@@ -1552,7 +1552,7 @@ yyreduce:
case 9:
/* Line 1455 of yacc.c */
-#line 169 "xml\\XPathGrammar.y"
+#line 169 "xml/XPathGrammar.y"
{
(yyval.locationPath)->appendStep((yyvsp[(3) - (3)].step));
PARSER->unregisterParseNode((yyvsp[(3) - (3)].step));
@@ -1562,7 +1562,7 @@ yyreduce:
case 10:
/* Line 1455 of yacc.c */
-#line 175 "xml\\XPathGrammar.y"
+#line 175 "xml/XPathGrammar.y"
{
(yyval.locationPath)->appendStep((yyvsp[(2) - (3)].step));
(yyval.locationPath)->appendStep((yyvsp[(3) - (3)].step));
@@ -1574,7 +1574,7 @@ yyreduce:
case 11:
/* Line 1455 of yacc.c */
-#line 185 "xml\\XPathGrammar.y"
+#line 185 "xml/XPathGrammar.y"
{
if ((yyvsp[(2) - (2)].predList)) {
(yyval.step) = new Step(Step::ChildAxis, *(yyvsp[(1) - (2)].nodeTest), *(yyvsp[(2) - (2)].predList));
@@ -1589,7 +1589,7 @@ yyreduce:
case 12:
/* Line 1455 of yacc.c */
-#line 196 "xml\\XPathGrammar.y"
+#line 196 "xml/XPathGrammar.y"
{
String localName;
String namespaceURI;
@@ -1611,7 +1611,7 @@ yyreduce:
case 13:
/* Line 1455 of yacc.c */
-#line 214 "xml\\XPathGrammar.y"
+#line 214 "xml/XPathGrammar.y"
{
if ((yyvsp[(3) - (3)].predList)) {
(yyval.step) = new Step((yyvsp[(1) - (3)].axis), *(yyvsp[(2) - (3)].nodeTest), *(yyvsp[(3) - (3)].predList));
@@ -1626,7 +1626,7 @@ yyreduce:
case 14:
/* Line 1455 of yacc.c */
-#line 225 "xml\\XPathGrammar.y"
+#line 225 "xml/XPathGrammar.y"
{
String localName;
String namespaceURI;
@@ -1648,7 +1648,7 @@ yyreduce:
case 17:
/* Line 1455 of yacc.c */
-#line 249 "xml\\XPathGrammar.y"
+#line 249 "xml/XPathGrammar.y"
{
(yyval.axis) = Step::AttributeAxis;
;}
@@ -1657,7 +1657,7 @@ yyreduce:
case 18:
/* Line 1455 of yacc.c */
-#line 256 "xml\\XPathGrammar.y"
+#line 256 "xml/XPathGrammar.y"
{
if (*(yyvsp[(1) - (3)].str) == "node")
(yyval.nodeTest) = new Step::NodeTest(Step::NodeTest::AnyNodeTest);
@@ -1674,7 +1674,7 @@ yyreduce:
case 19:
/* Line 1455 of yacc.c */
-#line 269 "xml\\XPathGrammar.y"
+#line 269 "xml/XPathGrammar.y"
{
(yyval.nodeTest) = new Step::NodeTest(Step::NodeTest::ProcessingInstructionNodeTest);
PARSER->deleteString((yyvsp[(1) - (3)].str));
@@ -1685,7 +1685,7 @@ yyreduce:
case 20:
/* Line 1455 of yacc.c */
-#line 276 "xml\\XPathGrammar.y"
+#line 276 "xml/XPathGrammar.y"
{
(yyval.nodeTest) = new Step::NodeTest(Step::NodeTest::ProcessingInstructionNodeTest, (yyvsp[(3) - (4)].str)->stripWhiteSpace());
PARSER->deleteString((yyvsp[(1) - (4)].str));
@@ -1697,7 +1697,7 @@ yyreduce:
case 21:
/* Line 1455 of yacc.c */
-#line 286 "xml\\XPathGrammar.y"
+#line 286 "xml/XPathGrammar.y"
{
(yyval.predList) = 0;
;}
@@ -1706,7 +1706,7 @@ yyreduce:
case 23:
/* Line 1455 of yacc.c */
-#line 295 "xml\\XPathGrammar.y"
+#line 295 "xml/XPathGrammar.y"
{
(yyval.predList) = new Vector<Predicate*>;
(yyval.predList)->append(new Predicate((yyvsp[(1) - (1)].expr)));
@@ -1718,7 +1718,7 @@ yyreduce:
case 24:
/* Line 1455 of yacc.c */
-#line 303 "xml\\XPathGrammar.y"
+#line 303 "xml/XPathGrammar.y"
{
(yyval.predList)->append(new Predicate((yyvsp[(2) - (2)].expr)));
PARSER->unregisterParseNode((yyvsp[(2) - (2)].expr));
@@ -1728,7 +1728,7 @@ yyreduce:
case 25:
/* Line 1455 of yacc.c */
-#line 311 "xml\\XPathGrammar.y"
+#line 311 "xml/XPathGrammar.y"
{
(yyval.expr) = (yyvsp[(2) - (3)].expr);
;}
@@ -1737,7 +1737,7 @@ yyreduce:
case 26:
/* Line 1455 of yacc.c */
-#line 318 "xml\\XPathGrammar.y"
+#line 318 "xml/XPathGrammar.y"
{
(yyval.step) = new Step(Step::DescendantOrSelfAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest));
PARSER->registerParseNode((yyval.step));
@@ -1747,7 +1747,7 @@ yyreduce:
case 27:
/* Line 1455 of yacc.c */
-#line 326 "xml\\XPathGrammar.y"
+#line 326 "xml/XPathGrammar.y"
{
(yyval.step) = new Step(Step::SelfAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest));
PARSER->registerParseNode((yyval.step));
@@ -1757,7 +1757,7 @@ yyreduce:
case 28:
/* Line 1455 of yacc.c */
-#line 332 "xml\\XPathGrammar.y"
+#line 332 "xml/XPathGrammar.y"
{
(yyval.step) = new Step(Step::ParentAxis, Step::NodeTest(Step::NodeTest::AnyNodeTest));
PARSER->registerParseNode((yyval.step));
@@ -1767,7 +1767,7 @@ yyreduce:
case 29:
/* Line 1455 of yacc.c */
-#line 340 "xml\\XPathGrammar.y"
+#line 340 "xml/XPathGrammar.y"
{
(yyval.expr) = new VariableReference(*(yyvsp[(1) - (1)].str));
PARSER->deleteString((yyvsp[(1) - (1)].str));
@@ -1778,7 +1778,7 @@ yyreduce:
case 30:
/* Line 1455 of yacc.c */
-#line 347 "xml\\XPathGrammar.y"
+#line 347 "xml/XPathGrammar.y"
{
(yyval.expr) = (yyvsp[(2) - (3)].expr);
;}
@@ -1787,7 +1787,7 @@ yyreduce:
case 31:
/* Line 1455 of yacc.c */
-#line 352 "xml\\XPathGrammar.y"
+#line 352 "xml/XPathGrammar.y"
{
(yyval.expr) = new StringExpression(*(yyvsp[(1) - (1)].str));
PARSER->deleteString((yyvsp[(1) - (1)].str));
@@ -1798,7 +1798,7 @@ yyreduce:
case 32:
/* Line 1455 of yacc.c */
-#line 359 "xml\\XPathGrammar.y"
+#line 359 "xml/XPathGrammar.y"
{
(yyval.expr) = new Number((yyvsp[(1) - (1)].str)->toDouble());
PARSER->deleteString((yyvsp[(1) - (1)].str));
@@ -1809,7 +1809,7 @@ yyreduce:
case 34:
/* Line 1455 of yacc.c */
-#line 370 "xml\\XPathGrammar.y"
+#line 370 "xml/XPathGrammar.y"
{
(yyval.expr) = createFunction(*(yyvsp[(1) - (3)].str));
if (!(yyval.expr))
@@ -1822,7 +1822,7 @@ yyreduce:
case 35:
/* Line 1455 of yacc.c */
-#line 379 "xml\\XPathGrammar.y"
+#line 379 "xml/XPathGrammar.y"
{
(yyval.expr) = createFunction(*(yyvsp[(1) - (4)].str), *(yyvsp[(3) - (4)].argList));
if (!(yyval.expr))
@@ -1836,7 +1836,7 @@ yyreduce:
case 36:
/* Line 1455 of yacc.c */
-#line 391 "xml\\XPathGrammar.y"
+#line 391 "xml/XPathGrammar.y"
{
(yyval.argList) = new Vector<Expression*>;
(yyval.argList)->append((yyvsp[(1) - (1)].expr));
@@ -1848,7 +1848,7 @@ yyreduce:
case 37:
/* Line 1455 of yacc.c */
-#line 399 "xml\\XPathGrammar.y"
+#line 399 "xml/XPathGrammar.y"
{
(yyval.argList)->append((yyvsp[(3) - (3)].expr));
PARSER->unregisterParseNode((yyvsp[(3) - (3)].expr));
@@ -1858,7 +1858,7 @@ yyreduce:
case 40:
/* Line 1455 of yacc.c */
-#line 413 "xml\\XPathGrammar.y"
+#line 413 "xml/XPathGrammar.y"
{
(yyval.expr) = new Union;
(yyval.expr)->addSubExpression((yyvsp[(1) - (3)].expr));
@@ -1872,7 +1872,7 @@ yyreduce:
case 41:
/* Line 1455 of yacc.c */
-#line 425 "xml\\XPathGrammar.y"
+#line 425 "xml/XPathGrammar.y"
{
(yyval.expr) = (yyvsp[(1) - (1)].locationPath);
;}
@@ -1881,7 +1881,7 @@ yyreduce:
case 43:
/* Line 1455 of yacc.c */
-#line 432 "xml\\XPathGrammar.y"
+#line 432 "xml/XPathGrammar.y"
{
(yyvsp[(3) - (3)].locationPath)->setAbsolute(true);
(yyval.expr) = new Path(static_cast<Filter*>((yyvsp[(1) - (3)].expr)), (yyvsp[(3) - (3)].locationPath));
@@ -1894,7 +1894,7 @@ yyreduce:
case 44:
/* Line 1455 of yacc.c */
-#line 441 "xml\\XPathGrammar.y"
+#line 441 "xml/XPathGrammar.y"
{
(yyvsp[(3) - (3)].locationPath)->insertFirstStep((yyvsp[(2) - (3)].step));
(yyvsp[(3) - (3)].locationPath)->setAbsolute(true);
@@ -1909,7 +1909,7 @@ yyreduce:
case 46:
/* Line 1455 of yacc.c */
-#line 456 "xml\\XPathGrammar.y"
+#line 456 "xml/XPathGrammar.y"
{
(yyval.expr) = new Filter((yyvsp[(1) - (2)].expr), *(yyvsp[(2) - (2)].predList));
PARSER->unregisterParseNode((yyvsp[(1) - (2)].expr));
@@ -1921,7 +1921,7 @@ yyreduce:
case 48:
/* Line 1455 of yacc.c */
-#line 468 "xml\\XPathGrammar.y"
+#line 468 "xml/XPathGrammar.y"
{
(yyval.expr) = new LogicalOp(LogicalOp::OP_Or, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr));
PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr));
@@ -1933,7 +1933,7 @@ yyreduce:
case 50:
/* Line 1455 of yacc.c */
-#line 480 "xml\\XPathGrammar.y"
+#line 480 "xml/XPathGrammar.y"
{
(yyval.expr) = new LogicalOp(LogicalOp::OP_And, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr));
PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr));
@@ -1945,7 +1945,7 @@ yyreduce:
case 52:
/* Line 1455 of yacc.c */
-#line 492 "xml\\XPathGrammar.y"
+#line 492 "xml/XPathGrammar.y"
{
(yyval.expr) = new EqTestOp((yyvsp[(2) - (3)].eqop), (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr));
PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr));
@@ -1957,7 +1957,7 @@ yyreduce:
case 54:
/* Line 1455 of yacc.c */
-#line 504 "xml\\XPathGrammar.y"
+#line 504 "xml/XPathGrammar.y"
{
(yyval.expr) = new EqTestOp((yyvsp[(2) - (3)].eqop), (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr));
PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr));
@@ -1969,7 +1969,7 @@ yyreduce:
case 56:
/* Line 1455 of yacc.c */
-#line 516 "xml\\XPathGrammar.y"
+#line 516 "xml/XPathGrammar.y"
{
(yyval.expr) = new NumericOp(NumericOp::OP_Add, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr));
PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr));
@@ -1981,7 +1981,7 @@ yyreduce:
case 57:
/* Line 1455 of yacc.c */
-#line 524 "xml\\XPathGrammar.y"
+#line 524 "xml/XPathGrammar.y"
{
(yyval.expr) = new NumericOp(NumericOp::OP_Sub, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr));
PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr));
@@ -1993,7 +1993,7 @@ yyreduce:
case 59:
/* Line 1455 of yacc.c */
-#line 536 "xml\\XPathGrammar.y"
+#line 536 "xml/XPathGrammar.y"
{
(yyval.expr) = new NumericOp((yyvsp[(2) - (3)].numop), (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr));
PARSER->unregisterParseNode((yyvsp[(1) - (3)].expr));
@@ -2005,7 +2005,7 @@ yyreduce:
case 61:
/* Line 1455 of yacc.c */
-#line 548 "xml\\XPathGrammar.y"
+#line 548 "xml/XPathGrammar.y"
{
(yyval.expr) = new Negative;
(yyval.expr)->addSubExpression((yyvsp[(2) - (2)].expr));
@@ -2017,7 +2017,7 @@ yyreduce:
/* Line 1455 of yacc.c */
-#line 2021 "C:/dev/webkit-2.0/WebCore/generated/XPathGrammar.tab.c"
+#line 2021 "/WebCore/generated/XPathGrammar.tab.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -2229,7 +2229,7 @@ yyreturn:
/* Line 1675 of yacc.c */
-#line 556 "xml\\XPathGrammar.y"
+#line 556 "xml/XPathGrammar.y"
#endif
diff --git a/src/3rdparty/webkit/WebCore/generated/XPathGrammar.h b/src/3rdparty/webkit/WebCore/generated/XPathGrammar.h
index c3dbd2b..7264598 100644
--- a/src/3rdparty/webkit/WebCore/generated/XPathGrammar.h
+++ b/src/3rdparty/webkit/WebCore/generated/XPathGrammar.h
@@ -67,7 +67,7 @@ typedef union YYSTYPE
{
/* Line 1676 of yacc.c */
-#line 60 "xml\\XPathGrammar.y"
+#line 60 "xml/XPathGrammar.y"
Step::Axis axis;
Step::NodeTest* nodeTest;
@@ -83,7 +83,7 @@ typedef union YYSTYPE
/* Line 1676 of yacc.c */
-#line 87 "C:/dev/webkit-2.0/WebCore/generated/XPathGrammar.tab.h"
+#line 87 "/WebCore/generated/XPathGrammar.tab.h"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
diff --git a/src/3rdparty/webkit/WebCore/generated/tokenizer.cpp b/src/3rdparty/webkit/WebCore/generated/tokenizer.cpp
index d9a94f5..9a19e9e 100644
--- a/src/3rdparty/webkit/WebCore/generated/tokenizer.cpp
+++ b/src/3rdparty/webkit/WebCore/generated/tokenizer.cpp
@@ -65,46 +65,53 @@ typedef unsigned int flex_uint32_t;
#endif /* ! C99 */
#define YY_NUM_RULES 69
#define YY_END_OF_BUFFER 70
-static yyconst short int yy_accept[482] =
+/* This struct is not used in this scanner,
+ but its presence is necessary. */
+struct yy_trans_info
+ {
+ flex_int32_t yy_verify;
+ flex_int32_t yy_nxt;
+ };
+static yyconst flex_int16_t yy_accept[482] =
{ 0,
0, 0, 0, 0, 0, 0, 70, 68, 2, 2,
68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
- 57, 68, 68, 68, 68, 15, 15, 15, 68, 68,
+ 57, 68, 68, 15, 15, 15, 68, 68, 68, 68,
67, 15, 15, 15, 66, 15, 2, 0, 0, 0,
- 14, 0, 0, 0, 0, 18, 18, 8, 0, 0,
- 9, 0, 16, 0, 0, 15, 15, 15, 58, 0,
- 56, 0, 0, 57, 0, 55, 55, 55, 55, 55,
- 55, 55, 55, 55, 55, 16, 55, 55, 52, 55,
- 0, 0, 0, 35, 35, 35, 35, 35, 35, 35,
- 15, 15, 7, 63, 15, 0, 0, 15, 15, 0,
-
- 15, 6, 5, 15, 15, 15, 15, 0, 0, 0,
- 14, 0, 0, 0, 18, 18, 18, 0, 18, 0,
- 0, 14, 0, 0, 4, 15, 0, 0, 55, 55,
- 55, 0, 55, 42, 55, 37, 40, 55, 53, 44,
- 55, 43, 51, 55, 46, 45, 41, 55, 55, 55,
- 0, 35, 35, 35, 35, 0, 35, 35, 35, 35,
- 35, 35, 15, 15, 15, 16, 15, 15, 64, 64,
- 15, 12, 10, 15, 13, 0, 0, 0, 17, 18,
- 18, 18, 17, 0, 0, 15, 0, 1, 55, 55,
- 55, 55, 47, 55, 54, 16, 48, 38, 55, 3,
+ 14, 0, 0, 0, 18, 18, 0, 8, 0, 0,
+ 9, 0, 16, 0, 15, 15, 15, 0, 58, 0,
+ 56, 0, 0, 57, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 16, 55, 55, 52, 55, 0, 55,
+ 0, 0, 35, 35, 35, 35, 35, 35, 35, 0,
+ 63, 15, 0, 0, 15, 15, 0, 15, 15, 15,
+
+ 7, 6, 5, 15, 15, 15, 15, 0, 0, 0,
+ 14, 0, 0, 0, 18, 18, 0, 18, 18, 0,
+ 0, 14, 0, 0, 4, 15, 0, 0, 55, 0,
+ 42, 55, 37, 40, 55, 53, 44, 55, 43, 51,
+ 55, 46, 45, 41, 55, 55, 55, 55, 55, 55,
+ 0, 35, 35, 0, 35, 35, 35, 35, 35, 35,
+ 35, 35, 15, 15, 16, 15, 15, 64, 64, 15,
+ 15, 12, 10, 15, 13, 0, 0, 0, 17, 17,
+ 18, 18, 18, 0, 0, 15, 0, 1, 55, 55,
+ 47, 55, 54, 16, 48, 38, 55, 55, 55, 3,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 15, 15, 59, 0, 64, 64, 64, 63, 11, 0,
+ 15, 59, 0, 64, 64, 64, 63, 15, 11, 0,
0, 0, 18, 18, 18, 0, 15, 0, 0, 55,
- 55, 55, 49, 50, 35, 35, 35, 35, 35, 35,
- 35, 35, 20, 15, 15, 65, 64, 64, 64, 64,
- 0, 0, 0, 0, 61, 0, 0, 0, 0, 18,
+ 49, 50, 55, 55, 35, 35, 35, 35, 35, 35,
+ 35, 20, 35, 15, 65, 64, 64, 64, 64, 0,
+ 0, 0, 0, 61, 0, 15, 0, 0, 0, 18,
18, 18, 0, 15, 55, 55, 39, 35, 35, 35,
- 35, 35, 35, 21, 35, 15, 15, 65, 64, 64,
- 64, 64, 64, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 61, 0, 0, 0, 0, 17, 18, 18,
-
- 17, 0, 15, 55, 55, 35, 35, 35, 35, 35,
- 19, 35, 15, 15, 65, 64, 64, 64, 64, 64,
- 64, 0, 60, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 18, 18, 0, 15,
- 55, 55, 35, 35, 35, 23, 35, 35, 15, 65,
+ 35, 35, 21, 35, 35, 15, 65, 64, 64, 64,
+ 64, 64, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 61, 0, 0, 15, 0, 0, 17, 17, 18,
+
+ 18, 0, 15, 55, 55, 35, 35, 35, 35, 19,
+ 35, 35, 15, 65, 64, 64, 64, 64, 64, 64,
+ 0, 60, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 15, 0, 0, 18, 18, 0, 15,
+ 55, 55, 35, 35, 23, 35, 35, 35, 15, 65,
64, 64, 64, 64, 64, 64, 64, 0, 60, 0,
0, 0, 60, 0, 0, 0, 0, 18, 15, 55,
35, 35, 35, 35, 65, 0, 0, 0, 36, 15,
@@ -113,7 +120,7 @@ static yyconst short int yy_accept[482] =
0, 0, 63, 35, 35, 35, 35, 35, 35, 35,
35, 0, 0, 0, 0, 0, 0, 35, 35, 35,
- 35, 25, 35, 35, 35, 0, 0, 0, 62, 0,
+ 35, 25, 35, 35, 35, 0, 62, 0, 0, 0,
0, 26, 35, 35, 35, 35, 27, 35, 0, 0,
0, 0, 31, 35, 35, 35, 35, 0, 0, 0,
35, 35, 35, 35, 0, 0, 35, 35, 29, 35,
@@ -122,7 +129,7 @@ static yyconst short int yy_accept[482] =
0
} ;
-static yyconst int yy_ec[256] =
+static yyconst flex_int32_t yy_ec[256] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
1, 4, 5, 1, 1, 1, 1, 1, 1, 1,
@@ -130,438 +137,911 @@ static yyconst int yy_ec[256] =
1, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 12, 18, 19, 20, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 12, 22, 23,
- 24, 25, 26, 27, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 12, 28, 12, 29, 30, 12, 31, 32, 33, 34,
-
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 12, 59, 1, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
-
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 60
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 12, 54, 12, 55, 56, 12, 57, 58, 59, 60,
+
+ 61, 62, 63, 64, 65, 37, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
+ 80, 81, 82, 83, 12, 84, 1, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
+ 85, 85, 85, 85, 85
} ;
-static yyconst int yy_meta[61] =
+static yyconst flex_int32_t yy_meta[86] =
{ 0,
- 1, 2, 3, 3, 3, 4, 5, 5, 5, 5,
- 5, 5, 5, 6, 7, 5, 5, 8, 5, 5,
- 9, 5, 5, 5, 5, 10, 5, 11, 5, 11,
- 12, 12, 12, 12, 12, 12, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 5, 5, 5, 11
+ 1, 2, 3, 4, 4, 5, 6, 7, 6, 6,
+ 6, 6, 7, 8, 9, 6, 6, 10, 6, 6,
+ 11, 6, 6, 6, 6, 12, 6, 13, 13, 13,
+ 13, 13, 13, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 6, 14, 13, 13, 13, 13,
+ 13, 13, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 6, 6, 6, 14
} ;
-static yyconst short int yy_base[520] =
+static yyconst flex_int16_t yy_base[553] =
{ 0,
- 0, 0, 39, 41, 1591, 1590, 1625, 2401, 62, 71,
- 76, 61, 69, 1588, 78, 1587, 50, 89, 1583, 1580,
- 132, 1579, 91, 123, 1561, 85, 94, 104, 1560, 1559,
- 2401, 117, 176, 175, 2401, 177, 193, 204, 1539, 108,
- 2401, 242, 120, 180, 196, 1553, 205, 2401, 101, 277,
- 2401, 102, 75, 1555, 221, 112, 206, 234, 181, 1561,
- 1565, 1547, 1553, 0, 268, 119, 1545, 221, 60, 240,
- 223, 230, 244, 257, 278, 279, 286, 256, 1533, 264,
- 1542, 298, 297, 1523, 296, 190, 292, 231, 97, 294,
- 309, 350, 2401, 2401, 329, 327, 1524, 351, 352, 372,
-
- 359, 2401, 2401, 360, 361, 381, 362, 1496, 339, 341,
- 342, 422, 457, 400, 1513, 492, 1512, 448, 483, 409,
- 364, 386, 527, 562, 2401, 435, 1523, 245, 1498, 597,
- 1497, 518, 368, 1483, 363, 1481, 1479, 310, 1478, 1477,
- 289, 1474, 1463, 239, 1440, 1432, 1428, 385, 401, 369,
- 1436, 311, 1425, 632, 1422, 553, 410, 420, 424, 411,
- 423, 440, 588, 458, 667, 1420, 626, 459, 481, 1403,
- 492, 494, 507, 627, 528, 1382, 412, 658, 674, 683,
- 1398, 718, 709, 544, 725, 563, 1368, 2401, 734, 1348,
- 769, 474, 1324, 477, 1314, 482, 1313, 1305, 548, 2401,
-
- 414, 760, 1289, 804, 578, 484, 582, 508, 509, 510,
- 795, 811, 2401, 820, 552, 1290, 1272, 855, 554, 1197,
- 841, 857, 863, 879, 885, 901, 647, 1228, 455, 907,
- 923, 614, 1191, 1123, 611, 929, 945, 628, 551, 630,
- 515, 631, 1115, 951, 967, 973, 555, 1109, 1101, 1093,
- 1008, 1022, 668, 684, 2401, 1049, 1061, 1008, 1040, 1057,
- 1065, 1073, 1081, 634, 1089, 1097, 1067, 577, 1105, 1113,
- 579, 615, 683, 1041, 685, 1121, 1129, 1137, 708, 1041,
- 991, 965, 947, 774, 719, 782, 1172, 735, 1207, 1186,
- 1219, 1246, 1260, 1287, 1322, 876, 1246, 2401, 1278, 1313,
-
- 854, 1330, 805, 1338, 1346, 770, 1354, 1362, 771, 580,
- 822, 584, 1397, 1383, 1399, 710, 792, 712, 711, 661,
- 659, 809, 2401, 877, 754, 1434, 1461, 1496, 1019, 821,
- 1442, 1531, 1566, 1440, 639, 1487, 921, 1522, 1557, 851,
- 965, 1574, 707, 1301, 1582, 618, 616, 617, 1617, 1603,
- 562, 2401, 2401, 2401, 2401, 2401, 2401, 1475, 858, 859,
- 1619, 1654, 917, 918, 1640, 1656, 521, 1482, 961, 1510,
- 1652, 1544, 646, 836, 1675, 1681, 1697, 1703, 2401, 1017,
- 873, 874, 962, 853, 1021, 701, 513, 473, 2401, 1719,
- 1725, 1741, 1005, 1150, 419, 919, 992, 1018, 1139, 1747,
-
- 1763, 1769, 1804, 1154, 1020, 1030, 1040, 1131, 1167, 901,
- 1187, 1792, 1808, 1831, 1403, 1829, 1851, 820, 1059, 967,
- 920, 472, 789, 1201, 1185, 1865, 1892, 1281, 2401, 1871,
- 1869, 448, 1202, 1225, 736, 946, 390, 585, 1906, 1908,
- 1943, 1970, 388, 1190, 1218, 1227, 1156, 1929, 1951, 1949,
- 1266, 1303, 990, 1304, 1976, 1992, 1394, 1169, 340, 1248,
- 1998, 2014, 1312, 316, 1203, 1242, 2020, 2036, 1340, 265,
- 1151, 2042, 1229, 1423, 1424, 1395, 92, 1382, 1364, 34,
- 2401, 2077, 2082, 2093, 2098, 2103, 2112, 2119, 2130, 2139,
- 2144, 2155, 2167, 2169, 2178, 2183, 2192, 2197, 2206, 2215,
-
- 2227, 2236, 2245, 2250, 2262, 2267, 2278, 2283, 2294, 2305,
- 2316, 2321, 2332, 2343, 2348, 2359, 2368, 2379, 2388
+ 0, 0, 64, 66, 54, 56, 1486, 6578, 93, 98,
+ 107, 83, 155, 1460, 77, 1459, 98, 99, 1446, 1449,
+ 207, 1454, 275, 100, 108, 146, 326, 1402, 1384, 1380,
+ 6578, 101, 110, 151, 6578, 127, 227, 295, 89, 136,
+ 6578, 387, 140, 0, 429, 1346, 471, 6578, 117, 532,
+ 6578, 138, 157, 1371, 142, 295, 307, 574, 283, 1379,
+ 1371, 1325, 1324, 0, 1290, 249, 150, 274, 93, 241,
+ 152, 256, 325, 309, 347, 313, 1289, 147, 616, 154,
+ 1322, 346, 1285, 284, 281, 357, 348, 170, 279, 658,
+ 6578, 208, 700, 1317, 389, 358, 1310, 399, 276, 761,
+
+ 6578, 6578, 6578, 409, 367, 413, 420, 307, 427, 374,
+ 421, 822, 883, 0, 1254, 925, 967, 1249, 1028, 319,
+ 451, 465, 1089, 1150, 6578, 456, 1282, 183, 1233, 1192,
+ 1224, 443, 1184, 1165, 454, 1161, 1149, 441, 1141, 1131,
+ 383, 1082, 1060, 1047, 453, 458, 470, 1029, 1253, 494,
+ 1044, 464, 999, 1295, 492, 486, 496, 516, 504, 517,
+ 998, 1356, 417, 1417, 1019, 418, 422, 491, 997, 502,
+ 1459, 527, 528, 545, 554, 409, 515, 1520, 0, 1562,
+ 965, 1623, 1684, 570, 1745, 560, 994, 6578, 948, 1806,
+ 935, 556, 923, 500, 897, 896, 559, 1848, 569, 6578,
+
+ 598, 882, 1909, 566, 565, 587, 606, 589, 631, 1951,
+ 2012, 6578, 0, 559, 907, 902, 691, 2054, 561, 593,
+ 2115, 0, 2157, 2218, 2279, 2340, 644, 878, 346, 2401,
+ 839, 836, 2443, 613, 616, 2504, 668, 534, 610, 656,
+ 680, 820, 2546, 2607, 0, 591, 847, 844, 803, 733,
+ 793, 614, 605, 6578, 2668, 2710, 625, 2771, 0, 2813,
+ 2874, 2935, 2996, 3057, 3131, 3173, 3234, 714, 3295, 695,
+ 690, 727, 762, 729, 3337, 3398, 0, 643, 777, 744,
+ 699, 698, 829, 654, 834, 3459, 689, 3520, 854, 894,
+ 915, 920, 3581, 3642, 3684, 683, 3745, 6578, 597, 3806,
+
+ 3867, 3928, 3989, 4050, 4111, 730, 4172, 814, 719, 542,
+ 750, 4214, 4275, 0, 762, 558, 553, 552, 531, 447,
+ 860, 6578, 697, 838, 957, 4336, 4397, 699, 926, 988,
+ 4458, 4519, 4580, 1002, 744, 1010, 4622, 4664, 1042, 737,
+ 4706, 4767, 647, 4828, 402, 818, 848, 1069, 1033, 0,
+ 437, 6578, 6578, 6578, 6578, 6578, 6578, 1122, 898, 924,
+ 4870, 1162, 963, 968, 4912, 4973, 770, 1063, 877, 1074,
+ 5005, 1102, 989, 1009, 0, 5062, 5104, 5146, 6578, 1036,
+ 1079, 1080, 1081, 1084, 1130, 910, 353, 315, 6578, 5188,
+ 5230, 5272, 689, 1139, 895, 1085, 1090, 1119, 1160, 5314,
+
+ 5356, 1226, 1242, 1120, 1152, 1164, 1207, 1208, 1210, 1219,
+ 1234, 1327, 1287, 1316, 1345, 1388, 5398, 1263, 1225, 1116,
+ 1211, 252, 1247, 1243, 1248, 1363, 6578, 1428, 5440, 1449,
+ 5501, 242, 1310, 1318, 1329, 856, 180, 813, 1454, 5562,
+ 1491, 5604, 148, 1357, 1326, 1061, 1370, 1531, 5646, 5688,
+ 1344, 1374, 1427, 1375, 5730, 5772, 1453, 1456, 135, 1458,
+ 5814, 5856, 1457, 97, 1183, 955, 5898, 1552, 1490, 91,
+ 1408, 1557, 1373, 1409, 1412, 1455, 78, 1530, 1522, 39,
+ 6578, 5959, 5964, 5977, 5982, 5987, 5994, 6004, 6017, 758,
+ 6022, 6032, 6045, 6059, 362, 6064, 6074, 6079, 6089, 6099,
+
+ 6103, 798, 6112, 6125, 6138, 6152, 6166, 6176, 6186, 6191,
+ 6203, 799, 6217, 957, 6222, 6234, 6247, 1071, 6261, 1086,
+ 6266, 6278, 6291, 6304, 6317, 6330, 1087, 6335, 6348, 1179,
+ 6353, 6365, 6378, 6391, 6404, 6417, 6430, 6435, 6448, 1183,
+ 6453, 6465, 6478, 6491, 6504, 6517, 1189, 1223, 6530, 6543,
+ 6553, 6563
} ;
-static yyconst short int yy_def[520] =
+static yyconst flex_int16_t yy_def[553] =
{ 0,
481, 1, 1, 1, 1, 1, 481, 481, 481, 481,
481, 482, 483, 481, 484, 481, 481, 485, 481, 481,
- 481, 481, 486, 487, 481, 488, 488, 488, 481, 481,
- 481, 488, 488, 488, 481, 488, 481, 481, 481, 482,
- 481, 489, 483, 481, 490, 491, 491, 481, 484, 492,
- 481, 481, 481, 481, 487, 488, 488, 488, 21, 493,
- 481, 494, 481, 21, 495, 496, 496, 496, 496, 496,
+ 481, 481, 486, 487, 487, 487, 488, 481, 481, 481,
+ 481, 487, 487, 487, 481, 487, 481, 481, 481, 482,
+ 481, 489, 483, 490, 491, 491, 492, 481, 484, 493,
+ 481, 481, 481, 481, 487, 487, 487, 488, 21, 494,
+ 481, 495, 481, 21, 496, 496, 496, 496, 496, 496,
+ 496, 496, 496, 496, 496, 496, 496, 496, 497, 496,
+ 481, 486, 498, 498, 498, 498, 498, 498, 498, 499,
+ 481, 487, 500, 481, 487, 487, 501, 487, 487, 487,
+
+ 481, 481, 481, 487, 487, 487, 487, 481, 482, 482,
+ 482, 482, 489, 502, 491, 491, 503, 491, 116, 504,
+ 504, 504, 504, 505, 481, 487, 506, 507, 496, 508,
496, 496, 496, 496, 496, 496, 496, 496, 496, 496,
- 481, 486, 497, 498, 498, 498, 498, 498, 498, 498,
- 488, 488, 481, 481, 488, 499, 481, 488, 488, 481,
-
- 488, 481, 481, 488, 488, 488, 488, 481, 482, 482,
- 482, 482, 489, 481, 491, 47, 491, 500, 47, 484,
- 484, 484, 484, 492, 481, 488, 493, 501, 496, 496,
- 496, 502, 496, 496, 496, 496, 496, 496, 496, 496,
496, 496, 496, 496, 496, 496, 496, 496, 496, 496,
- 481, 498, 498, 498, 498, 503, 498, 498, 498, 498,
- 498, 498, 92, 488, 92, 481, 488, 488, 504, 481,
- 488, 488, 488, 488, 488, 481, 482, 112, 481, 116,
- 491, 116, 47, 484, 123, 488, 505, 481, 130, 496,
- 130, 496, 496, 496, 496, 496, 496, 496, 496, 481,
-
- 498, 154, 498, 154, 498, 498, 498, 498, 498, 498,
- 92, 165, 481, 481, 506, 481, 481, 507, 488, 481,
- 112, 481, 116, 182, 47, 123, 488, 505, 501, 130,
- 191, 496, 496, 496, 498, 154, 204, 498, 498, 498,
- 498, 498, 498, 92, 165, 481, 508, 481, 481, 481,
- 507, 507, 509, 510, 481, 511, 481, 112, 481, 116,
- 182, 47, 123, 488, 130, 191, 496, 498, 154, 204,
- 498, 498, 498, 498, 498, 92, 165, 481, 512, 481,
- 481, 481, 481, 481, 509, 481, 513, 510, 514, 507,
- 507, 507, 507, 507, 511, 481, 112, 481, 116, 182,
-
- 491, 123, 488, 130, 191, 498, 154, 204, 498, 498,
- 498, 498, 488, 165, 481, 515, 481, 481, 481, 481,
- 481, 481, 481, 509, 509, 509, 509, 513, 510, 510,
- 510, 510, 514, 294, 481, 112, 491, 182, 123, 488,
- 496, 191, 498, 498, 204, 498, 498, 498, 488, 481,
- 481, 481, 481, 481, 481, 481, 481, 509, 509, 509,
- 327, 510, 510, 510, 332, 294, 481, 491, 488, 496,
- 498, 498, 498, 498, 481, 327, 332, 294, 481, 488,
- 498, 498, 498, 498, 498, 498, 498, 498, 481, 327,
- 332, 294, 488, 498, 498, 498, 498, 498, 498, 327,
-
- 332, 294, 516, 498, 498, 498, 498, 498, 498, 498,
- 498, 327, 332, 516, 414, 517, 518, 498, 498, 498,
- 498, 498, 498, 498, 498, 518, 518, 481, 481, 518,
- 519, 498, 498, 498, 498, 498, 498, 498, 518, 427,
- 518, 427, 498, 498, 498, 498, 498, 427, 518, 442,
- 498, 498, 498, 498, 427, 442, 498, 498, 498, 498,
- 427, 442, 498, 498, 498, 498, 427, 442, 498, 498,
- 498, 442, 498, 498, 498, 498, 498, 498, 498, 498,
+ 481, 498, 498, 509, 498, 498, 498, 498, 498, 498,
+ 498, 498, 487, 100, 481, 487, 487, 510, 481, 487,
+ 100, 487, 487, 487, 487, 481, 511, 511, 512, 116,
+ 491, 116, 116, 504, 504, 487, 513, 481, 496, 149,
+ 496, 496, 496, 496, 496, 496, 496, 149, 496, 481,
+
+ 498, 498, 162, 498, 498, 498, 498, 498, 498, 162,
+ 100, 481, 514, 515, 481, 481, 516, 100, 487, 481,
+ 517, 518, 116, 116, 116, 504, 487, 513, 519, 149,
+ 496, 496, 149, 496, 498, 162, 498, 498, 498, 498,
+ 498, 498, 162, 100, 520, 521, 481, 481, 481, 522,
+ 522, 523, 524, 481, 525, 100, 481, 526, 527, 528,
+ 528, 261, 529, 100, 149, 149, 149, 498, 162, 498,
+ 498, 498, 498, 498, 162, 100, 530, 531, 481, 481,
+ 481, 481, 481, 523, 481, 532, 533, 534, 535, 535,
+ 535, 535, 535, 536, 100, 481, 537, 481, 538, 538,
+
+ 300, 539, 100, 149, 304, 498, 162, 498, 498, 498,
+ 498, 162, 100, 540, 541, 481, 481, 481, 481, 481,
+ 481, 481, 542, 542, 542, 542, 543, 544, 544, 544,
+ 544, 545, 546, 303, 481, 537, 300, 301, 539, 303,
+ 304, 304, 498, 162, 498, 498, 498, 498, 303, 547,
+ 481, 481, 481, 481, 481, 481, 481, 542, 542, 542,
+ 326, 544, 544, 544, 331, 546, 481, 338, 303, 342,
+ 498, 498, 498, 498, 548, 326, 331, 366, 481, 303,
+ 498, 498, 498, 498, 498, 498, 498, 498, 481, 326,
+ 331, 366, 303, 498, 498, 498, 498, 498, 498, 326,
+
+ 331, 546, 549, 498, 498, 498, 498, 498, 498, 498,
+ 498, 542, 544, 549, 549, 550, 551, 498, 498, 498,
+ 498, 498, 498, 498, 498, 481, 481, 550, 552, 550,
+ 550, 498, 498, 498, 498, 498, 498, 498, 550, 431,
+ 550, 431, 498, 498, 498, 498, 498, 550, 440, 431,
+ 498, 498, 498, 498, 440, 431, 498, 498, 498, 498,
+ 440, 431, 498, 498, 498, 498, 440, 550, 498, 498,
+ 498, 550, 498, 498, 498, 498, 498, 498, 498, 498,
0, 481, 481, 481, 481, 481, 481, 481, 481, 481,
481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
- 481, 481, 481, 481, 481, 481, 481, 481, 481
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481
} ;
-static yyconst short int yy_nxt[2462] =
+static yyconst flex_int16_t yy_nxt[6664] =
{ 0,
8, 9, 10, 9, 9, 9, 11, 12, 13, 14,
8, 8, 15, 8, 8, 16, 17, 18, 19, 20,
- 21, 8, 22, 8, 8, 8, 23, 24, 25, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 27, 26, 26, 26, 26, 26, 26,
- 28, 26, 26, 26, 26, 26, 8, 29, 30, 26,
- 31, 156, 31, 37, 37, 37, 37, 37, 41, 32,
- 52, 32, 37, 37, 37, 37, 37, 38, 38, 38,
- 38, 38, 33, 34, 33, 34, 43, 132, 42, 44,
- 41, 97, 97, 53, 135, 35, 45, 35, 94, 47,
-
- 47, 47, 47, 47, 47, 50, 54, 94, 82, 52,
- 97, 98, 96, 41, 39, 41, 55, 94, 83, 156,
- 100, 96, 52, 85, 156, 94, 86, 161, 50, 87,
- 94, 96, 57, 88, 89, 42, 90, 481, 99, 96,
- 481, 58, 61, 92, 96, 53, 132, 45, 133, 62,
- 63, 101, 64, 92, 92, 92, 92, 92, 92, 65,
- 104, 66, 67, 67, 68, 69, 70, 67, 71, 72,
- 73, 67, 74, 67, 75, 76, 67, 77, 67, 78,
- 79, 80, 67, 67, 67, 67, 67, 67, 94, 94,
- 94, 67, 97, 98, 37, 37, 37, 37, 37, 481,
-
- 114, 59, 96, 96, 96, 38, 38, 38, 38, 38,
- 114, 114, 114, 114, 114, 114, 116, 156, 106, 94,
- 105, 107, 97, 98, 67, 119, 116, 116, 116, 116,
- 116, 116, 118, 96, 158, 119, 119, 119, 119, 119,
- 119, 92, 39, 40, 40, 40, 109, 94, 132, 111,
- 132, 92, 92, 92, 92, 92, 92, 132, 156, 196,
- 128, 96, 112, 134, 188, 160, 132, 132, 126, 113,
- 138, 132, 112, 112, 112, 112, 112, 112, 49, 49,
- 49, 120, 136, 132, 132, 139, 148, 140, 130, 122,
- 149, 132, 156, 137, 141, 97, 144, 123, 130, 130,
-
- 130, 130, 130, 130, 124, 132, 132, 123, 123, 123,
- 123, 123, 123, 132, 150, 481, 132, 154, 145, 156,
- 142, 156, 94, 156, 162, 83, 143, 154, 154, 154,
- 154, 154, 154, 157, 159, 146, 96, 132, 156, 147,
- 194, 40, 94, 156, 195, 201, 41, 165, 41, 41,
- 152, 91, 91, 91, 91, 91, 96, 165, 165, 165,
- 165, 165, 165, 94, 94, 94, 42, 156, 42, 42,
- 163, 167, 94, 94, 94, 94, 41, 96, 96, 96,
- 163, 163, 163, 163, 163, 163, 96, 96, 96, 96,
- 132, 50, 169, 172, 94, 132, 132, 170, 41, 193,
-
- 171, 168, 169, 169, 169, 169, 169, 169, 96, 175,
- 173, 49, 132, 50, 192, 156, 199, 156, 197, 41,
- 179, 41, 174, 110, 177, 177, 177, 110, 132, 41,
- 179, 179, 179, 179, 179, 179, 50, 156, 156, 42,
- 205, 156, 178, 198, 208, 235, 156, 156, 94, 42,
- 156, 156, 178, 178, 178, 178, 178, 178, 40, 40,
- 40, 109, 96, 206, 111, 209, 186, 156, 182, 207,
- 229, 94, 213, 406, 188, 156, 210, 112, 182, 182,
- 182, 182, 182, 182, 113, 96, 96, 112, 112, 112,
- 112, 112, 112, 115, 115, 115, 115, 115, 214, 156,
-
- 156, 132, 196, 183, 132, 218, 216, 94, 232, 132,
- 233, 156, 180, 183, 183, 183, 183, 183, 183, 96,
- 213, 96, 180, 180, 180, 180, 180, 180, 121, 184,
- 184, 184, 121, 239, 96, 156, 156, 156, 191, 41,
- 156, 94, 156, 242, 243, 274, 241, 185, 191, 191,
- 191, 191, 191, 191, 50, 96, 41, 185, 185, 185,
- 185, 185, 185, 49, 49, 49, 120, 94, 272, 214,
- 379, 50, 214, 204, 122, 132, 94, 248, 156, 214,
- 280, 96, 123, 204, 204, 204, 204, 204, 204, 124,
- 96, 234, 123, 123, 123, 123, 123, 123, 129, 129,
-
- 129, 129, 129, 227, 156, 156, 156, 156, 211, 156,
- 347, 156, 156, 309, 348, 306, 447, 189, 211, 211,
- 211, 211, 211, 211, 132, 238, 240, 189, 189, 189,
- 189, 189, 189, 153, 153, 153, 153, 153, 156, 94,
- 94, 132, 156, 156, 156, 156, 167, 94, 373, 374,
- 310, 268, 202, 96, 96, 156, 267, 156, 156, 156,
- 94, 96, 202, 202, 202, 202, 202, 202, 164, 164,
- 164, 164, 164, 156, 96, 286, 271, 273, 221, 275,
- 387, 219, 367, 303, 357, 264, 356, 212, 221, 221,
- 221, 221, 221, 221, 222, 287, 286, 212, 212, 212,
-
- 212, 212, 212, 223, 222, 222, 222, 222, 222, 222,
- 156, 289, 156, 223, 223, 223, 223, 223, 223, 181,
- 181, 181, 181, 181, 371, 214, 286, 214, 156, 225,
- 312, 399, 311, 317, 156, 352, 355, 354, 224, 225,
- 225, 225, 225, 225, 225, 226, 287, 286, 224, 224,
- 224, 224, 224, 224, 230, 226, 226, 226, 226, 226,
- 226, 286, 289, 156, 230, 230, 230, 230, 230, 230,
- 190, 190, 190, 190, 190, 284, 284, 284, 284, 284,
- 236, 287, 445, 322, 322, 322, 322, 322, 255, 231,
- 236, 236, 236, 236, 236, 236, 323, 156, 156, 231,
-
- 231, 231, 231, 231, 231, 203, 203, 203, 203, 203,
- 322, 322, 322, 322, 322, 244, 156, 353, 94, 343,
- 346, 436, 340, 323, 237, 244, 244, 244, 244, 244,
- 244, 245, 96, 286, 237, 237, 237, 237, 237, 237,
- 246, 245, 245, 245, 245, 245, 245, 156, 289, 156,
- 246, 246, 246, 246, 246, 246, 251, 251, 251, 251,
- 251, 258, 253, 156, 94, 286, 286, 254, 432, 255,
- 388, 258, 258, 258, 258, 258, 258, 259, 96, 285,
- 156, 118, 256, 260, 286, 287, 287, 259, 259, 259,
- 259, 259, 259, 260, 260, 260, 260, 260, 260, 261,
-
- 156, 156, 369, 397, 287, 262, 335, 394, 395, 261,
- 261, 261, 261, 261, 261, 262, 262, 262, 262, 262,
- 262, 263, 115, 115, 115, 115, 115, 265, 156, 286,
- 286, 263, 263, 263, 263, 263, 263, 265, 265, 265,
- 265, 265, 265, 266, 289, 289, 156, 156, 118, 269,
- 435, 424, 407, 266, 266, 266, 266, 266, 266, 269,
- 269, 269, 269, 269, 269, 270, 129, 129, 129, 129,
- 129, 276, 321, 156, 94, 270, 270, 270, 270, 270,
- 270, 276, 276, 276, 276, 276, 276, 277, 96, 156,
- 320, 380, 132, 278, 156, 446, 396, 277, 277, 277,
-
- 277, 277, 277, 278, 278, 278, 278, 278, 278, 251,
- 251, 251, 251, 251, 434, 253, 319, 156, 403, 156,
- 254, 288, 255, 284, 284, 284, 284, 284, 297, 481,
- 94, 286, 96, 408, 481, 256, 255, 459, 297, 297,
- 297, 297, 297, 297, 96, 156, 289, 156, 156, 256,
- 284, 284, 284, 284, 290, 398, 292, 156, 419, 409,
- 298, 292, 292, 293, 393, 420, 318, 156, 156, 294,
- 298, 298, 298, 298, 298, 298, 295, 299, 421, 294,
- 294, 294, 294, 294, 294, 300, 156, 299, 299, 299,
- 299, 299, 299, 301, 132, 300, 300, 300, 300, 300,
-
- 300, 302, 433, 301, 301, 301, 301, 301, 301, 304,
- 296, 302, 302, 302, 302, 302, 302, 305, 283, 304,
- 304, 304, 304, 304, 304, 307, 282, 305, 305, 305,
- 305, 305, 305, 308, 281, 307, 307, 307, 307, 307,
- 307, 313, 156, 308, 308, 308, 308, 308, 308, 314,
- 132, 313, 313, 313, 313, 313, 313, 315, 156, 314,
- 314, 314, 314, 314, 314, 422, 156, 315, 315, 315,
- 315, 315, 315, 285, 285, 285, 324, 156, 156, 326,
- 410, 156, 404, 156, 474, 405, 411, 284, 284, 284,
- 284, 284, 327, 481, 156, 418, 156, 454, 481, 328,
-
- 255, 423, 327, 327, 327, 327, 327, 327, 288, 288,
- 288, 329, 156, 256, 156, 438, 465, 156, 132, 331,
- 284, 284, 284, 284, 284, 425, 481, 332, 156, 156,
- 156, 481, 451, 255, 333, 437, 443, 332, 332, 332,
- 332, 332, 332, 229, 257, 156, 256, 284, 284, 284,
- 284, 284, 156, 481, 156, 444, 156, 470, 481, 471,
- 255, 284, 284, 284, 284, 284, 336, 481, 452, 156,
- 475, 453, 481, 256, 255, 156, 336, 336, 336, 336,
- 336, 336, 428, 428, 428, 428, 428, 256, 290, 290,
- 290, 290, 290, 156, 481, 429, 466, 250, 337, 481,
-
- 457, 255, 153, 153, 153, 153, 153, 334, 337, 337,
- 337, 337, 337, 337, 256, 249, 156, 334, 334, 334,
- 334, 334, 334, 284, 284, 284, 284, 290, 156, 292,
- 156, 156, 132, 338, 292, 292, 293, 458, 460, 156,
- 132, 132, 294, 338, 338, 338, 338, 338, 338, 295,
- 339, 132, 294, 294, 294, 294, 294, 294, 341, 469,
- 339, 339, 339, 339, 339, 339, 342, 156, 341, 341,
- 341, 341, 341, 341, 344, 132, 342, 342, 342, 342,
- 342, 342, 345, 229, 344, 344, 344, 344, 344, 344,
- 473, 156, 345, 345, 345, 345, 345, 345, 91, 91,
-
- 91, 91, 91, 349, 481, 481, 481, 481, 481, 156,
- 94, 463, 480, 349, 349, 349, 349, 349, 349, 350,
- 481, 156, 156, 479, 96, 118, 220, 478, 217, 350,
- 350, 350, 350, 350, 350, 358, 322, 322, 322, 358,
- 166, 286, 464, 362, 322, 322, 322, 362, 359, 156,
- 156, 156, 156, 200, 286, 132, 363, 476, 477, 132,
- 366, 287, 325, 360, 360, 360, 325, 132, 286, 289,
- 366, 366, 366, 366, 366, 366, 358, 322, 322, 322,
- 358, 361, 286, 181, 181, 181, 181, 181, 287, 359,
- 132, 361, 361, 361, 361, 361, 361, 285, 285, 285,
-
- 324, 132, 287, 326, 132, 132, 132, 40, 132, 118,
- 132, 190, 190, 190, 190, 190, 327, 40, 40, 40,
- 40, 40, 40, 328, 132, 132, 327, 327, 327, 327,
- 327, 327, 330, 364, 364, 364, 330, 132, 128, 118,
- 118, 176, 368, 286, 166, 203, 203, 203, 203, 203,
- 156, 365, 368, 368, 368, 368, 368, 368, 289, 151,
- 132, 365, 365, 365, 365, 365, 365, 288, 288, 288,
- 329, 156, 132, 59, 65, 61, 128, 49, 331, 125,
- 118, 108, 103, 102, 93, 81, 332, 49, 49, 49,
- 49, 49, 49, 333, 370, 60, 332, 332, 332, 332,
-
- 332, 332, 372, 59, 370, 370, 370, 370, 370, 370,
- 51, 48, 372, 372, 372, 372, 372, 372, 164, 164,
- 164, 164, 164, 375, 481, 36, 36, 481, 481, 481,
- 94, 481, 481, 375, 375, 375, 375, 375, 375, 376,
- 481, 481, 481, 481, 96, 481, 481, 481, 481, 376,
- 376, 376, 376, 376, 376, 362, 322, 322, 322, 362,
- 377, 481, 481, 481, 481, 481, 286, 481, 363, 481,
- 377, 377, 377, 377, 377, 377, 378, 481, 481, 156,
- 481, 289, 481, 481, 481, 381, 378, 378, 378, 378,
- 378, 378, 382, 481, 383, 389, 481, 481, 481, 384,
-
- 385, 390, 481, 386, 481, 389, 389, 389, 389, 389,
- 389, 390, 390, 390, 390, 390, 390, 391, 481, 481,
- 481, 481, 481, 392, 481, 481, 481, 391, 391, 391,
- 391, 391, 391, 392, 392, 392, 392, 392, 392, 400,
- 481, 481, 481, 481, 481, 401, 481, 481, 481, 400,
- 400, 400, 400, 400, 400, 401, 401, 401, 401, 401,
- 401, 402, 481, 481, 481, 481, 481, 412, 481, 481,
- 481, 402, 402, 402, 402, 402, 402, 412, 412, 412,
- 412, 412, 412, 413, 481, 481, 481, 481, 481, 252,
- 481, 481, 481, 413, 413, 413, 413, 413, 413, 252,
-
- 252, 252, 252, 252, 252, 414, 414, 414, 414, 414,
- 481, 481, 285, 481, 481, 481, 481, 481, 481, 481,
- 481, 415, 285, 285, 285, 285, 285, 285, 288, 481,
- 481, 416, 414, 414, 414, 414, 414, 481, 288, 288,
- 288, 288, 288, 288, 481, 481, 481, 481, 415, 427,
- 481, 481, 428, 428, 428, 428, 428, 481, 416, 427,
- 427, 427, 427, 427, 427, 429, 428, 428, 428, 428,
- 428, 481, 428, 428, 428, 428, 428, 481, 431, 429,
- 481, 481, 481, 481, 481, 429, 481, 481, 481, 442,
- 481, 481, 431, 439, 439, 439, 439, 439, 431, 442,
-
- 442, 442, 442, 442, 442, 481, 429, 428, 428, 428,
- 428, 428, 440, 481, 481, 481, 481, 481, 481, 431,
- 429, 481, 440, 440, 440, 440, 440, 440, 448, 481,
- 481, 481, 481, 431, 481, 481, 481, 481, 448, 448,
- 448, 448, 448, 448, 428, 428, 428, 428, 428, 455,
- 481, 481, 428, 428, 428, 428, 428, 429, 481, 455,
- 455, 455, 455, 455, 455, 429, 481, 481, 481, 456,
- 431, 449, 449, 449, 449, 449, 481, 481, 431, 456,
- 456, 456, 456, 456, 456, 481, 481, 481, 481, 481,
- 450, 481, 481, 481, 481, 481, 461, 481, 481, 481,
-
- 450, 450, 450, 450, 450, 450, 461, 461, 461, 461,
- 461, 461, 462, 481, 481, 481, 481, 481, 467, 481,
- 481, 481, 462, 462, 462, 462, 462, 462, 467, 467,
- 467, 467, 467, 467, 468, 481, 481, 481, 481, 481,
- 430, 481, 481, 481, 468, 468, 468, 468, 468, 468,
- 430, 430, 430, 430, 430, 430, 472, 481, 481, 481,
- 481, 481, 430, 481, 481, 481, 472, 472, 472, 472,
- 472, 472, 430, 430, 430, 430, 430, 430, 40, 481,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 46,
- 46, 481, 46, 46, 49, 481, 49, 49, 49, 49,
-
- 49, 49, 49, 49, 49, 56, 56, 481, 56, 56,
- 84, 481, 481, 84, 84, 91, 91, 91, 91, 91,
- 91, 91, 91, 91, 95, 481, 95, 95, 481, 95,
- 95, 110, 110, 110, 110, 110, 110, 110, 110, 110,
- 110, 110, 115, 115, 115, 115, 115, 115, 115, 115,
- 115, 117, 117, 481, 117, 117, 121, 121, 121, 121,
- 121, 121, 121, 121, 121, 121, 121, 127, 127, 127,
- 127, 127, 127, 127, 127, 127, 127, 127, 127, 67,
- 67, 129, 129, 129, 129, 129, 129, 129, 129, 129,
- 131, 131, 481, 131, 131, 153, 153, 153, 153, 153,
-
- 153, 153, 153, 153, 155, 155, 481, 155, 155, 164,
- 164, 164, 164, 164, 164, 164, 164, 164, 181, 181,
- 181, 181, 181, 181, 181, 181, 181, 187, 187, 187,
- 187, 187, 187, 187, 187, 187, 187, 187, 187, 190,
- 190, 190, 190, 190, 190, 190, 190, 190, 203, 203,
- 203, 203, 203, 203, 203, 203, 203, 215, 215, 215,
- 481, 215, 228, 228, 228, 228, 228, 228, 228, 228,
- 228, 228, 228, 228, 247, 247, 247, 481, 247, 252,
- 252, 252, 252, 481, 252, 252, 252, 252, 252, 252,
- 279, 279, 279, 481, 279, 285, 481, 285, 285, 285,
-
- 285, 285, 285, 285, 285, 285, 288, 481, 288, 288,
- 288, 288, 288, 288, 288, 288, 288, 291, 291, 291,
- 291, 291, 291, 291, 291, 291, 291, 291, 316, 316,
- 316, 481, 316, 325, 325, 325, 325, 325, 325, 325,
- 325, 325, 325, 325, 330, 330, 330, 330, 330, 330,
- 330, 330, 330, 330, 330, 351, 351, 351, 481, 351,
- 417, 417, 417, 481, 481, 481, 417, 481, 481, 417,
- 417, 426, 426, 426, 426, 426, 426, 426, 426, 426,
- 430, 430, 430, 481, 481, 430, 430, 430, 481, 430,
- 430, 441, 441, 441, 441, 441, 441, 441, 441, 441,
-
- 7, 481, 481, 481, 481, 481, 481, 481, 481, 481,
- 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
- 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
- 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
- 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
- 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
- 481
+ 21, 8, 22, 8, 8, 8, 23, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 25, 24, 24, 24, 24, 24, 24, 26, 24, 24,
+ 24, 24, 24, 27, 28, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 25, 24,
+ 24, 24, 24, 24, 24, 26, 24, 24, 24, 24,
+ 24, 8, 29, 30, 24, 31, 36, 31, 36, 41,
+ 41, 32, 154, 32, 37, 37, 37, 37, 37, 37,
+
+ 37, 37, 37, 37, 33, 34, 33, 34, 38, 38,
+ 38, 38, 38, 91, 91, 36, 54, 36, 52, 52,
+ 32, 91, 32, 91, 94, 95, 94, 95, 108, 41,
+ 50, 154, 33, 34, 33, 34, 42, 135, 53, 56,
+ 91, 104, 39, 41, 154, 35, 130, 35, 57, 96,
+ 154, 105, 58, 93, 93, 91, 108, 481, 52, 91,
+ 481, 93, 97, 93, 91, 135, 53, 56, 107, 104,
+ 50, 39, 43, 94, 94, 44, 57, 96, 53, 105,
+ 93, 132, 45, 45, 45, 45, 45, 45, 154, 42,
+ 98, 106, 137, 47, 147, 93, 107, 159, 128, 93,
+
+ 130, 154, 188, 130, 93, 130, 53, 130, 47, 150,
+ 132, 45, 45, 45, 45, 45, 45, 61, 98, 106,
+ 137, 91, 147, 154, 62, 63, 159, 64, 37, 37,
+ 37, 37, 37, 154, 65, 65, 66, 67, 68, 65,
+ 69, 70, 71, 65, 72, 65, 73, 74, 65, 75,
+ 65, 76, 77, 78, 65, 65, 65, 65, 65, 65,
+ 79, 93, 80, 65, 65, 66, 67, 68, 65, 69,
+ 70, 71, 72, 65, 73, 74, 65, 75, 65, 76,
+ 77, 78, 65, 65, 65, 65, 65, 65, 131, 91,
+ 138, 65, 82, 136, 130, 154, 38, 38, 38, 38,
+
+ 38, 481, 130, 59, 84, 154, 160, 85, 91, 130,
+ 86, 94, 95, 133, 87, 88, 131, 89, 155, 138,
+ 91, 136, 156, 65, 134, 94, 141, 130, 90, 93,
+ 39, 41, 154, 84, 154, 160, 85, 154, 126, 86,
+ 145, 133, 87, 88, 146, 89, 100, 155, 93, 176,
+ 156, 65, 134, 100, 100, 100, 100, 100, 100, 39,
+ 93, 229, 130, 481, 139, 188, 130, 126, 154, 145,
+ 140, 91, 50, 146, 65, 65, 142, 176, 130, 158,
+ 91, 41, 100, 100, 100, 100, 100, 100, 40, 40,
+ 40, 109, 139, 143, 111, 152, 157, 144, 140, 90,
+
+ 130, 154, 91, 194, 167, 142, 154, 112, 158, 166,
+ 154, 93, 91, 173, 112, 112, 112, 112, 112, 112,
+ 93, 143, 91, 152, 157, 144, 91, 42, 41, 40,
+ 91, 91, 167, 91, 41, 212, 130, 170, 166, 172,
+ 113, 173, 93, 112, 112, 112, 112, 112, 112, 116,
+ 220, 174, 93, 481, 213, 154, 116, 116, 116, 116,
+ 116, 116, 93, 41, 175, 170, 93, 481, 172, 91,
+ 93, 93, 357, 93, 42, 93, 191, 41, 220, 174,
+ 42, 192, 117, 195, 186, 116, 116, 116, 116, 116,
+ 116, 119, 175, 193, 130, 201, 130, 196, 119, 119,
+
+ 119, 119, 119, 119, 50, 191, 130, 130, 213, 93,
+ 192, 130, 195, 186, 197, 217, 215, 154, 50, 204,
+ 194, 193, 41, 130, 201, 196, 205, 119, 119, 119,
+ 119, 119, 119, 49, 49, 49, 120, 199, 206, 154,
+ 91, 212, 197, 208, 122, 154, 207, 130, 204, 154,
+ 209, 271, 123, 130, 205, 93, 356, 154, 91, 123,
+ 123, 123, 123, 123, 123, 199, 206, 91, 42, 154,
+ 154, 208, 481, 91, 91, 207, 213, 355, 354, 209,
+ 93, 93, 41, 353, 247, 124, 231, 154, 123, 123,
+ 123, 123, 123, 123, 100, 154, 219, 227, 93, 232,
+
+ 234, 100, 100, 100, 100, 100, 100, 93, 213, 130,
+ 237, 238, 130, 93, 93, 231, 279, 285, 154, 154,
+ 241, 285, 130, 50, 219, 227, 235, 232, 239, 234,
+ 100, 100, 100, 100, 100, 100, 149, 257, 237, 238,
+ 154, 240, 154, 149, 149, 149, 149, 149, 149, 241,
+ 117, 154, 267, 268, 272, 235, 239, 91, 288, 154,
+ 213, 285, 242, 154, 371, 257, 130, 286, 316, 154,
+ 240, 296, 149, 149, 149, 149, 149, 149, 162, 264,
+ 267, 268, 272, 273, 154, 162, 162, 162, 162, 162,
+ 162, 242, 250, 250, 250, 250, 250, 93, 252, 296,
+
+ 154, 285, 403, 253, 285, 254, 92, 286, 264, 154,
+ 335, 285, 273, 270, 162, 162, 162, 162, 162, 162,
+ 164, 154, 309, 320, 319, 274, 308, 164, 164, 164,
+ 164, 164, 164, 154, 250, 250, 250, 250, 250, 335,
+ 252, 270, 288, 154, 255, 253, 346, 254, 154, 306,
+ 286, 309, 288, 274, 92, 308, 164, 164, 164, 164,
+ 164, 164, 99, 99, 99, 99, 99, 154, 114, 318,
+ 114, 311, 154, 310, 91, 346, 343, 347, 306, 213,
+ 154, 171, 154, 154, 367, 369, 255, 352, 171, 171,
+ 171, 171, 171, 171, 283, 283, 283, 283, 283, 311,
+
+ 481, 310, 317, 154, 343, 481, 347, 254, 179, 222,
+ 179, 222, 367, 369, 93, 154, 379, 171, 171, 171,
+ 171, 171, 171, 110, 177, 177, 177, 110, 282, 41,
+ 283, 283, 283, 283, 283, 321, 321, 321, 321, 321,
+ 481, 447, 178, 254, 379, 285, 255, 373, 322, 178,
+ 178, 178, 178, 178, 178, 283, 283, 283, 283, 283,
+ 345, 321, 321, 321, 321, 321, 154, 154, 254, 281,
+ 447, 154, 280, 154, 322, 42, 373, 374, 178, 178,
+ 178, 178, 178, 178, 40, 40, 40, 109, 345, 130,
+ 111, 286, 130, 229, 92, 283, 283, 283, 283, 283,
+
+ 481, 154, 446, 112, 380, 285, 374, 255, 254, 154,
+ 112, 112, 112, 112, 112, 112, 283, 283, 283, 283,
+ 283, 283, 283, 283, 283, 283, 481, 249, 481, 254,
+ 446, 285, 248, 380, 254, 154, 113, 399, 285, 112,
+ 112, 112, 112, 112, 112, 180, 406, 255, 154, 130,
+ 130, 286, 180, 180, 180, 180, 180, 180, 358, 321,
+ 321, 321, 358, 154, 285, 481, 399, 245, 255, 245,
+ 481, 359, 471, 255, 406, 285, 130, 286, 117, 288,
+ 285, 180, 180, 180, 180, 180, 180, 182, 130, 362,
+ 321, 321, 321, 362, 182, 182, 182, 182, 182, 182,
+
+ 285, 130, 363, 99, 99, 99, 99, 99, 154, 229,
+ 286, 110, 177, 177, 177, 110, 288, 41, 117, 92,
+ 387, 288, 216, 182, 182, 182, 182, 182, 182, 118,
+ 118, 118, 118, 118, 163, 163, 163, 163, 163, 165,
+ 388, 288, 154, 121, 184, 184, 184, 121, 183, 387,
+ 92, 154, 154, 92, 41, 183, 183, 183, 183, 183,
+ 183, 200, 154, 42, 181, 181, 181, 181, 181, 388,
+ 161, 161, 161, 161, 161, 189, 189, 189, 189, 189,
+ 393, 259, 130, 259, 183, 183, 183, 183, 183, 183,
+ 121, 184, 184, 184, 121, 50, 277, 298, 277, 298,
+
+ 130, 41, 453, 202, 202, 202, 202, 202, 393, 185,
+ 394, 395, 396, 130, 154, 407, 185, 185, 185, 185,
+ 185, 185, 154, 358, 321, 321, 321, 358, 408, 285,
+ 453, 397, 154, 154, 154, 130, 359, 154, 154, 394,
+ 395, 396, 50, 154, 407, 185, 185, 185, 185, 185,
+ 185, 49, 49, 49, 120, 154, 408, 409, 418, 397,
+ 434, 398, 122, 362, 321, 321, 321, 362, 404, 154,
+ 123, 405, 154, 154, 285, 286, 363, 123, 123, 123,
+ 123, 123, 123, 154, 130, 409, 418, 419, 434, 314,
+ 398, 314, 154, 350, 130, 350, 420, 404, 410, 375,
+
+ 405, 375, 130, 124, 411, 154, 123, 123, 123, 123,
+ 123, 123, 190, 154, 130, 288, 419, 154, 130, 190,
+ 190, 190, 190, 190, 190, 420, 410, 289, 289, 289,
+ 289, 289, 411, 389, 470, 389, 154, 130, 435, 422,
+ 254, 423, 421, 414, 414, 414, 414, 414, 190, 190,
+ 190, 190, 190, 190, 148, 148, 148, 148, 148, 415,
+ 154, 154, 470, 154, 154, 433, 424, 435, 422, 425,
+ 423, 421, 154, 198, 437, 438, 436, 130, 154, 255,
+ 198, 198, 198, 198, 198, 198, 130, 154, 329, 364,
+ 364, 364, 329, 433, 424, 417, 154, 128, 425, 285,
+
+ 154, 154, 117, 437, 438, 436, 130, 117, 432, 198,
+ 198, 198, 198, 198, 198, 203, 154, 414, 414, 414,
+ 414, 414, 203, 203, 203, 203, 203, 203, 324, 360,
+ 360, 360, 324, 415, 285, 169, 432, 165, 154, 151,
+ 288, 443, 130, 130, 59, 444, 481, 481, 481, 481,
+ 481, 203, 203, 203, 203, 203, 203, 161, 161, 161,
+ 161, 161, 481, 154, 426, 426, 426, 426, 426, 417,
+ 443, 154, 445, 452, 444, 457, 210, 427, 79, 154,
+ 286, 61, 154, 210, 210, 210, 210, 210, 210, 426,
+ 426, 426, 426, 426, 128, 125, 451, 154, 417, 117,
+
+ 445, 452, 427, 103, 457, 458, 460, 102, 454, 154,
+ 154, 475, 210, 210, 210, 210, 210, 210, 163, 163,
+ 163, 163, 163, 154, 451, 101, 154, 154, 154, 426,
+ 426, 426, 426, 426, 458, 460, 454, 211, 474, 475,
+ 476, 429, 427, 477, 211, 211, 211, 211, 211, 211,
+ 426, 426, 426, 426, 426, 426, 426, 426, 426, 426,
+ 81, 154, 154, 427, 60, 154, 59, 474, 427, 476,
+ 463, 459, 477, 211, 211, 211, 211, 211, 211, 218,
+ 154, 429, 51, 48, 478, 481, 218, 218, 218, 218,
+ 218, 218, 426, 426, 426, 426, 426, 481, 464, 459,
+
+ 465, 469, 429, 466, 481, 427, 154, 429, 154, 154,
+ 154, 154, 481, 478, 481, 218, 218, 218, 218, 218,
+ 218, 110, 177, 177, 177, 110, 464, 41, 465, 469,
+ 481, 466, 426, 426, 426, 426, 426, 473, 481, 481,
+ 221, 481, 481, 154, 429, 427, 481, 221, 221, 221,
+ 221, 221, 221, 441, 441, 441, 441, 441, 448, 448,
+ 448, 448, 448, 481, 481, 473, 427, 480, 479, 481,
+ 481, 427, 481, 42, 481, 154, 221, 221, 221, 221,
+ 221, 221, 223, 154, 429, 481, 481, 481, 481, 223,
+ 223, 223, 223, 223, 223, 480, 479, 481, 481, 481,
+
+ 481, 481, 481, 481, 481, 429, 481, 481, 481, 481,
+ 429, 481, 481, 481, 481, 481, 481, 481, 223, 223,
+ 223, 223, 223, 223, 181, 181, 181, 181, 181, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 224, 481, 481, 481, 481, 481, 481,
+ 224, 224, 224, 224, 224, 224, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 224,
+ 224, 224, 224, 224, 224, 118, 118, 118, 118, 118,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+
+ 481, 481, 481, 481, 225, 481, 481, 481, 481, 481,
+ 481, 225, 225, 225, 225, 225, 225, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 225, 225, 225, 225, 225, 225, 121, 184, 184, 184,
+ 121, 481, 481, 481, 481, 481, 481, 41, 481, 481,
+ 481, 481, 481, 481, 481, 226, 481, 481, 481, 481,
+ 481, 481, 226, 226, 226, 226, 226, 226, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 50, 481,
+
+ 481, 226, 226, 226, 226, 226, 226, 189, 189, 189,
+ 189, 189, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 230, 481, 481, 481,
+ 481, 481, 481, 230, 230, 230, 230, 230, 230, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 230, 230, 230, 230, 230, 230, 233, 481,
+ 481, 481, 481, 481, 481, 233, 233, 233, 233, 233,
+ 233, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+
+ 481, 481, 481, 481, 233, 233, 233, 233, 233, 233,
+ 202, 202, 202, 202, 202, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 236,
+ 481, 481, 481, 481, 481, 481, 236, 236, 236, 236,
+ 236, 236, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 236, 236, 236, 236, 236,
+ 236, 243, 481, 481, 481, 481, 481, 481, 243, 243,
+ 243, 243, 243, 243, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+
+ 481, 481, 481, 481, 481, 481, 481, 243, 243, 243,
+ 243, 243, 243, 163, 163, 163, 163, 163, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 244, 481, 481, 481, 481, 481, 481, 244,
+ 244, 244, 244, 244, 244, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 244, 244,
+ 244, 244, 244, 244, 256, 481, 481, 481, 481, 481,
+ 481, 256, 256, 256, 256, 256, 256, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 256, 256, 256, 256, 256, 256, 110, 177, 177, 177,
+ 110, 481, 41, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 258, 481, 481, 481, 481,
+ 481, 481, 258, 258, 258, 258, 258, 258, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 42, 481,
+ 481, 258, 258, 258, 258, 258, 258, 260, 481, 481,
+ 481, 481, 481, 481, 260, 260, 260, 260, 260, 260,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 260, 260, 260, 260, 260, 260, 181,
+ 181, 181, 181, 181, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 261, 481,
+ 481, 481, 481, 481, 481, 261, 261, 261, 261, 261,
+ 261, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 261, 261, 261, 261, 261, 261,
+ 118, 118, 118, 118, 118, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 262,
+
+ 481, 481, 481, 481, 481, 481, 262, 262, 262, 262,
+ 262, 262, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 262, 262, 262, 262, 262,
+ 262, 121, 184, 184, 184, 121, 481, 481, 481, 481,
+ 481, 481, 41, 481, 481, 481, 481, 481, 481, 481,
+ 263, 481, 481, 481, 481, 481, 481, 263, 263, 263,
+ 263, 263, 263, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 50, 481, 481, 263, 263, 263, 263,
+
+ 263, 263, 189, 189, 189, 189, 189, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 265, 481, 481, 481, 481, 481, 481, 265, 265,
+ 265, 265, 265, 265, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 265, 265, 265,
+ 265, 265, 265, 266, 481, 481, 481, 481, 481, 481,
+ 266, 266, 266, 266, 266, 266, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 266,
+
+ 266, 266, 266, 266, 266, 202, 202, 202, 202, 202,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 269, 481, 481, 481, 481, 481,
+ 481, 269, 269, 269, 269, 269, 269, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 269, 269, 269, 269, 269, 269, 275, 481, 481, 481,
+ 481, 481, 481, 275, 275, 275, 275, 275, 275, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+
+ 481, 481, 275, 275, 275, 275, 275, 275, 163, 163,
+ 163, 163, 163, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 276, 481, 481,
+ 481, 481, 481, 481, 276, 276, 276, 276, 276, 276,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 276, 276, 276, 276, 276, 276, 283,
+ 283, 283, 283, 289, 481, 291, 481, 481, 481, 481,
+ 291, 291, 292, 481, 481, 481, 481, 481, 293, 481,
+ 481, 481, 481, 481, 481, 293, 293, 293, 293, 293,
+
+ 293, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 294, 481, 481, 293, 293, 293, 293, 293, 293,
+ 295, 481, 481, 481, 481, 481, 481, 295, 295, 295,
+ 295, 295, 295, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 295, 295, 295, 295,
+ 295, 295, 110, 177, 177, 177, 110, 481, 41, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 297, 481, 481, 481, 481, 481, 481, 297, 297,
+
+ 297, 297, 297, 297, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 42, 481, 481, 297, 297, 297,
+ 297, 297, 297, 299, 481, 481, 481, 481, 481, 481,
+ 299, 299, 299, 299, 299, 299, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 117, 481, 481, 299,
+ 299, 299, 299, 299, 299, 181, 181, 181, 181, 181,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 300, 481, 481, 481, 481, 481,
+
+ 481, 300, 300, 300, 300, 300, 300, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 117, 481, 481,
+ 300, 300, 300, 300, 300, 300, 118, 118, 118, 118,
+ 118, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 301, 481, 481, 481, 481,
+ 481, 481, 301, 301, 301, 301, 301, 301, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 301, 301, 301, 301, 301, 301, 121, 184, 184,
+
+ 184, 121, 481, 481, 481, 481, 481, 481, 41, 481,
+ 481, 481, 481, 481, 481, 481, 302, 481, 481, 481,
+ 481, 481, 481, 302, 302, 302, 302, 302, 302, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 50,
+ 481, 481, 302, 302, 302, 302, 302, 302, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 92, 481, 481,
+ 481, 481, 481, 481, 92, 92, 92, 92, 92, 92,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+
+ 481, 481, 481, 303, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 92, 92, 92, 92, 92, 92, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 303, 189, 189, 189, 189, 189, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 304, 481, 481, 481, 481, 481, 481, 304, 304,
+ 304, 304, 304, 304, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 304, 304, 304,
+ 304, 304, 304, 305, 481, 481, 481, 481, 481, 481,
+
+ 305, 305, 305, 305, 305, 305, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 305,
+ 305, 305, 305, 305, 305, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 129, 481, 481, 481, 481, 481,
+ 481, 129, 129, 129, 129, 129, 129, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 129, 129, 129, 129, 129, 129, 202, 202, 202, 202,
+
+ 202, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 307, 481, 481, 481, 481,
+ 481, 481, 307, 307, 307, 307, 307, 307, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 307, 307, 307, 307, 307, 307, 312, 481, 481,
+ 481, 481, 481, 481, 312, 312, 312, 312, 312, 312,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 312, 312, 312, 312, 312, 312, 163,
+
+ 163, 163, 163, 163, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 313, 481,
+ 481, 481, 481, 481, 481, 313, 313, 313, 313, 313,
+ 313, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 313, 313, 313, 313, 313, 313,
+ 284, 284, 284, 323, 481, 481, 325, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 326,
+ 481, 481, 481, 481, 481, 481, 326, 326, 326, 326,
+ 326, 326, 481, 481, 481, 481, 481, 481, 481, 481,
+
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 327, 481, 481, 326, 326, 326, 326, 326,
+ 326, 287, 287, 287, 328, 481, 481, 481, 481, 481,
+ 481, 481, 330, 481, 481, 481, 481, 481, 481, 481,
+ 331, 481, 481, 481, 481, 481, 481, 331, 331, 331,
+ 331, 331, 331, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 332, 481, 481, 331, 331, 331, 331,
+ 331, 331, 289, 289, 289, 289, 289, 481, 481, 481,
+ 481, 481, 481, 481, 481, 254, 481, 481, 481, 481,
+
+ 481, 333, 481, 481, 481, 481, 481, 481, 333, 333,
+ 333, 333, 333, 333, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 255, 481, 481, 333, 333, 333,
+ 333, 333, 333, 283, 283, 283, 283, 289, 481, 291,
+ 481, 481, 481, 481, 291, 291, 292, 481, 481, 481,
+ 481, 481, 293, 481, 481, 481, 481, 481, 481, 293,
+ 293, 293, 293, 293, 293, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 294, 481, 481, 293, 293,
+
+ 293, 293, 293, 293, 334, 481, 481, 481, 481, 481,
+ 481, 334, 334, 334, 334, 334, 334, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 334, 334, 334, 334, 334, 334, 110, 177, 177, 177,
+ 110, 481, 41, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 336, 481, 481, 481, 481,
+ 481, 481, 336, 336, 336, 336, 336, 336, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 42, 481,
+
+ 481, 336, 336, 336, 336, 336, 336, 181, 181, 181,
+ 181, 181, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 337, 481, 481, 481,
+ 481, 481, 481, 337, 337, 337, 337, 337, 337, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 117,
+ 481, 481, 337, 337, 337, 337, 337, 337, 118, 118,
+ 118, 118, 118, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 338, 481, 481,
+ 481, 481, 481, 481, 338, 338, 338, 338, 338, 338,
+
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 338, 338, 338, 338, 338, 338, 121,
+ 184, 184, 184, 121, 481, 481, 481, 481, 481, 481,
+ 41, 481, 481, 481, 481, 481, 481, 481, 339, 481,
+ 481, 481, 481, 481, 481, 339, 339, 339, 339, 339,
+ 339, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 50, 481, 481, 339, 339, 339, 339, 339, 339,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+
+ 481, 481, 481, 481, 481, 481, 340, 481, 481, 92,
+ 481, 481, 481, 481, 481, 481, 92, 92, 92, 92,
+ 92, 92, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 92, 92, 92, 92, 92,
+ 92, 189, 189, 189, 189, 189, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 341, 481, 481, 481, 481, 481, 481, 341, 341, 341,
+ 341, 341, 341, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+
+ 481, 481, 481, 481, 481, 481, 341, 341, 341, 341,
+ 341, 341, 148, 148, 148, 148, 148, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 342, 481, 481, 481, 481, 481, 481, 342, 342,
+ 342, 342, 342, 342, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 342, 342, 342,
+ 342, 342, 342, 202, 202, 202, 202, 202, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 344, 481, 481, 481, 481, 481, 481, 344,
+
+ 344, 344, 344, 344, 344, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 344, 344,
+ 344, 344, 344, 344, 348, 481, 481, 481, 481, 481,
+ 481, 348, 348, 348, 348, 348, 348, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 348, 348, 348, 348, 348, 348, 163, 163, 163, 163,
+ 163, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 349, 481, 481, 481, 481,
+
+ 481, 481, 349, 349, 349, 349, 349, 349, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 349, 349, 349, 349, 349, 349, 324, 360, 360,
+ 360, 324, 481, 285, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 361, 481, 481, 481,
+ 481, 481, 481, 361, 361, 361, 361, 361, 361, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 286,
+ 481, 481, 361, 361, 361, 361, 361, 361, 284, 284,
+
+ 284, 323, 481, 481, 325, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 326, 481, 481,
+ 481, 481, 481, 481, 326, 326, 326, 326, 326, 326,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 327, 481, 481, 326, 326, 326, 326, 326, 326, 329,
+ 364, 364, 364, 329, 481, 481, 481, 481, 481, 481,
+ 285, 481, 481, 481, 481, 481, 481, 481, 365, 481,
+ 481, 481, 481, 481, 481, 365, 365, 365, 365, 365,
+ 365, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 288, 481, 481, 365, 365, 365, 365, 365, 365,
+ 287, 287, 287, 328, 481, 481, 481, 481, 481, 481,
+ 481, 330, 481, 481, 481, 481, 481, 481, 481, 331,
+ 481, 481, 481, 481, 481, 481, 331, 331, 331, 331,
+ 331, 331, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 332, 481, 481, 331, 331, 331, 331, 331,
+ 331, 289, 289, 289, 289, 289, 481, 481, 481, 481,
+ 481, 481, 481, 481, 254, 481, 481, 481, 481, 481,
+
+ 366, 481, 481, 481, 481, 481, 481, 366, 366, 366,
+ 366, 366, 366, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 255, 481, 481, 366, 366, 366, 366,
+ 366, 366, 368, 481, 481, 481, 481, 481, 481, 368,
+ 368, 368, 368, 368, 368, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 368, 368,
+ 368, 368, 368, 368, 115, 481, 481, 481, 481, 481,
+ 481, 115, 115, 115, 115, 115, 115, 481, 481, 481,
+
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 115, 115, 115, 115, 115, 115, 370, 481, 481, 481,
+ 481, 481, 481, 370, 370, 370, 370, 370, 370, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 370, 370, 370, 370, 370, 370, 148, 148,
+ 148, 148, 148, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 129, 481, 481,
+ 481, 481, 481, 481, 129, 129, 129, 129, 129, 129,
+
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 129, 129, 129, 129, 129, 129, 202,
+ 202, 202, 202, 202, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 372, 481,
+ 481, 481, 481, 481, 481, 372, 372, 372, 372, 372,
+ 372, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 372, 372, 372, 372, 372, 372,
+ 376, 481, 481, 481, 481, 481, 481, 376, 376, 376,
+
+ 376, 376, 376, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 376, 376, 376, 376,
+ 376, 376, 377, 481, 481, 481, 481, 481, 481, 377,
+ 377, 377, 377, 377, 377, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 377, 377,
+ 377, 377, 377, 377, 289, 289, 289, 289, 289, 481,
+ 481, 481, 481, 481, 481, 481, 481, 254, 481, 481,
+ 481, 481, 481, 378, 481, 481, 481, 481, 481, 481,
+
+ 378, 378, 378, 378, 378, 378, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 255, 481, 481, 378,
+ 378, 378, 378, 378, 378, 381, 481, 481, 481, 481,
+ 481, 481, 382, 481, 383, 481, 481, 481, 481, 384,
+ 385, 481, 481, 386, 481, 481, 481, 481, 154, 481,
+ 481, 481, 481, 481, 381, 481, 481, 481, 481, 481,
+ 382, 481, 383, 481, 481, 481, 481, 384, 385, 481,
+ 481, 386, 390, 481, 481, 481, 481, 481, 481, 390,
+ 390, 390, 390, 390, 390, 481, 481, 481, 481, 481,
+
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 390, 390,
+ 390, 390, 390, 390, 391, 481, 481, 481, 481, 481,
+ 481, 391, 391, 391, 391, 391, 391, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 391, 391, 391, 391, 391, 391, 392, 481, 481, 481,
+ 481, 481, 481, 392, 392, 392, 392, 392, 392, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+
+ 481, 481, 392, 392, 392, 392, 392, 392, 400, 481,
+ 481, 481, 481, 481, 481, 400, 400, 400, 400, 400,
+ 400, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 400, 400, 400, 400, 400, 400,
+ 401, 481, 481, 481, 481, 481, 481, 401, 401, 401,
+ 401, 401, 401, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 401, 401, 401, 401,
+ 401, 401, 402, 481, 481, 481, 481, 481, 481, 402,
+
+ 402, 402, 402, 402, 402, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 402, 402,
+ 402, 402, 402, 402, 412, 481, 481, 481, 481, 481,
+ 481, 412, 412, 412, 412, 412, 412, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 412, 412, 412, 412, 412, 412, 413, 481, 481, 481,
+ 481, 481, 481, 413, 413, 413, 413, 413, 413, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 413, 413, 413, 413, 413, 413, 431, 481,
+ 481, 481, 481, 481, 481, 431, 431, 431, 431, 431,
+ 431, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 431, 431, 431, 431, 431, 431,
+ 440, 481, 481, 481, 481, 481, 481, 440, 440, 440,
+ 440, 440, 440, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 440, 440, 440, 440,
+
+ 440, 440, 441, 441, 441, 441, 441, 481, 481, 481,
+ 481, 481, 481, 481, 481, 427, 481, 481, 481, 481,
+ 481, 442, 481, 481, 481, 481, 481, 481, 442, 442,
+ 442, 442, 442, 442, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 429, 481, 481, 442, 442, 442,
+ 442, 442, 442, 448, 448, 448, 448, 448, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 449, 481, 481, 481, 481, 481, 481, 449,
+ 449, 449, 449, 449, 449, 481, 481, 481, 481, 481,
+
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 449, 449,
+ 449, 449, 449, 449, 450, 481, 481, 481, 481, 481,
+ 481, 450, 450, 450, 450, 450, 450, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 450, 450, 450, 450, 450, 450, 455, 481, 481, 481,
+ 481, 481, 481, 455, 455, 455, 455, 455, 455, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+
+ 481, 481, 455, 455, 455, 455, 455, 455, 456, 481,
+ 481, 481, 481, 481, 481, 456, 456, 456, 456, 456,
+ 456, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 456, 456, 456, 456, 456, 456,
+ 461, 481, 481, 481, 481, 481, 481, 461, 461, 461,
+ 461, 461, 461, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 461, 461, 461, 461,
+ 461, 461, 462, 481, 481, 481, 481, 481, 481, 462,
+
+ 462, 462, 462, 462, 462, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 462, 462,
+ 462, 462, 462, 462, 467, 481, 481, 481, 481, 481,
+ 481, 467, 467, 467, 467, 467, 467, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 467, 467, 467, 467, 467, 467, 468, 481, 481, 481,
+ 481, 481, 481, 468, 468, 468, 468, 468, 468, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 468, 468, 468, 468, 468, 468, 472, 481,
+ 481, 481, 481, 481, 481, 472, 472, 472, 472, 472,
+ 472, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 472, 472, 472, 472, 472, 472,
+ 40, 481, 481, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 46, 46, 481, 46, 46, 49, 481,
+ 481, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 55, 55, 481, 55, 55, 83, 481, 481, 83,
+
+ 83, 92, 481, 92, 92, 481, 92, 92, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 115, 115, 481, 115, 115, 118, 118, 118, 118,
+ 118, 118, 118, 118, 118, 118, 121, 121, 121, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 127,
+ 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
+ 127, 127, 127, 129, 129, 481, 129, 129, 148, 148,
+ 148, 148, 148, 148, 148, 148, 148, 148, 153, 153,
+ 481, 153, 153, 161, 161, 161, 161, 161, 161, 161,
+
+ 161, 161, 161, 163, 163, 163, 163, 163, 163, 163,
+ 163, 163, 163, 168, 168, 168, 181, 181, 181, 181,
+ 181, 181, 181, 181, 181, 181, 49, 49, 481, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 121,
+ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121,
+ 121, 121, 127, 127, 127, 127, 127, 127, 127, 127,
+ 127, 127, 127, 127, 127, 127, 187, 187, 187, 187,
+ 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
+ 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+
+ 214, 214, 214, 214, 40, 481, 481, 40, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 228, 228, 228,
+ 228, 228, 228, 228, 228, 228, 228, 228, 228, 228,
+ 228, 246, 246, 246, 246, 251, 251, 251, 251, 251,
+ 251, 481, 251, 251, 251, 251, 251, 251, 40, 40,
+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 187, 187, 187, 187, 187, 187, 187, 187, 187,
+ 187, 187, 187, 187, 187, 278, 278, 278, 278, 251,
+ 251, 251, 251, 251, 251, 481, 251, 251, 251, 251,
+ 251, 251, 284, 481, 481, 284, 284, 284, 284, 284,
+
+ 284, 284, 284, 284, 284, 287, 481, 481, 287, 287,
+ 287, 287, 287, 287, 287, 287, 287, 287, 290, 290,
+ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
+ 290, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 115, 115, 481, 115, 115, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 315, 315, 315, 315, 324, 324, 324, 324,
+ 324, 324, 324, 324, 324, 324, 324, 324, 324, 287,
+ 481, 481, 287, 287, 287, 287, 287, 287, 287, 287,
+ 287, 287, 329, 329, 329, 329, 329, 329, 329, 329,
+
+ 329, 329, 329, 329, 329, 251, 251, 251, 251, 251,
+ 481, 481, 251, 251, 251, 251, 251, 251, 290, 290,
+ 290, 290, 290, 290, 290, 290, 290, 290, 290, 290,
+ 290, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 40, 40, 115, 115, 481, 115, 115, 49,
+ 49, 49, 49, 49, 49, 49, 49, 49, 49, 49,
+ 49, 49, 351, 351, 351, 351, 284, 284, 481, 284,
+ 284, 284, 284, 284, 284, 284, 284, 284, 284, 324,
+ 324, 324, 324, 324, 324, 324, 324, 324, 324, 324,
+ 324, 324, 287, 287, 481, 287, 287, 287, 287, 287,
+
+ 287, 287, 287, 287, 287, 329, 329, 329, 329, 329,
+ 329, 329, 329, 329, 329, 329, 329, 329, 251, 251,
+ 251, 251, 251, 481, 481, 251, 251, 251, 251, 251,
+ 251, 416, 416, 416, 416, 481, 481, 481, 481, 416,
+ 481, 481, 416, 416, 428, 428, 428, 428, 481, 481,
+ 481, 428, 428, 428, 481, 428, 428, 430, 430, 430,
+ 430, 430, 430, 430, 430, 430, 430, 439, 439, 439,
+ 439, 439, 439, 439, 439, 439, 439, 7, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481
} ;
-static yyconst short int yy_chk[2462] =
+static yyconst flex_int16_t yy_chk[6664] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -569,263 +1049,725 @@ static yyconst short int yy_chk[2462] =
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 3, 480, 4, 9, 9, 9, 9, 9, 12, 3,
- 17, 4, 10, 10, 10, 10, 10, 11, 11, 11,
- 11, 11, 3, 3, 4, 4, 13, 69, 12, 13,
- 15, 53, 53, 17, 69, 3, 13, 4, 26, 13,
-
- 13, 13, 13, 13, 13, 15, 18, 27, 23, 18,
- 27, 27, 26, 49, 11, 40, 18, 28, 23, 477,
- 28, 27, 52, 23, 89, 56, 23, 89, 49, 23,
- 32, 28, 18, 23, 23, 40, 23, 43, 27, 56,
- 43, 18, 21, 24, 32, 52, 66, 43, 66, 21,
- 21, 28, 21, 24, 24, 24, 24, 24, 24, 21,
- 32, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 3, 5, 4, 6, 15,
+ 12, 3, 480, 4, 9, 9, 9, 9, 9, 10,
+
+ 10, 10, 10, 10, 3, 3, 4, 4, 11, 11,
+ 11, 11, 11, 24, 32, 5, 18, 6, 17, 18,
+ 3, 25, 4, 33, 25, 25, 33, 33, 39, 49,
+ 15, 477, 3, 3, 4, 4, 12, 69, 17, 18,
+ 36, 32, 11, 40, 470, 3, 69, 4, 18, 25,
+ 464, 33, 18, 24, 32, 55, 39, 43, 52, 26,
+ 43, 25, 26, 33, 34, 69, 17, 18, 36, 32,
+ 49, 11, 13, 53, 53, 13, 18, 25, 52, 33,
+ 36, 67, 13, 13, 13, 13, 13, 13, 459, 40,
+ 26, 34, 71, 43, 78, 55, 36, 88, 128, 26,
+
+ 78, 443, 128, 67, 34, 71, 52, 80, 13, 80,
+ 67, 13, 13, 13, 13, 13, 13, 21, 26, 34,
+ 71, 92, 78, 88, 21, 21, 88, 21, 37, 37,
+ 37, 37, 37, 437, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 92, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 34, 33,
- 36, 21, 33, 33, 37, 37, 37, 37, 37, 59,
-
- 44, 59, 34, 33, 36, 38, 38, 38, 38, 38,
- 44, 44, 44, 44, 44, 44, 45, 86, 34, 57,
- 33, 36, 57, 57, 59, 47, 45, 45, 45, 45,
- 45, 45, 47, 57, 86, 47, 47, 47, 47, 47,
- 47, 55, 38, 42, 42, 42, 42, 58, 68, 42,
- 71, 55, 55, 55, 55, 55, 55, 72, 88, 144,
- 128, 58, 42, 68, 128, 88, 144, 70, 58, 42,
- 71, 73, 42, 42, 42, 42, 42, 42, 50, 50,
- 50, 50, 70, 78, 74, 72, 78, 73, 65, 50,
- 78, 80, 470, 70, 74, 76, 76, 50, 65, 65,
-
- 65, 65, 65, 65, 50, 75, 76, 50, 50, 50,
- 50, 50, 50, 77, 80, 82, 141, 83, 77, 87,
- 75, 90, 91, 85, 90, 82, 75, 83, 83, 83,
- 83, 83, 83, 85, 87, 77, 91, 138, 152, 77,
- 138, 109, 95, 464, 141, 152, 109, 96, 110, 111,
- 82, 92, 92, 92, 92, 92, 95, 96, 96, 96,
- 96, 96, 96, 92, 98, 99, 109, 459, 110, 111,
- 92, 98, 101, 104, 105, 107, 121, 92, 98, 99,
- 92, 92, 92, 92, 92, 92, 101, 104, 105, 107,
- 135, 121, 100, 104, 106, 133, 150, 100, 122, 135,
-
- 101, 99, 100, 100, 100, 100, 100, 100, 106, 107,
- 105, 120, 148, 122, 133, 443, 150, 437, 148, 177,
- 114, 120, 106, 112, 112, 112, 112, 112, 149, 112,
- 114, 114, 114, 114, 114, 114, 120, 157, 160, 177,
- 157, 201, 112, 149, 160, 201, 395, 158, 126, 112,
- 161, 159, 112, 112, 112, 112, 112, 112, 113, 113,
- 113, 113, 126, 158, 113, 161, 126, 162, 118, 159,
- 229, 164, 168, 395, 229, 432, 162, 113, 118, 118,
- 118, 118, 118, 118, 113, 164, 168, 113, 113, 113,
- 113, 113, 113, 116, 116, 116, 116, 116, 169, 422,
-
- 388, 192, 196, 119, 194, 171, 169, 172, 192, 196,
- 194, 206, 116, 119, 119, 119, 119, 119, 119, 171,
- 173, 172, 116, 116, 116, 116, 116, 116, 123, 123,
- 123, 123, 123, 206, 173, 208, 209, 210, 132, 123,
- 387, 175, 241, 209, 210, 241, 208, 123, 132, 132,
- 132, 132, 132, 132, 123, 175, 184, 123, 123, 123,
- 123, 123, 123, 124, 124, 124, 124, 219, 239, 215,
- 367, 184, 247, 156, 124, 199, 186, 215, 239, 351,
- 247, 219, 124, 156, 156, 156, 156, 156, 156, 124,
- 186, 199, 124, 124, 124, 124, 124, 124, 130, 130,
-
- 130, 130, 130, 186, 268, 205, 271, 310, 163, 207,
- 310, 312, 438, 271, 312, 268, 438, 130, 163, 163,
- 163, 163, 163, 163, 130, 205, 207, 130, 130, 130,
- 130, 130, 130, 154, 154, 154, 154, 154, 235, 167,
- 174, 232, 272, 347, 348, 346, 167, 264, 347, 348,
- 272, 235, 154, 167, 174, 238, 232, 240, 242, 154,
- 227, 264, 154, 154, 154, 154, 154, 154, 165, 165,
- 165, 165, 165, 373, 227, 253, 238, 240, 178, 242,
- 373, 174, 335, 264, 321, 227, 320, 165, 178, 178,
- 178, 178, 178, 178, 179, 253, 254, 165, 165, 165,
-
- 165, 165, 165, 180, 179, 179, 179, 179, 179, 179,
- 273, 254, 275, 180, 180, 180, 180, 180, 180, 182,
- 182, 182, 182, 182, 343, 279, 285, 316, 386, 183,
- 275, 386, 273, 279, 343, 316, 319, 318, 182, 183,
- 183, 183, 183, 183, 183, 185, 285, 288, 182, 182,
- 182, 182, 182, 182, 189, 185, 185, 185, 185, 185,
- 185, 325, 288, 435, 189, 189, 189, 189, 189, 189,
- 191, 191, 191, 191, 191, 284, 284, 284, 284, 284,
- 202, 325, 435, 286, 286, 286, 286, 286, 284, 191,
- 202, 202, 202, 202, 202, 202, 286, 306, 309, 191,
-
- 191, 191, 191, 191, 191, 204, 204, 204, 204, 204,
- 322, 322, 322, 322, 322, 211, 423, 317, 303, 306,
- 309, 423, 303, 322, 204, 211, 211, 211, 211, 211,
- 211, 212, 303, 330, 204, 204, 204, 204, 204, 204,
- 214, 212, 212, 212, 212, 212, 212, 418, 330, 311,
- 214, 214, 214, 214, 214, 214, 218, 218, 218, 218,
- 218, 221, 218, 374, 340, 359, 360, 218, 418, 218,
- 374, 221, 221, 221, 221, 221, 221, 222, 340, 324,
- 384, 301, 218, 223, 324, 359, 360, 222, 222, 222,
- 222, 222, 222, 223, 223, 223, 223, 223, 223, 224,
-
- 381, 382, 340, 384, 324, 225, 296, 381, 382, 224,
- 224, 224, 224, 224, 224, 225, 225, 225, 225, 225,
- 225, 226, 337, 337, 337, 337, 337, 230, 410, 363,
- 364, 226, 226, 226, 226, 226, 226, 230, 230, 230,
- 230, 230, 230, 231, 363, 364, 396, 421, 337, 236,
- 421, 410, 396, 231, 231, 231, 231, 231, 231, 236,
- 236, 236, 236, 236, 236, 237, 341, 341, 341, 341,
- 341, 244, 283, 436, 369, 237, 237, 237, 237, 237,
- 237, 244, 244, 244, 244, 244, 244, 245, 369, 383,
- 282, 369, 341, 246, 420, 436, 383, 245, 245, 245,
-
- 245, 245, 245, 246, 246, 246, 246, 246, 246, 251,
- 251, 251, 251, 251, 420, 251, 281, 453, 393, 397,
- 251, 329, 251, 252, 252, 252, 252, 252, 258, 252,
- 380, 329, 393, 397, 252, 251, 252, 453, 258, 258,
- 258, 258, 258, 258, 380, 398, 329, 405, 385, 252,
- 256, 256, 256, 256, 256, 385, 256, 406, 405, 398,
- 259, 256, 256, 256, 380, 406, 280, 407, 274, 256,
- 259, 259, 259, 259, 259, 259, 256, 260, 407, 256,
- 256, 256, 256, 256, 256, 261, 419, 260, 260, 260,
- 260, 260, 260, 262, 267, 261, 261, 261, 261, 261,
-
- 261, 263, 419, 262, 262, 262, 262, 262, 262, 265,
- 257, 263, 263, 263, 263, 263, 263, 266, 250, 265,
- 265, 265, 265, 265, 265, 269, 249, 266, 266, 266,
- 266, 266, 266, 270, 248, 269, 269, 269, 269, 269,
- 269, 276, 243, 270, 270, 270, 270, 270, 270, 277,
- 234, 276, 276, 276, 276, 276, 276, 278, 408, 277,
- 277, 277, 277, 277, 277, 408, 399, 278, 278, 278,
- 278, 278, 278, 287, 287, 287, 287, 394, 471, 287,
- 399, 404, 394, 447, 471, 394, 399, 290, 290, 290,
- 290, 290, 287, 290, 409, 404, 458, 447, 290, 287,
-
- 290, 409, 287, 287, 287, 287, 287, 287, 289, 289,
- 289, 289, 425, 290, 411, 425, 458, 444, 233, 289,
- 291, 291, 291, 291, 291, 411, 291, 289, 424, 433,
- 465, 291, 444, 291, 289, 424, 433, 289, 289, 289,
- 289, 289, 289, 228, 220, 445, 291, 292, 292, 292,
- 292, 292, 434, 292, 446, 434, 473, 465, 292, 466,
- 292, 293, 293, 293, 293, 293, 297, 293, 445, 466,
- 473, 446, 293, 292, 293, 460, 297, 297, 297, 297,
- 297, 297, 428, 428, 428, 428, 428, 293, 294, 294,
- 294, 294, 294, 451, 294, 428, 460, 217, 299, 294,
-
- 451, 294, 344, 344, 344, 344, 344, 294, 299, 299,
- 299, 299, 299, 299, 294, 216, 203, 294, 294, 294,
- 294, 294, 294, 295, 295, 295, 295, 295, 344, 295,
- 452, 454, 198, 300, 295, 295, 295, 452, 454, 463,
- 197, 195, 295, 300, 300, 300, 300, 300, 300, 295,
- 302, 193, 295, 295, 295, 295, 295, 295, 304, 463,
- 302, 302, 302, 302, 302, 302, 305, 469, 304, 304,
- 304, 304, 304, 304, 307, 190, 305, 305, 305, 305,
- 305, 305, 308, 187, 307, 307, 307, 307, 307, 307,
- 469, 479, 308, 308, 308, 308, 308, 308, 313, 313,
-
- 313, 313, 313, 314, 415, 415, 415, 415, 415, 478,
- 313, 457, 479, 314, 314, 314, 314, 314, 314, 315,
- 415, 457, 476, 478, 313, 181, 176, 476, 170, 315,
- 315, 315, 315, 315, 315, 326, 326, 326, 326, 326,
- 166, 326, 457, 331, 331, 331, 331, 331, 326, 155,
- 474, 475, 153, 151, 331, 147, 331, 474, 475, 146,
- 334, 326, 327, 327, 327, 327, 327, 145, 327, 331,
- 334, 334, 334, 334, 334, 334, 358, 358, 358, 358,
- 358, 327, 358, 368, 368, 368, 368, 368, 327, 358,
- 143, 327, 327, 327, 327, 327, 327, 328, 328, 328,
-
- 328, 142, 358, 328, 140, 139, 137, 336, 136, 368,
- 134, 370, 370, 370, 370, 370, 328, 336, 336, 336,
- 336, 336, 336, 328, 131, 129, 328, 328, 328, 328,
- 328, 328, 332, 332, 332, 332, 332, 370, 127, 117,
- 115, 108, 338, 332, 97, 372, 372, 372, 372, 372,
- 84, 332, 338, 338, 338, 338, 338, 338, 332, 81,
- 79, 332, 332, 332, 332, 332, 332, 333, 333, 333,
- 333, 372, 67, 63, 62, 61, 60, 339, 333, 54,
- 46, 39, 30, 29, 25, 22, 333, 339, 339, 339,
- 339, 339, 339, 333, 342, 20, 333, 333, 333, 333,
-
- 333, 333, 345, 19, 342, 342, 342, 342, 342, 342,
- 16, 14, 345, 345, 345, 345, 345, 345, 349, 349,
- 349, 349, 349, 350, 7, 6, 5, 0, 0, 0,
- 349, 0, 0, 350, 350, 350, 350, 350, 350, 361,
- 0, 0, 0, 0, 349, 0, 0, 0, 0, 361,
- 361, 361, 361, 361, 361, 362, 362, 362, 362, 362,
- 365, 0, 0, 0, 0, 0, 362, 0, 362, 0,
- 365, 365, 365, 365, 365, 365, 366, 0, 0, 371,
- 0, 362, 0, 0, 0, 371, 366, 366, 366, 366,
- 366, 366, 371, 0, 371, 375, 0, 0, 0, 371,
-
- 371, 376, 0, 371, 0, 375, 375, 375, 375, 375,
- 375, 376, 376, 376, 376, 376, 376, 377, 0, 0,
- 0, 0, 0, 378, 0, 0, 0, 377, 377, 377,
- 377, 377, 377, 378, 378, 378, 378, 378, 378, 390,
- 0, 0, 0, 0, 0, 391, 0, 0, 0, 390,
- 390, 390, 390, 390, 390, 391, 391, 391, 391, 391,
- 391, 392, 0, 0, 0, 0, 0, 400, 0, 0,
- 0, 392, 392, 392, 392, 392, 392, 400, 400, 400,
- 400, 400, 400, 401, 0, 0, 0, 0, 0, 402,
- 0, 0, 0, 401, 401, 401, 401, 401, 401, 402,
-
- 402, 402, 402, 402, 402, 403, 403, 403, 403, 403,
- 0, 0, 412, 0, 0, 0, 0, 0, 0, 0,
- 0, 403, 412, 412, 412, 412, 412, 412, 413, 0,
- 0, 403, 414, 414, 414, 414, 414, 0, 413, 413,
- 413, 413, 413, 413, 0, 0, 0, 0, 414, 416,
- 0, 0, 417, 417, 417, 417, 417, 0, 414, 416,
- 416, 416, 416, 416, 416, 417, 426, 426, 426, 426,
- 426, 0, 430, 430, 430, 430, 430, 0, 417, 426,
- 0, 0, 0, 0, 0, 430, 0, 0, 0, 431,
- 0, 0, 426, 427, 427, 427, 427, 427, 430, 431,
-
- 431, 431, 431, 431, 431, 0, 427, 439, 439, 439,
- 439, 439, 427, 0, 0, 0, 0, 0, 0, 427,
- 439, 0, 427, 427, 427, 427, 427, 427, 440, 0,
- 0, 0, 0, 439, 0, 0, 0, 0, 440, 440,
- 440, 440, 440, 440, 441, 441, 441, 441, 441, 448,
- 0, 0, 449, 449, 449, 449, 449, 441, 0, 448,
- 448, 448, 448, 448, 448, 449, 0, 0, 0, 450,
- 441, 442, 442, 442, 442, 442, 0, 0, 449, 450,
- 450, 450, 450, 450, 450, 0, 0, 0, 0, 0,
- 442, 0, 0, 0, 0, 0, 455, 0, 0, 0,
-
- 442, 442, 442, 442, 442, 442, 455, 455, 455, 455,
- 455, 455, 456, 0, 0, 0, 0, 0, 461, 0,
- 0, 0, 456, 456, 456, 456, 456, 456, 461, 461,
- 461, 461, 461, 461, 462, 0, 0, 0, 0, 0,
- 467, 0, 0, 0, 462, 462, 462, 462, 462, 462,
- 467, 467, 467, 467, 467, 467, 468, 0, 0, 0,
- 0, 0, 472, 0, 0, 0, 468, 468, 468, 468,
- 468, 468, 472, 472, 472, 472, 472, 472, 482, 0,
- 482, 482, 482, 482, 482, 482, 482, 482, 482, 483,
- 483, 0, 483, 483, 484, 0, 484, 484, 484, 484,
-
- 484, 484, 484, 484, 484, 485, 485, 0, 485, 485,
- 486, 0, 0, 486, 486, 487, 487, 487, 487, 487,
- 487, 487, 487, 487, 488, 0, 488, 488, 0, 488,
- 488, 489, 489, 489, 489, 489, 489, 489, 489, 489,
- 489, 489, 490, 490, 490, 490, 490, 490, 490, 490,
- 490, 491, 491, 0, 491, 491, 492, 492, 492, 492,
- 492, 492, 492, 492, 492, 492, 492, 493, 493, 493,
+ 21, 21, 21, 21, 21, 21, 21, 21, 66, 99,
+ 72, 21, 23, 70, 70, 432, 38, 38, 38, 38,
+
+ 38, 59, 66, 59, 23, 422, 89, 23, 56, 72,
+ 23, 56, 56, 68, 23, 23, 66, 23, 84, 72,
+ 57, 70, 85, 59, 68, 74, 74, 68, 23, 99,
+ 38, 120, 89, 23, 85, 89, 23, 84, 57, 23,
+ 76, 68, 23, 23, 76, 23, 27, 84, 56, 108,
+ 85, 59, 68, 27, 27, 27, 27, 27, 27, 38,
+ 57, 229, 74, 82, 73, 229, 76, 57, 388, 76,
+ 73, 96, 120, 76, 495, 495, 75, 108, 73, 87,
+ 105, 110, 27, 27, 27, 27, 27, 27, 42, 42,
+ 42, 42, 73, 75, 42, 82, 86, 75, 73, 82,
+
+ 75, 87, 95, 141, 96, 75, 387, 42, 87, 95,
+ 86, 96, 98, 105, 42, 42, 42, 42, 42, 42,
+ 105, 75, 104, 82, 86, 75, 106, 110, 111, 109,
+ 163, 166, 96, 107, 109, 167, 141, 98, 166, 104,
+ 42, 105, 95, 42, 42, 42, 42, 42, 42, 45,
+ 176, 106, 98, 121, 351, 345, 45, 45, 45, 45,
+ 45, 45, 104, 121, 107, 98, 106, 122, 104, 126,
+ 163, 166, 320, 107, 111, 167, 132, 122, 176, 106,
+ 109, 135, 45, 145, 126, 45, 45, 45, 45, 45,
+ 45, 47, 107, 138, 138, 152, 132, 146, 47, 47,
+
+ 47, 47, 47, 47, 121, 132, 145, 135, 168, 126,
+ 135, 146, 145, 126, 147, 170, 168, 152, 122, 155,
+ 194, 138, 177, 147, 152, 146, 156, 47, 47, 47,
+ 47, 47, 47, 50, 50, 50, 50, 150, 157, 156,
+ 172, 173, 147, 159, 50, 155, 158, 150, 155, 157,
+ 160, 238, 50, 194, 156, 170, 319, 159, 174, 50,
+ 50, 50, 50, 50, 50, 150, 157, 175, 177, 158,
+ 160, 159, 184, 186, 219, 158, 214, 318, 317, 160,
+ 172, 173, 184, 316, 214, 50, 192, 238, 50, 50,
+ 50, 50, 50, 50, 58, 310, 174, 186, 174, 197,
+
+ 199, 58, 58, 58, 58, 58, 58, 175, 246, 192,
+ 204, 205, 197, 186, 219, 192, 246, 253, 205, 204,
+ 208, 252, 199, 184, 174, 186, 201, 197, 206, 199,
+ 58, 58, 58, 58, 58, 58, 79, 220, 204, 205,
+ 206, 207, 208, 79, 79, 79, 79, 79, 79, 208,
+ 299, 201, 234, 235, 239, 201, 206, 227, 253, 207,
+ 278, 284, 209, 239, 343, 220, 234, 252, 278, 235,
+ 207, 257, 79, 79, 79, 79, 79, 79, 90, 227,
+ 234, 235, 239, 240, 209, 90, 90, 90, 90, 90,
+ 90, 209, 217, 217, 217, 217, 217, 227, 217, 257,
+
+ 343, 287, 393, 217, 323, 217, 393, 284, 227, 240,
+ 296, 328, 240, 237, 90, 90, 90, 90, 90, 90,
+ 93, 237, 271, 282, 281, 241, 270, 93, 93, 93,
+ 93, 93, 93, 241, 250, 250, 250, 250, 250, 296,
+ 250, 237, 287, 271, 217, 250, 309, 250, 270, 268,
+ 323, 271, 328, 241, 340, 270, 93, 93, 93, 93,
+ 93, 93, 100, 100, 100, 100, 100, 268, 490, 280,
+ 490, 274, 309, 272, 100, 309, 306, 311, 268, 315,
+ 272, 100, 274, 306, 335, 340, 250, 315, 100, 100,
+ 100, 100, 100, 100, 251, 251, 251, 251, 251, 274,
+
+ 251, 272, 279, 311, 306, 251, 311, 251, 502, 512,
+ 502, 512, 335, 340, 100, 273, 367, 100, 100, 100,
+ 100, 100, 100, 112, 112, 112, 112, 112, 249, 112,
+ 283, 283, 283, 283, 283, 285, 285, 285, 285, 285,
+ 324, 438, 112, 283, 367, 324, 251, 346, 285, 112,
+ 112, 112, 112, 112, 112, 289, 289, 289, 289, 289,
+ 308, 321, 321, 321, 321, 321, 438, 308, 289, 248,
+ 438, 346, 247, 242, 321, 112, 346, 347, 112, 112,
+ 112, 112, 112, 112, 113, 113, 113, 113, 308, 232,
+ 113, 324, 231, 228, 369, 290, 290, 290, 290, 290,
+
+ 359, 347, 436, 113, 369, 359, 347, 289, 290, 436,
+ 113, 113, 113, 113, 113, 113, 291, 291, 291, 291,
+ 291, 292, 292, 292, 292, 292, 360, 216, 329, 291,
+ 436, 360, 215, 369, 292, 202, 113, 386, 329, 113,
+ 113, 113, 113, 113, 113, 116, 395, 290, 395, 196,
+ 195, 359, 116, 116, 116, 116, 116, 116, 325, 325,
+ 325, 325, 325, 386, 325, 363, 386, 514, 291, 514,
+ 364, 325, 466, 292, 395, 363, 193, 360, 116, 329,
+ 364, 116, 116, 116, 116, 116, 116, 117, 191, 330,
+ 330, 330, 330, 330, 117, 117, 117, 117, 117, 117,
+
+ 330, 189, 330, 334, 334, 334, 334, 334, 466, 187,
+ 325, 336, 336, 336, 336, 336, 363, 336, 181, 334,
+ 373, 364, 169, 117, 117, 117, 117, 117, 117, 119,
+ 119, 119, 119, 119, 349, 349, 349, 349, 349, 165,
+ 374, 330, 373, 339, 339, 339, 339, 339, 119, 373,
+ 349, 161, 153, 380, 339, 119, 119, 119, 119, 119,
+ 119, 151, 374, 336, 368, 368, 368, 368, 368, 374,
+ 348, 348, 348, 348, 348, 370, 370, 370, 370, 370,
+ 380, 518, 148, 518, 119, 119, 119, 119, 119, 119,
+ 123, 123, 123, 123, 123, 339, 520, 527, 520, 527,
+
+ 144, 123, 446, 372, 372, 372, 372, 372, 380, 123,
+ 381, 382, 383, 143, 446, 396, 123, 123, 123, 123,
+ 123, 123, 348, 358, 358, 358, 358, 358, 397, 358,
+ 446, 384, 381, 382, 383, 142, 358, 384, 396, 381,
+ 382, 383, 123, 397, 396, 123, 123, 123, 123, 123,
+ 123, 124, 124, 124, 124, 372, 397, 398, 404, 384,
+ 420, 385, 124, 362, 362, 362, 362, 362, 394, 420,
+ 124, 394, 398, 404, 362, 358, 362, 124, 124, 124,
+ 124, 124, 124, 385, 140, 398, 404, 405, 420, 530,
+ 385, 530, 394, 540, 139, 540, 406, 394, 399, 547,
+
+ 394, 547, 137, 124, 399, 405, 124, 124, 124, 124,
+ 124, 124, 130, 399, 136, 362, 405, 406, 134, 130,
+ 130, 130, 130, 130, 130, 406, 399, 402, 402, 402,
+ 402, 402, 399, 548, 465, 548, 465, 133, 421, 408,
+ 402, 409, 407, 403, 403, 403, 403, 403, 130, 130,
+ 130, 130, 130, 130, 149, 149, 149, 149, 149, 403,
+ 407, 408, 465, 409, 421, 419, 410, 421, 408, 411,
+ 409, 407, 410, 149, 424, 425, 423, 131, 419, 402,
+ 149, 149, 149, 149, 149, 149, 129, 411, 413, 413,
+ 413, 413, 413, 419, 410, 403, 424, 127, 411, 413,
+
+ 423, 425, 118, 424, 425, 423, 149, 115, 418, 149,
+ 149, 149, 149, 149, 149, 154, 418, 414, 414, 414,
+ 414, 414, 154, 154, 154, 154, 154, 154, 412, 412,
+ 412, 412, 412, 414, 412, 97, 418, 94, 83, 81,
+ 413, 433, 77, 65, 63, 434, 415, 415, 415, 415,
+ 415, 154, 154, 154, 154, 154, 154, 162, 162, 162,
+ 162, 162, 415, 433, 426, 426, 426, 426, 426, 414,
+ 433, 434, 435, 445, 434, 451, 162, 426, 62, 445,
+ 412, 61, 435, 162, 162, 162, 162, 162, 162, 416,
+ 416, 416, 416, 416, 60, 54, 444, 451, 415, 46,
+
+ 435, 445, 416, 30, 451, 452, 454, 29, 447, 162,
+ 444, 473, 162, 162, 162, 162, 162, 162, 164, 164,
+ 164, 164, 164, 447, 444, 28, 473, 452, 454, 428,
+ 428, 428, 428, 428, 452, 454, 447, 164, 471, 473,
+ 474, 416, 428, 475, 164, 164, 164, 164, 164, 164,
+ 430, 430, 430, 430, 430, 439, 439, 439, 439, 439,
+ 22, 471, 474, 430, 20, 475, 19, 471, 439, 474,
+ 457, 453, 475, 164, 164, 164, 164, 164, 164, 171,
+ 453, 428, 16, 14, 476, 7, 171, 171, 171, 171,
+ 171, 171, 441, 441, 441, 441, 441, 0, 457, 453,
+
+ 458, 463, 430, 460, 0, 441, 457, 439, 476, 458,
+ 463, 460, 0, 476, 0, 171, 171, 171, 171, 171,
+ 171, 178, 178, 178, 178, 178, 457, 178, 458, 463,
+ 0, 460, 448, 448, 448, 448, 448, 469, 0, 0,
+ 178, 0, 0, 469, 441, 448, 0, 178, 178, 178,
+ 178, 178, 178, 468, 468, 468, 468, 468, 472, 472,
+ 472, 472, 472, 0, 0, 469, 468, 479, 478, 0,
+ 0, 472, 0, 178, 0, 479, 178, 178, 178, 178,
+ 178, 178, 180, 478, 448, 0, 0, 0, 0, 180,
+ 180, 180, 180, 180, 180, 479, 478, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 468, 0, 0, 0, 0,
+ 472, 0, 0, 0, 0, 0, 0, 0, 180, 180,
+ 180, 180, 180, 180, 182, 182, 182, 182, 182, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 182, 0, 0, 0, 0, 0, 0,
+ 182, 182, 182, 182, 182, 182, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 182,
+ 182, 182, 182, 182, 182, 183, 183, 183, 183, 183,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 183, 0, 0, 0, 0, 0,
+ 0, 183, 183, 183, 183, 183, 183, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 183, 183, 183, 183, 183, 183, 185, 185, 185, 185,
+ 185, 0, 0, 0, 0, 0, 0, 185, 0, 0,
+ 0, 0, 0, 0, 0, 185, 0, 0, 0, 0,
+ 0, 0, 185, 185, 185, 185, 185, 185, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 185, 0,
+
+ 0, 185, 185, 185, 185, 185, 185, 190, 190, 190,
+ 190, 190, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 190, 0, 0, 0,
+ 0, 0, 0, 190, 190, 190, 190, 190, 190, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 190, 190, 190, 190, 190, 190, 198, 0,
+ 0, 0, 0, 0, 0, 198, 198, 198, 198, 198,
+ 198, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 198, 198, 198, 198, 198, 198,
+ 203, 203, 203, 203, 203, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 203,
+ 0, 0, 0, 0, 0, 0, 203, 203, 203, 203,
+ 203, 203, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 203, 203, 203, 203, 203,
+ 203, 210, 0, 0, 0, 0, 0, 0, 210, 210,
+ 210, 210, 210, 210, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 210, 210, 210,
+ 210, 210, 210, 211, 211, 211, 211, 211, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 211, 0, 0, 0, 0, 0, 0, 211,
+ 211, 211, 211, 211, 211, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 211, 211,
+ 211, 211, 211, 211, 218, 0, 0, 0, 0, 0,
+ 0, 218, 218, 218, 218, 218, 218, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 218, 218, 218, 218, 218, 218, 221, 221, 221, 221,
+ 221, 0, 221, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 221, 0, 0, 0, 0,
+ 0, 0, 221, 221, 221, 221, 221, 221, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 221, 0,
+ 0, 221, 221, 221, 221, 221, 221, 223, 0, 0,
+ 0, 0, 0, 0, 223, 223, 223, 223, 223, 223,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 223, 223, 223, 223, 223, 223, 224,
+ 224, 224, 224, 224, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 224, 0,
+ 0, 0, 0, 0, 0, 224, 224, 224, 224, 224,
+ 224, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 224, 224, 224, 224, 224, 224,
+ 225, 225, 225, 225, 225, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 225,
+
+ 0, 0, 0, 0, 0, 0, 225, 225, 225, 225,
+ 225, 225, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 225, 225, 225, 225, 225,
+ 225, 226, 226, 226, 226, 226, 0, 0, 0, 0,
+ 0, 0, 226, 0, 0, 0, 0, 0, 0, 0,
+ 226, 0, 0, 0, 0, 0, 0, 226, 226, 226,
+ 226, 226, 226, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 226, 0, 0, 226, 226, 226, 226,
+
+ 226, 226, 230, 230, 230, 230, 230, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 230, 0, 0, 0, 0, 0, 0, 230, 230,
+ 230, 230, 230, 230, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 230, 230, 230,
+ 230, 230, 230, 233, 0, 0, 0, 0, 0, 0,
+ 233, 233, 233, 233, 233, 233, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 233,
+
+ 233, 233, 233, 233, 233, 236, 236, 236, 236, 236,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 236, 0, 0, 0, 0, 0,
+ 0, 236, 236, 236, 236, 236, 236, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 236, 236, 236, 236, 236, 236, 243, 0, 0, 0,
+ 0, 0, 0, 243, 243, 243, 243, 243, 243, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 243, 243, 243, 243, 243, 243, 244, 244,
+ 244, 244, 244, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 244, 0, 0,
+ 0, 0, 0, 0, 244, 244, 244, 244, 244, 244,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 244, 244, 244, 244, 244, 244, 255,
+ 255, 255, 255, 255, 0, 255, 0, 0, 0, 0,
+ 255, 255, 255, 0, 0, 0, 0, 0, 255, 0,
+ 0, 0, 0, 0, 0, 255, 255, 255, 255, 255,
+
+ 255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 255, 0, 0, 255, 255, 255, 255, 255, 255,
+ 256, 0, 0, 0, 0, 0, 0, 256, 256, 256,
+ 256, 256, 256, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 256, 256, 256, 256,
+ 256, 256, 258, 258, 258, 258, 258, 0, 258, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 258, 0, 0, 0, 0, 0, 0, 258, 258,
+
+ 258, 258, 258, 258, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 258, 0, 0, 258, 258, 258,
+ 258, 258, 258, 260, 0, 0, 0, 0, 0, 0,
+ 260, 260, 260, 260, 260, 260, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 260, 0, 0, 260,
+ 260, 260, 260, 260, 260, 261, 261, 261, 261, 261,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 261, 0, 0, 0, 0, 0,
+
+ 0, 261, 261, 261, 261, 261, 261, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 261, 0, 0,
+ 261, 261, 261, 261, 261, 261, 262, 262, 262, 262,
+ 262, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 262, 0, 0, 0, 0,
+ 0, 0, 262, 262, 262, 262, 262, 262, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 262, 262, 262, 262, 262, 262, 263, 263, 263,
+
+ 263, 263, 0, 0, 0, 0, 0, 0, 263, 0,
+ 0, 0, 0, 0, 0, 0, 263, 0, 0, 0,
+ 0, 0, 0, 263, 263, 263, 263, 263, 263, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 263,
+ 0, 0, 263, 263, 263, 263, 263, 263, 264, 264,
+ 264, 264, 264, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 264, 0, 0,
+ 0, 0, 0, 0, 264, 264, 264, 264, 264, 264,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 264, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 264, 264, 264, 264, 264, 264, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 264, 265, 265, 265, 265, 265, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 265, 0, 0, 0, 0, 0, 0, 265, 265,
+ 265, 265, 265, 265, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 265, 265, 265,
+ 265, 265, 265, 266, 0, 0, 0, 0, 0, 0,
+
+ 266, 266, 266, 266, 266, 266, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 266,
+ 266, 266, 266, 266, 266, 267, 267, 267, 267, 267,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 267, 0, 0, 0, 0, 0,
+ 0, 267, 267, 267, 267, 267, 267, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 267, 267, 267, 267, 267, 267, 269, 269, 269, 269,
+
+ 269, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 269, 0, 0, 0, 0,
+ 0, 0, 269, 269, 269, 269, 269, 269, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 269, 269, 269, 269, 269, 269, 275, 0, 0,
+ 0, 0, 0, 0, 275, 275, 275, 275, 275, 275,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 275, 275, 275, 275, 275, 275, 276,
+
+ 276, 276, 276, 276, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 276, 0,
+ 0, 0, 0, 0, 0, 276, 276, 276, 276, 276,
+ 276, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 276, 276, 276, 276, 276, 276,
+ 286, 286, 286, 286, 0, 0, 286, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 286,
+ 0, 0, 0, 0, 0, 0, 286, 286, 286, 286,
+ 286, 286, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 286, 0, 0, 286, 286, 286, 286, 286,
+ 286, 288, 288, 288, 288, 0, 0, 0, 0, 0,
+ 0, 0, 288, 0, 0, 0, 0, 0, 0, 0,
+ 288, 0, 0, 0, 0, 0, 0, 288, 288, 288,
+ 288, 288, 288, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 288, 0, 0, 288, 288, 288, 288,
+ 288, 288, 293, 293, 293, 293, 293, 0, 0, 0,
+ 0, 0, 0, 0, 0, 293, 0, 0, 0, 0,
+
+ 0, 293, 0, 0, 0, 0, 0, 0, 293, 293,
+ 293, 293, 293, 293, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 293, 0, 0, 293, 293, 293,
+ 293, 293, 293, 294, 294, 294, 294, 294, 0, 294,
+ 0, 0, 0, 0, 294, 294, 294, 0, 0, 0,
+ 0, 0, 294, 0, 0, 0, 0, 0, 0, 294,
+ 294, 294, 294, 294, 294, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 294, 0, 0, 294, 294,
+
+ 294, 294, 294, 294, 295, 0, 0, 0, 0, 0,
+ 0, 295, 295, 295, 295, 295, 295, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 295, 295, 295, 295, 295, 295, 297, 297, 297, 297,
+ 297, 0, 297, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 297, 0, 0, 0, 0,
+ 0, 0, 297, 297, 297, 297, 297, 297, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 297, 0,
+
+ 0, 297, 297, 297, 297, 297, 297, 300, 300, 300,
+ 300, 300, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 300, 0, 0, 0,
+ 0, 0, 0, 300, 300, 300, 300, 300, 300, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 300,
+ 0, 0, 300, 300, 300, 300, 300, 300, 301, 301,
+ 301, 301, 301, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 301, 0, 0,
+ 0, 0, 0, 0, 301, 301, 301, 301, 301, 301,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 301, 301, 301, 301, 301, 301, 302,
+ 302, 302, 302, 302, 0, 0, 0, 0, 0, 0,
+ 302, 0, 0, 0, 0, 0, 0, 0, 302, 0,
+ 0, 0, 0, 0, 0, 302, 302, 302, 302, 302,
+ 302, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 302, 0, 0, 302, 302, 302, 302, 302, 302,
+ 303, 303, 303, 303, 303, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 303, 0, 0, 303,
+ 0, 0, 0, 0, 0, 0, 303, 303, 303, 303,
+ 303, 303, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 303, 303, 303, 303, 303,
+ 303, 304, 304, 304, 304, 304, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 304, 0, 0, 0, 0, 0, 0, 304, 304, 304,
+ 304, 304, 304, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 304, 304, 304, 304,
+ 304, 304, 305, 305, 305, 305, 305, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 305, 0, 0, 0, 0, 0, 0, 305, 305,
+ 305, 305, 305, 305, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 305, 305, 305,
+ 305, 305, 305, 307, 307, 307, 307, 307, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 307, 0, 0, 0, 0, 0, 0, 307,
+
+ 307, 307, 307, 307, 307, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 307, 307,
+ 307, 307, 307, 307, 312, 0, 0, 0, 0, 0,
+ 0, 312, 312, 312, 312, 312, 312, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 312, 312, 312, 312, 312, 312, 313, 313, 313, 313,
+ 313, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 313, 0, 0, 0, 0,
+
+ 0, 0, 313, 313, 313, 313, 313, 313, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 313, 313, 313, 313, 313, 313, 326, 326, 326,
+ 326, 326, 0, 326, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 326, 0, 0, 0,
+ 0, 0, 0, 326, 326, 326, 326, 326, 326, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 326,
+ 0, 0, 326, 326, 326, 326, 326, 326, 327, 327,
+
+ 327, 327, 0, 0, 327, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 327, 0, 0,
+ 0, 0, 0, 0, 327, 327, 327, 327, 327, 327,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 327, 0, 0, 327, 327, 327, 327, 327, 327, 331,
+ 331, 331, 331, 331, 0, 0, 0, 0, 0, 0,
+ 331, 0, 0, 0, 0, 0, 0, 0, 331, 0,
+ 0, 0, 0, 0, 0, 331, 331, 331, 331, 331,
+ 331, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 331, 0, 0, 331, 331, 331, 331, 331, 331,
+ 332, 332, 332, 332, 0, 0, 0, 0, 0, 0,
+ 0, 332, 0, 0, 0, 0, 0, 0, 0, 332,
+ 0, 0, 0, 0, 0, 0, 332, 332, 332, 332,
+ 332, 332, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 332, 0, 0, 332, 332, 332, 332, 332,
+ 332, 333, 333, 333, 333, 333, 0, 0, 0, 0,
+ 0, 0, 0, 0, 333, 0, 0, 0, 0, 0,
+
+ 333, 0, 0, 0, 0, 0, 0, 333, 333, 333,
+ 333, 333, 333, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 333, 0, 0, 333, 333, 333, 333,
+ 333, 333, 337, 0, 0, 0, 0, 0, 0, 337,
+ 337, 337, 337, 337, 337, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 337, 337,
+ 337, 337, 337, 337, 338, 0, 0, 0, 0, 0,
+ 0, 338, 338, 338, 338, 338, 338, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 338, 338, 338, 338, 338, 338, 341, 0, 0, 0,
+ 0, 0, 0, 341, 341, 341, 341, 341, 341, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 341, 341, 341, 341, 341, 341, 342, 342,
+ 342, 342, 342, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 342, 0, 0,
+ 0, 0, 0, 0, 342, 342, 342, 342, 342, 342,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 342, 342, 342, 342, 342, 342, 344,
+ 344, 344, 344, 344, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 344, 0,
+ 0, 0, 0, 0, 0, 344, 344, 344, 344, 344,
+ 344, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 344, 344, 344, 344, 344, 344,
+ 361, 0, 0, 0, 0, 0, 0, 361, 361, 361,
+
+ 361, 361, 361, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 361, 361, 361, 361,
+ 361, 361, 365, 0, 0, 0, 0, 0, 0, 365,
+ 365, 365, 365, 365, 365, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 365, 365,
+ 365, 365, 365, 365, 366, 366, 366, 366, 366, 0,
+ 0, 0, 0, 0, 0, 0, 0, 366, 0, 0,
+ 0, 0, 0, 366, 0, 0, 0, 0, 0, 0,
+
+ 366, 366, 366, 366, 366, 366, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 366, 0, 0, 366,
+ 366, 366, 366, 366, 366, 371, 0, 0, 0, 0,
+ 0, 0, 371, 0, 371, 0, 0, 0, 0, 371,
+ 371, 0, 0, 371, 0, 0, 0, 0, 371, 0,
+ 0, 0, 0, 0, 371, 0, 0, 0, 0, 0,
+ 371, 0, 371, 0, 0, 0, 0, 371, 371, 0,
+ 0, 371, 376, 0, 0, 0, 0, 0, 0, 376,
+ 376, 376, 376, 376, 376, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 376, 376,
+ 376, 376, 376, 376, 377, 0, 0, 0, 0, 0,
+ 0, 377, 377, 377, 377, 377, 377, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 377, 377, 377, 377, 377, 377, 378, 0, 0, 0,
+ 0, 0, 0, 378, 378, 378, 378, 378, 378, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 378, 378, 378, 378, 378, 378, 390, 0,
+ 0, 0, 0, 0, 0, 390, 390, 390, 390, 390,
+ 390, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 390, 390, 390, 390, 390, 390,
+ 391, 0, 0, 0, 0, 0, 0, 391, 391, 391,
+ 391, 391, 391, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 391, 391, 391, 391,
+ 391, 391, 392, 0, 0, 0, 0, 0, 0, 392,
+
+ 392, 392, 392, 392, 392, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 392, 392,
+ 392, 392, 392, 392, 400, 0, 0, 0, 0, 0,
+ 0, 400, 400, 400, 400, 400, 400, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 400, 400, 400, 400, 400, 400, 401, 0, 0, 0,
+ 0, 0, 0, 401, 401, 401, 401, 401, 401, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 401, 401, 401, 401, 401, 401, 417, 0,
+ 0, 0, 0, 0, 0, 417, 417, 417, 417, 417,
+ 417, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 417, 417, 417, 417, 417, 417,
+ 429, 0, 0, 0, 0, 0, 0, 429, 429, 429,
+ 429, 429, 429, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 429, 429, 429, 429,
+
+ 429, 429, 431, 431, 431, 431, 431, 0, 0, 0,
+ 0, 0, 0, 0, 0, 431, 0, 0, 0, 0,
+ 0, 431, 0, 0, 0, 0, 0, 0, 431, 431,
+ 431, 431, 431, 431, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 431, 0, 0, 431, 431, 431,
+ 431, 431, 431, 440, 440, 440, 440, 440, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 440, 0, 0, 0, 0, 0, 0, 440,
+ 440, 440, 440, 440, 440, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 440, 440,
+ 440, 440, 440, 440, 442, 0, 0, 0, 0, 0,
+ 0, 442, 442, 442, 442, 442, 442, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 442, 442, 442, 442, 442, 442, 449, 0, 0, 0,
+ 0, 0, 0, 449, 449, 449, 449, 449, 449, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 449, 449, 449, 449, 449, 449, 450, 0,
+ 0, 0, 0, 0, 0, 450, 450, 450, 450, 450,
+ 450, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 450, 450, 450, 450, 450, 450,
+ 455, 0, 0, 0, 0, 0, 0, 455, 455, 455,
+ 455, 455, 455, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 455, 455, 455, 455,
+ 455, 455, 456, 0, 0, 0, 0, 0, 0, 456,
+
+ 456, 456, 456, 456, 456, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 456, 456,
+ 456, 456, 456, 456, 461, 0, 0, 0, 0, 0,
+ 0, 461, 461, 461, 461, 461, 461, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 461, 461, 461, 461, 461, 461, 462, 0, 0, 0,
+ 0, 0, 0, 462, 462, 462, 462, 462, 462, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 462, 462, 462, 462, 462, 462, 467, 0,
+ 0, 0, 0, 0, 0, 467, 467, 467, 467, 467,
+ 467, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 467, 467, 467, 467, 467, 467,
+ 482, 0, 0, 482, 482, 482, 482, 482, 482, 482,
+ 482, 482, 482, 483, 483, 0, 483, 483, 484, 0,
+ 0, 484, 484, 484, 484, 484, 484, 484, 484, 484,
+ 484, 485, 485, 0, 485, 485, 486, 0, 0, 486,
+
+ 486, 487, 0, 487, 487, 0, 487, 487, 488, 488,
+ 488, 488, 488, 488, 488, 488, 488, 488, 489, 489,
+ 489, 489, 489, 489, 489, 489, 489, 489, 489, 489,
+ 489, 491, 491, 0, 491, 491, 492, 492, 492, 492,
+ 492, 492, 492, 492, 492, 492, 493, 493, 493, 493,
493, 493, 493, 493, 493, 493, 493, 493, 493, 494,
- 494, 495, 495, 495, 495, 495, 495, 495, 495, 495,
- 496, 496, 0, 496, 496, 497, 497, 497, 497, 497,
-
- 497, 497, 497, 497, 498, 498, 0, 498, 498, 499,
- 499, 499, 499, 499, 499, 499, 499, 499, 500, 500,
- 500, 500, 500, 500, 500, 500, 500, 501, 501, 501,
- 501, 501, 501, 501, 501, 501, 501, 501, 501, 502,
- 502, 502, 502, 502, 502, 502, 502, 502, 503, 503,
- 503, 503, 503, 503, 503, 503, 503, 504, 504, 504,
- 0, 504, 505, 505, 505, 505, 505, 505, 505, 505,
- 505, 505, 505, 505, 506, 506, 506, 0, 506, 507,
- 507, 507, 507, 0, 507, 507, 507, 507, 507, 507,
- 508, 508, 508, 0, 508, 509, 0, 509, 509, 509,
-
- 509, 509, 509, 509, 509, 509, 510, 0, 510, 510,
- 510, 510, 510, 510, 510, 510, 510, 511, 511, 511,
- 511, 511, 511, 511, 511, 511, 511, 511, 512, 512,
- 512, 0, 512, 513, 513, 513, 513, 513, 513, 513,
- 513, 513, 513, 513, 514, 514, 514, 514, 514, 514,
- 514, 514, 514, 514, 514, 515, 515, 515, 0, 515,
- 516, 516, 516, 0, 0, 0, 516, 0, 0, 516,
- 516, 517, 517, 517, 517, 517, 517, 517, 517, 517,
- 518, 518, 518, 0, 0, 518, 518, 518, 0, 518,
- 518, 519, 519, 519, 519, 519, 519, 519, 519, 519,
+ 494, 494, 494, 494, 494, 494, 494, 494, 494, 494,
+ 494, 494, 494, 496, 496, 0, 496, 496, 497, 497,
+ 497, 497, 497, 497, 497, 497, 497, 497, 498, 498,
+ 0, 498, 498, 499, 499, 499, 499, 499, 499, 499,
+
+ 499, 499, 499, 500, 500, 500, 500, 500, 500, 500,
+ 500, 500, 500, 501, 501, 501, 503, 503, 503, 503,
+ 503, 503, 503, 503, 503, 503, 504, 504, 0, 504,
+ 504, 504, 504, 504, 504, 504, 504, 504, 504, 505,
+ 505, 505, 505, 505, 505, 505, 505, 505, 505, 505,
+ 505, 505, 506, 506, 506, 506, 506, 506, 506, 506,
+ 506, 506, 506, 506, 506, 506, 507, 507, 507, 507,
+ 507, 507, 507, 507, 507, 507, 507, 507, 507, 507,
+ 508, 508, 508, 508, 508, 508, 508, 508, 508, 508,
+ 509, 509, 509, 509, 509, 509, 509, 509, 509, 509,
+
+ 510, 510, 510, 510, 511, 0, 0, 511, 511, 511,
+ 511, 511, 511, 511, 511, 511, 511, 513, 513, 513,
+ 513, 513, 513, 513, 513, 513, 513, 513, 513, 513,
+ 513, 515, 515, 515, 515, 516, 516, 516, 516, 516,
+ 516, 0, 516, 516, 516, 516, 516, 516, 517, 517,
+ 517, 517, 517, 517, 517, 517, 517, 517, 517, 517,
+ 517, 519, 519, 519, 519, 519, 519, 519, 519, 519,
+ 519, 519, 519, 519, 519, 521, 521, 521, 521, 522,
+ 522, 522, 522, 522, 522, 0, 522, 522, 522, 522,
+ 522, 522, 523, 0, 0, 523, 523, 523, 523, 523,
+
+ 523, 523, 523, 523, 523, 524, 0, 0, 524, 524,
+ 524, 524, 524, 524, 524, 524, 524, 524, 525, 525,
+ 525, 525, 525, 525, 525, 525, 525, 525, 525, 525,
+ 525, 526, 526, 526, 526, 526, 526, 526, 526, 526,
+ 526, 526, 526, 526, 528, 528, 0, 528, 528, 529,
+ 529, 529, 529, 529, 529, 529, 529, 529, 529, 529,
+ 529, 529, 531, 531, 531, 531, 532, 532, 532, 532,
+ 532, 532, 532, 532, 532, 532, 532, 532, 532, 533,
+ 0, 0, 533, 533, 533, 533, 533, 533, 533, 533,
+ 533, 533, 534, 534, 534, 534, 534, 534, 534, 534,
+
+ 534, 534, 534, 534, 534, 535, 535, 535, 535, 535,
+ 0, 0, 535, 535, 535, 535, 535, 535, 536, 536,
+ 536, 536, 536, 536, 536, 536, 536, 536, 536, 536,
+ 536, 537, 537, 537, 537, 537, 537, 537, 537, 537,
+ 537, 537, 537, 537, 538, 538, 0, 538, 538, 539,
+ 539, 539, 539, 539, 539, 539, 539, 539, 539, 539,
+ 539, 539, 541, 541, 541, 541, 542, 542, 0, 542,
+ 542, 542, 542, 542, 542, 542, 542, 542, 542, 543,
+ 543, 543, 543, 543, 543, 543, 543, 543, 543, 543,
+ 543, 543, 544, 544, 0, 544, 544, 544, 544, 544,
+
+ 544, 544, 544, 544, 544, 545, 545, 545, 545, 545,
+ 545, 545, 545, 545, 545, 545, 545, 545, 546, 546,
+ 546, 546, 546, 0, 0, 546, 546, 546, 546, 546,
+ 546, 549, 549, 549, 549, 0, 0, 0, 0, 549,
+ 0, 0, 549, 549, 550, 550, 550, 550, 0, 0,
+ 0, 550, 550, 550, 0, 550, 550, 551, 551, 551,
+ 551, 551, 551, 551, 551, 551, 551, 552, 552, 552,
+ 552, 552, 552, 552, 552, 552, 552, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
+ 481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
@@ -833,38 +1775,35 @@ static yyconst short int yy_chk[2462] =
481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
481, 481, 481, 481, 481, 481, 481, 481, 481, 481,
- 481
+ 481, 481, 481
} ;
#line 1 "<stdin>"
-#define INITIAL 0
-#define YY_STACK_USED 1
-#define mediaquery 1
YY_DECL
- {
+{
register yy_state_type yy_current_state;
register UChar *yy_cp, *yy_bp;
register int yy_act;
while ( 1 ) /* loops until end-of-file is reached */
{
- yy_cp = yy_c_buf_p;
+ yy_cp = (yy_c_buf_p);
/* Support of yytext. */
- *yy_cp = yy_hold_char;
+ *yy_cp = (yy_hold_char);
/* yy_bp points to the position in yy_ch_buf of the start of
* the current run.
*/
yy_bp = yy_cp;
- yy_current_state = yy_start;
+ yy_current_state = (yy_start);
do
{
register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
if ( yy_accept[yy_current_state] )
{
- yy_last_accepting_state = yy_current_state;
- yy_last_accepting_cpos = yy_cp;
+ (yy_last_accepting_state) = yy_current_state;
+ (yy_last_accepting_cpos) = yy_cp;
}
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
@@ -875,37 +1814,37 @@ YY_DECL
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp;
}
- while ( yy_base[yy_current_state] != 2401 );
+ while ( yy_base[yy_current_state] != 6578 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
if ( yy_act == 0 )
{ /* have to back up */
- yy_cp = yy_last_accepting_cpos;
- yy_current_state = yy_last_accepting_state;
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
yy_act = yy_accept[yy_current_state];
}
YY_DO_BEFORE_ACTION;
-
-
switch ( yy_act )
{ /* beginning of action switch */
case 0: /* must back up */
/* undo the effects of YY_DO_BEFORE_ACTION */
- *yy_cp = yy_hold_char;
- yy_cp = yy_last_accepting_cpos;
- yy_current_state = yy_last_accepting_state;
+ *yy_cp = (yy_hold_char);
+ yy_cp = (yy_last_accepting_cpos);
+ yy_current_state = (yy_last_accepting_state);
goto yy_find_action;
case 1:
+/* rule 1 can match eol */
YY_RULE_SETUP
#line 31 "<stdin>"
{countLines(); /* ignore comments */ }
YY_BREAK
case 2:
+/* rule 2 can match eol */
YY_RULE_SETUP
#line 33 "<stdin>"
{countLines(); yyTok = WHITESPACE; return yyTok;}
@@ -966,11 +1905,13 @@ YY_RULE_SETUP
{BEGIN(mediaquery); yyTok = VARIABLES_FOR; return yyTok; }
YY_BREAK
case 14:
+/* rule 14 can match eol */
YY_RULE_SETUP
#line 47 "<stdin>"
{yyTok = STRING; return yyTok;}
YY_BREAK
case 15:
+/* rule 15 can match eol */
YY_RULE_SETUP
#line 48 "<stdin>"
{yyTok = IDENT; return yyTok;}
@@ -986,6 +1927,7 @@ YY_RULE_SETUP
{yyTok = HEX; return yyTok;}
YY_BREAK
case 18:
+/* rule 18 can match eol */
YY_RULE_SETUP
#line 52 "<stdin>"
{yyTok = IDSEL; return yyTok;}
@@ -1071,11 +2013,13 @@ YY_RULE_SETUP
{yyTok = WEBKIT_KEYFRAME_RULE_SYM; return yyTok; }
YY_BREAK
case 35:
+/* rule 35 can match eol */
YY_RULE_SETUP
#line 71 "<stdin>"
{yyTok = ATKEYWORD; return yyTok; }
YY_BREAK
case 36:
+/* rule 36 can match eol */
YY_RULE_SETUP
#line 73 "<stdin>"
{yyTok = IMPORTANT_SYM; return yyTok;}
@@ -1171,6 +2115,7 @@ YY_RULE_SETUP
{yyTok = KHERZ; return yyTok;}
YY_BREAK
case 55:
+/* rule 55 can match eol */
YY_RULE_SETUP
#line 93 "<stdin>"
{yyTok = DIMEN; return yyTok;}
@@ -1196,21 +2141,25 @@ YY_RULE_SETUP
{yyTok = NOTFUNCTION; return yyTok;}
YY_BREAK
case 60:
+/* rule 60 can match eol */
YY_RULE_SETUP
#line 99 "<stdin>"
{yyTok = URI; return yyTok;}
YY_BREAK
case 61:
+/* rule 61 can match eol */
YY_RULE_SETUP
#line 100 "<stdin>"
{yyTok = URI; return yyTok;}
YY_BREAK
case 62:
+/* rule 62 can match eol */
YY_RULE_SETUP
#line 101 "<stdin>"
{ yyTok = VARCALL; return yyTok; }
YY_BREAK
case 63:
+/* rule 63 can match eol */
YY_RULE_SETUP
#line 102 "<stdin>"
{yyTok = FUNCTION; return yyTok;}
@@ -1242,6 +2191,7 @@ YY_RULE_SETUP
#line 111 "<stdin>"
ECHO;
YY_BREAK
+#line 2746 "<stdout>"
case YY_END_OF_BUFFER:
yy_c_buf_p = yy_cp - 1;
yy_cp = yy_c_buf_p;
@@ -1255,4 +2205,4 @@ case YY_STATE_EOF(forkeyword):
"fatal flex scanner internal error--no action found" );
} /* end of action switch */
} /* end of scanning one token */
- } /* end of yylex */
+} /* end of yylex */
diff --git a/src/3rdparty/webkit/WebCore/history/qt/HistoryItemQt.cpp b/src/3rdparty/webkit/WebCore/history/qt/HistoryItemQt.cpp
index 8bbd233..c5fb069 100644
--- a/src/3rdparty/webkit/WebCore/history/qt/HistoryItemQt.cpp
+++ b/src/3rdparty/webkit/WebCore/history/qt/HistoryItemQt.cpp
@@ -25,8 +25,9 @@
bool WebCore::HistoryItem::restoreState(QDataStream& in, int version)
{
- // we support up to version 2
- if (version > 2)
+ // we only support version 1 for now
+
+ if (version != 1)
return false;
WebCore::String url;
@@ -47,7 +48,6 @@ bool WebCore::HistoryItem::restoreState(QDataStream& in, int version)
WebCore::IntPoint scrollPoint;
WTF::Vector<int> weeklyVisitCounts;
WTF::Vector<int> dailyVisitCounts;
- long long documentSequenceNumber;
// bool loadFormdata;
// WebCore::String formContentType;
// WTF::Vector<char> formData;
@@ -79,12 +79,6 @@ bool WebCore::HistoryItem::restoreState(QDataStream& in, int version)
setTitle(title);
setAlternateTitle(altTitle);
- if (version > 1)
- {
- in >> documentSequenceNumber;
- setDocumentSequenceNumber(documentSequenceNumber);
- }
-
// at the end load userData
in >> validUserData;
if (validUserData) {
@@ -98,16 +92,15 @@ bool WebCore::HistoryItem::restoreState(QDataStream& in, int version)
QDataStream& WebCore::HistoryItem::saveState(QDataStream& out, int version) const
{
+ // we only support version 1 for now.
+ if (version != 1)
+ return out;
+
out << urlString() << title() << alternateTitle() << lastVisitedTime();
out << originalURLString() << referrer() << target() << parent();
out << lastVisitWasHTTPNonGet() << lastVisitWasFailure() << isTargetItem();
out << visitCount() << documentState() << scrollPoint();
out << dailyVisitCounts() << weeklyVisitCounts();
-
- // Since version 2
- Q_ASSERT_X(version > 1, "HistoryItem::saveState()", "Stream version should be greater than 1");
- out << documentSequenceNumber();
-
/*if (m_formData) {
out << true;
out << formContentType();
diff --git a/src/3rdparty/webkit/WebCore/html/HTMLInputElement.cpp b/src/3rdparty/webkit/WebCore/html/HTMLInputElement.cpp
index 6a214ab..4c5a93e 100644
--- a/src/3rdparty/webkit/WebCore/html/HTMLInputElement.cpp
+++ b/src/3rdparty/webkit/WebCore/html/HTMLInputElement.cpp
@@ -740,7 +740,11 @@ void HTMLInputElement::aboutToUnload()
bool HTMLInputElement::shouldUseInputMethod() const
{
- return m_type == TEXT || m_type == SEARCH || m_type == ISINDEX;
+ // The reason IME's are disabled for the password field is because IMEs
+ // can access the underlying password and display it in clear text --
+ // e.g. you can use it to access the stored password for any site
+ // with only trivial effort.
+ return isTextField() && inputType() != PASSWORD;
}
void HTMLInputElement::handleFocusEvent()
diff --git a/src/3rdparty/webkit/WebCore/html/HTMLMetaElement.cpp b/src/3rdparty/webkit/WebCore/html/HTMLMetaElement.cpp
index cf667ca..6c49323 100644
--- a/src/3rdparty/webkit/WebCore/html/HTMLMetaElement.cpp
+++ b/src/3rdparty/webkit/WebCore/html/HTMLMetaElement.cpp
@@ -63,9 +63,15 @@ void HTMLMetaElement::insertedIntoDocument()
void HTMLMetaElement::process()
{
+ if (!inDocument() || m_content.isNull())
+ return;
+
+ if (equalIgnoringCase(name(), "viewport"))
+ document()->processViewport(m_content);
+
// Get the document to process the tag, but only if we're actually part of DOM tree (changing a meta tag while
// it's not in the tree shouldn't have any effect on the document)
- if (inDocument() && !m_equiv.isNull() && !m_content.isNull())
+ if (!m_equiv.isNull())
document()->processHttpEquiv(m_equiv, m_content);
}
diff --git a/src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp b/src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp
index 0323e97..316caab 100644
--- a/src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp
+++ b/src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp
@@ -1274,7 +1274,11 @@ bool FrameLoader::requestObject(RenderEmbeddedObject* renderer, const String& ur
bool useFallback;
if (shouldUsePlugin(completedURL, mimeType, renderer->hasFallbackContent(), useFallback)) {
Settings* settings = m_frame->settings();
- if (!allowPlugins(AboutToInstantiatePlugin)
+ if ((!allowPlugins(AboutToInstantiatePlugin)
+ // Application plugins are plugins implemented by the user agent, for example Qt plugins,
+ // as opposed to third-party code such as flash. The user agent decides whether or not they are
+ // permitted, rather than WebKit.
+ && !MIMETypeRegistry::isApplicationPluginMIMEType(mimeType))
|| (!settings->isJavaEnabled() && MIMETypeRegistry::isJavaAppletMIMEType(mimeType)))
return false;
if (isDocumentSandboxed(SandboxPlugins))
diff --git a/src/3rdparty/webkit/WebCore/page/ChromeClient.h b/src/3rdparty/webkit/WebCore/page/ChromeClient.h
index 34e2893..0bfdbaf 100644
--- a/src/3rdparty/webkit/WebCore/page/ChromeClient.h
+++ b/src/3rdparty/webkit/WebCore/page/ChromeClient.h
@@ -56,6 +56,7 @@ namespace WebCore {
class Widget;
struct FrameLoadRequest;
+ struct ViewportArguments;
struct WindowFeatures;
#if USE(ACCELERATED_COMPOSITING)
@@ -145,6 +146,8 @@ namespace WebCore {
virtual void setToolTip(const String&, TextDirection) = 0;
+ virtual void didReceiveViewportArguments(Frame*, const ViewportArguments&) const { }
+
virtual void print(Frame*) = 0;
#if ENABLE(DATABASE)
@@ -211,6 +214,9 @@ namespace WebCore {
// Sets a flag to specify that the view needs to be updated, so we need
// to do an eager layout before the drawing.
virtual void scheduleCompositingLayerSync() = 0;
+ // Returns whether or not the client can render the composited layer,
+ // regardless of the settings.
+ virtual bool allowsAcceleratedCompositing() const { return true; }
#endif
virtual bool supportsFullscreenForNode(const Node*) { return false; }
@@ -231,10 +237,11 @@ namespace WebCore {
#endif
#if ENABLE(WIDGETS_10_SUPPORT)
- virtual bool isDocked() { return false; }
+ virtual bool isWindowed() { return false; }
virtual bool isFloating() { return false; }
- virtual bool isApplication() { return false; }
virtual bool isFullscreen() { return false; }
+ virtual bool isMaximized() { return false; }
+ virtual bool isMinimized() { return false; }
#endif
protected:
diff --git a/src/3rdparty/webkit/WebCore/page/FocusController.cpp b/src/3rdparty/webkit/WebCore/page/FocusController.cpp
index 089fb8f..6c2a956 100644
--- a/src/3rdparty/webkit/WebCore/page/FocusController.cpp
+++ b/src/3rdparty/webkit/WebCore/page/FocusController.cpp
@@ -304,7 +304,7 @@ bool FocusController::advanceFocusDirectionally(FocusDirection direction, Keyboa
frame = frame->tree()->top();
FocusCandidate focusCandidate;
- findFocusableNodeInDirection(frame->document(), focusedNode, direction, event, focusCandidate);
+ findFocusableNodeInDirection(frame->document()->firstChild(), focusedNode, direction, event, focusCandidate);
Node* node = focusCandidate.node;
if (!node || !node->isElementNode()) {
@@ -341,80 +341,143 @@ bool FocusController::advanceFocusDirectionally(FocusDirection direction, Keyboa
return true;
}
-static void updateFocusCandidateIfCloser(Node* focusedNode, Node* candidate, long long distance, FocusCandidate& closestFocusCandidate)
+// FIXME: Make this method more modular, and simpler to understand and maintain.
+static void updateFocusCandidateIfCloser(Node* focusedNode, const FocusCandidate& candidate, FocusCandidate& closest)
{
- // Bail out if |distance| is bigger than the current closest candidate.
- if (distance >= closestFocusCandidate.distance)
+ bool sameDocument = candidate.document() == closest.document();
+ if (sameDocument) {
+ if (closest.alignment > candidate.alignment
+ || (closest.parentAlignment && candidate.alignment > closest.parentAlignment))
+ return;
+ } else if (closest.alignment > candidate.alignment
+ && (closest.parentAlignment && candidate.alignment > closest.parentAlignment))
return;
- // If |focusedNode| and |candidate| are in the same document AND
- // current |closestFocusCandidadte| is not in an {i}frame that is
- // preferable to get focused.
- if (focusedNode->document() == candidate->document()
- && distance < closestFocusCandidate.parentDistance) {
- closestFocusCandidate.node = candidate;
- closestFocusCandidate.distance = distance;
- closestFocusCandidate.parentDistance = maxDistance();
- } else if (focusedNode->document() != candidate->document()) {
- // If the |focusedNode| is in an inner document and the |candidate| is
- // in a different document, we only consider to change focus if there is
- // not another already good focusable candidate in the same document as
- // |focusedNode|.
- if (!((isInRootDocument(candidate) && !isInRootDocument(focusedNode))
- && focusedNode->document() == closestFocusCandidate.document())) {
- closestFocusCandidate.node = candidate;
- closestFocusCandidate.distance = distance;
- }
+ if (candidate.alignment != None
+ || (closest.parentAlignment >= candidate.alignment
+ && closest.document() == candidate.document())) {
+
+ // If we are now in an higher precedent case, lets reset the current closest's
+ // distance so we force it to be bigger than any result we will get from
+ // spatialDistance().
+ if (closest.alignment < candidate.alignment
+ && closest.parentAlignment < candidate.alignment)
+ closest.distance = maxDistance();
+
+ closest.alignment = candidate.alignment;
+ }
+
+ // Bail out if candidate's distance is larger than that of the closest candidate.
+ if (candidate.distance >= closest.distance)
+ return;
+
+ if (closest.isNull()) {
+ closest = candidate;
+ return;
+ }
+
+ // If the focused node and the candadate are in the same document and current
+ // closest candidate is not in an {i}frame that is preferable to get focused ...
+ if (focusedNode->document() == candidate.document()
+ && candidate.distance < closest.parentDistance)
+ closest = candidate;
+ else if (focusedNode->document() != candidate.document()) {
+ // If the focusedNode is in an inner document and candidate is in a
+ // different document, we only consider to change focus if there is not
+ // another already good focusable candidate in the same document as focusedNode.
+ if (!((isInRootDocument(candidate.node) && !isInRootDocument(focusedNode))
+ && focusedNode->document() == closest.document()))
+ closest = candidate;
}
}
-void FocusController::findFocusableNodeInDirection(Document* document, Node* focusedNode, FocusDirection direction, KeyboardEvent* event, FocusCandidate& closestFocusCandidate)
+void FocusController::findFocusableNodeInDirection(Node* outer, Node* focusedNode,
+ FocusDirection direction, KeyboardEvent* event,
+ FocusCandidate& closestFocusCandidate,
+ const FocusCandidate& candidateParent)
{
- ASSERT(document);
-
- // Walk all the child nodes and update focusCandidate if we find a nearer node.
- for (Node* candidate = document->firstChild(); candidate; candidate = candidate->traverseNextNode()) {
+ ASSERT(outer);
+ ASSERT(candidateParent.isNull()
+ || candidateParent.node->hasTagName(frameTag)
+ || candidateParent.node->hasTagName(iframeTag));
+
+ // Walk all the child nodes and update closestFocusCandidate if we find a nearer node.
+ Node* candidate = outer;
+ while (candidate) {
// Inner documents case.
+
if (candidate->isFrameOwnerElement())
- deepFindFocusableNodeInDirection(focusedNode, candidate, direction, event, closestFocusCandidate);
+ deepFindFocusableNodeInDirection(candidate, focusedNode, direction, event, closestFocusCandidate);
else if (candidate != focusedNode && candidate->isKeyboardFocusable(event)) {
- long long distance = distanceInDirection(focusedNode, candidate,
- direction, closestFocusCandidate);
- updateFocusCandidateIfCloser(focusedNode, candidate, distance, closestFocusCandidate);
+ FocusCandidate currentFocusCandidate(candidate);
+
+ // Get distance and alignment from current candidate.
+ distanceDataForNode(direction, focusedNode, currentFocusCandidate);
+
+ // Bail out if distance is maximum.
+ if (currentFocusCandidate.distance == maxDistance()) {
+ candidate = candidate->traverseNextNode(outer->parent());
+ continue;
+ }
+
+ // If candidateParent is not null, it means that we are in a recursive call
+ // from deepFineFocusableNodeInDirection (i.e. processing an element in an iframe),
+ // and holds the distance and alignment data of the iframe element itself.
+ if (!candidateParent.isNull()) {
+ currentFocusCandidate.parentAlignment = candidateParent.alignment;
+ currentFocusCandidate.parentDistance = candidateParent.distance;
+ }
+
+ updateFocusCandidateIfCloser(focusedNode, currentFocusCandidate, closestFocusCandidate);
}
+
+ candidate = candidate->traverseNextNode(outer->parent());
}
}
-void FocusController::deepFindFocusableNodeInDirection(Node* focusedNode, Node* candidate, FocusDirection direction, KeyboardEvent* event, FocusCandidate& closestFocusCandidate)
+void FocusController::deepFindFocusableNodeInDirection(Node* container, Node* focusedNode,
+ FocusDirection direction, KeyboardEvent* event,
+ FocusCandidate& closestFocusCandidate)
{
- HTMLFrameOwnerElement* owner = static_cast<HTMLFrameOwnerElement*>(candidate);
- if (!owner->contentFrame())
+ ASSERT(container->hasTagName(frameTag) || container->hasTagName(iframeTag));
+
+ // Track if focusedNode is a descendant of the current container node being processed.
+ bool descendantOfContainer = false;
+ Node* firstChild = 0;
+
+ // Iframe or Frame.
+ if (container->hasTagName(frameTag) || container->hasTagName(iframeTag)) {
+
+ HTMLFrameOwnerElement* owner = static_cast<HTMLFrameOwnerElement*>(container);
+ if (!owner->contentFrame())
+ return;
+
+ Document* innerDocument = owner->contentFrame()->document();
+ if (!innerDocument)
+ return;
+
+ descendantOfContainer = innerDocument == focusedNode->document();
+ firstChild = innerDocument->firstChild();
+
+ }
+
+ if (descendantOfContainer) {
+ findFocusableNodeInDirection(firstChild, focusedNode, direction, event, closestFocusCandidate);
return;
+ }
- Document* innerDocument = owner->contentFrame()->document();
- if (!innerDocument)
+ // Check if the current container element itself is a good candidate
+ // to move focus to. If it is, then we traverse its inner nodes.
+ FocusCandidate candidateParent = FocusCandidate(container);
+ distanceDataForNode(direction, focusedNode, candidateParent);
+
+ // Bail out if distance is maximum.
+ if (candidateParent.distance == maxDistance())
return;
- if (innerDocument == focusedNode->document())
- findFocusableNodeInDirection(innerDocument, focusedNode, direction, event, closestFocusCandidate);
- else {
- // Check if the current {i}frame element itself is a good candidate
- // to move focus to. If it is, then we traverse its inner nodes.
- // Lets pass a copy of the best candidate, to not get fooled by a
- // frame without focusable elements.
- FocusCandidate focusCandidateCopy = closestFocusCandidate;
- long long distance = distanceInDirection(focusedNode, candidate, direction, focusCandidateCopy);
- if (distance < focusCandidateCopy.distance) {
- focusCandidateCopy.parentAlignment = focusCandidateCopy.alignment;
- focusCandidateCopy.parentDistance = distance;
-
- findFocusableNodeInDirection(innerDocument, focusedNode, direction, event, focusCandidateCopy);
-
- // If we really have an inner closer focus candidate node, take it.
- if (closestFocusCandidate.node != focusCandidateCopy.node)
- closestFocusCandidate = focusCandidateCopy;
- }
- }
+ // FIXME: Consider alignment?
+ if (candidateParent.distance < closestFocusCandidate.distance)
+ findFocusableNodeInDirection(firstChild, focusedNode, direction, event, closestFocusCandidate, candidateParent);
}
static bool relinquishesEditingFocus(Node *node)
diff --git a/src/3rdparty/webkit/WebCore/page/FocusController.h b/src/3rdparty/webkit/WebCore/page/FocusController.h
index 75591c7..4410833 100644
--- a/src/3rdparty/webkit/WebCore/page/FocusController.h
+++ b/src/3rdparty/webkit/WebCore/page/FocusController.h
@@ -27,6 +27,7 @@
#define FocusController_h
#include "FocusDirection.h"
+#include "SpatialNavigation.h"
#include <wtf/Forward.h>
#include <wtf/Noncopyable.h>
#include <wtf/RefPtr.h>
@@ -38,7 +39,6 @@ class Frame;
class KeyboardEvent;
class Node;
class Page;
-struct FocusCandidate;
class FocusController : public Noncopyable {
public:
@@ -63,8 +63,10 @@ private:
bool advanceFocusDirectionally(FocusDirection, KeyboardEvent*);
bool advanceFocusInDocumentOrder(FocusDirection, KeyboardEvent*, bool initialFocus);
- void findFocusableNodeInDirection(Document*, Node*, FocusDirection, KeyboardEvent*, FocusCandidate&);
- void deepFindFocusableNodeInDirection(Node*, Node*, FocusDirection, KeyboardEvent*, FocusCandidate&);
+ void findFocusableNodeInDirection(Node* outter, Node*, FocusDirection, KeyboardEvent*,
+ FocusCandidate& closestFocusCandidate,
+ const FocusCandidate& parentCandidate = FocusCandidate());
+ void deepFindFocusableNodeInDirection(Node* container, Node* focused, FocusDirection, KeyboardEvent*, FocusCandidate&);
Page* m_page;
RefPtr<Frame> m_focusedFrame;
diff --git a/src/3rdparty/webkit/WebCore/page/FrameView.cpp b/src/3rdparty/webkit/WebCore/page/FrameView.cpp
index 45764de..39c92de 100644
--- a/src/3rdparty/webkit/WebCore/page/FrameView.cpp
+++ b/src/3rdparty/webkit/WebCore/page/FrameView.cpp
@@ -1067,6 +1067,7 @@ void FrameView::scrollPositionChanged()
if (!m_nestedLayoutCount) {
if (RenderView* root = m_frame->contentRenderer()) {
root->updateWidgetPositions();
+ root->layer()->updateRepaintRectsAfterScroll();
#if USE(ACCELERATED_COMPOSITING)
if (root->usesCompositing())
root->compositor()->updateCompositingLayers(CompositingUpdateOnScroll);
diff --git a/src/3rdparty/webkit/WebCore/page/SpatialNavigation.cpp b/src/3rdparty/webkit/WebCore/page/SpatialNavigation.cpp
index 86c9c5d..890eacd 100644
--- a/src/3rdparty/webkit/WebCore/page/SpatialNavigation.cpp
+++ b/src/3rdparty/webkit/WebCore/page/SpatialNavigation.cpp
@@ -46,16 +46,21 @@ static bool areRectsFullyAligned(FocusDirection, const IntRect&, const IntRect&)
static bool areRectsPartiallyAligned(FocusDirection, const IntRect&, const IntRect&);
static bool isRectInDirection(FocusDirection, const IntRect&, const IntRect&);
static void deflateIfOverlapped(IntRect&, IntRect&);
+static bool checkNegativeCoordsForNode(Node*, const IntRect&);
-long long distanceInDirection(Node* start, Node* dest, FocusDirection direction, FocusCandidate& candidate)
+void distanceDataForNode(FocusDirection direction, Node* start, FocusCandidate& candidate)
{
RenderObject* startRender = start->renderer();
- if (!startRender)
- return maxDistance();
+ if (!startRender) {
+ candidate.distance = maxDistance();
+ return;
+ }
- RenderObject* destRender = dest->renderer();
- if (!destRender)
- return maxDistance();
+ RenderObject* destRender = candidate.node->renderer();
+ if (!destRender) {
+ candidate.distance = maxDistance();
+ return;
+ }
IntRect curRect = renderRectRelativeToRootDocument(startRender);
IntRect targetRect = renderRectRelativeToRootDocument(destRender);
@@ -64,40 +69,34 @@ long long distanceInDirection(Node* start, Node* dest, FocusDirection direction,
// deflate both.
deflateIfOverlapped(curRect, targetRect);
+ // If empty rects or negative width or height, bail out.
if (curRect.isEmpty() || targetRect.isEmpty()
- || targetRect.x() < 0 || targetRect.y() < 0)
- return maxDistance();
+ || targetRect.width() <= 0 || targetRect.height() <= 0) {
+ candidate.distance = maxDistance();
+ return;
+ }
- if (!isRectInDirection(direction, curRect, targetRect))
- return maxDistance();
+ // Negative coordinates can be used if node is scrolled up offscreen.
+ if (!checkNegativeCoordsForNode(start, curRect)) {
+ candidate.distance = maxDistance();
+ return;
+ }
+
+ if (!checkNegativeCoordsForNode(candidate.node, targetRect)) {
+ candidate.distance = maxDistance();
+ return;
+ }
+
+ if (!isRectInDirection(direction, curRect, targetRect)) {
+ candidate.distance = maxDistance();
+ return;
+ }
// The distance between two nodes is not to be considered alone when evaluating/looking
// for the best focus candidate node. Alignment of rects can be also a good point to be
// considered in order to make the algorithm to behavior in a more intuitive way.
- RectsAlignment alignment = alignmentForRects(direction, curRect, targetRect);
-
- bool sameDocument = dest->document() == candidate.document();
- if (sameDocument) {
- if (candidate.alignment > alignment || (candidate.parentAlignment && alignment > candidate.parentAlignment))
- return maxDistance();
- } else if (candidate.alignment > alignment && (candidate.parentAlignment && alignment > candidate.parentAlignment))
- return maxDistance();
-
- // FIXME_tonikitoo: simplify the logic here !
- if (alignment != None
- || (!candidate.isNull() && candidate.parentAlignment >= alignment
- && candidate.document() == dest->document())) {
-
- // If we are now in an higher precedent case, lets reset the current |candidate|'s
- // |distance| so we force it to be bigger than the result we will get from
- // |spatialDistance| (see below).
- if (candidate.alignment < alignment && candidate.parentAlignment < alignment)
- candidate.distance = maxDistance();
-
- candidate.alignment = alignment;
- }
-
- return spatialDistance(direction, curRect, targetRect);
+ candidate.alignment = alignmentForRects(direction, curRect, targetRect);
+ candidate.distance = spatialDistance(direction, curRect, targetRect);
}
// FIXME: This function does not behave correctly with transformed frames.
@@ -107,6 +106,11 @@ static IntRect renderRectRelativeToRootDocument(RenderObject* render)
IntRect rect(render->absoluteClippedOverflowRect());
+ if (rect.isEmpty()) {
+ Element* e = static_cast<Element*>(render->node());
+ rect = e->getRect();
+ }
+
// In cases when the |render|'s associated node is in a scrollable inner
// document, we only consider its scrollOffset if it is not offscreen.
Node* node = render->node();
@@ -432,6 +436,9 @@ bool hasOffscreenRect(Node* node)
return true;
IntRect rect(render->absoluteClippedOverflowRect());
+ if (rect.isEmpty())
+ return true;
+
return !containerViewportRect.intersects(rect);
}
@@ -500,4 +507,24 @@ static void deflateIfOverlapped(IntRect& a, IntRect& b)
b.inflate(fudgeFactor);
}
+static bool checkNegativeCoordsForNode(Node* node, const IntRect& curRect)
+{
+ ASSERT(node || node->renderer());
+
+ if (curRect.x() > 0 && curRect.y() > 0)
+ return true;
+
+ bool canBeScrolled = false;
+
+ RenderObject* renderer = node->renderer();
+ for (; renderer; renderer = renderer->parent()) {
+ if (renderer->isBox() && toRenderBox(renderer)->canBeScrolledAndHasScrollableArea()) {
+ canBeScrolled = true;
+ break;
+ }
+ }
+
+ return canBeScrolled;
+}
+
} // namespace WebCore
diff --git a/src/3rdparty/webkit/WebCore/page/SpatialNavigation.h b/src/3rdparty/webkit/WebCore/page/SpatialNavigation.h
index 7c183df..90ff1cf 100644
--- a/src/3rdparty/webkit/WebCore/page/SpatialNavigation.h
+++ b/src/3rdparty/webkit/WebCore/page/SpatialNavigation.h
@@ -118,7 +118,7 @@ struct FocusCandidate {
RectsAlignment parentAlignment;
};
-long long distanceInDirection(Node*, Node*, FocusDirection, FocusCandidate&);
+void distanceDataForNode(FocusDirection direction, Node* start, FocusCandidate& candidate);
bool scrollInDirection(Frame*, FocusDirection);
void scrollIntoView(Element*);
bool hasOffscreenRect(Node*);
diff --git a/src/3rdparty/webkit/WebCore/page/qt/EventHandlerQt.cpp b/src/3rdparty/webkit/WebCore/page/qt/EventHandlerQt.cpp
index 2fcce5b..5b24eae 100644
--- a/src/3rdparty/webkit/WebCore/page/qt/EventHandlerQt.cpp
+++ b/src/3rdparty/webkit/WebCore/page/qt/EventHandlerQt.cpp
@@ -51,7 +51,7 @@
#include "NotImplemented.h"
QT_BEGIN_NAMESPACE
-Q_DECL_IMPORT extern bool qt_tab_all_widgets; // from qapplication.cpp
+Q_GUI_EXPORT extern bool qt_tab_all_widgets; // from qapplication.cpp
QT_END_NAMESPACE
namespace WebCore {
diff --git a/src/3rdparty/webkit/WebCore/platform/Arena.h b/src/3rdparty/webkit/WebCore/platform/Arena.h
index b6f6931..bc49307 100644
--- a/src/3rdparty/webkit/WebCore/platform/Arena.h
+++ b/src/3rdparty/webkit/WebCore/platform/Arena.h
@@ -44,7 +44,7 @@
namespace WebCore {
-typedef unsigned long uword;
+typedef uintptr_t uword;
struct Arena {
Arena* next; // next arena
diff --git a/src/3rdparty/webkit/WebCore/platform/FileSystem.h b/src/3rdparty/webkit/WebCore/platform/FileSystem.h
index 856d5bb..c236831 100644
--- a/src/3rdparty/webkit/WebCore/platform/FileSystem.h
+++ b/src/3rdparty/webkit/WebCore/platform/FileSystem.h
@@ -69,9 +69,11 @@ typedef HMODULE PlatformModule;
#elif PLATFORM(QT)
#if defined(Q_WS_MAC)
typedef CFBundleRef PlatformModule;
-#else
+#elif !defined(QT_NO_LIBRARY)
typedef QLibrary* PlatformModule;
-#endif // defined(Q_WS_MAC)
+#else
+typedef void* PlatformModule;
+#endif
#elif PLATFORM(GTK)
typedef GModule* PlatformModule;
#elif PLATFORM(CF)
diff --git a/src/3rdparty/webkit/WebCore/platform/MIMETypeRegistry.h b/src/3rdparty/webkit/WebCore/platform/MIMETypeRegistry.h
index 8801ac1..27c2c3a 100644
--- a/src/3rdparty/webkit/WebCore/platform/MIMETypeRegistry.h
+++ b/src/3rdparty/webkit/WebCore/platform/MIMETypeRegistry.h
@@ -67,6 +67,10 @@ public:
// Check to see if a mime type is a valid Java applet mime type
static bool isJavaAppletMIMEType(const String& mimeType);
+ // Check to see if a mime type is a plugin implemented by the
+ // browser (e.g. a Qt Plugin).
+ static bool isApplicationPluginMIMEType(const String& mimeType);
+
static HashSet<String>& getSupportedImageMIMETypes();
static HashSet<String>& getSupportedImageResourceMIMETypes();
static HashSet<String>& getSupportedImageMIMETypesForEncoding();
diff --git a/src/3rdparty/webkit/WebCore/platform/StaticConstructors.h b/src/3rdparty/webkit/WebCore/platform/StaticConstructors.h
index c0a9a53..0d817a4df 100644
--- a/src/3rdparty/webkit/WebCore/platform/StaticConstructors.h
+++ b/src/3rdparty/webkit/WebCore/platform/StaticConstructors.h
@@ -51,7 +51,7 @@
#ifndef SKIP_STATIC_CONSTRUCTORS_ON_GCC
// Define an global in the normal way.
-#if COMPILER(MSVC7)
+#if COMPILER(MSVC7_OR_LOWER)
#define DEFINE_GLOBAL(type, name) \
const type name;
#elif COMPILER(WINSCW)
@@ -65,7 +65,7 @@
#else
// Define an correctly-sized array of pointers to avoid static initialization.
// Use an array of pointers instead of an array of char in case there is some alignment issue.
-#if COMPILER(MSVC7)
+#if COMPILER(MSVC7_OR_LOWER)
#define DEFINE_GLOBAL(type, name) \
void * name[(sizeof(type) + sizeof(void *) - 1) / sizeof(void *)];
#elif COMPILER(WINSCW)
diff --git a/src/3rdparty/webkit/WebCore/platform/graphics/MediaPlayer.cpp b/src/3rdparty/webkit/WebCore/platform/graphics/MediaPlayer.cpp
index 1fdc1e5..035d1c5 100644
--- a/src/3rdparty/webkit/WebCore/platform/graphics/MediaPlayer.cpp
+++ b/src/3rdparty/webkit/WebCore/platform/graphics/MediaPlayer.cpp
@@ -50,7 +50,8 @@
#elif PLATFORM(GTK)
#include "MediaPlayerPrivateGStreamer.h"
#elif PLATFORM(QT)
-#if QT_VERSION < 0x040700
+// QtMultimedia support is disabled currently.
+#if 1 || (QT_VERSION < 0x040700)
#include "MediaPlayerPrivatePhonon.h"
#else
#include "MediaPlayerPrivateQt.h"
diff --git a/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontPlatformDataQt.cpp b/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontPlatformDataQt.cpp
index 0a1075f..0565deb 100644
--- a/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontPlatformDataQt.cpp
+++ b/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontPlatformDataQt.cpp
@@ -58,6 +58,9 @@ FontPlatformData::FontPlatformData(const FontDescription& description, const Ato
font.setLetterSpacing(QFont::AbsoluteSpacing, letterSpacing);
const bool smallCaps = description.smallCaps();
font.setCapitalization(smallCaps ? QFont::SmallCaps : QFont::MixedCase);
+#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0)
+ font.setStyleStrategy(QFont::ForceIntegerMetrics);
+#endif
m_data->bold = font.bold();
m_data->size = font.pointSizeF();
diff --git a/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontQt.cpp b/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontQt.cpp
index fd75e34..1e92dcc 100644
--- a/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontQt.cpp
+++ b/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontQt.cpp
@@ -180,9 +180,7 @@ float Font::floatWidthForComplexText(const TextRun& run, HashSet<const SimpleFon
String sanitized = Font::normalizeSpaces(String(run.characters(), run.length()));
QString string = fromRawDataWithoutRef(sanitized);
- QTextLayout layout(string, font());
- QTextLine line = setupLayout(&layout, run);
- int w = int(line.naturalTextWidth());
+ int w = QFontMetrics(font()).width(string);
// WebKit expects us to ignore word spacing on the first character (as opposed to what Qt does)
if (treatAsSpace(run[0]))
w -= m_wordSpacing;
diff --git a/src/3rdparty/webkit/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp b/src/3rdparty/webkit/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp
index 2913eef..1c4c275 100644
--- a/src/3rdparty/webkit/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp
+++ b/src/3rdparty/webkit/WebCore/platform/graphics/qt/GraphicsLayerQt.cpp
@@ -32,15 +32,13 @@
#include <QtCore/qmetaobject.h>
#include <QtCore/qset.h>
#include <QtCore/qtimer.h>
-#include <QtGui/qbitmap.h>
#include <QtGui/qcolor.h>
#include <QtGui/qgraphicseffect.h>
#include <QtGui/qgraphicsitem.h>
#include <QtGui/qgraphicsscene.h>
-#include <QtGui/qmatrix4x4.h>
#include <QtGui/qpainter.h>
-#include <QtGui/qpalette.h>
#include <QtGui/qpixmap.h>
+#include <QtGui/qpixmapcache.h>
#include <QtGui/qstyleoption.h>
namespace WebCore {
@@ -134,6 +132,8 @@ public:
// the compositor lets us special-case images and colors, so we try to do so
enum StaticContentType { HTMLContentType, PixmapContentType, ColorContentType, MediaContentType};
+ const GraphicsLayerQtImpl* rootLayer() const;
+
GraphicsLayerQtImpl(GraphicsLayerQt* newLayer);
virtual ~GraphicsLayerQtImpl();
@@ -142,28 +142,25 @@ public:
virtual QRectF boundingRect() const;
virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget*);
- // we manage transforms ourselves because transform-origin acts differently in webkit and in Qt
+ // We manage transforms ourselves because transform-origin acts differently in webkit and in Qt, and we need it as a fallback in case we encounter an un-invertible matrix
void setBaseTransform(const TransformationMatrix&);
- QTransform computeTransform(const TransformationMatrix& baseTransform) const;
void updateTransform();
// let the compositor-API tell us which properties were changed
void notifyChange(ChangeMask);
+ // actual rendering of the web-content into a QPixmap
+ // We prefer to use our own caching because it gives us a higher level of granularity than QGraphicsItem cache modes -
+ // sometimes we need to cache the contents even `though the item needs to be updated, e.g. when the background-color is changed.
+ // TODO: investigate if QGraphicsItem caching can be improved to support that out of the box.
+ QPixmap recache(const QRegion&);
+
// called when the compositor is ready for us to show the changes on screen
// this is called indirectly from ChromeClientQt::setNeedsOneShotDrawingSynchronization
// (meaning the sync would happen together with the next draw)
// or ChromeClientQt::scheduleCompositingLayerSync (meaning the sync will happen ASAP)
void flushChanges(bool recursive = true, bool forceTransformUpdate = false);
- // optimization: when we have an animation running on an element with no contents, that has child-elements with contents,
- // ALL of them have to have ItemCoordinateCache and not DeviceCoordinateCache
- void adjustCachingRecursively(bool animationIsRunning);
-
- // optimization: returns true if this or an ancestor has a transform animation running.
- // this enables us to use ItemCoordinatesCache while the animation is running, otherwise we have to recache for every frame
- bool isTransformAnimationRunning() const;
-
public slots:
// we need to notify the client (aka the layer compositor) when the animation actually starts
void notifyAnimationStarted();
@@ -179,6 +176,7 @@ public:
GraphicsLayerQt* m_layer;
TransformationMatrix m_baseTransform;
+ TransformationMatrix m_transformRelativeToRootLayer;
bool m_transformAnimationRunning;
bool m_opacityAnimationRunning;
QWeakPointer<MaskEffectQt> m_maskEffect;
@@ -207,6 +205,7 @@ public:
int m_changeMask;
QSizeF m_size;
+ QPixmapCache::Key m_backingStoreKey;
#ifndef QT_NO_ANIMATION
QList<QWeakPointer<QAbstractAnimation> > m_animations;
#endif
@@ -259,9 +258,6 @@ GraphicsLayerQtImpl::GraphicsLayerQtImpl(GraphicsLayerQt* newLayer)
// they are ignored and passed to the item below.
setEnabled(true);
- // we'll set the cache when we know what's going on
- setCacheMode(NoCache);
-
connect(this, SIGNAL(notifyAnimationStartedAsync()), this, SLOT(notifyAnimationStarted()), Qt::QueuedConnection);
}
@@ -287,80 +283,138 @@ GraphicsLayerQtImpl::~GraphicsLayerQtImpl()
#endif
}
-void GraphicsLayerQtImpl::adjustCachingRecursively(bool animationIsRunning)
+const GraphicsLayerQtImpl* GraphicsLayerQtImpl::rootLayer() const
{
- // optimization: we make sure all our children have ItemCoordinateCache -
- // otherwise we end up re-rendering them during the animation
- const QList<QGraphicsItem*> children = childItems();
-
- for (QList<QGraphicsItem*>::const_iterator it = children.begin(); it != children.end(); ++it) {
- if (QGraphicsItem* item = *it)
- if (GraphicsLayerQtImpl* layer = qobject_cast<GraphicsLayerQtImpl*>(item->toGraphicsObject())) {
- if (layer->m_layer->drawsContent() && layer->m_currentContent.contentType == HTMLContentType)
- layer->setCacheMode(animationIsRunning ? QGraphicsItem::ItemCoordinateCache : QGraphicsItem::DeviceCoordinateCache);
- }
- }
+ if (const GraphicsLayerQtImpl* parent = qobject_cast<const GraphicsLayerQtImpl*>(parentObject()))
+ return parent->rootLayer();
+ return this;
}
-void GraphicsLayerQtImpl::updateTransform()
-{
- setBaseTransform(isTransformAnimationRunning() ? m_baseTransform : m_layer->transform());
-}
-void GraphicsLayerQtImpl::setBaseTransform(const TransformationMatrix& baseTransform)
-{
- m_baseTransform = baseTransform;
- setTransform(computeTransform(baseTransform));
-}
-QTransform GraphicsLayerQtImpl::computeTransform(const TransformationMatrix& baseTransform) const
+QPixmap GraphicsLayerQtImpl::recache(const QRegion& regionToUpdate)
{
- if (!m_layer)
- return baseTransform;
+ if (!m_layer->drawsContent())
+ return QPixmap();
- TransformationMatrix computedTransform;
+ QRegion region = regionToUpdate;
+ QPixmap pixmap;
- // The origin for childrenTransform is always the center of the ancestor which contains the childrenTransform.
- // this has to do with how WebCore implements -webkit-perspective and -webkit-perspective-origin, which are the CSS
- // attribute that call setChildrenTransform
- QPointF offset = -pos() - boundingRect().bottomRight() / 2;
+ // We might be drawing into an existing cache.
+ if (!QPixmapCache::find(m_backingStoreKey, &pixmap))
+ region = QRegion(QRect(0, 0, m_size.width(), m_size.height()));
- for (const GraphicsLayerQtImpl* ancestor = this; (ancestor = qobject_cast<GraphicsLayerQtImpl*>(ancestor->parentObject())); ) {
- if (!ancestor->m_state.childrenTransform.isIdentity()) {
- const QPointF offset = mapFromItem(ancestor, QPointF(ancestor->m_size.width() / 2, ancestor->m_size.height() / 2));
- computedTransform
- .translate(offset.x(), offset.y())
- .multLeft(ancestor->m_state.childrenTransform)
- .translate(-offset.x(), -offset.y());
- break;
- }
+ if (m_size != pixmap.size()) {
+ pixmap = QPixmap(m_size.toSize());
+ if (!m_layer->contentsOpaque())
+ pixmap.fill(Qt::transparent);
+ m_pendingContent.regionToUpdate = QRegion(QRect(QPoint(0, 0), m_size.toSize()));
}
+ QPainter painter(&pixmap);
+ GraphicsContext gc(&painter);
+
+ // Clear the area in cache that we're drawing into
+ painter.setCompositionMode(QPainter::CompositionMode_Clear);
+ painter.fillRect(region.boundingRect(), Qt::transparent);
+
+ // Render the actual contents into the cache
+ painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
+ m_layer->paintGraphicsLayerContents(gc, region.boundingRect());
+
+ m_backingStoreKey = QPixmapCache::insert(pixmap);
+ return pixmap;
+}
+
+void GraphicsLayerQtImpl::updateTransform()
+{
+ if (!m_transformAnimationRunning)
+ m_baseTransform = m_layer->transform();
+
+ TransformationMatrix localTransform;
+
+ GraphicsLayerQtImpl* parent = qobject_cast<GraphicsLayerQtImpl*>(parentObject());
+
// webkit has relative-to-size originPoint, graphics-view has a pixel originPoint, here we convert
// we have to manage this ourselves because QGraphicsView's transformOrigin is incompatible
const qreal originX = m_state.anchorPoint.x() * m_size.width();
const qreal originY = m_state.anchorPoint.y() * m_size.height();
- computedTransform
- .translate3d(originX, originY, m_state.anchorPoint.z())
- .multLeft(baseTransform)
+
+ // We ignore QGraphicsItem::pos completely, and use only transforms - because we have to maintain that ourselves for 3D.
+ localTransform
+ .translate3d(originX + m_state.pos.x(), originY + m_state.pos.y(), m_state.anchorPoint.z())
+ .multLeft(m_baseTransform)
.translate3d(-originX, -originY, -m_state.anchorPoint.z());
- // now we project to 2D
- return QTransform(computedTransform);
+ // This is the actual 3D transform of this item, with the ancestors' transform baked in.
+ m_transformRelativeToRootLayer = TransformationMatrix(parent ? parent->m_transformRelativeToRootLayer : TransformationMatrix())
+ .multLeft(localTransform);
+
+ // Now we have enough information to determine if the layer is facing backwards.
+ if (!m_state.backfaceVisibility && m_transformRelativeToRootLayer.inverse().m33() < 0) {
+ setVisible(false);
+ // No point in making extra calculations for invisible elements.
+ return;
+ }
+
+ // Simplistic depth test - we stack the item behind its parent if its computed z is lower than the parent's computed z at the item's center point.
+ if (parent) {
+ const QPointF centerPointMappedToRoot = rootLayer()->mapFromItem(this, m_size.width() / 2, m_size.height() / 2);
+ setFlag(ItemStacksBehindParent,
+ m_transformRelativeToRootLayer.mapPoint(FloatPoint3D(centerPointMappedToRoot.x(), centerPointMappedToRoot.y(), 0)).z() <
+ parent->m_transformRelativeToRootLayer.mapPoint(FloatPoint3D(centerPointMappedToRoot.x(), centerPointMappedToRoot.y(), 0)).z());
+ }
+
+ // The item is front-facing or backface-visibility is on.
+ setVisible(true);
+
+ // Flatten to 2D-space of this item if it doesn't preserve 3D.
+ if (!m_state.preserves3D) {
+ m_transformRelativeToRootLayer.setM13(0);
+ m_transformRelativeToRootLayer.setM23(0);
+ m_transformRelativeToRootLayer.setM31(0);
+ m_transformRelativeToRootLayer.setM32(0);
+ m_transformRelativeToRootLayer.setM33(1);
+ m_transformRelativeToRootLayer.setM34(0);
+ m_transformRelativeToRootLayer.setM43(0);
+ }
+
+ // Apply perspective for the use of this item's children. Perspective is always applied from the item's center.
+ if (!m_state.childrenTransform.isIdentity())
+ m_transformRelativeToRootLayer
+ .translate(m_size.width() / 2, m_size.height() /2)
+ .multLeft(m_state.childrenTransform)
+ .translate(-m_size.width() / 2, -m_size.height() /2);
+
+ bool inverseOk = true;
+ // Use QTransform::inverse to extrapolate the relative transform of this item, based on the parent's transform relative to
+ // the root layer and the desired transform for this item relative to the root layer.
+ const QTransform parentTransform = parent ? parent->itemTransform(rootLayer()) : QTransform();
+ const QTransform transform2D = QTransform(m_transformRelativeToRootLayer) * parentTransform.inverted(&inverseOk);
+
+ // In rare cases the transformation cannot be inversed - in that case we don't apply the transformation at all, otherwise we'd flicker.
+ // FIXME: This should be amended when Qt moves to a real 3D scene-graph.
+ if (!inverseOk)
+ return;
+
+ setTransform(transform2D);
+
+ const QList<QGraphicsItem*> children = childItems();
+ for (QList<QGraphicsItem*>::const_iterator it = children.begin(); it != children.end(); ++it)
+ if (GraphicsLayerQtImpl* layer= qobject_cast<GraphicsLayerQtImpl*>((*it)->toGraphicsObject()))
+ layer->updateTransform();
}
-bool GraphicsLayerQtImpl::isTransformAnimationRunning() const
+void GraphicsLayerQtImpl::setBaseTransform(const TransformationMatrix& baseTransform)
{
- if (m_transformAnimationRunning)
- return true;
- if (GraphicsLayerQtImpl* parent = qobject_cast<GraphicsLayerQtImpl*>(parentObject()))
- return parent->isTransformAnimationRunning();
- return false;
+ m_baseTransform = baseTransform;
+ updateTransform();
}
QPainterPath GraphicsLayerQtImpl::opaqueArea() const
{
QPainterPath painterPath;
+
// we try out best to return the opaque area, maybe it will help graphics-view render less items
if (m_currentContent.backgroundColor.isValid() && m_currentContent.backgroundColor.alpha() == 0xff)
painterPath.addRect(boundingRect());
@@ -384,14 +438,16 @@ QRectF GraphicsLayerQtImpl::boundingRect() const
void GraphicsLayerQtImpl::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{
if (m_currentContent.backgroundColor.isValid())
- painter->fillRect(option->exposedRect, QColor(m_currentContent.backgroundColor));
+ painter->fillRect(option->rect, QColor(m_currentContent.backgroundColor));
switch (m_currentContent.contentType) {
case HTMLContentType:
if (m_state.drawsContent) {
- // this is the expensive bit. we try to minimize calls to this area by proper caching
- GraphicsContext gc(painter);
- m_layer->paintGraphicsLayerContents(gc, option->exposedRect.toAlignedRect());
+ QPixmap backingStore;
+ // We might need to recache, in case we try to paint and the cache was purged (e.g. if it was full).
+ if (!QPixmapCache::find(m_backingStoreKey, &backingStore) || backingStore.size() != m_size.toSize())
+ backingStore = recache(QRegion(m_state.contentsRect));
+ painter->drawPixmap(0, 0, backingStore);
}
break;
case PixmapContentType:
@@ -471,15 +527,11 @@ void GraphicsLayerQtImpl::flushChanges(bool recursive, bool forceUpdateTransform
if (m_layer->maskLayer()) {
if (GraphicsLayerQtImpl* mask = qobject_cast<GraphicsLayerQtImpl*>(m_layer->maskLayer()->platformLayer()->toGraphicsObject())) {
mask->m_maskEffect = new MaskEffectQt(this, mask);
- mask->setCacheMode(NoCache);
setGraphicsEffect(mask->m_maskEffect.data());
}
}
}
- if ((m_changeMask & PositionChange) && (m_layer->position() != m_state.pos))
- setPos(m_layer->position().x(), m_layer->position().y());
-
if (m_changeMask & SizeChange) {
if (m_layer->size() != m_state.size) {
prepareGeometryChange();
@@ -489,9 +541,10 @@ void GraphicsLayerQtImpl::flushChanges(bool recursive, bool forceUpdateTransform
// FIXME: this is a hack, due to a probable QGraphicsScene bug when rapidly modifying the perspective
// but without this line we get graphic artifacts
if ((m_changeMask & ChildrenTransformChange) && m_state.childrenTransform != m_layer->childrenTransform())
- scene()->update();
+ if (scene())
+ scene()->update();
- if (m_changeMask & (ChildrenTransformChange | Preserves3DChange | TransformChange | AnchorPointChange | SizeChange)) {
+ if (m_changeMask & (ChildrenTransformChange | Preserves3DChange | TransformChange | AnchorPointChange | SizeChange | BackfaceVisibilityChange | PositionChange)) {
// due to the differences between the way WebCore handles transforms and the way Qt handles transforms,
// all these elements affect the transforms of all the descendants.
forceUpdateTransform = true;
@@ -510,8 +563,6 @@ void GraphicsLayerQtImpl::flushChanges(bool recursive, bool forceUpdateTransform
break;
case ColorContentType:
- // no point in caching a solid-color rectangle
- setCacheMode(m_layer->maskLayer() ? QGraphicsItem::DeviceCoordinateCache : QGraphicsItem::NoCache);
if (m_pendingContent.contentType != m_currentContent.contentType || m_pendingContent.contentsBackgroundColor != m_currentContent.contentsBackgroundColor)
update();
m_state.drawsContent = false;
@@ -526,14 +577,6 @@ void GraphicsLayerQtImpl::flushChanges(bool recursive, bool forceUpdateTransform
update();
if (!m_state.drawsContent && m_layer->drawsContent())
update();
- if (m_layer->drawsContent() && !m_maskEffect) {
- setCacheMode(isTransformAnimationRunning() ? ItemCoordinateCache : DeviceCoordinateCache);
-
- // HTML content: we want to use exposedRect so we don't use WebCore rendering if we don't have to
- setFlag(QGraphicsItem::ItemUsesExtendedStyleOption, true);
- }
- else
- setCacheMode(NoCache);
setFlag(ItemHasNoContents, !m_layer->drawsContent());
break;
@@ -563,15 +606,16 @@ void GraphicsLayerQtImpl::flushChanges(bool recursive, bool forceUpdateTransform
if (m_maskEffect)
m_maskEffect.data()->update();
- else if (m_changeMask & DisplayChange)
+ else if (m_changeMask & DisplayChange) {
+ // Recache now: all the content is ready and we don't want to wait until the paint event.
+ recache(m_pendingContent.regionToUpdate);
update(m_pendingContent.regionToUpdate.boundingRect());
+ m_pendingContent.regionToUpdate = QRegion();
+ }
if ((m_changeMask & BackgroundColorChange) && (m_pendingContent.backgroundColor != m_currentContent.backgroundColor))
update();
- // FIXME: the following flags are currently not handled, as they don't have a clear test or are in low priority
- // GeometryOrientationChange, ContentsOrientationChange, BackfaceVisibilityChange, ChildrenTransformChange, Preserves3DChange
-
m_state.maskLayer = m_layer->maskLayer();
m_state.pos = m_layer->position();
m_state.anchorPoint = m_layer->anchorPoint();
@@ -591,7 +635,6 @@ void GraphicsLayerQtImpl::flushChanges(bool recursive, bool forceUpdateTransform
m_currentContent.contentType = m_pendingContent.contentType;
m_currentContent.mediaLayer = m_pendingContent.mediaLayer;
m_currentContent.backgroundColor = m_pendingContent.backgroundColor;
- m_currentContent.regionToUpdate |= m_pendingContent.regionToUpdate;
m_currentContent.contentsBackgroundColor = m_pendingContent.contentsBackgroundColor;
m_pendingContent.regionToUpdate = QRegion();
m_changeMask = NoChanges;
@@ -1014,6 +1057,7 @@ public:
, m_webkitPropertyID(values.property())
, m_webkitAnimation(anim)
, m_keyframesName(name)
+ , m_fillsForwards(false)
{
}
@@ -1037,6 +1081,7 @@ public:
// we might need this in case the same animation is added again (i.e. resumed by WebCore)
const Animation* m_webkitAnimation;
QString m_keyframesName;
+ bool m_fillsForwards;
};
// we'd rather have a templatized QAbstractAnimation than QPropertyAnimation / QVariantAnimation;
@@ -1121,10 +1166,8 @@ public:
~TransformAnimationQt()
{
- // this came up during the compositing/animation LayoutTests
- // when the animation dies, the transform has to go back to default
- if (m_layer)
- m_layer.data()->updateTransform();
+ if (m_fillsForwards)
+ setCurrentTime(1);
}
// the idea is that we let WebCore manage the transform-operations
@@ -1135,34 +1178,28 @@ public:
{
TransformationMatrix transformMatrix;
- // sometimes the animation values from WebCore are misleading and we have to use the actual matrix as source
- // The Mac implementation simply doesn't try to accelerate those (e.g. 360deg rotation), but we do.
- if (progress == 1 || !targetOperations.size() || sourceOperations == targetOperations) {
- TransformationMatrix sourceMatrix;
- sourceOperations.apply(m_boxSize, sourceMatrix);
- transformMatrix = m_sourceMatrix;
- transformMatrix.blend(sourceMatrix, 1 - progress);
- } else {
- bool validTransformLists = true;
- const int sourceOperationCount = sourceOperations.size();
- if (sourceOperationCount) {
- if (targetOperations.size() != sourceOperationCount)
- validTransformLists = false;
- else
- for (size_t j = 0; j < sourceOperationCount && validTransformLists; ++j)
- if (!sourceOperations.operations()[j]->isSameType(*targetOperations.operations()[j]))
- validTransformLists = false;
- }
+ bool validTransformLists = true;
+ const int sourceOperationCount = sourceOperations.size();
+ if (sourceOperationCount) {
+ if (targetOperations.size() != sourceOperationCount)
+ validTransformLists = false;
+ else
+ for (size_t j = 0; j < sourceOperationCount && validTransformLists; ++j)
+ if (!sourceOperations.operations()[j]->isSameType(*targetOperations.operations()[j]))
+ validTransformLists = false;
+ }
- if (validTransformLists) {
- for (size_t i = 0; i < targetOperations.size(); ++i)
- targetOperations.operations()[i]->blend(sourceOperations.at(i), progress)->apply(transformMatrix, m_boxSize);
- } else {
- targetOperations.apply(m_boxSize, transformMatrix);
- transformMatrix.blend(m_sourceMatrix, progress);
- }
+ if (validTransformLists) {
+ for (size_t i = 0; i < targetOperations.size(); ++i)
+ targetOperations.operations()[i]->blend(sourceOperations.at(i), progress)->apply(transformMatrix, m_boxSize);
+ } else {
+ targetOperations.apply(m_boxSize, transformMatrix);
+ transformMatrix.blend(m_sourceMatrix, progress);
}
+
m_layer.data()->setBaseTransform(transformMatrix);
+ if (m_fillsForwards)
+ m_layer.data()->m_layer->setTransform(m_layer.data()->m_baseTransform);
}
virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)
@@ -1177,10 +1214,11 @@ public:
if (newState == QAbstractAnimation::Running) {
m_sourceMatrix = m_layer.data()->m_layer->transform();
m_layer.data()->m_transformAnimationRunning = true;
- m_layer.data()->adjustCachingRecursively(true);
} else if (newState == QAbstractAnimation::Stopped) {
+ // We update the transform back to the default. This already takes fill-modes into account.
m_layer.data()->m_transformAnimationRunning = false;
- m_layer.data()->adjustCachingRecursively(false);
+ if (m_layer && m_layer.data()->m_layer)
+ m_layer.data()->setBaseTransform(m_layer.data()->m_layer->transform());
}
}
@@ -1194,6 +1232,11 @@ public:
{
}
+ ~OpacityAnimationQt()
+ {
+ if (m_fillsForwards)
+ setCurrentTime(1);
+ }
virtual void applyFrame(const qreal& fromValue, const qreal& toValue, qreal progress)
{
qreal opacity = qBound(qreal(0), fromValue + (toValue-fromValue)*progress, qreal(1));
@@ -1204,6 +1247,8 @@ public:
m_layer.data()->scene()->update();
m_layer.data()->setOpacity(opacity);
+ if (m_fillsForwards)
+ m_layer.data()->m_layer->setOpacity(opacity);
}
virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)
@@ -1212,6 +1257,12 @@ public:
if (m_layer)
m_layer.data()->m_opacityAnimationRunning = (newState == QAbstractAnimation::Running);
+
+ // If stopped, we update the opacity back to the default. This already takes fill-modes into account.
+ if (newState == Stopped)
+ if (m_layer && m_layer.data()->m_layer)
+ m_layer.data()->setOpacity(m_layer.data()->m_layer->opacity());
+
}
};
@@ -1220,7 +1271,7 @@ bool GraphicsLayerQt::addAnimation(const KeyframeValueList& values, const IntSiz
if (!anim->duration() || !anim->iterationCount())
return false;
- QAbstractAnimation* newAnim = 0;
+ AnimationQtBase* newAnim = 0;
// fixed: we might already have the Qt animation object associated with this WebCore::Animation object
for (QList<QWeakPointer<QAbstractAnimation> >::iterator it = m_impl->m_animations.begin(); it != m_impl->m_animations.end(); ++it) {
@@ -1245,6 +1296,7 @@ bool GraphicsLayerQt::addAnimation(const KeyframeValueList& values, const IntSiz
// we make sure WebCore::Animation and QAnimation are on the same terms
newAnim->setLoopCount(anim->iterationCount());
+ newAnim->m_fillsForwards = anim->fillsForwards();
m_impl->m_animations.append(QWeakPointer<QAbstractAnimation>(newAnim));
QObject::connect(&m_impl->m_suspendTimer, SIGNAL(timeout()), newAnim, SLOT(resume()));
}
@@ -1252,6 +1304,10 @@ bool GraphicsLayerQt::addAnimation(const KeyframeValueList& values, const IntSiz
// flush now or flicker...
m_impl->flushChanges(false);
+ // when fill-mode is backwards/both, we set the value to 0 before the delay takes place
+ if (anim->fillsBackwards())
+ newAnim->setCurrentTime(0);
+
if (anim->delay())
QTimer::singleShot(anim->delay() * 1000, newAnim, SLOT(start()));
else
@@ -1272,6 +1328,8 @@ void GraphicsLayerQt::removeAnimationsForProperty(AnimatedPropertyID id)
if (*it) {
AnimationQtBase* anim = static_cast<AnimationQtBase*>(it->data());
if (anim && anim->m_webkitPropertyID == id) {
+ // We need to stop the animation right away, or it might flicker before it's deleted.
+ anim->stop();
anim->deleteLater();
it = m_impl->m_animations.erase(it);
--it;
@@ -1286,7 +1344,9 @@ void GraphicsLayerQt::removeAnimationsForKeyframes(const String& name)
if (*it) {
AnimationQtBase* anim = static_cast<AnimationQtBase*>((*it).data());
if (anim && anim->m_keyframesName == QString(name)) {
- (*it).data()->deleteLater();
+ // We need to stop the animation right away, or it might flicker before it's deleted.
+ anim->stop();
+ anim->deleteLater();
it = m_impl->m_animations.erase(it);
--it;
}
diff --git a/src/3rdparty/webkit/WebCore/platform/graphics/transforms/TransformationMatrix.h b/src/3rdparty/webkit/WebCore/platform/graphics/transforms/TransformationMatrix.h
index cdf101d..96b4baa 100644
--- a/src/3rdparty/webkit/WebCore/platform/graphics/transforms/TransformationMatrix.h
+++ b/src/3rdparty/webkit/WebCore/platform/graphics/transforms/TransformationMatrix.h
@@ -47,7 +47,7 @@
#endif
#if PLATFORM(WIN) || (PLATFORM(QT) && OS(WINDOWS)) || (PLATFORM(WX) && OS(WINDOWS))
-#if COMPILER(MINGW)
+#if COMPILER(MINGW) && !COMPILER(MINGW64)
typedef struct _XFORM XFORM;
#else
typedef struct tagXFORM XFORM;
diff --git a/src/3rdparty/webkit/WebCore/platform/mac/MIMETypeRegistryMac.mm b/src/3rdparty/webkit/WebCore/platform/mac/MIMETypeRegistryMac.mm
index 7d43505..82348e0 100644
--- a/src/3rdparty/webkit/WebCore/platform/mac/MIMETypeRegistryMac.mm
+++ b/src/3rdparty/webkit/WebCore/platform/mac/MIMETypeRegistryMac.mm
@@ -56,4 +56,9 @@ String MIMETypeRegistry::getPreferredExtensionForMIMEType(const String& type)
return wkGetPreferredExtensionForMIMEType(type);
}
+bool MIMETypeRegistry::isApplicationPluginMIMEType(const String&)
+{
+ return false;
+}
+
}
diff --git a/src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp b/src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp
index 4237fca..403718f 100644
--- a/src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp
+++ b/src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp
@@ -41,8 +41,9 @@
// What type of connection should be used for the signals of the
// QNetworkReply? This depends on if Qt has a bugfix for this or not.
-// It is fixed in Qt 4.6.1. See https://bugs.webkit.org/show_bug.cgi?id=32113
-#if QT_VERSION > QT_VERSION_CHECK(4, 6, 0)
+// It is fixed in Qt 4.6.3. See https://bugs.webkit.org/show_bug.cgi?id=32113
+// and https://bugs.webkit.org/show_bug.cgi?id=36755
+#if QT_VERSION > QT_VERSION_CHECK(4, 6, 2)
#define SIGNAL_CONN Qt::DirectConnection
#else
#define SIGNAL_CONN Qt::QueuedConnection
diff --git a/src/3rdparty/webkit/WebCore/platform/network/qt/ResourceRequestQt.cpp b/src/3rdparty/webkit/WebCore/platform/network/qt/ResourceRequestQt.cpp
index 341e6ae..fea64a0 100644
--- a/src/3rdparty/webkit/WebCore/platform/network/qt/ResourceRequestQt.cpp
+++ b/src/3rdparty/webkit/WebCore/platform/network/qt/ResourceRequestQt.cpp
@@ -32,12 +32,14 @@ namespace WebCore {
// To achieve the best result we want WebKit to schedule the jobs so we
// are using the limit as found in Qt. To allow Qt to fill its queue
// and prepare jobs we will schedule two more downloads.
+// Per TCP connection there is 1 current processed, 3 possibly pipelined
+// and 2 ready to re-fill the pipeline.
unsigned initializeMaximumHTTPConnectionCountPerHost()
{
#ifdef Q_OS_SYMBIAN
- return 3 + 2;
+ return 3 * (1 + 3 + 2);
#else
- return 6 + 2;
+ return 6 * (1 + 3 + 2);
#endif
}
diff --git a/src/3rdparty/webkit/WebCore/platform/qt/FileSystemQt.cpp b/src/3rdparty/webkit/WebCore/platform/qt/FileSystemQt.cpp
index 4093fad..f9ced98 100644
--- a/src/3rdparty/webkit/WebCore/platform/qt/FileSystemQt.cpp
+++ b/src/3rdparty/webkit/WebCore/platform/qt/FileSystemQt.cpp
@@ -154,11 +154,12 @@ bool unloadModule(PlatformModule module)
return ::FreeLibrary(module);
#else
+#ifndef QT_NO_LIBRARY
if (module->unload()) {
delete module;
return true;
}
-
+#endif
return false;
#endif
}
diff --git a/src/3rdparty/webkit/WebCore/platform/qt/MIMETypeRegistryQt.cpp b/src/3rdparty/webkit/WebCore/platform/qt/MIMETypeRegistryQt.cpp
index 22cee6f..4161f81 100644
--- a/src/3rdparty/webkit/WebCore/platform/qt/MIMETypeRegistryQt.cpp
+++ b/src/3rdparty/webkit/WebCore/platform/qt/MIMETypeRegistryQt.cpp
@@ -82,4 +82,10 @@ String MIMETypeRegistry::getMIMETypeForExtension(const String &ext)
return "application/octet-stream";
}
+bool MIMETypeRegistry::isApplicationPluginMIMEType(const String& mimeType)
+{
+ return mimeType.startsWith("application/x-qt-plugin", false)
+ || mimeType.startsWith("application/x-qt-styled-widget", false);
+}
+
}
diff --git a/src/3rdparty/webkit/WebCore/platform/qt/QWebPageClient.h b/src/3rdparty/webkit/WebCore/platform/qt/QWebPageClient.h
index f03ff08..467941f 100644
--- a/src/3rdparty/webkit/WebCore/platform/qt/QWebPageClient.h
+++ b/src/3rdparty/webkit/WebCore/platform/qt/QWebPageClient.h
@@ -55,6 +55,7 @@ public:
// if scheduleSync is true, we schedule a sync ourselves. otherwise,
// we wait for the next update and sync the layers then.
virtual void markForSync(bool scheduleSync = false) {}
+ virtual bool allowsAcceleratedCompositing() const { return false; }
#endif
#if QT_VERSION >= 0x040600
diff --git a/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.cpp b/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.cpp
index 0163adc..577903b 100644
--- a/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.cpp
+++ b/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.cpp
@@ -42,7 +42,7 @@
#include "HTMLInputElement.h"
#include "HTMLMediaElement.h"
#include "HTMLNames.h"
-#ifdef Q_WS_MAEMO_5
+#if USE(QT_MOBILE_THEME)
#include "Maemo5Webstyle.h"
#endif
#include "NotImplemented.h"
@@ -153,7 +153,7 @@ RenderThemeQt::RenderThemeQt(Page* page)
m_buttonFontPixelSize = fontInfo.pixelSize();
#endif
-#ifdef Q_WS_MAEMO_5
+#if USE(QT_MOBILE_THEME)
m_fallbackStyle = new Maemo5WebStyle;
#else
m_fallbackStyle = QStyleFactory::create(QLatin1String("windows"));
@@ -166,7 +166,7 @@ RenderThemeQt::~RenderThemeQt()
delete m_lineEdit;
}
-#ifdef Q_WS_MAEMO_5
+#if USE(QT_MOBILE_THEME)
bool RenderThemeQt::isControlStyled(const RenderStyle* style, const BorderData& border, const FillLayer& fill, const Color& backgroundColor) const
{
switch (style->appearance()) {
@@ -198,7 +198,7 @@ QStyle* RenderThemeQt::fallbackStyle() const
QStyle* RenderThemeQt::qStyle() const
{
-#ifdef Q_WS_MAEMO_5
+#if USE(QT_MOBILE_THEME)
return fallbackStyle();
#endif
@@ -218,7 +218,7 @@ String RenderThemeQt::extraDefaultStyleSheet()
#if ENABLE(NO_LISTBOX_RENDERING)
result += String(themeQtNoListboxesUserAgentStyleSheet, sizeof(themeQtNoListboxesUserAgentStyleSheet));
#endif
-#ifdef Q_WS_MAEMO_5
+#if USE(QT_MOBILE_THEME)
result += String(themeQtMaemo5UserAgentStyleSheet, sizeof(themeQtMaemo5UserAgentStyleSheet));
#endif
return result;
@@ -648,7 +648,9 @@ bool RenderThemeQt::paintMenuList(RenderObject* o, const RenderObject::PaintInfo
void RenderThemeQt::adjustMenuListButtonStyle(CSSStyleSelector*, RenderStyle* style, Element*) const
{
-#ifndef Q_WS_MAEMO_5
+#if USE(QT_MOBILE_THEME)
+ // Mobile theme uses border radius.
+#else
// WORKAROUND because html.css specifies -webkit-border-radius for <select> so we override it here
// see also http://bugs.webkit.org/show_bug.cgi?id=18399
style->resetBorderRadius();
@@ -870,7 +872,7 @@ bool RenderThemeQt::supportsFocus(ControlPart appearance) const
void RenderThemeQt::setPaletteFromPageClientIfExists(QPalette& palette) const
{
-#ifdef Q_WS_MAEMO_5
+#if USE(QT_MOBILE_THEME)
static QPalette lightGrayPalette(Qt::lightGray);
palette = lightGrayPalette;
return;
@@ -932,7 +934,7 @@ ControlPart RenderThemeQt::initializeCommonQStyleOptions(QStyleOption& option, R
case SearchFieldCancelButtonPart: {
if (isPressed(o))
option.state |= QStyle::State_Sunken;
- else if (result == PushButtonPart)
+ else if (result == PushButtonPart || result == ButtonPart)
option.state |= QStyle::State_Raised;
break;
}
diff --git a/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.h b/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.h
index b16918a..591dd27 100644
--- a/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.h
+++ b/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.h
@@ -75,7 +75,7 @@ public:
virtual double caretBlinkInterval() const;
-#ifdef Q_WS_MAEMO_5
+#if USE(QT_MOBILE_THEME)
virtual bool isControlStyled(const RenderStyle*, const BorderData&, const FillLayer&, const Color& backgroundColor) const;
virtual int popupInternalPaddingBottom(RenderStyle*) const;
#endif
diff --git a/src/3rdparty/webkit/WebCore/platform/qt/SharedTimerQt.cpp b/src/3rdparty/webkit/WebCore/platform/qt/SharedTimerQt.cpp
index e9bcaee..7c0fd05 100644
--- a/src/3rdparty/webkit/WebCore/platform/qt/SharedTimerQt.cpp
+++ b/src/3rdparty/webkit/WebCore/platform/qt/SharedTimerQt.cpp
@@ -40,6 +40,8 @@
namespace WebCore {
class SharedTimerQt : public QObject {
+ Q_OBJECT
+
friend void setSharedTimerFiredFunction(void (*f)());
public:
static SharedTimerQt* inst();
@@ -50,15 +52,18 @@ public:
protected:
void timerEvent(QTimerEvent* ev);
+private slots:
+ void destroy();
+
private:
- SharedTimerQt(QObject* parent);
+ SharedTimerQt();
~SharedTimerQt();
QBasicTimer m_timer;
void (*m_timerFunction)();
};
-SharedTimerQt::SharedTimerQt(QObject* parent)
- : QObject(parent)
+SharedTimerQt::SharedTimerQt()
+ : QObject()
, m_timerFunction(0)
{}
@@ -68,11 +73,18 @@ SharedTimerQt::~SharedTimerQt()
(m_timerFunction)();
}
+void SharedTimerQt::destroy()
+{
+ delete this;
+}
+
SharedTimerQt* SharedTimerQt::inst()
{
static QPointer<SharedTimerQt> timer;
- if (!timer)
- timer = new SharedTimerQt(QCoreApplication::instance());
+ if (!timer) {
+ timer = new SharedTimerQt();
+ timer->connect(QCoreApplication::instance(), SIGNAL(aboutToQuit()), SLOT(destroy()));
+ }
return timer;
}
@@ -129,6 +141,8 @@ void stopSharedTimer()
SharedTimerQt::inst()->stop();
}
+#include "SharedTimerQt.moc"
+
}
// vim: ts=4 sw=4 et
diff --git a/src/3rdparty/webkit/WebCore/platform/text/TextStream.cpp b/src/3rdparty/webkit/WebCore/platform/text/TextStream.cpp
index ab73891..eed17a5 100644
--- a/src/3rdparty/webkit/WebCore/platform/text/TextStream.cpp
+++ b/src/3rdparty/webkit/WebCore/platform/text/TextStream.cpp
@@ -108,7 +108,7 @@ String TextStream::release()
return String::adopt(m_text);
}
-#if OS(WINDOWS) && CPU(X86_64) && COMPILER(MSVC)
+#if OS(WINDOWS) && CPU(X86_64)
TextStream& TextStream::operator<<(__int64 i)
{
char buffer[printBufferSize];
diff --git a/src/3rdparty/webkit/WebCore/platform/text/TextStream.h b/src/3rdparty/webkit/WebCore/platform/text/TextStream.h
index 1225505..522da53 100644
--- a/src/3rdparty/webkit/WebCore/platform/text/TextStream.h
+++ b/src/3rdparty/webkit/WebCore/platform/text/TextStream.h
@@ -45,7 +45,7 @@ public:
TextStream& operator<<(const char*);
TextStream& operator<<(void*);
TextStream& operator<<(const String&);
-#if OS(WINDOWS) && CPU(X86_64) && COMPILER(MSVC)
+#if OS(WINDOWS) && CPU(X86_64)
TextStream& operator<<(unsigned __int64);
TextStream& operator<<(__int64);
#endif
diff --git a/src/3rdparty/webkit/WebCore/plugins/PluginView.cpp b/src/3rdparty/webkit/WebCore/plugins/PluginView.cpp
index 38acdd9..df9a29b 100644
--- a/src/3rdparty/webkit/WebCore/plugins/PluginView.cpp
+++ b/src/3rdparty/webkit/WebCore/plugins/PluginView.cpp
@@ -345,7 +345,7 @@ void PluginView::stop()
WNDPROC currentWndProc = (WNDPROC)GetWindowLongPtr(platformPluginWidget(), GWLP_WNDPROC);
if (currentWndProc == PluginViewWndProc)
- SetWindowLongPtr(platformPluginWidget(), GWLP_WNDPROC, (LONG)m_pluginWndProc);
+ SetWindowLongPtr(platformPluginWidget(), GWLP_WNDPROC, (LONG_PTR)m_pluginWndProc);
#endif
}
#endif // XP_WIN
@@ -1296,9 +1296,7 @@ void PluginView::keepAlive(NPP instance)
view->keepAlive();
}
-#endif
-#if ENABLE(NETSCAPE_PLUGIN_API)
NPError PluginView::getValueStatic(NPNVariable variable, void* value)
{
LOG(Plugins, "PluginView::getValueStatic(%s)", prettyNameForNPNVariable(variable).data());
@@ -1309,7 +1307,6 @@ NPError PluginView::getValueStatic(NPNVariable variable, void* value)
return NPERR_GENERIC_ERROR;
}
-#endif
NPError PluginView::getValue(NPNVariable variable, void* value)
{
@@ -1319,13 +1316,10 @@ NPError PluginView::getValue(NPNVariable variable, void* value)
if (platformGetValue(variable, value, &result))
return result;
-#if ENABLE(NETSCAPE_PLUGIN_API)
if (platformGetValueStatic(variable, value, &result))
return result;
-#endif
switch (variable) {
-#if ENABLE(NETSCAPE_PLUGIN_API)
case NPNVWindowNPObject: {
if (m_isJavaScriptPaused)
return NPERR_GENERIC_ERROR;
@@ -1360,7 +1354,6 @@ NPError PluginView::getValue(NPNVariable variable, void* value)
return NPERR_NO_ERROR;
}
-#endif
case NPNVprivateModeBool: {
Page* page = m_parentFrame->page();
@@ -1374,6 +1367,7 @@ NPError PluginView::getValue(NPNVariable variable, void* value)
return NPERR_GENERIC_ERROR;
}
}
+#endif
void PluginView::privateBrowsingStateChanged(bool privateBrowsingEnabled)
{
diff --git a/src/3rdparty/webkit/WebCore/plugins/PluginView.h b/src/3rdparty/webkit/WebCore/plugins/PluginView.h
index 21a25f6..51b2127 100644
--- a/src/3rdparty/webkit/WebCore/plugins/PluginView.h
+++ b/src/3rdparty/webkit/WebCore/plugins/PluginView.h
@@ -139,8 +139,9 @@ namespace WebCore {
static const char* userAgentStatic();
#endif
void status(const char* message);
- NPError getValue(NPNVariable variable, void* value);
+
#if ENABLE(NETSCAPE_PLUGIN_API)
+ NPError getValue(NPNVariable variable, void* value);
static NPError getValueStatic(NPNVariable variable, void* value);
#endif
NPError setValue(NPPVariable variable, void* value);
diff --git a/src/3rdparty/webkit/WebCore/plugins/PluginViewNone.cpp b/src/3rdparty/webkit/WebCore/plugins/PluginViewNone.cpp
index ed5ad1b..bd51a98 100644
--- a/src/3rdparty/webkit/WebCore/plugins/PluginViewNone.cpp
+++ b/src/3rdparty/webkit/WebCore/plugins/PluginViewNone.cpp
@@ -67,12 +67,12 @@ NPError PluginView::handlePostReadFile(Vector<char>&, uint32, const char*)
return 0;
}
+#if ENABLE(NETSCAPE_PLUGIN_API)
bool PluginView::platformGetValue(NPNVariable, void*, NPError*)
{
return false;
}
-#if ENABLE(NETSCAPE_PLUGIN_API)
bool PluginView::platformGetValueStatic(NPNVariable, void*, NPError*)
{
return false;
@@ -126,4 +126,14 @@ void PluginView::keepAlive(NPP)
}
#endif
+#if PLATFORM(MAC) || PLATFORM(CHROMIUM) || PLATFORM(EFL)
+void PluginView::privateBrowsingStateChanged(bool)
+{
+}
+
+void PluginView::setJavaScriptPaused(bool)
+{
+}
+#endif
+
} // namespace WebCore
diff --git a/src/3rdparty/webkit/WebCore/plugins/symbian/PluginViewSymbian.cpp b/src/3rdparty/webkit/WebCore/plugins/symbian/PluginViewSymbian.cpp
index bae3b7f..108fcca 100644
--- a/src/3rdparty/webkit/WebCore/plugins/symbian/PluginViewSymbian.cpp
+++ b/src/3rdparty/webkit/WebCore/plugins/symbian/PluginViewSymbian.cpp
@@ -414,11 +414,11 @@ bool PluginView::platformStart()
void PluginView::platformDestroy()
{
- QWebPageClient* client = m_parentFrame->view()->hostWindow()->platformPageClient();
- if (client && qobject_cast<QGraphicsWebView*>(client->pluginParent()))
- delete static_cast<PluginContainerSymbian*>(platformPluginWidget())->proxy();
- else
- delete platformPluginWidget();
+ if (platformPluginWidget()) {
+ PluginContainerSymbian* container = static_cast<PluginContainerSymbian*>(platformPluginWidget());
+ delete container->proxy();
+ delete container;
+ }
}
void PluginView::halt()
diff --git a/src/3rdparty/webkit/WebCore/plugins/win/PluginViewWin.cpp b/src/3rdparty/webkit/WebCore/plugins/win/PluginViewWin.cpp
index 9d869ab..e37714a 100644
--- a/src/3rdparty/webkit/WebCore/plugins/win/PluginViewWin.cpp
+++ b/src/3rdparty/webkit/WebCore/plugins/win/PluginViewWin.cpp
@@ -544,7 +544,7 @@ void PluginView::paintIntoTransformedContext(HDC hdc)
NPEvent npEvent;
npEvent.event = WM_WINDOWPOSCHANGED;
- npEvent.lParam = reinterpret_cast<uint32>(&windowpos);
+ npEvent.lParam = reinterpret_cast<uintptr_t>(&windowpos);
npEvent.wParam = 0;
dispatchNPEvent(npEvent);
@@ -552,7 +552,7 @@ void PluginView::paintIntoTransformedContext(HDC hdc)
setNPWindowRect(frameRect());
npEvent.event = WM_PAINT;
- npEvent.wParam = reinterpret_cast<uint32>(hdc);
+ npEvent.wParam = reinterpret_cast<uintptr_t>(hdc);
// This is supposed to be a pointer to the dirty rect, but it seems that the Flash plugin
// ignores it so we just pass null.
@@ -829,7 +829,7 @@ void PluginView::setNPWindowRect(const IntRect& rect)
#else
WNDPROC currentWndProc = (WNDPROC)GetWindowLongPtr(platformPluginWidget(), GWLP_WNDPROC);
if (currentWndProc != PluginViewWndProc)
- m_pluginWndProc = (WNDPROC)SetWindowLongPtr(platformPluginWidget(), GWLP_WNDPROC, (LONG)PluginViewWndProc);
+ m_pluginWndProc = (WNDPROC)SetWindowLongPtr(platformPluginWidget(), GWLP_WNDPROC, (LONG_PTR)PluginViewWndProc);
#endif
}
}
@@ -978,7 +978,7 @@ bool PluginView::platformStart()
// Calling SetWindowLongPtrA here makes the window proc ASCII, which is required by at least
// the Shockwave Director plug-in.
-#if OS(WINDOWS) && CPU(X86_64) && COMPILER(MSVC)
+#if OS(WINDOWS) && CPU(X86_64)
::SetWindowLongPtrA(platformPluginWidget(), GWLP_WNDPROC, (LONG_PTR)DefWindowProcA);
#elif OS(WINCE)
::SetWindowLong(platformPluginWidget(), GWL_WNDPROC, (LONG)DefWindowProc);
diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp
index 1c0e837..c6818f8 100644
--- a/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp
+++ b/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp
@@ -1179,10 +1179,9 @@ void RenderBox::computeRectForRepaint(RenderBoxModelObject* repaintContainer, In
IntPoint topLeft = rect.location();
topLeft.move(x(), y());
- if (style()->position() == FixedPosition)
- fixed = true;
+ EPosition position = style()->position();
- if (o->isBlockFlow() && style()->position() != AbsolutePosition && style()->position() != FixedPosition) {
+ if (o->isBlockFlow() && position != AbsolutePosition && position != FixedPosition) {
RenderBlock* cb = toRenderBlock(o);
if (cb->hasColumns()) {
IntRect repaintRect(topLeft, rect.size());
@@ -1195,16 +1194,17 @@ void RenderBox::computeRectForRepaint(RenderBoxModelObject* repaintContainer, In
// We are now in our parent container's coordinate space. Apply our transform to obtain a bounding box
// in the parent's coordinate space that encloses us.
if (layer() && layer()->transform()) {
- fixed = false;
+ fixed = position == FixedPosition;
rect = layer()->transform()->mapRect(rect);
// FIXME: this clobbers topLeft adjustment done for multicol above
topLeft = rect.location();
topLeft.move(x(), y());
- }
+ } else if (position == FixedPosition)
+ fixed = true;
- if (style()->position() == AbsolutePosition && o->isRelPositioned() && o->isRenderInline())
+ if (position == AbsolutePosition && o->isRelPositioned() && o->isRenderInline())
topLeft += toRenderInline(o)->relativePositionedInlineOffset(this);
- else if (style()->position() == RelativePosition && layer()) {
+ else if (position == RelativePosition && layer()) {
// Apply the relative position offset when invalidating a rectangle. The layer
// is translated, but the render box isn't, so we need to do this to get the
// right dirty rect. Since this is called from RenderObject::setStyle, the relative position
diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderLayer.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderLayer.cpp
index 15ffb64..3314772 100644
--- a/src/3rdparty/webkit/WebCore/rendering/RenderLayer.cpp
+++ b/src/3rdparty/webkit/WebCore/rendering/RenderLayer.cpp
@@ -332,6 +332,22 @@ void RenderLayer::computeRepaintRects()
m_outlineBox = renderer()->outlineBoundsForRepaint(repaintContainer);
}
+void RenderLayer::updateRepaintRectsAfterScroll(bool fixed)
+{
+ if (fixed || renderer()->style()->position() == FixedPosition) {
+ computeRepaintRects();
+ fixed = true;
+ } else if (renderer()->hasTransform()) {
+ // Transforms act as fixed position containers, so nothing inside a
+ // transformed element can be fixed relative to the viewport if the
+ // transformed element is not fixed itself or child of a fixed element.
+ return;
+ }
+
+ for (RenderLayer* child = firstChild(); child; child = child->nextSibling())
+ child->updateRepaintRectsAfterScroll(fixed);
+}
+
void RenderLayer::updateTransform()
{
// hasTransform() on the renderer is also true when there is transform-style: preserve-3d or perspective set,
diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderLayer.h b/src/3rdparty/webkit/WebCore/rendering/RenderLayer.h
index 9210e95..81a66e1 100644
--- a/src/3rdparty/webkit/WebCore/rendering/RenderLayer.h
+++ b/src/3rdparty/webkit/WebCore/rendering/RenderLayer.h
@@ -395,6 +395,7 @@ public:
// Return a cached repaint rect, computed relative to the layer renderer's containerForRepaint.
IntRect repaintRect() const { return m_repaintRect; }
void computeRepaintRects();
+ void updateRepaintRectsAfterScroll(bool fixed = false);
void setNeedsFullRepaint(bool f = true) { m_needsFullRepaint = f; }
int staticX() const { return m_staticX; }
diff --git a/src/3rdparty/webkit/WebCore/rendering/RenderLayerCompositor.cpp b/src/3rdparty/webkit/WebCore/rendering/RenderLayerCompositor.cpp
index 93af664..c295a2c 100644
--- a/src/3rdparty/webkit/WebCore/rendering/RenderLayerCompositor.cpp
+++ b/src/3rdparty/webkit/WebCore/rendering/RenderLayerCompositor.cpp
@@ -128,6 +128,15 @@ void RenderLayerCompositor::cacheAcceleratedCompositingFlags()
showRepaintCounter = settings->showRepaintCounter();
}
+ // We allow the chrome to override the settings, in case the page is rendered
+ // on a chrome that doesn't allow accelerated compositing.
+ if (hasAcceleratedCompositing) {
+ Frame* frame = m_renderView->frameView()->frame();
+ Page* page = frame ? frame->page() : 0;
+ if (page)
+ hasAcceleratedCompositing = page->chrome()->client()->allowsAcceleratedCompositing();
+ }
+
if (hasAcceleratedCompositing != m_hasAcceleratedCompositing || showDebugBorders != m_showDebugBorders || showRepaintCounter != m_showRepaintCounter)
setCompositingLayersNeedRebuild();
diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp
index ad66750..0c13e43 100644
--- a/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp
@@ -122,6 +122,9 @@ public:
virtual void setRootGraphicsLayer(QGraphicsItem* layer);
virtual void markForSync(bool scheduleSync);
void updateCompositingScrollPosition();
+
+ // QGraphicsWebView can render composited layers
+ virtual bool allowsAcceleratedCompositing() const { return true; }
#endif
void updateResizesToContentsForPage();
@@ -289,6 +292,7 @@ void QGraphicsWebViewPrivate::update(const QRect & dirtyRect)
if (overlay)
overlay->update(QRectF(dirtyRect));
#if USE(ACCELERATED_COMPOSITING)
+ updateCompositingScrollPosition();
syncLayers();
#endif
}
@@ -424,7 +428,9 @@ QRectF QGraphicsWebViewPrivate::graphicsItemVisibleRect() const
return QRectF();
QList<QGraphicsView*> views = q->scene()->views();
if (views.size() > 1) {
+#ifndef QT_NO_DEBUG_STREAM
qDebug() << "QGraphicsWebView is in more than one graphics views, unable to compute the visible rect";
+#endif
return QRectF();
}
if (views.size() < 1)
diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebhistory.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebhistory.cpp
index 61ec9d2..d852012 100644
--- a/src/3rdparty/webkit/WebKit/qt/Api/qwebhistory.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebhistory.cpp
@@ -33,7 +33,7 @@
enum {
InitialHistoryVersion = 1,
- DefaultHistoryVersion = 2
+ DefaultHistoryVersion = InitialHistoryVersion
};
/*!
@@ -524,7 +524,7 @@ QDataStream& operator>>(QDataStream& source, QWebHistory& history)
source >> version;
- if (version <= 2) {
+ if (version == 1) {
int count;
int currentIndex;
source >> count >> currentIndex;
diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebkitversion.h b/src/3rdparty/webkit/WebKit/qt/Api/qwebkitversion.h
index f0fbef0..de79dd1 100644
--- a/src/3rdparty/webkit/WebKit/qt/Api/qwebkitversion.h
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebkitversion.h
@@ -17,7 +17,7 @@
Boston, MA 02110-1301, USA.
*/
-#include <qstring.h>
+#include <QtCore/qstring.h>
#ifndef qwebkitversion_h
#define qwebkitversion_h
diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp
index 007aeac..b8b50b7 100644
--- a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp
@@ -1492,7 +1492,7 @@ QVariant QWebPage::inputMethodQuery(Qt::InputMethodQuery property) const
// We can't access absoluteCaretBounds() while the view needs to layout.
return QVariant();
}
- return QVariant(frame->selection()->absoluteCaretBounds());
+ return QVariant(view->contentsToWindow(frame->selection()->absoluteCaretBounds()));
}
case Qt::ImFont: {
if (renderTextControl) {
@@ -2048,9 +2048,9 @@ QWebPage *QWebPage::createWindow(WebWindowType type)
}
/*!
- This function is called whenever WebKit encounters a HTML object element with type "application/x-qt-plugin".
- The \a classid, \a url, \a paramNames and \a paramValues correspond to the HTML object element attributes and
- child elements to configure the embeddable object.
+ This function is called whenever WebKit encounters a HTML object element with type "application/x-qt-plugin". It is
+ called regardless of the value of QWebSettings::PluginsEnabled. The \a classid, \a url, \a paramNames and \a paramValues
+ correspond to the HTML object element attributes and child elements to configure the embeddable object.
*/
QObject *QWebPage::createPlugin(const QString &classid, const QUrl &url, const QStringList &paramNames, const QStringList &paramValues)
{
@@ -2208,7 +2208,6 @@ void QWebPage::setViewportSize(const QSize &size) const
if (frame->d->frame && frame->d->frame->view()) {
WebCore::FrameView* view = frame->d->frame->view();
view->setFrameRect(QRect(QPoint(0, 0), size));
- view->forceLayout();
view->adjustViewSize();
}
}
@@ -3192,233 +3191,255 @@ QWebPluginFactory *QWebPage::pluginFactory() const
\o %AppVersion% expands to QCoreApplication::applicationName()/QCoreApplication::applicationVersion() if they're set; otherwise defaulting to Qt and the current Qt version.
\endlist
*/
-QString QWebPage::userAgentForUrl(const QUrl& url) const
+QString QWebPage::userAgentForUrl(const QUrl&) const
{
- Q_UNUSED(url)
- QString ua = QLatin1String("Mozilla/5.0 ("
+ // splitting the string in three and user QStringBuilder is better than using QString::arg()
+ static QString firstPart;
+ static QString secondPart;
+ static QString thirdPart;
+
+ if (firstPart.isNull() || secondPart.isNull() || thirdPart.isNull()) {
+ QString firstPartTemp;
+ firstPartTemp.reserve(150);
+ firstPartTemp += QString::fromLatin1("Mozilla/5.0 ("
// Platform
#ifdef Q_WS_MAC
- "Macintosh"
+ "Macintosh"
#elif defined Q_WS_QWS
- "QtEmbedded"
+ "QtEmbedded"
#elif defined Q_WS_WIN
- "Windows"
+ "Windows"
#elif defined Q_WS_X11
- "X11"
+ "X11"
#elif defined Q_OS_SYMBIAN
- "SymbianOS"
+ "SymbianOS"
#else
- "Unknown"
+ "Unknown"
#endif
- // Placeholder for Platform Version
- "%1; "
+ );
+
+ firstPartTemp += QString::fromLatin1("; ");
- // Placeholder for security strength (N or U)
- "%2; "
+ // SSL support
+#if !defined(QT_NO_OPENSSL)
+ // we could check QSslSocket::supportsSsl() here, but this makes
+ // OpenSSL, certificates etc being loaded in all cases were QWebPage
+ // is used. This loading is not needed for non-https.
+ firstPartTemp += QString::fromLatin1("U; ");
+ // this may lead to a false positive: We indicate SSL since it is
+ // compiled in even though supportsSsl() might return false
+#else
+ firstPartTemp += QString::fromLatin1("N; ");
+#endif
- // Subplatform"
+ // Operating system
#ifdef Q_OS_AIX
- "AIX"
+ firstPartTemp += QString::fromLatin1("AIX");
#elif defined Q_OS_WIN32
- "%3"
+
+ switch (QSysInfo::WindowsVersion) {
+ case QSysInfo::WV_32s:
+ firstPartTemp += QString::fromLatin1("Windows 3.1");
+ break;
+ case QSysInfo::WV_95:
+ firstPartTemp += QString::fromLatin1("Windows 95");
+ break;
+ case QSysInfo::WV_98:
+ firstPartTemp += QString::fromLatin1("Windows 98");
+ break;
+ case QSysInfo::WV_Me:
+ firstPartTemp += QString::fromLatin1("Windows 98; Win 9x 4.90");
+ break;
+ case QSysInfo::WV_NT:
+ firstPartTemp += QString::fromLatin1("WinNT4.0");
+ break;
+ case QSysInfo::WV_2000:
+ firstPartTemp += QString::fromLatin1("Windows NT 5.0");
+ break;
+ case QSysInfo::WV_XP:
+ firstPartTemp += QString::fromLatin1("Windows NT 5.1");
+ break;
+ case QSysInfo::WV_2003:
+ firstPartTemp += QString::fromLatin1("Windows NT 5.2");
+ break;
+ case QSysInfo::WV_VISTA:
+ firstPartTemp += QString::fromLatin1("Windows NT 6.0");
+ break;
+ case QSysInfo::WV_WINDOWS7:
+ firstPartTemp += QString::fromLatin1("Windows NT 6.1");
+ break;
+ case QSysInfo::WV_CE:
+ firstPartTemp += QString::fromLatin1("Windows CE");
+ break;
+ case QSysInfo::WV_CENET:
+ firstPartTemp += QString::fromLatin1("Windows CE .NET");
+ break;
+ case QSysInfo::WV_CE_5:
+ firstPartTemp += QString::fromLatin1("Windows CE 5.x");
+ break;
+ case QSysInfo::WV_CE_6:
+ firstPartTemp += QString::fromLatin1("Windows CE 6.x");
+ break;
+ }
+
#elif defined Q_OS_DARWIN
#ifdef __i386__ || __x86_64__
- "Intel Mac OS X"
+ firstPartTemp += QString::fromLatin1("Intel Mac OS X");
#else
- "PPC Mac OS X"
+ firstPartTemp += QString::fromLatin1("PPC Mac OS X");
#endif
#elif defined Q_OS_BSDI
- "BSD"
+ firstPartTemp += QString::fromLatin1("BSD");
#elif defined Q_OS_BSD4
- "BSD Four"
+ firstPartTemp += QString::fromLatin1("BSD Four");
#elif defined Q_OS_CYGWIN
- "Cygwin"
+ firstPartTemp += QString::fromLatin1("Cygwin");
#elif defined Q_OS_DGUX
- "DG/UX"
+ firstPartTemp += QString::fromLatin1("DG/UX");
#elif defined Q_OS_DYNIX
- "DYNIX/ptx"
+ firstPartTemp += QString::fromLatin1("DYNIX/ptx");
#elif defined Q_OS_FREEBSD
- "FreeBSD"
+ firstPartTemp += QString::fromLatin1("FreeBSD");
#elif defined Q_OS_HPUX
- "HP-UX"
+ firstPartTemp += QString::fromLatin1("HP-UX");
#elif defined Q_OS_HURD
- "GNU Hurd"
+ firstPartTemp += QString::fromLatin1("GNU Hurd");
#elif defined Q_OS_IRIX
- "SGI Irix"
+ firstPartTemp += QString::fromLatin1("SGI Irix");
#elif defined Q_OS_LINUX
- "Linux"
+
+#if defined(__x86_64__)
+ firstPartTemp += QString::fromLatin1("Linux x86_64");
+#elif defined(__i386__)
+ firstPartTemp += QString::fromLatin1("Linux i686");
+#else
+ firstPartTemp += QString::fromLatin1("Linux");
+#endif
+
#elif defined Q_OS_LYNX
- "LynxOS"
+ firstPartTemp += QString::fromLatin1("LynxOS");
#elif defined Q_OS_NETBSD
- "NetBSD"
+ firstPartTemp += QString::fromLatin1("NetBSD");
#elif defined Q_OS_OS2
- "OS/2"
+ firstPartTemp += QString::fromLatin1("OS/2");
#elif defined Q_OS_OPENBSD
- "OpenBSD"
+ firstPartTemp += QString::fromLatin1("OpenBSD");
#elif defined Q_OS_OS2EMX
- "OS/2"
+ firstPartTemp += QString::fromLatin1("OS/2");
#elif defined Q_OS_OSF
- "HP Tru64 UNIX"
+ firstPartTemp += QString::fromLatin1("HP Tru64 UNIX");
#elif defined Q_OS_QNX6
- "QNX RTP Six"
+ firstPartTemp += QString::fromLatin1("QNX RTP Six");
#elif defined Q_OS_QNX
- "QNX"
+ firstPartTemp += QString::fromLatin1("QNX");
#elif defined Q_OS_RELIANT
- "Reliant UNIX"
+ firstPartTemp += QString::fromLatin1("Reliant UNIX");
#elif defined Q_OS_SCO
- "SCO OpenServer"
+ firstPartTemp += QString::fromLatin1("SCO OpenServer");
#elif defined Q_OS_SOLARIS
- "Sun Solaris"
+ firstPartTemp += QString::fromLatin1("Sun Solaris");
#elif defined Q_OS_ULTRIX
- "DEC Ultrix"
-#elif defined Q_WS_S60
- "Series60"
-#elif defined Q_OS_UNIX
- "UNIX BSD/SYSV system"
-#elif defined Q_OS_UNIXWARE
- "UnixWare Seven, Open UNIX Eight"
-#else
- "Unknown"
-#endif
- // Placeholder for SubPlatform Version
- "%4; ");
-
- // Platform Version
- QString osVer;
-#ifdef Q_OS_SYMBIAN
- QSysInfo::SymbianVersion symbianVersion = QSysInfo::symbianVersion();
- switch (symbianVersion) {
- case QSysInfo::SV_9_2:
- osVer = "/9.2";
- break;
- case QSysInfo::SV_9_3:
- osVer = "/9.3";
- break;
- case QSysInfo::SV_9_4:
- osVer = "/9.4";
- break;
- default:
- osVer = "Unknown";
- }
-#endif
- ua = ua.arg(osVer);
-
- QChar securityStrength(QLatin1Char('N'));
-#if !defined(QT_NO_OPENSSL)
- // we could check QSslSocket::supportsSsl() here, but this makes
- // OpenSSL, certificates etc being loaded in all cases were QWebPage
- // is used. This loading is not needed for non-https.
- securityStrength = QLatin1Char('U');
- // this may lead to a false positive: We indicate SSL since it is
- // compiled in even though supportsSsl() might return false
-#endif
- ua = ua.arg(securityStrength);
-
-#if defined Q_OS_WIN32
- QString ver;
- switch (QSysInfo::WindowsVersion) {
- case QSysInfo::WV_32s:
- ver = "Windows 3.1";
- break;
- case QSysInfo::WV_95:
- ver = "Windows 95";
- break;
- case QSysInfo::WV_98:
- ver = "Windows 98";
- break;
- case QSysInfo::WV_Me:
- ver = "Windows 98; Win 9x 4.90";
- break;
- case QSysInfo::WV_NT:
- ver = "WinNT4.0";
+ firstPartTemp += QString::fromLatin1("DEC Ultrix");
+#elif defined Q_OS_SYMBIAN
+ firstPartTemp += QString::fromLatin1("SymbianOS");
+ QSysInfo::SymbianVersion symbianVersion = QSysInfo::symbianVersion();
+ switch (symbianVersion) {
+ case QSysInfo::SV_9_2:
+ firstPartTemp += QString::fromLatin1("/9.2");
break;
- case QSysInfo::WV_2000:
- ver = "Windows NT 5.0";
+ case QSysInfo::SV_9_3:
+ firstPartTemp += QString::fromLatin1("/9.3");
break;
- case QSysInfo::WV_XP:
- ver = "Windows NT 5.1";
+ case QSysInfo::SV_9_4:
+ firstPartTemp += QString::fromLatin1("/9.4");
break;
- case QSysInfo::WV_2003:
- ver = "Windows NT 5.2";
+ default:
+ firstPartTemp += QString::fromLatin1("/Unknown");
+ }
+
+#if defined Q_WS_S60
+ firstPartTemp += QLatin1Char(' ');
+ firstPartTemp += QString::fromLatin1("Series60");
+ QSysInfo::S60Version s60Version = QSysInfo::s60Version();
+ switch (s60Version) {
+ case QSysInfo::SV_S60_3_1:
+ firstPartTemp += QString::fromLatin1("/3.1");
break;
- case QSysInfo::WV_VISTA:
- ver = "Windows NT 6.0";
+ case QSysInfo::SV_S60_3_2:
+ firstPartTemp += QString::fromLatin1("/3.2");
break;
-#if QT_VERSION > 0x040500
- case QSysInfo::WV_WINDOWS7:
- ver = "Windows NT 6.1";
+ case QSysInfo::SV_S60_5_0:
+ firstPartTemp += QString::fromLatin1("/5.0");
break;
+ default:
+ firstPartTemp += QString::fromLatin1("/Unknown");
+ }
#endif
- case QSysInfo::WV_CE:
- ver = "Windows CE";
- break;
- case QSysInfo::WV_CENET:
- ver = "Windows CE .NET";
- break;
- case QSysInfo::WV_CE_5:
- ver = "Windows CE 5.x";
- break;
- case QSysInfo::WV_CE_6:
- ver = "Windows CE 6.x";
- break;
- }
- ua = QString(ua).arg(ver);
+
+#elif defined Q_OS_UNIX
+ firstPartTemp += QString::fromLatin1("UNIX BSD/SYSV system");
+#elif defined Q_OS_UNIXWARE
+ firstPartTemp += QString::fromLatin1("UnixWare Seven, Open UNIX Eight");
+#else
+ firstPartTemp += QString::fromLatin1("Unknown");
#endif
- // SubPlatform Version
- QString subPlatformVer;
-#ifdef Q_OS_SYMBIAN
- QSysInfo::S60Version s60Version = QSysInfo::s60Version();
- switch (s60Version) {
- case QSysInfo::SV_S60_3_1:
- subPlatformVer = "/3.1";
- break;
- case QSysInfo::SV_S60_3_2:
- subPlatformVer = "/3.2";
- break;
- case QSysInfo::SV_S60_5_0:
- subPlatformVer = "/5.0";
- break;
- default:
- subPlatformVer = " Unknown";
- }
+ // language is the split
+ firstPartTemp += QString::fromLatin1("; ");
+ firstPartTemp.squeeze();
+ firstPart = firstPartTemp;
+
+ QString secondPartTemp;
+ secondPartTemp.reserve(150);
+ secondPartTemp += QString::fromLatin1(") ");
+
+ // webkit/qt version
+ secondPartTemp += QString::fromLatin1("AppleWebKit/");
+ secondPartTemp += qWebKitVersion();
+ secondPartTemp += QString::fromLatin1(" (KHTML, like Gecko) ");
+
+
+ // Application name split the third part
+ secondPartTemp.squeeze();
+ secondPart = secondPartTemp;
+
+ QString thirdPartTemp;
+ thirdPartTemp.reserve(150);
+#if defined(Q_WS_S60) || defined(Q_WS_MAEMO_5)
+ thirdPartTemp + QLatin1String(" Mobile Safari/");
+#else
+ thirdPartTemp += QLatin1String(" Safari/");
#endif
- ua = ua.arg(subPlatformVer);
+ thirdPartTemp += qWebKitVersion();
+ thirdPartTemp.squeeze();
+ thirdPart = thirdPartTemp;
+ Q_ASSERT(!firstPart.isNull());
+ Q_ASSERT(!secondPart.isNull());
+ Q_ASSERT(!thirdPart.isNull());
+ }
// Language
- QLocale locale;
+ QString languageName;
if (d->client && d->client->ownerWidget())
- locale = d->client->ownerWidget()->locale();
- QString name = locale.name();
- name[2] = QLatin1Char('-');
- ua.append(name);
- ua.append(QLatin1String(") "));
-
- // webkit/qt version
- ua.append(QString(QLatin1String("AppleWebKit/%1 (KHTML, like Gecko) "))
- .arg(QString(qWebKitVersion())));
+ languageName = d->client->ownerWidget()->locale().name();
+ else
+ languageName = QLocale().name();
+ languageName[2] = QLatin1Char('-');
// Application name/version
QString appName = QCoreApplication::applicationName();
if (!appName.isEmpty()) {
- ua.append(appName);
QString appVer = QCoreApplication::applicationVersion();
if (!appVer.isEmpty())
- ua.append(QLatin1Char('/') + appVer);
+ appName.append(QLatin1Char('/') + appVer);
} else {
// Qt version
- ua.append(QLatin1String("Qt/"));
- ua.append(QLatin1String(qVersion()));
+ appName = QString::fromLatin1("Qt/") + QString::fromLatin1(qVersion());
}
-#if defined(Q_WS_S60) || defined(Q_WS_MAEMO_5)
- ua.append(QString(QLatin1String(" Mobile Safari/%1")).arg(qWebKitVersion()));
-#else
- ua.append(QString(QLatin1String(" Safari/%1")).arg(qWebKitVersion()));
-#endif
- return ua;
+ return firstPart + languageName + secondPart + appName + thirdPart;
}
diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp
index c759445..ae7f6a8 100644
--- a/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp
@@ -298,7 +298,9 @@ QWebSettings* QWebSettings::globalSettings()
Support for browser plugins can enabled by setting the
\l{QWebSettings::PluginsEnabled}{PluginsEnabled} attribute. For many applications,
this attribute is enabled for all pages by setting it on the
- \l{globalSettings()}{global settings object}.
+ \l{globalSettings()}{global settings object}. QtWebKit will always ignore this setting
+ \when processing Qt plugins. The decision to allow a Qt plugin is made by the client
+ \in its reimplementation of QWebPage::createPlugin.
\section1 Web Application Support
@@ -366,7 +368,8 @@ QWebSettings* QWebSettings::globalSettings()
programs.
\value JavaEnabled Enables or disables Java applets.
Currently Java applets are not supported.
- \value PluginsEnabled Enables or disables plugins in Web pages.
+ \value PluginsEnabled Enables or disables plugins in Web pages. Qt plugins
+ with a mimetype such as "application/x-qt-plugin" are not affected by this setting.
\value PrivateBrowsingEnabled Private browsing prevents WebKit from
recording visited pages in the history and storing web page icons.
\value JavascriptCanOpenWindows Specifies whether JavaScript programs
@@ -451,7 +454,6 @@ QWebSettings::QWebSettings()
d->attributes.insert(QWebSettings::LocalContentCanAccessRemoteUrls, false);
d->attributes.insert(QWebSettings::LocalContentCanAccessFileUrls, true);
d->attributes.insert(QWebSettings::AcceleratedCompositingEnabled, true);
- d->attributes.insert(QWebSettings::WebGLEnabled, false);
d->attributes.insert(QWebSettings::TiledBackingStoreEnabled, false);
d->attributes.insert(QWebSettings::FrameFlatteningEnabled, false);
d->offlineStorageDefaultQuota = 5 * 1024 * 1024;
@@ -1050,8 +1052,9 @@ void QWebSettings::enablePersistentStorage(const QString& path)
QString storagePath;
if (path.isEmpty()) {
+#ifndef QT_NO_DESKTOPSERVICES
storagePath = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
-
+#endif
if (storagePath.isEmpty())
storagePath = WebCore::pathByAppendingComponent(QDir::homePath(), QCoreApplication::applicationName());
} else
diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h b/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h
index caba0d5..d2e536e 100644
--- a/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h
@@ -70,7 +70,6 @@ public:
DnsPrefetchEnabled,
XSSAuditorEnabled,
AcceleratedCompositingEnabled,
- WebGLEnabled,
SpatialNavigationEnabled,
LocalContentCanAccessFileUrls,
TiledBackingStoreEnabled,
diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp
index fcd1f4b..3ba1678 100644
--- a/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp
@@ -415,9 +415,6 @@ void QWebView::setPage(QWebPage* page)
this, SLOT(updateMicroFocus()));
connect(d->page, SIGNAL(destroyed()),
this, SLOT(_q_pageDestroyed()));
-#if USE(ACCELERATED_COMPOSITING)
- d->page->d->page->settings()->setAcceleratedCompositingEnabled(false);
-#endif
}
setAttribute(Qt::WA_OpaquePaintEvent, d->page);
update();
diff --git a/src/3rdparty/webkit/WebKit/qt/ChangeLog b/src/3rdparty/webkit/WebKit/qt/ChangeLog
index 5e550f9..555b14d 100644
--- a/src/3rdparty/webkit/WebKit/qt/ChangeLog
+++ b/src/3rdparty/webkit/WebKit/qt/ChangeLog
@@ -1,3 +1,325 @@
+2010-04-09 Tasuku Suzuki <tasuku.suzuki@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt]Fix compile error with QT_NO_IM
+ https://bugs.webkit.org/show_bug.cgi?id=36533
+
+ * WebCoreSupport/QtFallbackWebPopup.cpp:
+ (WebCore::QtFallbackWebPopupCombo::hidePopup):
+
+2010-04-02 Tasuku Suzuki <tasuku.suzuki@nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ [Qt]Fix compile error with QT_NO_SETTINGS
+ https://bugs.webkit.org/show_bug.cgi?id=36533
+
+ If QT_NO_SETTINGS is defined, QSettings is not available.
+
+ * WebCoreSupport/InspectorClientQt.cpp:
+ (WebCore::InspectorClientQt::populateSetting):
+ (WebCore::InspectorClientQt::storeSetting):
+
+2010-03-25 Tasuku Suzuki <tasuku.suzuki@nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ [Qt]Fix compile error with QT_NO_DESKTOPSERVICES
+ https://bugs.webkit.org/show_bug.cgi?id=36533
+
+ * Api/qwebsettings.cpp:
+ (QWebSettings::enablePersistentStorage):
+
+2010-03-25 Tasuku Suzuki <tasuku.suzuki@nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ [Qt]Fix compile error with QT_NO_DEBUG_STREAM
+ https://bugs.webkit.org/show_bug.cgi?id=36533
+
+ * Api/qgraphicswebview.cpp:
+ (QGraphicsWebViewPrivate::graphicsItemVisibleRect):
+
+2010-04-29 Janne Koskinen <janne.p.koskinen@digia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] QtWebKit versioning added
+ https://bugs.webkit.org/show_bug.cgi?id=37207
+
+ QtWebkit releases separated from Qt release cycle.
+
+ * qtwebkit_version.pri: Added.
+
+2010-05-02 Benjamin Poulain <benjamin.poulain@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] QWebPage::userAgentForUrl is terrible API
+ https://bugs.webkit.org/show_bug.cgi?id=33875
+
+ Simplify the creation of the user agent string to avoid some
+ overhead for each loaded url.
+
+ The static part of the user agent is cached so it only have
+ to be made once.
+ This creation has been made in order to simplify the code.
+
+ The two variable: application name and current language are
+ set dynamically when needed.
+ The default locale is non longer created if the widget locale
+ is used.
+
+ * Api/qwebpage.cpp:
+ (QWebPage::userAgentForUrl):
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (tst_QWebPage::userAgentApplicationName):
+ (tst_QWebPage::userAgentLocaleChange):
+
+2010-05-02 Noam Rosenthal <noam.rosenthal@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] GraphicsLayer: animation incorrect when scrolling
+ https://bugs.webkit.org/show_bug.cgi?id=38371
+
+ This is a regression introduced with the invalidate-on-scroll code path, that uses QGraphicsWebViewPrivate::update()
+ instead of QGraphicsWebViewPrivate::scroll(). The patch makes sure that the scrolling position is correct on
+ each content update - this shouldn't have a performance impact - the only overhead is an additional value-test on each update.
+
+ Tested by http://www.the-art-of-web.com/css/css-animation/
+
+ * Api/qgraphicswebview.cpp:
+ (QGraphicsWebViewPrivate::update):
+
+2010-04-29 Andreas Kling <andreas.kling@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ Remove unnecessary call to FrameView::forceLayout() in setViewportSize()
+ This prevents a double relayout on resize.
+
+ https://bugs.webkit.org/show_bug.cgi?id=38179
+
+ Thanks to Nate Whetsell <nathan.whetsell@gmail.com> for spotting this.
+
+ * Api/qwebpage.cpp:
+ (QWebPage::setViewportSize):
+
+2010-04-29 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ [Qt] REGRESSION(r57982): tst_qwebpage::showModalDialog() crashes
+ https://bugs.webkit.org/show_bug.cgi?id=38314
+
+ Make sure that there's always a main frame when returning from createWindow()
+ to the caller in WebCore.
+
+ * WebCoreSupport/ChromeClientQt.cpp:
+ (WebCore::ChromeClientQt::createWindow):
+
+2010-04-28 Janne Koskinen <janne.p.koskinen@digia.com>
+
+ Reviewed by Simon Hausmann <simon.hausmann@nokia.com>
+
+ [Qt] WINS DEF file freeze
+
+ Updated WINSCW def file with added and removed symbols.
+
+ * symbian/bwins/QtWebKitu.def:
+
+2010-04-22 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Remove translatable strings from the hybridPixmap test.
+ https://bugs.webkit.org/show_bug.cgi?id=37867
+
+ * tests/hybridPixmap/widget.ui:
+
+2010-04-22 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Fix autotests .qrc file paths when built in Qt.
+
+ Compiling auto-tests from qt/tests/auto/qweb* produced
+ failing tests since these .pro files include the
+ ones in WebKit/qt/tests and the .qrc file was
+ not added to RESOURCES
+
+ * tests/benchmarks/loading/loading.pro:
+ * tests/benchmarks/painting/painting.pro:
+ * tests/qgraphicswebview/qgraphicswebview.pro:
+ * tests/qwebelement/qwebelement.pro:
+ * tests/qwebframe/qwebframe.pro:
+ * tests/qwebhistory/qwebhistory.pro:
+ * tests/qwebhistoryinterface/qwebhistoryinterface.pro:
+ * tests/qwebinspector/qwebinspector.pro:
+ * tests/qwebpage/qwebpage.pro:
+ * tests/qwebplugindatabase/qwebplugindatabase.pro:
+ * tests/qwebview/qwebview.pro:
+ * tests/tests.pri:
+
+2010-04-26 Bruno Schmidt <bruno.schmidt@gmail.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Exposing an QVariantMap containing QObjectStar to Javascript
+ causes Segmentation Fault
+ https://bugs.webkit.org/show_bug.cgi?id=34729
+
+ If an QVariantMap containing QObjectStar is added to the to QtWebkit
+ Javascript, it's use causes Segmentation Fault.
+ It happens because, in the case QMetaType::QVariantMap, the "root"
+ object that is inside of a PassRefPtr is passed recursively inside a
+ loop to recover the content of the map, but the PassRefPtr semantics
+ prohibit its use inside a loop, so the "root" object mus be passed
+ using the method "PassRefPtr::get" in order to keep the current
+ reference.
+
+ * tests/qwebframe/tst_qwebframe.cpp:
+ (MyQObject::MyQObject): new property variantMapProperty
+ (MyQObject::variantMapProperty): read variantMapProperty
+ (MyQObject::setVariantMapProperty): write variantMapProperty
+
+2010-04-26 Thiago Macieira <thiago.macieira@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix the include header <qstring.h> -> <QtCore/qstring.h>
+
+ The module/header.h style inclusion removes the need to have -I$QTDIR/include/depending-module
+ in the include search path for the application.
+
+ * Api/qwebkitversion.h:
+
+2010-04-21 Yi Shen <yi.4.shen@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Check the request empty or not in ChromeClientQt::createWindow()
+ https://bugs.webkit.org/show_bug.cgi?id=37821
+
+ * WebCoreSupport/ChromeClientQt.cpp:
+ (WebCore::ChromeClientQt::createWindow):
+
+2010-04-22 John Pavan <john.pavan@nokia.com>
+
+ Reviewed by Laszlo Gombos.
+
+ [Qt] inputMethodQuery returns coordinates in web page coordinates rather than in item coordinates.
+ https://bugs.webkit.org/show_bug.cgi?id=37163
+
+
+ QWebPage::inputMethodQuery is modified so that it
+ returns coordinates in the widget's coordinate system.
+ Tests are added for QGraphicsWebView and QWebView
+ to verify that this behavior is correct after the webpage
+ has been scrolled.
+
+ * Api/qwebpage.cpp:
+ (QWebPage::inputMethodQuery):
+ * tests/qgraphicswebview/tst_qgraphicswebview.cpp:
+ (tst_QGraphicsWebView::microFocusCoordinates):
+ * tests/qwebview/tst_qwebview.cpp:
+ (tst_QWebView::microFocusCoordinates):
+
+2010-04-21 No'am Rosenthal <noam.rosenthal@nokia.com>
+
+ Reviewed by Simon Fraser.
+
+ [Qt] Fix or remove the runtime flag for accelerated compositing.
+ https://bugs.webkit.org/show_bug.cgi?id=37313
+
+ This lets the QWebPageClient "veto" the settings value for accelerated compositing.
+ In this case we allow accelerated compositing only on QGraphicsWebView.
+
+ * Api/qgraphicswebview.cpp:
+ (QGraphicsWebViewPrivate::allowsAcceleratedCompositing):
+ * WebCoreSupport/ChromeClientQt.cpp:
+ (WebCore::ChromeClientQt::allowsAcceleratedCompositing):
+ * WebCoreSupport/ChromeClientQt.h:
+
+2010-04-22 Robert Hogan <robert@webkit.org>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix createPlugin() tests in tst_qwebpage to match behaviour of Qt plugins
+ when PluginsEnabled is false.
+
+ tst_qwebpage should have been updated as part of r56662.
+ (See https://bugs.webkit.org/show_bug.cgi?id=32196)
+
+ Updated documentation of QWebPage::createPlugin and QWebSetting::pluginsEnabled
+ to match the new behaviour.
+
+ * Api/qwebpage.cpp: Update docs.
+ * Api/qwebsettings.cpp: Update docs.
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (createPlugin):
+ (tst_QWebPage::createPluginWithPluginsEnabled):
+ (tst_QWebPage::createPluginWithPluginsDisabled):
+
+2010-04-09 Antonio Gomes <tonikitoo@webkit.org>
+
+ Reviewed by Kenneth Christiansen and Tor Arne Vestbø.
+
+ REGRESSION(r56552): Broken scrollbars size
+ https://bugs.webkit.org/show_bug.cgi?id=36853
+
+ The regression was caused by r56552, which introduced a fix to bug
+ webkit.org/b/21300. The bug solved an issue with the resize handle on mac,
+ but did it in a way that affected all Qt platforms and thus broke the behavior
+ on non-mac platforms.
+
+ This patch makes the mac specific change ifdef'ed and only applied for the mac
+ platform.
+
+ * WebCoreSupport/ChromeClientQt.cpp:
+ (WebCore::ChromeClientQt::windowResizerRect):
+
+2010-04-19 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix compilation against namespaced Qt.
+
+ * WebCoreSupport/ChromeClientQt.h:
+ * WebCoreSupport/QtFallbackWebPopup.h:
+
+2010-04-14 Luiz Agostini <luiz.agostini@openbossa.org>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ Changing view mode names due to specification changes
+ https://bugs.webkit.org/show_bug.cgi?id=37615
+
+ test: fast/media/media-feature-wgt-view-mode.html
+
+ specification: http://dev.w3.org/2006/waf/widgets-vmmf/
+
+ * WebCoreSupport/ChromeClientQt.cpp:
+ (WebCore::ChromeClientQt::isWindowed):
+ (WebCore::ChromeClientQt::isFullscreen):
+ (WebCore::ChromeClientQt::isMaximized):
+ (WebCore::ChromeClientQt::isMinimized):
+ * WebCoreSupport/ChromeClientQt.h:
+
+2010-04-14 Andreas Kling <andreas.kling@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Rendering artifacts on Qt plugins when scrolling the page
+ https://bugs.webkit.org/show_bug.cgi?id=37152
+
+ Because we no longer repaint the entire viewport on scroll,
+ we must trigger a repaint of QtPluginWidgets when their geometry changes.
+
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+
2010-04-09 Yi Shen <yi.4.shen@nokia.com>
Reviewed by Kenneth Rohde Christiansen.
@@ -10,6 +332,38 @@
* tests/qwebframe/tst_qwebframe.cpp:
+2010-04-15 Bruno Schmidt <bruno.schmidt@gmail.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Null QObjects properties cause Segmentation Fault
+ https://bugs.webkit.org/show_bug.cgi?id=34730
+
+ QObjects exported to the QWebkit javascript with properties that are
+ a null "QObject*" cause Segmentation Fault.
+
+ If an QObject is added to the javascript context and it contains
+ properties of the type QObject* with NULL value, calling the property
+ causes Segmentation Fault.
+
+ Follow the tests for the corrections done over WebCore.
+
+ * tests/qwebframe/tst_qwebframe.cpp:
+ (MyQObject::MyQObject): init the field m_objectStar
+ (MyQObject::objectStarProperty): read the Object* prop
+ (MyQObject::setObjectStarProperty): write the Object* prop
+ (tst_QWebFrame::getSetStaticProperty): new tests for the new prop
+
+2010-04-15 Kent Hansen <kent.hansen@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Mark QWebFrame::overloadedSlots autotest as expected failure
+
+ https://bugs.webkit.org/show_bug.cgi?id=37319
+
+ * tests/qwebframe/tst_qwebframe.cpp:
+
2010-04-09 Tasuku Suzuki <tasuku.suzuki@nokia.com>
Reviewed by Simon Hausmann.
diff --git a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp
index 45986b3..9eb10d6 100644
--- a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ChromeClientQt.cpp
@@ -165,7 +165,13 @@ Page* ChromeClientQt::createWindow(Frame*, const FrameLoadRequest& request, cons
QWebPage *newPage = m_webPage->createWindow(features.dialog ? QWebPage::WebModalDialog : QWebPage::WebBrowserWindow);
if (!newPage)
return 0;
- newPage->mainFrame()->load(request.resourceRequest().url());
+
+ // A call to QWebPage::mainFrame() implicitly creates the main frame.
+ // Make sure it exists, as WebCore expects it when returning from this call.
+ QWebFrame* mainFrame = newPage->mainFrame();
+
+ if (!request.isEmpty())
+ mainFrame->load(request.resourceRequest().url());
return newPage->d->page;
}
@@ -330,6 +336,7 @@ bool ChromeClientQt::tabsToLinks() const
IntRect ChromeClientQt::windowResizerRect() const
{
+#if defined(Q_WS_MAC)
if (!m_webPage)
return IntRect();
@@ -359,6 +366,9 @@ IntRect ChromeClientQt::windowResizerRect() const
QRect resizeCornerRect = QRect(resizeCornerTopLeft, QSize(scollbarThickness, scollbarThickness));
return resizeCornerRect.intersected(pageClient->geometryRelativeToOwnerWidget());
+#else
+ return IntRect();
+#endif
}
void ChromeClientQt::invalidateWindow(const IntRect&, bool)
@@ -542,6 +552,12 @@ void ChromeClientQt::scheduleCompositingLayerSync()
if (platformPageClient())
platformPageClient()->markForSync(true);
}
+
+bool ChromeClientQt::allowsAcceleratedCompositing() const
+{
+ return (platformPageClient() && platformPageClient()->allowsAcceleratedCompositing());
+}
+
#endif
QtAbstractWebPopup* ChromeClientQt::createSelectPopup()
@@ -554,9 +570,9 @@ QtAbstractWebPopup* ChromeClientQt::createSelectPopup()
}
#if ENABLE(WIDGETS_10_SUPPORT)
-bool ChromeClientQt::isDocked()
+bool ChromeClientQt::isWindowed()
{
- return m_webPage->d->viewMode == "mini";
+ return m_webPage->d->viewMode == "windowed";
}
bool ChromeClientQt::isFloating()
@@ -564,14 +580,19 @@ bool ChromeClientQt::isFloating()
return m_webPage->d->viewMode == "floating";
}
-bool ChromeClientQt::isApplication()
+bool ChromeClientQt::isFullscreen()
{
- return m_webPage->d->viewMode == "application";
+ return m_webPage->d->viewMode == "fullscreen";
}
-bool ChromeClientQt::isFullscreen()
+bool ChromeClientQt::isMaximized()
{
- return m_webPage->d->viewMode == "fullscreen";
+ return m_webPage->d->viewMode == "maximized";
+}
+
+bool ChromeClientQt::isMinimized()
+{
+ return m_webPage->d->viewMode == "minimized";
}
#endif
diff --git a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ChromeClientQt.h b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ChromeClientQt.h
index f8f217b..f0a7c8c 100644
--- a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ChromeClientQt.h
+++ b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/ChromeClientQt.h
@@ -137,6 +137,7 @@ namespace WebCore {
virtual void attachRootGraphicsLayer(Frame*, GraphicsLayer*);
virtual void setNeedsOneShotDrawingSynchronization();
virtual void scheduleCompositingLayerSync();
+ virtual bool allowsAcceleratedCompositing() const;
#endif
#if ENABLE(TOUCH_EVENTS)
@@ -158,10 +159,11 @@ namespace WebCore {
virtual void cancelGeolocationPermissionRequestForFrame(Frame*) { }
#if ENABLE(WIDGETS_10_SUPPORT)
- virtual bool isDocked();
+ virtual bool isWindowed();
virtual bool isFloating();
- virtual bool isApplication();
virtual bool isFullscreen();
+ virtual bool isMaximized();
+ virtual bool isMinimized();
#endif
QtAbstractWebPopup* createSelectPopup();
diff --git a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
index 5b1dd30..4ad008b 100644
--- a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
@@ -1176,6 +1176,8 @@ public:
platformWidget()->setMask(clipRegion);
handleVisibility();
+
+ platformWidget()->update();
}
virtual void show()
diff --git a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp
index c0c78ba..7fabbda 100644
--- a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/InspectorClientQt.cpp
@@ -110,6 +110,11 @@ void InspectorClientQt::hideHighlight()
void InspectorClientQt::populateSetting(const String& key, String* setting)
{
+#ifdef QT_NO_SETTINGS
+ Q_UNUSED(key)
+ Q_UNUSED(setting)
+ qWarning("QWebInspector: QSettings is not supported by Qt.");
+#else
QSettings qsettings;
if (qsettings.status() == QSettings::AccessError) {
// QCoreApplication::setOrganizationName and QCoreApplication::setApplicationName haven't been called
@@ -123,10 +128,16 @@ void InspectorClientQt::populateSetting(const String& key, String* setting)
QVariant storedValue = qsettings.value(settingKey);
storedValue.convert(QVariant::nameToType(storedValueType.toAscii().data()));
*setting = variantToSetting(storedValue);
+#endif // QT_NO_SETTINGS
}
void InspectorClientQt::storeSetting(const String& key, const String& setting)
{
+#ifdef QT_NO_SETTINGS
+ Q_UNUSED(key)
+ Q_UNUSED(setting)
+ qWarning("QWebInspector: QSettings is not supported by Qt.");
+#else
QSettings qsettings;
if (qsettings.status() == QSettings::AccessError) {
qWarning("QWebInspector: QSettings couldn't persist configuration setting [%s].",
@@ -138,6 +149,7 @@ void InspectorClientQt::storeSetting(const String& key, const String& setting)
QString settingKey(settingStoragePrefix + QString(key));
qsettings.setValue(settingKey, valueToStore);
qsettings.setValue(settingKey + settingStorageTypeSuffix, QVariant::typeToName(valueToStore.type()));
+#endif // QT_NO_SETTINGS
}
static String variantToSetting(const QVariant& qvariant)
diff --git a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/QtFallbackWebPopup.cpp b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/QtFallbackWebPopup.cpp
index 65a28fe..7514077 100644
--- a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/QtFallbackWebPopup.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/QtFallbackWebPopup.cpp
@@ -55,6 +55,7 @@ void QtFallbackWebPopupCombo::showPopup()
void QtFallbackWebPopupCombo::hidePopup()
{
+#ifndef QT_NO_IM
QWidget* activeFocus = QApplication::focusWidget();
if (activeFocus && activeFocus == QComboBox::view()
&& activeFocus->testAttribute(Qt::WA_InputMethodEnabled)) {
@@ -64,6 +65,7 @@ void QtFallbackWebPopupCombo::hidePopup()
qic->setFocusWidget(0);
}
}
+#endif // QT_NO_IM
QComboBox::hidePopup();
diff --git a/src/3rdparty/webkit/WebKit/qt/qtwebkit_version.pri b/src/3rdparty/webkit/WebKit/qt/qtwebkit_version.pri
new file mode 100644
index 0000000..ffd192c
--- /dev/null
+++ b/src/3rdparty/webkit/WebKit/qt/qtwebkit_version.pri
@@ -0,0 +1,4 @@
+QT_WEBKIT_VERSION = 4.7.0
+QT_WEBKIT_MAJOR_VERSION = 4
+QT_WEBKIT_MINOR_VERSION = 7
+QT_WEBKIT_PATCH_VERSION = 0
diff --git a/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/loading/loading.pro b/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/loading/loading.pro
index 258930c..99c64a5 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/loading/loading.pro
+++ b/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/loading/loading.pro
@@ -1,3 +1,3 @@
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../../..
-exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
include(../../tests.pri)
+exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
diff --git a/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/painting/painting.pro b/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/painting/painting.pro
index 258930c..99c64a5 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/painting/painting.pro
+++ b/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/painting/painting.pro
@@ -1,3 +1,3 @@
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../../..
-exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
include(../../tests.pri)
+exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
diff --git a/src/3rdparty/webkit/WebKit/qt/tests/hybridPixmap/widget.ui b/src/3rdparty/webkit/WebKit/qt/tests/hybridPixmap/widget.ui
index ae5e0b5..272d6a7 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/hybridPixmap/widget.ui
+++ b/src/3rdparty/webkit/WebKit/qt/tests/hybridPixmap/widget.ui
@@ -18,7 +18,7 @@
<widget class="WebView" name="webView" native="true">
<property name="url" stdset="0">
<url>
- <string>about:blank</string>
+ <string notr="true">about:blank</string>
</url>
</property>
</widget>
diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qgraphicswebview/qgraphicswebview.pro b/src/3rdparty/webkit/WebKit/qt/tests/qgraphicswebview/qgraphicswebview.pro
index 6777615..e915d60 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/qgraphicswebview/qgraphicswebview.pro
+++ b/src/3rdparty/webkit/WebKit/qt/tests/qgraphicswebview/qgraphicswebview.pro
@@ -1,3 +1,3 @@
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../..
-exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
include(../tests.pri)
+exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qgraphicswebview/tst_qgraphicswebview.cpp b/src/3rdparty/webkit/WebKit/qt/tests/qgraphicswebview/tst_qgraphicswebview.cpp
index 657e09f..14f5820 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/qgraphicswebview/tst_qgraphicswebview.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/tests/qgraphicswebview/tst_qgraphicswebview.cpp
@@ -31,6 +31,7 @@ class tst_QGraphicsWebView : public QObject
private slots:
void qgraphicswebview();
void crashOnViewlessWebPages();
+ void microFocusCoordinates();
};
void tst_QGraphicsWebView::qgraphicswebview()
@@ -102,6 +103,40 @@ void tst_QGraphicsWebView::crashOnViewlessWebPages()
QVERIFY(waitForSignal(page, SIGNAL(loadFinished(bool))));
}
+void tst_QGraphicsWebView::microFocusCoordinates()
+{
+ QWebPage* page = new QWebPage;
+ QGraphicsWebView* webView = new QGraphicsWebView;
+ webView->setPage( page );
+ QGraphicsView* view = new QGraphicsView;
+ QGraphicsScene* scene = new QGraphicsScene(view);
+ view->setScene(scene);
+ scene->addItem(webView);
+ view->setGeometry(QRect(0,0,500,500));
+
+ page->mainFrame()->setHtml("<html><body>" \
+ "<input type='text' id='input1' style='font--family: serif' value='' maxlength='20'/><br>" \
+ "<canvas id='canvas1' width='500' height='500'/>" \
+ "<input type='password'/><br>" \
+ "<canvas id='canvas2' width='500' height='500'/>" \
+ "</body></html>");
+
+ page->mainFrame()->setFocus();
+
+ QVariant initialMicroFocus = page->inputMethodQuery(Qt::ImMicroFocus);
+ QVERIFY(initialMicroFocus.isValid());
+
+ page->mainFrame()->scroll(0,300);
+
+ QVariant currentMicroFocus = page->inputMethodQuery(Qt::ImMicroFocus);
+ QVERIFY(currentMicroFocus.isValid());
+
+ QCOMPARE(initialMicroFocus.toRect().translated(QPoint(0,-300)), currentMicroFocus.toRect());
+
+ delete view;
+}
+
+
QTEST_MAIN(tst_QGraphicsWebView)
#include "tst_qgraphicswebview.moc"
diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebelement/qwebelement.pro b/src/3rdparty/webkit/WebKit/qt/tests/qwebelement/qwebelement.pro
index 6777615..e915d60 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/qwebelement/qwebelement.pro
+++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebelement/qwebelement.pro
@@ -1,3 +1,3 @@
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../..
-exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
include(../tests.pri)
+exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/qwebframe.pro b/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/qwebframe.pro
index 6777615..e915d60 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/qwebframe.pro
+++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/qwebframe.pro
@@ -1,3 +1,3 @@
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../..
-exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
include(../tests.pri)
+exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
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 ca14f6c..bea7a67 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
@@ -57,6 +57,7 @@ class MyQObject : public QObject
Q_PROPERTY(int intProperty READ intProperty WRITE setIntProperty)
Q_PROPERTY(QVariant variantProperty READ variantProperty WRITE setVariantProperty)
Q_PROPERTY(QVariantList variantListProperty READ variantListProperty WRITE setVariantListProperty)
+ Q_PROPERTY(QVariantMap variantMapProperty READ variantMapProperty WRITE setVariantMapProperty)
Q_PROPERTY(QString stringProperty READ stringProperty WRITE setStringProperty)
Q_PROPERTY(QStringList stringListProperty READ stringListProperty WRITE setStringListProperty)
Q_PROPERTY(QByteArray byteArrayProperty READ byteArrayProperty WRITE setByteArrayProperty)
@@ -67,6 +68,7 @@ class MyQObject : public QObject
Q_PROPERTY(QKeySequence shortcut READ shortcut WRITE setShortcut)
Q_PROPERTY(CustomType propWithCustomType READ propWithCustomType WRITE setPropWithCustomType)
Q_PROPERTY(QWebElement webElementProperty READ webElementProperty WRITE setWebElementProperty)
+ Q_PROPERTY(QObject* objectStarProperty READ objectStarProperty WRITE setObjectStarProperty)
Q_ENUMS(Policy Strategy)
Q_FLAGS(Ability)
@@ -104,7 +106,13 @@ public:
m_hiddenValue(456.0),
m_writeOnlyValue(789),
m_readOnlyValue(987),
- m_qtFunctionInvoked(-1) { }
+ m_objectStar(0),
+ m_qtFunctionInvoked(-1)
+ {
+ m_variantMapValue.insert("a", QVariant(123));
+ m_variantMapValue.insert("b", QVariant(QLatin1String("foo")));
+ m_variantMapValue.insert("c", QVariant::fromValue<QObject*>(this));
+ }
~MyQObject() { }
@@ -129,6 +137,13 @@ public:
m_variantListValue = value;
}
+ QVariantMap variantMapProperty() const {
+ return m_variantMapValue;
+ }
+ void setVariantMapProperty(const QVariantMap &value) {
+ m_variantMapValue = value;
+ }
+
QString stringProperty() const {
return m_stringValue;
}
@@ -197,6 +212,15 @@ public:
m_customType = c;
}
+ QObject* objectStarProperty() const {
+ return m_objectStar;
+ }
+
+ void setObjectStarProperty(QObject* object) {
+ m_objectStar = object;
+ }
+
+
int qtFunctionInvoked() const {
return m_qtFunctionInvoked;
}
@@ -472,6 +496,7 @@ private:
int m_intValue;
QVariant m_variantValue;
QVariantList m_variantListValue;
+ QVariantMap m_variantMapValue;
QString m_stringValue;
QStringList m_stringListValue;
QByteArray m_byteArrayValue;
@@ -482,6 +507,7 @@ private:
QKeySequence m_shortcut;
QWebElement m_webElement;
CustomType m_customType;
+ QObject* m_objectStar;
int m_qtFunctionInvoked;
QVariantList m_actuals;
};
@@ -747,6 +773,21 @@ void tst_QWebFrame::getSetStaticProperty()
{
QString type;
+ QVariant ret = evalJSV("myObject.variantMapProperty", type);
+ QCOMPARE(type, sObject);
+ QCOMPARE(ret.type(), QVariant::Map);
+ QVariantMap vm = ret.value<QVariantMap>();
+ QCOMPARE(vm.size(), 3);
+ QCOMPARE(vm.value("a").toInt(), 123);
+ QCOMPARE(vm.value("b").toString(), QLatin1String("foo"));
+ QCOMPARE(vm.value("c").value<QObject*>(), m_myObject);
+ }
+ QCOMPARE(evalJS("myObject.variantMapProperty.a === 123"), sTrue);
+ QCOMPARE(evalJS("myObject.variantMapProperty.b === 'foo'"), sTrue);
+ QCOMPARE(evalJS("myObject.variantMapProperty.c.variantMapProperty.b === 'foo'"), sTrue);
+
+ {
+ QString type;
QVariant ret = evalJSV("myObject.stringListProperty", type);
QCOMPARE(type, sArray);
QCOMPARE(ret.type(), QVariant::List);
@@ -878,6 +919,21 @@ void tst_QWebFrame::getSetStaticProperty()
QCOMPARE(evalJS("myObject.readOnlyProperty = 654;"
"myObject.readOnlyProperty == 987"), sTrue);
QCOMPARE(m_myObject->readOnlyProperty(), 987);
+
+ // QObject* property
+ m_myObject->setObjectStarProperty(0);
+ QCOMPARE(m_myObject->objectStarProperty(), (QObject*)0);
+ QCOMPARE(evalJS("myObject.objectStarProperty == null"), sTrue);
+ QCOMPARE(evalJS("typeof myObject.objectStarProperty"), sObject);
+ QCOMPARE(evalJS("Boolean(myObject.objectStarProperty)"), sFalse);
+ QCOMPARE(evalJS("String(myObject.objectStarProperty) == 'null'"), sTrue);
+ QCOMPARE(evalJS("myObject.objectStarProperty.objectStarProperty"),
+ sUndefined);
+ m_myObject->setObjectStarProperty(this);
+ QCOMPARE(evalJS("myObject.objectStarProperty != null"), sTrue);
+ QCOMPARE(evalJS("typeof myObject.objectStarProperty"), sObject);
+ QCOMPARE(evalJS("Boolean(myObject.objectStarProperty)"), sTrue);
+ QCOMPARE(evalJS("String(myObject.objectStarProperty) != 'null'"), sTrue);
}
void tst_QWebFrame::getSetDynamicProperty()
@@ -2841,7 +2897,7 @@ void tst_QWebFrame::evaluateWillCauseRepaint()
#if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0)
QTest::qWaitForWindowShown(&view);
#else
- QTest::qWait(2000);
+ QTest::qWait(2000);
#endif
view.page()->mainFrame()->evaluateJavaScript(
diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebhistory/qwebhistory.pro b/src/3rdparty/webkit/WebKit/qt/tests/qwebhistory/qwebhistory.pro
index 6777615..e915d60 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/qwebhistory/qwebhistory.pro
+++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebhistory/qwebhistory.pro
@@ -1,3 +1,3 @@
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../..
-exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
include(../tests.pri)
+exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebhistoryinterface/qwebhistoryinterface.pro b/src/3rdparty/webkit/WebKit/qt/tests/qwebhistoryinterface/qwebhistoryinterface.pro
index 6777615..e915d60 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/qwebhistoryinterface/qwebhistoryinterface.pro
+++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebhistoryinterface/qwebhistoryinterface.pro
@@ -1,3 +1,3 @@
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../..
-exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
include(../tests.pri)
+exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebinspector/qwebinspector.pro b/src/3rdparty/webkit/WebKit/qt/tests/qwebinspector/qwebinspector.pro
index 6777615..e915d60 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/qwebinspector/qwebinspector.pro
+++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebinspector/qwebinspector.pro
@@ -1,3 +1,3 @@
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../..
-exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
include(../tests.pri)
+exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/qwebpage.pro b/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/qwebpage.pro
index 6777615..e915d60 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/qwebpage.pro
+++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/qwebpage.pro
@@ -1,3 +1,3 @@
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../..
-exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
include(../tests.pri)
+exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
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 1f97e69..f7eddd5 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
@@ -23,6 +23,7 @@
#include <QDir>
#include <QGraphicsWidget>
#include <QLineEdit>
+#include <QLocale>
#include <QMenu>
#include <QPushButton>
#include <QtTest/QtTest>
@@ -80,7 +81,8 @@ private slots:
void modified();
void contextMenuCrash();
void database();
- void createPlugin();
+ void createPluginWithPluginsEnabled();
+ void createPluginWithPluginsDisabled();
void destroyPlugin_data();
void destroyPlugin();
void createViewlessPlugin_data();
@@ -105,6 +107,8 @@ private slots:
void errorPageExtension();
void errorPageExtensionInIFrames();
void errorPageExtensionInFrameset();
+ void userAgentApplicationName();
+ void userAgentLocaleChange();
void crashTests_LazyInitializationOfMainFrame();
@@ -518,27 +522,20 @@ protected:
}
};
-void tst_QWebPage::createPlugin()
+static void createPlugin(QWebView *view)
{
- QSignalSpy loadSpy(m_view, SIGNAL(loadFinished(bool)));
+ QSignalSpy loadSpy(view, SIGNAL(loadFinished(bool)));
- PluginPage* newPage = new PluginPage(m_view);
- m_view->setPage(newPage);
+ PluginPage* newPage = new PluginPage(view);
+ view->setPage(newPage);
- // plugins not enabled by default, so the plugin shouldn't be loaded
- m_view->setHtml(QString("<html><body><object type='application/x-qt-plugin' classid='pushbutton' id='mybutton'/></body></html>"));
+ // type has to be application/x-qt-plugin
+ view->setHtml(QString("<html><body><object type='application/x-foobarbaz' classid='pushbutton' id='mybutton'/></body></html>"));
QTRY_COMPARE(loadSpy.count(), 1);
QCOMPARE(newPage->calls.count(), 0);
- m_view->settings()->setAttribute(QWebSettings::PluginsEnabled, true);
-
- // type has to be application/x-qt-plugin
- m_view->setHtml(QString("<html><body><object type='application/x-foobarbaz' classid='pushbutton' id='mybutton'/></body></html>"));
+ view->setHtml(QString("<html><body><object type='application/x-qt-plugin' classid='pushbutton' id='mybutton'/></body></html>"));
QTRY_COMPARE(loadSpy.count(), 2);
- QCOMPARE(newPage->calls.count(), 0);
-
- m_view->setHtml(QString("<html><body><object type='application/x-qt-plugin' classid='pushbutton' id='mybutton'/></body></html>"));
- QTRY_COMPARE(loadSpy.count(), 3);
QCOMPARE(newPage->calls.count(), 1);
{
PluginPage::CallInfo ci = newPage->calls.takeFirst();
@@ -569,11 +566,11 @@ void tst_QWebPage::createPlugin()
QCOMPARE(newPage->mainFrame()->evaluateJavaScript("mybutton.clicked.toString()").toString(),
QString::fromLatin1("function clicked() {\n [native code]\n}"));
- m_view->setHtml(QString("<html><body><table>"
+ view->setHtml(QString("<html><body><table>"
"<tr><object type='application/x-qt-plugin' classid='lineedit' id='myedit'/></tr>"
"<tr><object type='application/x-qt-plugin' classid='pushbutton' id='mybutton'/></tr>"
"</table></body></html>"), QUrl("http://foo.bar.baz"));
- QTRY_COMPARE(loadSpy.count(), 4);
+ QTRY_COMPARE(loadSpy.count(), 3);
QCOMPARE(newPage->calls.count(), 2);
{
PluginPage::CallInfo ci = newPage->calls.takeFirst();
@@ -605,14 +602,22 @@ void tst_QWebPage::createPlugin()
QVERIFY(ci.returnValue != 0);
QVERIFY(ci.returnValue->inherits("QPushButton"));
}
+}
- m_view->settings()->setAttribute(QWebSettings::PluginsEnabled, false);
-
- m_view->setHtml(QString("<html><body><object type='application/x-qt-plugin' classid='pushbutton' id='mybutton'/></body></html>"));
- QTRY_COMPARE(loadSpy.count(), 5);
- QCOMPARE(newPage->calls.count(), 0);
+void tst_QWebPage::createPluginWithPluginsEnabled()
+{
+ m_view->settings()->setAttribute(QWebSettings::PluginsEnabled, true);
+ createPlugin(m_view);
}
+void tst_QWebPage::createPluginWithPluginsDisabled()
+{
+ // Qt Plugins should be loaded by QtWebKit even when PluginsEnabled is
+ // false. The client decides whether a Qt plugin is enabled or not when
+ // it decides whether or not to instantiate it.
+ m_view->settings()->setAttribute(QWebSettings::PluginsEnabled, false);
+ createPlugin(m_view);
+}
// Standard base class for template PluginTracerPage. In tests it is used as interface.
class PluginCounterPage : public QWebPage {
@@ -1746,6 +1751,38 @@ void tst_QWebPage::errorPageExtensionInFrameset()
m_view->setPage(0);
}
+class FriendlyWebPage : public QWebPage
+{
+public:
+ friend class tst_QWebPage;
+};
+
+void tst_QWebPage::userAgentApplicationName()
+{
+ const QString oldApplicationName = QCoreApplication::applicationName();
+ FriendlyWebPage page;
+
+ const QString applicationNameMarker = QString::fromUtf8("StrangeName\342\210\236");
+ QCoreApplication::setApplicationName(applicationNameMarker);
+ QVERIFY(page.userAgentForUrl(QUrl()).contains(applicationNameMarker));
+
+ QCoreApplication::setApplicationName(oldApplicationName);
+}
+
+void tst_QWebPage::userAgentLocaleChange()
+{
+ FriendlyWebPage page;
+ m_view->setPage(&page);
+
+ const QString markerString = QString::fromLatin1(" nn-NO)");
+
+ if (page.userAgentForUrl(QUrl()).contains(markerString))
+ QSKIP("marker string already present", SkipSingle);
+
+ m_view->setLocale(QLocale(QString::fromLatin1("nn_NO")));
+ QVERIFY(page.userAgentForUrl(QUrl()).contains(markerString));
+}
+
void tst_QWebPage::crashTests_LazyInitializationOfMainFrame()
{
{
diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebplugindatabase/qwebplugindatabase.pro b/src/3rdparty/webkit/WebKit/qt/tests/qwebplugindatabase/qwebplugindatabase.pro
index 6777615..e915d60 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/qwebplugindatabase/qwebplugindatabase.pro
+++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebplugindatabase/qwebplugindatabase.pro
@@ -1,3 +1,3 @@
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../..
-exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
include(../tests.pri)
+exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebview/qwebview.pro b/src/3rdparty/webkit/WebKit/qt/tests/qwebview/qwebview.pro
index 6777615..e915d60 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/qwebview/qwebview.pro
+++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebview/qwebview.pro
@@ -1,3 +1,3 @@
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../../..
-exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
include(../tests.pri)
+exists($${TARGET}.qrc):RESOURCES += $${TARGET}.qrc
diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebview/tst_qwebview.cpp b/src/3rdparty/webkit/WebKit/qt/tests/qwebview/tst_qwebview.cpp
index ebcf4bb..100399e 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/qwebview/tst_qwebview.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebview/tst_qwebview.cpp
@@ -48,6 +48,7 @@ private slots:
void reusePage_data();
void reusePage();
+ void microFocusCoordinates();
void crashTests();
};
@@ -203,6 +204,31 @@ void tst_QWebView::crashTests()
QTRY_VERIFY(tester.m_executed); // If fail it means that the test wasn't executed.
}
+void tst_QWebView::microFocusCoordinates()
+{
+ QWebPage* page = new QWebPage;
+ QWebView* webView = new QWebView;
+ webView->setPage( page );
+
+ page->mainFrame()->setHtml("<html><body>" \
+ "<input type='text' id='input1' style='font--family: serif' value='' maxlength='20'/><br>" \
+ "<canvas id='canvas1' width='500' height='500'/>" \
+ "<input type='password'/><br>" \
+ "<canvas id='canvas2' width='500' height='500'/>" \
+ "</body></html>");
+
+ page->mainFrame()->setFocus();
+
+ QVariant initialMicroFocus = page->inputMethodQuery(Qt::ImMicroFocus);
+ QVERIFY(initialMicroFocus.isValid());
+
+ page->mainFrame()->scroll(0,50);
+
+ QVariant currentMicroFocus = page->inputMethodQuery(Qt::ImMicroFocus);
+ QVERIFY(currentMicroFocus.isValid());
+
+ QCOMPARE(initialMicroFocus.toRect().translated(QPoint(0,-50)), currentMicroFocus.toRect());
+}
QTEST_MAIN(tst_QWebView)
#include "tst_qwebview.moc"
diff --git a/src/3rdparty/webkit/WebKit/qt/tests/tests.pri b/src/3rdparty/webkit/WebKit/qt/tests/tests.pri
index 0a8f98c..525e662 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/tests.pri
+++ b/src/3rdparty/webkit/WebKit/qt/tests/tests.pri
@@ -2,6 +2,7 @@ TEMPLATE = app
CONFIG -= app_bundle
VPATH += $$_PRO_FILE_PWD_
+# Add the tst_ prefix, In QTDIR_build it's done by qttest_p4.prf
!CONFIG(QTDIR_build):TARGET = tst_$$TARGET
SOURCES += $${TARGET}.cpp
INCLUDEPATH += \
diff --git a/src/corelib/codecs/qiconvcodec.cpp b/src/corelib/codecs/qiconvcodec.cpp
index 0fcdf96..44a0a01 100644
--- a/src/corelib/codecs/qiconvcodec.cpp
+++ b/src/corelib/codecs/qiconvcodec.cpp
@@ -168,7 +168,7 @@ Q_GLOBAL_STATIC(QThreadStorage<QIconvCodec::IconvState *>, toUnicodeState)
QString QIconvCodec::convertToUnicode(const char* chars, int len, ConverterState *convState) const
{
if (utf16Codec == reinterpret_cast<QTextCodec *>(~0))
- return QString::fromAscii(chars, len);
+ return QString::fromLatin1(chars, len);
int invalidCount = 0;
int remainingCount = 0;
@@ -207,9 +207,9 @@ QString QIconvCodec::convertToUnicode(const char* chars, int len, ConverterState
static int reported = 0;
if (!reported++) {
fprintf(stderr,
- "QIconvCodec::convertToUnicode: using ASCII for conversion, iconv_open failed\n");
+ "QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed\n");
}
- return QString::fromAscii(chars, len);
+ return QString::fromLatin1(chars, len);
}
*pstate = new IconvState(cd);
@@ -273,14 +273,14 @@ QString QIconvCodec::convertToUnicode(const char* chars, int len, ConverterState
// some other error
// note, cannot use qWarning() since we are implementing the codecForLocale :)
- perror("QIconvCodec::convertToUnicode: using ASCII for conversion, iconv failed");
+ perror("QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv failed");
if (!convState) {
// reset state
iconv(state->cd, 0, &inBytesLeft, 0, &outBytesLeft);
}
- return QString::fromAscii(chars, len);
+ return QString::fromLatin1(chars, len);
}
} while (inBytesLeft != 0);
@@ -353,12 +353,12 @@ QByteArray QIconvCodec::convertFromUnicode(const QChar *uc, int len, ConverterSt
state = new IconvState(QIconvCodec::createIconv_t(0, UTF16));
if (state->cd == reinterpret_cast<iconv_t>(-1)) {
if (!setByteOrder(state->cd)) {
- perror("QIconvCodec::convertFromUnicode: using ASCII for conversion, iconv failed for BOM");
+ perror("QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv failed for BOM");
iconv_close(state->cd);
state->cd = reinterpret_cast<iconv_t>(-1);
- return QString(uc, len).toAscii();
+ return QString(uc, len).toLatin1();
}
}
}
@@ -366,9 +366,9 @@ QByteArray QIconvCodec::convertFromUnicode(const QChar *uc, int len, ConverterSt
static int reported = 0;
if (!reported++) {
fprintf(stderr,
- "QIconvCodec::convertFromUnicode: using ASCII for conversion, iconv_open failed\n");
+ "QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed\n");
}
- return QString(uc, len).toAscii();
+ return QString(uc, len).toLatin1();
}
size_t outBytesLeft = len;
@@ -425,12 +425,12 @@ QByteArray QIconvCodec::convertFromUnicode(const QChar *uc, int len, ConverterSt
default:
{
// note, cannot use qWarning() since we are implementing the codecForLocale :)
- perror("QIconvCodec::convertFromUnicode: using ASCII for conversion, iconv failed");
+ perror("QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv failed");
// reset to initial state
iconv(state->cd, 0, &inBytesLeft, 0, &outBytesLeft);
- return QString(uc, len).toAscii();
+ return QString(uc, len).toLatin1();
}
}
}
diff --git a/src/corelib/codecs/qtextcodec.cpp b/src/corelib/codecs/qtextcodec.cpp
index 59a601e..c9fbec8 100644
--- a/src/corelib/codecs/qtextcodec.cpp
+++ b/src/corelib/codecs/qtextcodec.cpp
@@ -105,7 +105,7 @@
QT_BEGIN_NAMESPACE
-#ifndef QT_NO_TEXTCODECPLUGIN
+#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_TEXTCODECPLUGIN)
Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
(QTextCodecFactoryInterface_iid, QLatin1String("/codecs")))
#endif
@@ -149,7 +149,7 @@ static bool nameMatch(const QByteArray &name, const QByteArray &test)
static QTextCodec *createForName(const QByteArray &name)
{
-#ifndef QT_NO_TEXTCODECPLUGIN
+#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_TEXTCODECPLUGIN)
QFactoryLoader *l = loader();
QStringList keys = l->keys();
for (int i = 0; i < keys.size(); ++i) {
@@ -1141,7 +1141,7 @@ QList<QByteArray> QTextCodec::availableCodecs()
locker.unlock();
#endif
-#ifndef QT_NO_TEXTCODECPLUGIN
+#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_TEXTCODECPLUGIN)
QFactoryLoader *l = loader();
QStringList keys = l->keys();
for (int i = 0; i < keys.size(); ++i) {
@@ -1181,7 +1181,7 @@ QList<int> QTextCodec::availableMibs()
locker.unlock();
#endif
-#ifndef QT_NO_TEXTCODECPLUGIN
+#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_TEXTCODECPLUGIN)
QFactoryLoader *l = loader();
QStringList keys = l->keys();
for (int i = 0; i < keys.size(); ++i) {
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp
index dfa2c17..373c0b4 100644
--- a/src/corelib/global/qglobal.cpp
+++ b/src/corelib/global/qglobal.cpp
@@ -2079,7 +2079,28 @@ static void mac_default_handler(const char *msg)
}
#endif // Q_CC_MWERKS && Q_OS_MACX
-
+#if !defined(Q_OS_WIN) && !defined(QT_NO_THREAD) && !defined(Q_OS_INTEGRITY) && !defined(Q_OS_QNX) && \
+ defined(_POSIX_THREAD_SAFE_FUNCTIONS) && _POSIX_VERSION >= 200112L
+namespace {
+ // There are two incompatible versions of strerror_r:
+ // a) the XSI/POSIX.1 version, which returns an int,
+ // indicating success or not
+ // b) the GNU version, which returns a char*, which may or may not
+ // be the beginning of the buffer we used
+ // The GNU libc manpage for strerror_r says you should use the the XSI
+ // version in portable code. However, it's impossible to do that if
+ // _GNU_SOURCE is defined so we use C++ overloading to decide what to do
+ // depending on the return type
+ static inline QString fromstrerror_helper(int, const QByteArray &buf)
+ {
+ return QString::fromLocal8Bit(buf);
+ }
+ static inline QString fromstrerror_helper(const char *str, const QByteArray &)
+ {
+ return QString::fromLocal8Bit(str);
+ }
+}
+#endif
QString qt_error_string(int errorCode)
{
@@ -2122,12 +2143,9 @@ QString qt_error_string(int errorCode)
if (ret.isEmpty() && errorCode == ERROR_MOD_NOT_FOUND)
ret = QString::fromLatin1("The specified module could not be found.");
-
#elif !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && _POSIX_VERSION >= 200112L && !defined(Q_OS_INTEGRITY) && !defined(Q_OS_QNX)
-
QByteArray buf(1024, '\0');
- strerror_r(errorCode, buf.data(), buf.size());
- ret = QString::fromLocal8Bit(buf.constData());
+ ret = fromstrerror_helper(strerror_r(errorCode, buf.data(), buf.size()), buf);
#else
ret = QString::fromLocal8Bit(strerror(errorCode));
#endif
diff --git a/src/corelib/io/qiodevice.cpp b/src/corelib/io/qiodevice.cpp
index f2cef4e1..223df9b 100644
--- a/src/corelib/io/qiodevice.cpp
+++ b/src/corelib/io/qiodevice.cpp
@@ -755,7 +755,6 @@ qint64 QIODevice::bytesToWrite() const
qint64 QIODevice::read(char *data, qint64 maxSize)
{
Q_D(QIODevice);
- CHECK_READABLE(read, qint64(-1));
#if defined QIODEVICE_DEBUG
printf("%p QIODevice::read(%p, %d), d->pos = %d, d->buffer.size() = %d\n",
@@ -786,13 +785,13 @@ qint64 QIODevice::read(char *data, qint64 maxSize)
do {
// Try reading from the buffer.
int lastReadChunkSize = d->buffer.read(data, maxSize);
- *d->pPos += lastReadChunkSize;
- readSoFar += lastReadChunkSize;
- // fast exit when satisfied by buffer
- if (lastReadChunkSize == maxSize && !(d->openMode & Text))
- return readSoFar;
-
if (lastReadChunkSize > 0) {
+ *d->pPos += lastReadChunkSize;
+ readSoFar += lastReadChunkSize;
+ // fast exit when satisfied by buffer
+ if (lastReadChunkSize == maxSize && !(d->openMode & Text))
+ return readSoFar;
+
data += lastReadChunkSize;
maxSize -= lastReadChunkSize;
#if defined QIODEVICE_DEBUG
@@ -811,6 +810,9 @@ qint64 QIODevice::read(char *data, qint64 maxSize)
}
}
+ if (!maxSize)
+ return readSoFar;
+
if ((d->openMode & Unbuffered) == 0 && maxSize < QIODEVICE_BUFFERSIZE) {
// In buffered mode, we try to fill up the QIODevice buffer before
// we do anything else.
diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp
index a60f206..4e580dd 100644
--- a/src/corelib/io/qurl.cpp
+++ b/src/corelib/io/qurl.cpp
@@ -2997,7 +2997,9 @@ bool qt_check_std3rules(const QChar *uc, int len)
// only LDH is present
if (c == '-' || (c >= '0' && c <= '9')
|| (c >= 'A' && c <= 'Z')
- || (c >= 'a' && c <= 'z'))
+ || (c >= 'a' && c <= 'z')
+ //underscore is not supposed to be allowed, but other browser accept it (QTBUG-7434)
+ || c == '_')
continue;
return false;
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index bf2e2e4..609e6b3 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -514,7 +514,7 @@ QCoreApplication::QCoreApplication(int &argc, char **argv)
{
init();
QCoreApplicationPrivate::eventDispatcher->startingUp();
-#if defined(Q_OS_SYMBIAN) && !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#if defined(Q_OS_SYMBIAN) && !defined(QT_NO_LIBRARY)
// Refresh factoryloader, as text codecs are requested during lib path
// resolving process and won't be therefore properly loaded.
// Unknown if this is symbian specific issue.
@@ -2189,7 +2189,7 @@ QString QCoreApplication::applicationVersion()
return coreappdata()->applicationVersion;
}
-#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
Q_GLOBAL_STATIC_WITH_ARGS(QMutex, libraryPathMutex, (QMutex::Recursive))
@@ -2291,13 +2291,11 @@ QStringList QCoreApplication::libraryPaths()
*/
void QCoreApplication::setLibraryPaths(const QStringList &paths)
{
-#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
QMutexLocker locker(libraryPathMutex());
if (!coreappdata()->app_libpaths)
coreappdata()->app_libpaths = new QStringList;
*(coreappdata()->app_libpaths) = paths;
QFactoryLoader::refreshAll();
-#endif
}
/*!
@@ -2318,7 +2316,6 @@ void QCoreApplication::setLibraryPaths(const QStringList &paths)
*/
void QCoreApplication::addLibraryPath(const QString &path)
{
-#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
if (path.isEmpty())
return;
@@ -2333,7 +2330,6 @@ void QCoreApplication::addLibraryPath(const QString &path)
coreappdata()->app_libpaths->prepend(canonicalPath);
QFactoryLoader::refreshAll();
}
-#endif
}
/*!
@@ -2344,7 +2340,6 @@ void QCoreApplication::addLibraryPath(const QString &path)
*/
void QCoreApplication::removeLibraryPath(const QString &path)
{
-#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
if (path.isEmpty())
return;
@@ -2356,7 +2351,6 @@ void QCoreApplication::removeLibraryPath(const QString &path)
QString canonicalPath = QDir(path).canonicalPath();
coreappdata()->app_libpaths->removeAll(canonicalPath);
QFactoryLoader::refreshAll();
-#endif
}
#endif //QT_NO_LIBRARY
diff --git a/src/corelib/kernel/qeventdispatcher_symbian.cpp b/src/corelib/kernel/qeventdispatcher_symbian.cpp
index 3b86e89..a6d486e 100644
--- a/src/corelib/kernel/qeventdispatcher_symbian.cpp
+++ b/src/corelib/kernel/qeventdispatcher_symbian.cpp
@@ -43,7 +43,6 @@
#include <private/qthread_p.h>
#include <qcoreapplication.h>
#include <private/qcoreapplication_p.h>
-#include <qdatetime.h>
#include <unistd.h>
#include <errno.h>
@@ -636,6 +635,74 @@ void QSocketActiveObject::deleteLater()
}
}
+#ifdef QT_SYMBIAN_PRIORITY_DROP
+class QIdleDetectorThread
+{
+public:
+ QIdleDetectorThread()
+ : m_state(STATE_RUN), m_stop(false)
+ {
+ qt_symbian_throwIfError(m_lock.CreateLocal(0));
+ TInt err = m_idleDetectorThread.Create(KNullDesC(), &idleDetectorThreadFunc, 1024, NULL, this);
+ if (err != KErrNone)
+ m_lock.Close();
+ qt_symbian_throwIfError(err);
+ m_idleDetectorThread.SetPriority(EPriorityAbsoluteBackgroundNormal);
+ m_idleDetectorThread.Resume();
+ }
+
+ ~QIdleDetectorThread()
+ {
+ // close down the idle thread because if corelib is loaded temporarily, this would leak threads into the host process
+ m_stop = true;
+ m_lock.Signal();
+ m_idleDetectorThread.SetPriority(EPriorityNormal);
+ TRequestStatus s;
+ m_idleDetectorThread.Logon(s);
+ User::WaitForRequest(s);
+ m_idleDetectorThread.Close();
+ m_lock.Close();
+ }
+
+ void kick()
+ {
+ m_state = STATE_KICKED;
+ m_lock.Signal();
+ }
+
+ bool hasRun()
+ {
+ return m_state == STATE_RUN;
+ }
+
+private:
+ static TInt idleDetectorThreadFunc(TAny* self)
+ {
+ static_cast<QIdleDetectorThread*>(self)->IdleLoop();
+ return KErrNone;
+ }
+
+ void IdleLoop()
+ {
+ while (!m_stop) {
+ m_lock.Wait();
+ m_state = STATE_RUN;
+ }
+ }
+
+private:
+ enum IdleStates {STATE_KICKED, STATE_RUN} m_state;
+ bool m_stop;
+ RThread m_idleDetectorThread;
+ RSemaphore m_lock;
+};
+
+Q_GLOBAL_STATIC(QIdleDetectorThread, idleDetectorThread);
+
+const int maxBusyTime = 2000; // maximum time we allow idle detector to be blocked before worrying, in milliseconds
+const int baseDelay = 1000; // minimum delay time used when backing off to allow idling, in microseconds
+#endif
+
QEventDispatcherSymbian::QEventDispatcherSymbian(QObject *parent)
: QAbstractEventDispatcher(parent),
m_selectThread(0),
@@ -647,11 +714,15 @@ QEventDispatcherSymbian::QEventDispatcherSymbian(QObject *parent)
m_iterationCount(0),
m_noSocketEvents(false)
{
+#ifdef QT_SYMBIAN_PRIORITY_DROP
+ m_delay = baseDelay;
+ m_avgEventTime = 0;
+ idleDetectorThread();
+#endif
}
QEventDispatcherSymbian::~QEventDispatcherSymbian()
{
- m_processHandle.Close();
}
void QEventDispatcherSymbian::startingUp()
@@ -720,23 +791,7 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla
m_interrupt = false;
#ifdef QT_SYMBIAN_PRIORITY_DROP
- /*
- * This QTime variable is used to measure the time it takes to finish
- * the event loop. If we take too long in the loop, other processes
- * may be starved and killed. After the first event has completed, we
- * take the current time, and if the remaining events take longer than
- * a preset time, we temporarily lower the priority to force a context
- * switch. For applications that do not take unecessarily long in the
- * event loop, the priority will not be altered.
- */
- QTime time;
- enum {
- FirstRun,
- SubsequentRun,
- TimeStarted
- } timeState = FirstRun;
-
- TProcessPriority priority;
+ QTime eventTimer;
#endif
while (1) {
@@ -752,10 +807,18 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla
}
#ifdef QT_SYMBIAN_PRIORITY_DROP
- if (timeState == SubsequentRun) {
- time.start();
- timeState = TimeStarted;
+ if (idleDetectorThread()->hasRun()) {
+ if (m_delay > baseDelay)
+ m_delay -= baseDelay;
+ m_lastIdleRequestTimer.start();
+ idleDetectorThread()->kick();
+ } else if (m_lastIdleRequestTimer.elapsed() > maxBusyTime) {
+ User::AfterHighRes(m_delay);
+ // allow delay to be up to 1/4 of execution time
+ if (!idleDetectorThread()->hasRun() && m_delay*3 < m_avgEventTime)
+ m_delay += baseDelay;
}
+ eventTimer.start();
#endif
TInt error;
@@ -765,6 +828,12 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla
CActiveScheduler::Current()->Error(error);
}
+#ifdef QT_SYMBIAN_PRIORITY_DROP
+ int eventDur = eventTimer.elapsed()*1000;
+ // average is calcualted as a 5% decaying exponential average
+ m_avgEventTime = (m_avgEventTime * 95 + eventDur * 5) / 100;
+#endif
+
if (!handledSymbianEvent) {
qFatal("QEventDispatcherSymbian::processEvents(): Caught Symbian stray signal");
}
@@ -773,20 +842,6 @@ bool QEventDispatcherSymbian::processEvents ( QEventLoop::ProcessEventsFlags fla
break;
}
block = false;
-#ifdef QT_SYMBIAN_PRIORITY_DROP
- if (timeState == TimeStarted && time.elapsed() > 100) {
- priority = m_processHandle.Priority();
- m_processHandle.SetPriority(EPriorityBackground);
- time.start();
- // Slight chance of race condition in the next lines, but nothing fatal
- // will happen, just wrong priority.
- if (m_processHandle.Priority() == EPriorityBackground) {
- m_processHandle.SetPriority(priority);
- }
- }
- if (timeState == FirstRun)
- timeState = SubsequentRun;
-#endif
};
emit awake();
diff --git a/src/corelib/kernel/qeventdispatcher_symbian_p.h b/src/corelib/kernel/qeventdispatcher_symbian_p.h
index 5281199..05758ca 100644
--- a/src/corelib/kernel/qeventdispatcher_symbian_p.h
+++ b/src/corelib/kernel/qeventdispatcher_symbian_p.h
@@ -62,6 +62,7 @@
#include <qmutex.h>
#include <qwaitcondition.h>
#include <qsocketnotifier.h>
+#include <qdatetime.h>
#include <e32base.h>
@@ -280,7 +281,9 @@ private:
QList<QActiveObject *> m_deferredActiveObjects;
- RProcess m_processHandle;
+ int m_delay;
+ int m_avgEventTime;
+ QTime m_lastIdleRequestTimer;
};
#ifdef QT_DEBUG
diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp
index 87decc6..62d565a 100644
--- a/src/corelib/plugin/qfactoryloader.cpp
+++ b/src/corelib/plugin/qfactoryloader.cpp
@@ -41,7 +41,7 @@
#include "qfactoryloader_p.h"
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
#include "qfactoryinterface.h"
#include "qmap.h"
#include <qdir.h>
diff --git a/src/corelib/plugin/qfactoryloader_p.h b/src/corelib/plugin/qfactoryloader_p.h
index 51426ba..10e6e2a 100644
--- a/src/corelib/plugin/qfactoryloader_p.h
+++ b/src/corelib/plugin/qfactoryloader_p.h
@@ -57,7 +57,7 @@
#include "QtCore/qstringlist.h"
#include "private/qlibrary_p.h"
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
QT_BEGIN_NAMESPACE
diff --git a/src/corelib/tools/qbytearray.cpp b/src/corelib/tools/qbytearray.cpp
index c5f70b0..29a7263 100644
--- a/src/corelib/tools/qbytearray.cpp
+++ b/src/corelib/tools/qbytearray.cpp
@@ -3814,7 +3814,7 @@ QByteArray QByteArray::number(double n, char f, int prec)
accepting a \c{const char *} expected to be '\\0'-terminated will
fail.
- \sa data(), constData()
+ \sa setRawData(), data(), constData()
*/
QByteArray QByteArray::fromRawData(const char *data, int size)
@@ -3834,6 +3834,37 @@ QByteArray QByteArray::fromRawData(const char *data, int size)
}
/*!
+ \since 4.7
+
+ Resets the QByteArray to use the first \a size bytes of the
+ \a data array. The bytes are \e not copied. The QByteArray will
+ contain the \a data pointer. The caller guarantees that \a data
+ will not be deleted or modified as long as this QByteArray and any
+ copies of it exist that have not been modified.
+
+ This function can be used instead of fromRawData() to re-use
+ existings QByteArray objects to save memory re-allocations.
+
+ \sa fromRawData(), data(), constData()
+*/
+QByteArray &QByteArray::setRawData(const char *data, uint size)
+{
+ if (d->ref != 1 || d->alloc) {
+ *this = fromRawData(data, size);
+ } else {
+ if (data) {
+ d->data = const_cast<char *>(data);
+ } else {
+ d->data = d->array;
+ size = 0;
+ }
+ d->alloc = d->size = size;
+ *d->array = '\0';
+ }
+ return *this;
+}
+
+/*!
Returns a decoded copy of the Base64 array \a base64. Input is not checked
for validity; invalid characters in the input are skipped, enabling the
decoding process to continue with subsequent characters.
@@ -4228,12 +4259,6 @@ QByteArray QByteArray::toPercentEncoding(const QByteArray &exclude, const QByteA
*/
/*!
- \fn QByteArray& QByteArray::setRawData(const char *a, uint n)
-
- Use fromRawData() instead.
-*/
-
-/*!
\fn void QByteArray::resetRawData(const char *data, uint n)
Use clear() instead.
diff --git a/src/corelib/tools/qbytearray.h b/src/corelib/tools/qbytearray.h
index 0b77512..a3fe3f5 100644
--- a/src/corelib/tools/qbytearray.h
+++ b/src/corelib/tools/qbytearray.h
@@ -299,6 +299,7 @@ public:
QByteArray &setNum(qulonglong, int base = 10);
QByteArray &setNum(float, char f = 'g', int prec = 6);
QByteArray &setNum(double, char f = 'g', int prec = 6);
+ QByteArray &setRawData(const char *a, uint n); // ### Qt 5: use an int
static QByteArray number(int, int base = 10);
static QByteArray number(uint, int base = 10);
@@ -343,8 +344,6 @@ public:
inline QT3_SUPPORT QByteArray& duplicate(const QByteArray& a) { *this = a; return *this; }
inline QT3_SUPPORT QByteArray& duplicate(const char *a, uint n)
{ *this = QByteArray(a, n); return *this; }
- inline QT3_SUPPORT QByteArray& setRawData(const char *a, uint n)
- { *this = fromRawData(a, n); return *this; }
inline QT3_SUPPORT void resetRawData(const char *, uint) { clear(); }
inline QT3_SUPPORT QByteArray lower() const { return toLower(); }
inline QT3_SUPPORT QByteArray upper() const { return toUpper(); }
diff --git a/src/corelib/tools/qbytedata_p.h b/src/corelib/tools/qbytedata_p.h
index c48bb33..08249e0 100644
--- a/src/corelib/tools/qbytedata_p.h
+++ b/src/corelib/tools/qbytedata_p.h
@@ -84,7 +84,7 @@ public:
}
- inline void append(QByteArray& bd)
+ inline void append(const QByteArray& bd)
{
if (bd.isEmpty())
return;
diff --git a/src/corelib/tools/qlist.cpp b/src/corelib/tools/qlist.cpp
index 6f5bb9b..6cc6fc1 100644
--- a/src/corelib/tools/qlist.cpp
+++ b/src/corelib/tools/qlist.cpp
@@ -853,9 +853,7 @@ void **QListData::erase(void **xi)
same as takeAt(0). This function assumes the list is not empty. To
avoid failure, call isEmpty() before calling this function.
- This operation is very fast (\l{constant time}), because QList
- preallocates extra space on both sides of its internal buffer to
- allow for fast growth at both ends of the list.
+ This operation takes \l{constant time}.
If you don't use the return value, removeFirst() is more
efficient.
@@ -870,9 +868,7 @@ void **QListData::erase(void **xi)
not empty. To avoid failure, call isEmpty() before calling this
function.
- This operation is very fast (\l{constant time}), because QList
- preallocates extra space on both sides of its internal buffer to
- allow for fast growth at both ends of the list.
+ This operation takes \l{constant time}.
If you don't use the return value, removeLast() is more
efficient.
diff --git a/src/corelib/tools/qscopedpointer.cpp b/src/corelib/tools/qscopedpointer.cpp
index e7dd769..b06112d 100644
--- a/src/corelib/tools/qscopedpointer.cpp
+++ b/src/corelib/tools/qscopedpointer.cpp
@@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE
called resource acquisition is initialization(RAII).
QScopedPointer guarantees that the object pointed to will get deleted when
- the current scope dissapears.
+ the current scope disappears.
Consider this function which does heap allocations, and have various exit points:
@@ -227,7 +227,7 @@ QT_BEGIN_NAMESPACE
/*!
\class QScopedArrayPointer
-
+
\brief The QScopedArrayPointer class stores a pointer to a
dynamically allocated array of objects, and deletes it upon
destruction.
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp
index 2f12b80..0169b20 100644
--- a/src/corelib/tools/qstring.cpp
+++ b/src/corelib/tools/qstring.cpp
@@ -7056,7 +7056,7 @@ void QString::updateProperties() const
'\\0'-terminated string (although utf16() does, at the cost of
copying the raw data).
- \sa fromUtf16()
+ \sa fromUtf16(), setRawData()
*/
QString QString::fromRawData(const QChar *unicode, int size)
{
@@ -7075,6 +7075,44 @@ QString QString::fromRawData(const QChar *unicode, int size)
return QString(x, 0);
}
+/*!
+ \since 4.7
+
+ Resets the QString to use the first \a size Unicode characters
+ in the array \a unicode. The data in \a unicode is \e not
+ copied. The caller must be able to guarantee that \a unicode will
+ not be deleted or modified as long as the QString (or an
+ unmodified copy of it) exists.
+
+ This function can be used instead of fromRawData() to re-use
+ existings QString objects to save memory re-allocations.
+
+ \sa fromRawData()
+*/
+QString &QString::setRawData(const QChar *unicode, int size)
+{
+ if (d->ref != 1 || d->alloc) {
+ *this = fromRawData(unicode, size);
+ } else {
+#ifdef QT3_SUPPORT
+ if (d->asciiCache) {
+ Q_ASSERT(asciiCache);
+ asciiCache->remove(d);
+ }
+#endif
+ if (unicode) {
+ d->data = (ushort *)unicode;
+ } else {
+ d->data = d->array;
+ size = 0;
+ }
+ d->alloc = d->size = size;
+ *d->array = '\0';
+ d->clean = d->asciiCache = d->simpletext = d->righttoleft = d->capacity = 0;
+ }
+ return *this;
+}
+
/*! \class QLatin1String
\brief The QLatin1String class provides a thin wrapper around an US-ASCII/Latin-1 encoded string literal.
diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h
index ea12c2f..a1c4e77 100644
--- a/src/corelib/tools/qstring.h
+++ b/src/corelib/tools/qstring.h
@@ -343,6 +343,7 @@ public:
int toWCharArray(wchar_t *array) const;
static QString fromWCharArray(const wchar_t *, int size = -1);
+ QString &setRawData(const QChar *unicode, int size);
QString &setUnicode(const QChar *unicode, int size);
inline QString &setUtf16(const ushort *utf16, int size);
diff --git a/src/corelib/xml/qxmlstream.g b/src/corelib/xml/qxmlstream.g
index 1b882e0..e91408f 100644
--- a/src/corelib/xml/qxmlstream.g
+++ b/src/corelib/xml/qxmlstream.g
@@ -748,7 +748,7 @@ bool QXmlStreamReaderPrivate::parse()
state_stack[tos] = 0;
return true;
} else if (act > 0) {
- if (++tos == stack_size)
+ if (++tos == stack_size-1)
reallocateStack();
Value &val = sym_stack[tos];
diff --git a/src/corelib/xml/qxmlstream_p.h b/src/corelib/xml/qxmlstream_p.h
index ac421cf..f6ab3a1 100644
--- a/src/corelib/xml/qxmlstream_p.h
+++ b/src/corelib/xml/qxmlstream_p.h
@@ -61,7 +61,7 @@
class QXmlStreamReader_Table
{
public:
- enum {
+ enum VariousConstants {
EOF_SYMBOL = 0,
AMPERSAND = 5,
ANY = 41,
@@ -1242,7 +1242,7 @@ bool QXmlStreamReaderPrivate::parse()
state_stack[tos] = 0;
return true;
} else if (act > 0) {
- if (++tos == stack_size)
+ if (++tos == stack_size-1)
reallocateStack();
Value &val = sym_stack[tos];
diff --git a/src/dbus/qdbusinterface.cpp b/src/dbus/qdbusinterface.cpp
index 7cc43ed..b989cab 100644
--- a/src/dbus/qdbusinterface.cpp
+++ b/src/dbus/qdbusinterface.cpp
@@ -260,7 +260,7 @@ void *QDBusInterface::qt_metacast(const char *_clname)
int QDBusInterface::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QDBusAbstractInterface::qt_metacall(_c, _id, _a);
- if (_id < 0 || !d_func()->isValid)
+ if (_id < 0 || !d_func()->isValid || !d_func()->metaObject)
return _id;
return d_func()->metacall(_c, _id, _a);
}
diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp
index bc0c65e..096e4bf 100644
--- a/src/declarative/graphicsitems/qdeclarativeitem.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp
@@ -1268,11 +1268,6 @@ QDeclarativeKeysAttached *QDeclarativeKeysAttached::qmlAttachedProperties(QObjec
*/
/*!
- \property QDeclarativeItem::effect
- \internal
-*/
-
-/*!
\property QDeclarativeItem::focus
\internal
*/
diff --git a/src/gui/accessible/qaccessible.cpp b/src/gui/accessible/qaccessible.cpp
index a55a061..0921bdb 100644
--- a/src/gui/accessible/qaccessible.cpp
+++ b/src/gui/accessible/qaccessible.cpp
@@ -389,7 +389,7 @@ QT_BEGIN_NAMESPACE
\internal
*/
-#if !defined(QT_NO_LIBRARY) && (!defined(QT_NO_SETTINGS) || !defined(Q_OS_WIN))
+#ifndef QT_NO_LIBRARY
Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
(QAccessibleFactoryInterface_iid, QLatin1String("/accessible")))
#endif
@@ -532,7 +532,7 @@ QAccessibleInterface *QAccessible::queryAccessibleInterface(QObject *object)
if (iface)
return iface;
}
-#if !defined(QT_NO_LIBRARY) && (!defined(QT_NO_SETTINGS) || !defined(Q_OS_WIN))
+#ifndef QT_NO_LIBRARY
QAccessibleFactoryInterface *factory = qobject_cast<QAccessibleFactoryInterface*>(loader()->instance(cn));
if (factory) {
iface = factory->create(cn, object);
diff --git a/src/gui/dialogs/qfiledialog.h b/src/gui/dialogs/qfiledialog.h
index 97fac4e..16cb317 100644
--- a/src/gui/dialogs/qfiledialog.h
+++ b/src/gui/dialogs/qfiledialog.h
@@ -67,6 +67,7 @@ class Q_GUI_EXPORT QFileDialog : public QDialog
{
Q_OBJECT
Q_ENUMS(ViewMode FileMode AcceptMode Option)
+ Q_FLAGS(Options)
Q_PROPERTY(ViewMode viewMode READ viewMode WRITE setViewMode)
Q_PROPERTY(FileMode fileMode READ fileMode WRITE setFileMode)
Q_PROPERTY(AcceptMode acceptMode READ acceptMode WRITE setAcceptMode)
diff --git a/src/gui/effects/qgraphicseffect.cpp b/src/gui/effects/qgraphicseffect.cpp
index ce4ce6a..5e4e49e 100644
--- a/src/gui/effects/qgraphicseffect.cpp
+++ b/src/gui/effects/qgraphicseffect.cpp
@@ -326,7 +326,7 @@ QPixmap QGraphicsEffectSource::pixmap(Qt::CoordinateSystem system, QPoint *offse
}
QPixmap pm;
- if (d->m_cachedSystem == system && d->m_cachedMode == mode)
+ if (item && d->m_cachedSystem == system && d->m_cachedMode == mode)
QPixmapCache::find(d->m_cacheKey, &pm);
if (pm.isNull()) {
diff --git a/src/gui/egl/qegl_p.h b/src/gui/egl/qegl_p.h
index 6c562ef..4fc1338 100644
--- a/src/gui/egl/qegl_p.h
+++ b/src/gui/egl/qegl_p.h
@@ -154,7 +154,13 @@ QT_BEGIN_NAMESPACE
// Declare/define the bits of EGL_KHR_image_base we need:
#if !defined(EGL_KHR_image) && !defined(EGL_KHR_image_base)
+#ifdef Q_OS_SYMBIAN
+//symbian version of eglext.h differs from the khronos reference
+typedef int EGLImageKHR;
+#else
typedef void *EGLImageKHR;
+#endif
+
#define EGL_NO_IMAGE_KHR ((EGLImageKHR)0)
#define EGL_IMAGE_PRESERVED_KHR 0x30D2
#define EGL_KHR_image_base
diff --git a/src/gui/egl/qegl_qws.cpp b/src/gui/egl/qegl_qws.cpp
index 56383a5..50db397 100644
--- a/src/gui/egl/qegl_qws.cpp
+++ b/src/gui/egl/qegl_qws.cpp
@@ -94,7 +94,7 @@ void QEglProperties::setPaintDeviceFormat(QPaintDevice *dev)
EGLNativeDisplayType QEgl::nativeDisplay()
{
- return EGL_DEFAULT_DISPLAY;
+ return EGLNativeDisplayType(EGL_DEFAULT_DISPLAY);
}
EGLNativeWindowType QEgl::nativeWindow(QWidget* widget)
diff --git a/src/gui/egl/qegl_stub.cpp b/src/gui/egl/qegl_stub.cpp
index 0bd3451..86a7aab 100644
--- a/src/gui/egl/qegl_stub.cpp
+++ b/src/gui/egl/qegl_stub.cpp
@@ -183,14 +183,6 @@ int QEglContext::configAttrib(int name) const
return 0;
}
-typedef EGLImageKHR (EGLAPIENTRY *_eglCreateImageKHR)(EGLDisplay, EGLContext, EGLenum, EGLClientBuffer, const EGLint*);
-typedef EGLBoolean (EGLAPIENTRY *_eglDestroyImageKHR)(EGLDisplay, EGLImageKHR);
-
-// Defined in qegl.cpp:
-static _eglCreateImageKHR qt_eglCreateImageKHR = 0;
-static _eglDestroyImageKHR qt_eglDestroyImageKHR = 0;
-
-
EGLDisplay QEgl::display()
{
NOEGL
diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index 326f130..65edb2a 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -1812,7 +1812,7 @@ void QGraphicsItem::setFlags(GraphicsItemFlags flags)
const quint32 geomChangeFlagsMask = (ItemClipsChildrenToShape | ItemClipsToShape | ItemIgnoresTransformations | ItemIsSelectable);
bool fullUpdate = (quint32(flags) & geomChangeFlagsMask) != (d_ptr->flags & geomChangeFlagsMask);
if (fullUpdate)
- d_ptr->paintedViewBoundingRectsNeedRepaint = 1;
+ d_ptr->updatePaintedViewBoundingRects(/*children=*/true);
// Keep the old flags to compare the diff.
GraphicsItemFlags oldFlags = GraphicsItemFlags(d_ptr->flags);
@@ -5432,6 +5432,24 @@ void QGraphicsItemPrivate::removeExtraItemCache()
unsetExtra(ExtraCacheData);
}
+void QGraphicsItemPrivate::updatePaintedViewBoundingRects(bool updateChildren)
+{
+ if (!scene)
+ return;
+
+ for (int i = 0; i < scene->d_func()->views.size(); ++i) {
+ QGraphicsViewPrivate *viewPrivate = scene->d_func()->views.at(i)->d_func();
+ QRect rect = paintedViewBoundingRects.value(viewPrivate->viewport);
+ rect.translate(viewPrivate->dirtyScrollOffset);
+ viewPrivate->updateRect(rect);
+ }
+
+ if (updateChildren) {
+ for (int i = 0; i < children.size(); ++i)
+ children.at(i)->d_ptr->updatePaintedViewBoundingRects(true);
+ }
+}
+
// Traverses all the ancestors up to the top-level and updates the pointer to
// always point to the top-most item that has a dirty scene transform.
// It then backtracks to the top-most dirty item and start calculating the
@@ -5635,8 +5653,9 @@ void QGraphicsItem::scroll(qreal dx, qreal dy, const QRectF &rect)
// Adjust with 2 pixel margin. Notice the loss of precision
// when converting to QRect.
int adjust = 2;
+ QRectF scrollRect = !rect.isNull() ? rect : boundingRect();
QRectF br = boundingRect().adjusted(-adjust, -adjust, adjust, adjust);
- QRect irect = rect.toRect().translated(-br.x(), -br.y());
+ QRect irect = scrollRect.toRect().translated(-br.x(), -br.y());
pix.scroll(dx, dy, irect);
@@ -5644,11 +5663,11 @@ void QGraphicsItem::scroll(qreal dx, qreal dy, const QRectF &rect)
// Translate the existing expose.
foreach (QRectF exposedRect, c->exposed)
- c->exposed += exposedRect.translated(dx, dy) & rect;
+ c->exposed += exposedRect.translated(dx, dy) & scrollRect;
// Calculate exposure.
QRegion exposed;
- QRect r = rect.toRect();
+ QRect r = scrollRect.toRect();
exposed += r;
exposed -= r.translated(dx, dy);
foreach (QRect rect, exposed.rects())
@@ -7131,7 +7150,11 @@ void QGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
// calculate their diff by mapping viewport coordinates
// directly to parent coordinates.
// COMBINE
- QTransform viewToParentTransform = (item->d_func()->transformData->computedFullTransform().translate(item->d_ptr->pos.x(), item->d_ptr->pos.y()))
+ QTransform itemTransform;
+ if (item->d_ptr->transformData)
+ itemTransform = item->d_ptr->transformData->computedFullTransform();
+ itemTransform.translate(item->d_ptr->pos.x(), item->d_ptr->pos.y());
+ QTransform viewToParentTransform = itemTransform
* (item->sceneTransform() * view->viewportTransform()).inverted();
currentParentPos = viewToParentTransform.map(QPointF(view->mapFromGlobal(event->screenPos())));
buttonDownParentPos = viewToParentTransform.map(QPointF(view->mapFromGlobal(event->buttonDownScreenPos(Qt::LeftButton))));
diff --git a/src/gui/graphicsview/qgraphicsitem_p.h b/src/gui/graphicsview/qgraphicsitem_p.h
index 6b22607..e812f29 100644
--- a/src/gui/graphicsview/qgraphicsitem_p.h
+++ b/src/gui/graphicsview/qgraphicsitem_p.h
@@ -377,6 +377,7 @@ public:
QGraphicsItemCache *extraItemCache() const;
void removeExtraItemCache();
+ void updatePaintedViewBoundingRects(bool updateChildren);
void ensureSceneTransformRecursive(QGraphicsItem **topMostDirtyItem);
inline void ensureSceneTransform()
{
@@ -845,6 +846,13 @@ inline bool QGraphicsItemPrivate::insertionOrder(QGraphicsItem *a, QGraphicsItem
inline void QGraphicsItemPrivate::markParentDirty(bool updateBoundingRect)
{
QGraphicsItemPrivate *parentp = this;
+#ifndef QT_NO_GRAPHICSEFFECT
+ if (updateBoundingRect && parentp->graphicsEffect && !parentp->inSetPosHelper) {
+ parentp->notifyInvalidated = 1;
+ static_cast<QGraphicsItemEffectSourcePrivate *>(parentp->graphicsEffect->d_func()
+ ->source->d_func())->invalidateCache();
+ }
+#endif
while (parentp->parent) {
parentp = parentp->parent->d_ptr.data();
parentp->dirtyChildren = 1;
diff --git a/src/gui/graphicsview/qgraphicsproxywidget.cpp b/src/gui/graphicsview/qgraphicsproxywidget.cpp
index 1f89714..320395e 100644
--- a/src/gui/graphicsview/qgraphicsproxywidget.cpp
+++ b/src/gui/graphicsview/qgraphicsproxywidget.cpp
@@ -975,6 +975,7 @@ bool QGraphicsProxyWidget::eventFilter(QObject *object, QEvent *event)
d->styleChangeMode = QGraphicsProxyWidgetPrivate::NoMode;
}
break;
+#ifndef QT_NO_TOOLTIP
case QEvent::ToolTipChange:
// Propagate tooltip change to the proxy.
if (!d->tooltipChangeMode) {
@@ -983,6 +984,7 @@ bool QGraphicsProxyWidget::eventFilter(QObject *object, QEvent *event)
d->tooltipChangeMode = QGraphicsProxyWidgetPrivate::NoMode;
}
break;
+#endif
default:
break;
}
diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index bd0f0d8..dfba7c9 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -290,13 +290,20 @@ QGraphicsScenePrivate::QGraphicsScenePrivate()
updateAll(false),
calledEmitUpdated(false),
processDirtyItemsEmitted(false),
- selectionChanging(0),
needSortTopLevelItems(true),
holesInTopLevelSiblingIndex(false),
topLevelSequentialOrdering(true),
scenePosDescendantsUpdatePending(false),
stickyFocus(false),
hasFocus(false),
+ lastMouseGrabberItemHasImplicitMouseGrab(false),
+ allItemsIgnoreHoverEvents(true),
+ allItemsUseDefaultCursor(true),
+ painterStateProtection(true),
+ sortCacheEnabled(false),
+ allItemsIgnoreTouchEvents(true),
+ selectionChanging(0),
+ rectAdjust(2),
focusItem(0),
lastFocusItem(0),
tabFocusFirst(0),
@@ -305,16 +312,10 @@ QGraphicsScenePrivate::QGraphicsScenePrivate()
activationRefCount(0),
childExplicitActivation(0),
lastMouseGrabberItem(0),
- lastMouseGrabberItemHasImplicitMouseGrab(false),
dragDropItem(0),
enterWidget(0),
lastDropAction(Qt::IgnoreAction),
- allItemsIgnoreHoverEvents(true),
- allItemsUseDefaultCursor(true),
- painterStateProtection(true),
- sortCacheEnabled(false),
- style(0),
- allItemsIgnoreTouchEvents(true)
+ style(0)
{
}
@@ -820,13 +821,13 @@ void QGraphicsScenePrivate::setFocusItemHelper(QGraphicsItem *item,
#endif //QT_NO_IM
}
- if (item) {
+ if (item)
focusItem = item;
+ updateInputMethodSensitivityInViews();
+ if (item) {
QFocusEvent event(QEvent::FocusIn, focusReason);
sendEvent(item, &event);
}
-
- updateInputMethodSensitivityInViews();
}
/*!
@@ -3217,7 +3218,10 @@ void QGraphicsScene::update(const QRectF &rect)
// Update all views.
for (int i = 0; i < d->views.size(); ++i) {
QGraphicsView *view = d->views.at(i);
- view->d_func()->updateRegion(QRegion(view->mapFromScene(rect).boundingRect()));
+ if (view->isTransformed())
+ view->d_func()->updateRectF(view->viewportTransform().mapRect(rect));
+ else
+ view->d_func()->updateRectF(rect);
}
} else {
d->updatedRects << rect;
@@ -4701,11 +4705,11 @@ void QGraphicsScenePrivate::drawSubtreeRecursive(QGraphicsItem *item, QPainter *
if (drawItem) {
const QRectF brect = adjustedItemEffectiveBoundingRect(item);
ENSURE_TRANSFORM_PTR
- QRect viewBoundingRect = translateOnlyTransform ? brect.translated(transformPtr->dx(), transformPtr->dy()).toRect()
- : transformPtr->mapRect(brect).toRect();
+ QRect viewBoundingRect = translateOnlyTransform ? brect.translated(transformPtr->dx(), transformPtr->dy()).toAlignedRect()
+ : transformPtr->mapRect(brect).toAlignedRect();
+ viewBoundingRect.adjust(-rectAdjust, -rectAdjust, rectAdjust, rectAdjust);
if (widget)
item->d_ptr->paintedViewBoundingRects.insert(widget, viewBoundingRect);
- viewBoundingRect.adjust(-1, -1, 1, 1);
drawItem = exposedRegion ? exposedRegion->intersects(viewBoundingRect)
: !viewBoundingRect.normalized().isEmpty();
if (!drawItem) {
@@ -4954,34 +4958,29 @@ static inline bool updateHelper(QGraphicsViewPrivate *view, QGraphicsItemPrivate
if (itemIsUntransformable) {
const QTransform xform = itemq->deviceTransform(viewq->viewportTransform());
if (!item->hasBoundingRegionGranularity)
- return view->updateRect(xform.mapRect(rect).toRect());
- return view->updateRegion(xform.map(QRegion(rect.toRect())));
+ return view->updateRectF(xform.mapRect(rect));
+ return view->updateRegion(rect, xform);
}
if (item->sceneTransformTranslateOnly && view->identityMatrix) {
const qreal dx = item->sceneTransform.dx();
const qreal dy = item->sceneTransform.dy();
- if (!item->hasBoundingRegionGranularity) {
- QRectF r(rect);
- r.translate(dx - view->horizontalScroll(), dy - view->verticalScroll());
- return view->updateRect(r.toRect());
- }
- QRegion r(rect.toRect());
- r.translate(qRound(dx) - view->horizontalScroll(), qRound(dy) - view->verticalScroll());
- return view->updateRegion(r);
+ QRectF r(rect);
+ r.translate(dx - view->horizontalScroll(), dy - view->verticalScroll());
+ return view->updateRectF(r);
}
if (!viewq->isTransformed()) {
if (!item->hasBoundingRegionGranularity)
- return view->updateRect(item->sceneTransform.mapRect(rect).toRect());
- return view->updateRegion(item->sceneTransform.map(QRegion(rect.toRect())));
+ return view->updateRectF(item->sceneTransform.mapRect(rect));
+ return view->updateRegion(rect, item->sceneTransform);
}
QTransform xform = item->sceneTransform;
xform *= viewq->viewportTransform();
if (!item->hasBoundingRegionGranularity)
- return view->updateRect(xform.mapRect(rect).toRect());
- return view->updateRegion(xform.map(QRegion(rect.toRect())));
+ return view->updateRectF(xform.mapRect(rect));
+ return view->updateRegion(rect, xform);
}
void QGraphicsScenePrivate::processDirtyItemsRecursive(QGraphicsItem *item, bool dirtyAncestorContainsChildren,
@@ -5117,9 +5116,15 @@ void QGraphicsScenePrivate::processDirtyItemsRecursive(QGraphicsItem *item, bool
// Process children.
if (itemHasChildren && item->d_ptr->dirtyChildren) {
+ const bool itemClipsChildrenToShape = item->d_ptr->flags & QGraphicsItem::ItemClipsChildrenToShape;
+ if (itemClipsChildrenToShape) {
+ // Make sure child updates are clipped to the item's bounding rect.
+ for (int i = 0; i < views.size(); ++i)
+ views.at(i)->d_func()->setUpdateClip(item);
+ }
if (!dirtyAncestorContainsChildren) {
dirtyAncestorContainsChildren = item->d_ptr->fullUpdatePending
- && (item->d_ptr->flags & QGraphicsItem::ItemClipsChildrenToShape);
+ && itemClipsChildrenToShape;
}
const bool allChildrenDirty = item->d_ptr->allChildrenDirty;
const bool parentIgnoresVisible = item->d_ptr->ignoreVisible;
@@ -5142,6 +5147,12 @@ void QGraphicsScenePrivate::processDirtyItemsRecursive(QGraphicsItem *item, bool
}
processDirtyItemsRecursive(child, dirtyAncestorContainsChildren, opacity);
}
+
+ if (itemClipsChildrenToShape) {
+ // Reset updateClip.
+ for (int i = 0; i < views.size(); ++i)
+ views.at(i)->d_func()->setUpdateClip(0);
+ }
} else if (wasDirtyParentSceneTransform) {
item->d_ptr->invalidateChildrenSceneTransform();
}
@@ -5197,8 +5208,14 @@ void QGraphicsScene::drawItems(QPainter *painter,
// Determine view, expose and flags.
QGraphicsView *view = widget ? qobject_cast<QGraphicsView *>(widget->parentWidget()) : 0;
QRegion *expose = 0;
- if (view)
+ const quint32 oldRectAdjust = d->rectAdjust;
+ if (view) {
expose = &view->d_func()->exposedRegion;
+ if (view->d_func()->optimizationFlags & QGraphicsView::DontAdjustForAntialiasing)
+ d->rectAdjust = 1;
+ else
+ d->rectAdjust = 2;
+ }
// Find all toplevels, they are already sorted.
QList<QGraphicsItem *> topLevelItems;
@@ -5211,6 +5228,7 @@ void QGraphicsScene::drawItems(QPainter *painter,
}
}
+ d->rectAdjust = oldRectAdjust;
// Reset discovery bits.
for (int i = 0; i < topLevelItems.size(); ++i)
topLevelItems.at(i)->d_ptr->itemDiscovered = 0;
diff --git a/src/gui/graphicsview/qgraphicsscene_p.h b/src/gui/graphicsview/qgraphicsscene_p.h
index 11e250e..77bf450 100644
--- a/src/gui/graphicsview/qgraphicsscene_p.h
+++ b/src/gui/graphicsview/qgraphicsscene_p.h
@@ -97,24 +97,36 @@ public:
int lastItemCount;
QRectF sceneRect;
- bool hasSceneRect;
- bool dirtyGrowingItemsBoundingRect;
+
+ quint32 hasSceneRect : 1;
+ quint32 dirtyGrowingItemsBoundingRect : 1;
+ quint32 updateAll : 1;
+ quint32 calledEmitUpdated : 1;
+ quint32 processDirtyItemsEmitted : 1;
+ quint32 needSortTopLevelItems : 1;
+ quint32 holesInTopLevelSiblingIndex : 1;
+ quint32 topLevelSequentialOrdering : 1;
+ quint32 scenePosDescendantsUpdatePending : 1;
+ quint32 stickyFocus : 1;
+ quint32 hasFocus : 1;
+ quint32 lastMouseGrabberItemHasImplicitMouseGrab : 1;
+ quint32 allItemsIgnoreHoverEvents : 1;
+ quint32 allItemsUseDefaultCursor : 1;
+ quint32 painterStateProtection : 1;
+ quint32 sortCacheEnabled : 1; // for compatibility
+ quint32 allItemsIgnoreTouchEvents : 1;
+ quint32 padding : 15;
+
QRectF growingItemsBoundingRect;
void _q_emitUpdated();
QList<QRectF> updatedRects;
- bool updateAll;
- bool calledEmitUpdated;
- bool processDirtyItemsEmitted;
QPainterPath selectionArea;
int selectionChanging;
QSet<QGraphicsItem *> selectedItems;
QVector<QGraphicsItem *> unpolishedItems;
QList<QGraphicsItem *> topLevelItems;
- bool needSortTopLevelItems;
- bool holesInTopLevelSiblingIndex;
- bool topLevelSequentialOrdering;
QMap<QGraphicsItem *, QPointF> movingItemsInitialPositions;
void registerTopLevelItem(QGraphicsItem *item);
@@ -125,7 +137,6 @@ public:
void _q_processDirtyItems();
QSet<QGraphicsItem *> scenePosItems;
- bool scenePosDescendantsUpdatePending;
void setScenePosItemEnabled(QGraphicsItem *item, bool enabled);
void registerScenePosItem(QGraphicsItem *item);
void unregisterScenePosItem(QGraphicsItem *item);
@@ -136,8 +147,7 @@ public:
QBrush backgroundBrush;
QBrush foregroundBrush;
- bool stickyFocus;
- bool hasFocus;
+ quint32 rectAdjust;
QGraphicsItem *focusItem;
QGraphicsItem *lastFocusItem;
QGraphicsWidget *tabFocusFirst;
@@ -153,7 +163,6 @@ public:
void removePopup(QGraphicsWidget *widget, bool itemIsDying = false);
QGraphicsItem *lastMouseGrabberItem;
- bool lastMouseGrabberItemHasImplicitMouseGrab;
QList<QGraphicsItem *> mouseGrabberItems;
void grabMouse(QGraphicsItem *item, bool implicit = false);
void ungrabMouse(QGraphicsItem *item, bool itemIsDying = false);
@@ -170,8 +179,6 @@ public:
QList<QGraphicsItem *> cachedItemsUnderMouse;
QList<QGraphicsItem *> hoverItems;
QPointF lastSceneMousePos;
- bool allItemsIgnoreHoverEvents;
- bool allItemsUseDefaultCursor;
void enableMouseTrackingOnViews();
QMap<Qt::MouseButton, QPointF> mouseGrabberButtonDownPos;
QMap<Qt::MouseButton, QPointF> mouseGrabberButtonDownScenePos;
@@ -185,8 +192,6 @@ public:
void addView(QGraphicsView *view);
void removeView(QGraphicsView *view);
- bool painterStateProtection;
-
QMultiMap<QGraphicsItem *, QGraphicsItem *> sceneEventFilters;
void installSceneEventFilter(QGraphicsItem *watched, QGraphicsItem *filter);
void removeSceneEventFilter(QGraphicsItem *watched, QGraphicsItem *filter);
@@ -208,8 +213,6 @@ public:
void mousePressEventHandler(QGraphicsSceneMouseEvent *mouseEvent);
QGraphicsWidget *windowForItem(const QGraphicsItem *item) const;
- bool sortCacheEnabled; // for compatibility
-
void drawItemHelper(QGraphicsItem *item, QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget,
bool painterStateProtection);
@@ -293,7 +296,6 @@ public:
int findClosestTouchPointId(const QPointF &scenePos);
void touchEventHandler(QTouchEvent *touchEvent);
bool sendTouchBeginEvent(QGraphicsItem *item, QTouchEvent *touchEvent);
- bool allItemsIgnoreTouchEvents;
void enableTouchEventsOnViews();
QList<QGraphicsObject *> cachedTargetItems;
diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp
index c951dce..0f951ef 100644
--- a/src/gui/graphicsview/qgraphicsview.cpp
+++ b/src/gui/graphicsview/qgraphicsview.cpp
@@ -327,16 +327,21 @@ QGraphicsViewPrivate::QGraphicsViewPrivate()
dragMode(QGraphicsView::NoDrag),
sceneInteractionAllowed(true), hasSceneRect(false),
connectedToScene(false),
- mousePressButton(Qt::NoButton),
+ useLastMouseEvent(false),
identityMatrix(true),
dirtyScroll(true),
accelerateScrolling(true),
+ keepLastCenterPoint(true),
+ transforming(false),
+ handScrolling(false),
+ mustAllocateStyleOptions(false),
+ mustResizeBackgroundPixmap(true),
+ fullUpdatePending(true),
+ hasUpdateClip(false),
+ mousePressButton(Qt::NoButton),
leftIndent(0), topIndent(0),
lastMouseEvent(QEvent::None, QPoint(), Qt::NoButton, 0, 0),
- useLastMouseEvent(false),
- keepLastCenterPoint(true),
alignment(Qt::AlignCenter),
- transforming(false),
transformationAnchor(QGraphicsView::AnchorViewCenter), resizeAnchor(QGraphicsView::NoAnchor),
viewportUpdateMode(QGraphicsView::MinimalViewportUpdate),
optimizationFlags(0),
@@ -345,14 +350,11 @@ QGraphicsViewPrivate::QGraphicsViewPrivate()
rubberBanding(false),
rubberBandSelectionMode(Qt::IntersectsItemShape),
#endif
- handScrolling(false), handScrollMotions(0), cacheMode(0),
- mustAllocateStyleOptions(false),
- mustResizeBackgroundPixmap(true),
+ handScrollMotions(0), cacheMode(0),
#ifndef QT_NO_CURSOR
hasStoredOriginalCursor(false),
#endif
lastDragDropEvent(0),
- fullUpdatePending(true),
updateSceneSlotReimplementedChecked(false)
{
styleOptions.reserve(QGRAPHICSVIEW_PREALLOC_STYLE_OPTIONS);
@@ -854,10 +856,7 @@ void QGraphicsViewPrivate::processPendingUpdates()
if (fullUpdatePending) {
viewport->update();
} else if (viewportUpdateMode == QGraphicsView::BoundingRectViewportUpdate) {
- if (optimizationFlags & QGraphicsView::DontAdjustForAntialiasing)
- viewport->update(dirtyBoundingRect.adjusted(-1, -1, 1, 1));
- else
- viewport->update(dirtyBoundingRect.adjusted(-2, -2, 2, 2));
+ viewport->update(dirtyBoundingRect);
} else {
viewport->update(dirtyRegion); // Already adjusted in updateRect/Region.
}
@@ -882,46 +881,92 @@ static inline void QRect_unite(QRect *rect, const QRect &other)
}
}
-bool QGraphicsViewPrivate::updateRegion(const QRegion &r)
+/*
+ Calling this function results in update rects being clipped to the item's
+ bounding rect. Note that updates prior to this function call is not clipped.
+ The clip is removed by passing 0.
+*/
+void QGraphicsViewPrivate::setUpdateClip(QGraphicsItem *item)
{
- if (fullUpdatePending || viewportUpdateMode == QGraphicsView::NoViewportUpdate || r.isEmpty())
- return false;
+ Q_Q(QGraphicsView);
+ // We simply ignore the request if the update mode is either FullViewportUpdate
+ // or NoViewportUpdate; in that case there's no point in clipping anything.
+ if (!item || viewportUpdateMode == QGraphicsView::NoViewportUpdate
+ || viewportUpdateMode == QGraphicsView::FullViewportUpdate) {
+ hasUpdateClip = false;
+ return;
+ }
- const QRect boundingRect = r.boundingRect();
- if (!intersectsViewport(boundingRect, viewport->width(), viewport->height()))
- return false; // Update region outside viewport.
+ // Calculate the clip (item's bounding rect in view coordinates).
+ // Optimized version of:
+ // QRect clip = item->deviceTransform(q->viewportTransform())
+ // .mapRect(item->boundingRect()).toAlignedRect();
+ QRect clip;
+ if (item->d_ptr->itemIsUntransformable()) {
+ QTransform xform = item->deviceTransform(q->viewportTransform());
+ clip = xform.mapRect(item->boundingRect()).toAlignedRect();
+ } else if (item->d_ptr->sceneTransformTranslateOnly && identityMatrix) {
+ QRectF r(item->boundingRect());
+ r.translate(item->d_ptr->sceneTransform.dx() - horizontalScroll(),
+ item->d_ptr->sceneTransform.dy() - verticalScroll());
+ clip = r.toAlignedRect();
+ } else if (!q->isTransformed()) {
+ clip = item->d_ptr->sceneTransform.mapRect(item->boundingRect()).toAlignedRect();
+ } else {
+ QTransform xform = item->d_ptr->sceneTransform;
+ xform *= q->viewportTransform();
+ clip = xform.mapRect(item->boundingRect()).toAlignedRect();
+ }
- switch (viewportUpdateMode) {
- case QGraphicsView::FullViewportUpdate:
- fullUpdatePending = true;
- viewport->update();
- break;
- case QGraphicsView::BoundingRectViewportUpdate:
- QRect_unite(&dirtyBoundingRect, boundingRect);
- if (containsViewport(dirtyBoundingRect, viewport->width(), viewport->height())) {
- fullUpdatePending = true;
- viewport->update();
- }
- break;
- case QGraphicsView::SmartViewportUpdate: // ### DEPRECATE
- case QGraphicsView::MinimalViewportUpdate:
- {
- const QVector<QRect> &rects = r.rects();
- for (int i = 0; i < rects.size(); ++i) {
- if (optimizationFlags & QGraphicsView::DontAdjustForAntialiasing)
- dirtyRegion += rects.at(i).adjusted(-1, -1, 1, 1);
- else
- dirtyRegion += rects.at(i).adjusted(-2, -2, 2, 2);
- }
- break;
+ if (hasUpdateClip) {
+ // Intersect with old clip.
+ updateClip &= clip;
+ } else {
+ updateClip = clip;
+ hasUpdateClip = true;
}
- default:
- break;
+}
+
+bool QGraphicsViewPrivate::updateRegion(const QRectF &rect, const QTransform &xform)
+{
+ if (rect.isEmpty())
+ return false;
+
+ if (viewportUpdateMode != QGraphicsView::MinimalViewportUpdate
+ && viewportUpdateMode != QGraphicsView::SmartViewportUpdate) {
+ // No point in updating with QRegion granularity; use the rect instead.
+ return updateRectF(xform.mapRect(rect));
+ }
+
+ // Update mode is either Minimal or Smart, so we have to do a potentially slow operation,
+ // which is clearly documented here: QGraphicsItem::setBoundingRegionGranularity.
+ const QRegion region = xform.map(QRegion(rect.toAlignedRect()));
+ QRect viewRect = region.boundingRect();
+ const bool dontAdjustForAntialiasing = optimizationFlags & QGraphicsView::DontAdjustForAntialiasing;
+ if (dontAdjustForAntialiasing)
+ viewRect.adjust(-1, -1, 1, 1);
+ else
+ viewRect.adjust(-2, -2, 2, 2);
+ if (!intersectsViewport(viewRect, viewport->width(), viewport->height()))
+ return false; // Update region for sure outside viewport.
+
+ const QVector<QRect> &rects = region.rects();
+ for (int i = 0; i < rects.size(); ++i) {
+ viewRect = rects.at(i);
+ if (dontAdjustForAntialiasing)
+ viewRect.adjust(-1, -1, 1, 1);
+ else
+ viewRect.adjust(-2, -2, 2, 2);
+ if (hasUpdateClip)
+ viewRect &= updateClip;
+ dirtyRegion += viewRect;
}
return true;
}
+// NB! Assumes the rect 'r' is already aligned and adjusted for antialiasing.
+// For QRectF use updateRectF(const QRectF &) to ensure proper adjustments.
bool QGraphicsViewPrivate::updateRect(const QRect &r)
{
if (fullUpdatePending || viewportUpdateMode == QGraphicsView::NoViewportUpdate
@@ -935,7 +980,10 @@ bool QGraphicsViewPrivate::updateRect(const QRect &r)
viewport->update();
break;
case QGraphicsView::BoundingRectViewportUpdate:
- QRect_unite(&dirtyBoundingRect, r);
+ if (hasUpdateClip)
+ QRect_unite(&dirtyBoundingRect, r & updateClip);
+ else
+ QRect_unite(&dirtyBoundingRect, r);
if (containsViewport(dirtyBoundingRect, viewport->width(), viewport->height())) {
fullUpdatePending = true;
viewport->update();
@@ -943,10 +991,10 @@ bool QGraphicsViewPrivate::updateRect(const QRect &r)
break;
case QGraphicsView::SmartViewportUpdate: // ### DEPRECATE
case QGraphicsView::MinimalViewportUpdate:
- if (optimizationFlags & QGraphicsView::DontAdjustForAntialiasing)
- dirtyRegion += r.adjusted(-1, -1, 1, 1);
+ if (hasUpdateClip)
+ dirtyRegion += r & updateClip;
else
- dirtyRegion += r.adjusted(-2, -2, 2, 2);
+ dirtyRegion += r;
break;
default:
break;
@@ -3403,8 +3451,14 @@ void QGraphicsView::paintEvent(QPaintEvent *event)
// Items
if (!(d->optimizationFlags & IndirectPainting)) {
+ const quint32 oldRectAdjust = d->scene->d_func()->rectAdjust;
+ if (d->optimizationFlags & QGraphicsView::DontAdjustForAntialiasing)
+ d->scene->d_func()->rectAdjust = 1;
+ else
+ d->scene->d_func()->rectAdjust = 2;
d->scene->d_func()->drawItems(&painter, viewTransformed ? &viewTransform : 0,
&d->exposedRegion, viewport());
+ d->scene->d_func()->rectAdjust = oldRectAdjust;
// Make sure the painter's world transform is restored correctly when
// drawing without painter state protection (DontSavePainterState).
// We only change the worldTransform() so there's no need to do a full-blown
diff --git a/src/gui/graphicsview/qgraphicsview_p.h b/src/gui/graphicsview/qgraphicsview_p.h
index 729837a..7bd9ecb 100644
--- a/src/gui/graphicsview/qgraphicsview_p.h
+++ b/src/gui/graphicsview/qgraphicsview_p.h
@@ -77,11 +77,25 @@ public:
QPainter::RenderHints renderHints;
QGraphicsView::DragMode dragMode;
- bool sceneInteractionAllowed;
+
+ quint32 sceneInteractionAllowed : 1;
+ quint32 hasSceneRect : 1;
+ quint32 connectedToScene : 1;
+ quint32 useLastMouseEvent : 1;
+ quint32 identityMatrix : 1;
+ quint32 dirtyScroll : 1;
+ quint32 accelerateScrolling : 1;
+ quint32 keepLastCenterPoint : 1;
+ quint32 transforming : 1;
+ quint32 handScrolling : 1;
+ quint32 mustAllocateStyleOptions : 1;
+ quint32 mustResizeBackgroundPixmap : 1;
+ quint32 fullUpdatePending : 1;
+ quint32 hasUpdateClip : 1;
+ quint32 padding : 18;
+
QRectF sceneRect;
- bool hasSceneRect;
void updateLastCenterPoint();
- bool connectedToScene;
qint64 horizontalScroll() const;
qint64 verticalScroll() const;
@@ -89,6 +103,7 @@ public:
QRectF mapRectToScene(const QRect &rect) const;
QRectF mapRectFromScene(const QRectF &rect) const;
+ QRect updateClip;
QPointF mousePressItemPoint;
QPointF mousePressScenePoint;
QPoint mousePressViewPoint;
@@ -98,26 +113,20 @@ public:
QPoint dirtyScrollOffset;
Qt::MouseButton mousePressButton;
QTransform matrix;
- bool identityMatrix;
qint64 scrollX, scrollY;
- bool dirtyScroll;
void updateScroll();
- bool accelerateScrolling;
qreal leftIndent;
qreal topIndent;
// Replaying mouse events
QMouseEvent lastMouseEvent;
- bool useLastMouseEvent;
void replayLastMouseEvent();
void storeMouseEvent(QMouseEvent *event);
void mouseMoveEventHandler(QMouseEvent *event);
QPointF lastCenterPoint;
- bool keepLastCenterPoint;
Qt::Alignment alignment;
- bool transforming;
QGraphicsView::ViewportAnchor transformationAnchor;
QGraphicsView::ViewportAnchor resizeAnchor;
@@ -131,20 +140,17 @@ public:
bool rubberBanding;
Qt::ItemSelectionMode rubberBandSelectionMode;
#endif
- bool handScrolling;
int handScrollMotions;
QGraphicsView::CacheMode cacheMode;
QVector<QStyleOptionGraphicsItem> styleOptions;
- bool mustAllocateStyleOptions;
QStyleOptionGraphicsItem *allocStyleOptionsArray(int numItems);
void freeStyleOptionsArray(QStyleOptionGraphicsItem *array);
QBrush backgroundBrush;
QBrush foregroundBrush;
QPixmap backgroundPixmap;
- bool mustResizeBackgroundPixmap;
QRegion backgroundPixmapExposed;
#ifndef QT_NO_CURSOR
@@ -161,7 +167,6 @@ public:
QRect mapToViewRect(const QGraphicsItem *item, const QRectF &rect) const;
QRegion mapToViewRegion(const QGraphicsItem *item, const QRectF &rect) const;
- bool fullUpdatePending;
QRegion dirtyRegion;
QRect dirtyBoundingRect;
void processPendingUpdates();
@@ -183,13 +188,28 @@ public:
else
QCoreApplication::sendPostedEvents(viewport->window(), QEvent::UpdateRequest);
#else
- QCoreApplication::processEvents(QEventLoop::AllEvents | QEventLoop::ExcludeSocketNotifiers
- | QEventLoop::ExcludeUserInputEvents);
+ // At this point either HIViewSetNeedsDisplay (Carbon) or setNeedsDisplay: YES (Cocoa)
+ // is called, which means there's a pending update request. We want to dispatch it
+ // now because otherwise graphics view updates would require two
+ // round-trips in the event loop before the item is painted.
+ extern void qt_mac_dispatchPendingUpdateRequests(QWidget *);
+ qt_mac_dispatchPendingUpdateRequests(viewport->window());
#endif
}
+ void setUpdateClip(QGraphicsItem *);
+
+ inline bool updateRectF(const QRectF &rect)
+ {
+ if (rect.isEmpty())
+ return false;
+ if (optimizationFlags & QGraphicsView::DontAdjustForAntialiasing)
+ return updateRect(rect.toAlignedRect().adjusted(-1, -1, 1, 1));
+ return updateRect(rect.toAlignedRect().adjusted(-2, -2, 2, 2));
+ }
+
bool updateRect(const QRect &rect);
- bool updateRegion(const QRegion &region);
+ bool updateRegion(const QRectF &rect, const QTransform &xform);
bool updateSceneSlotReimplementedChecked;
QRegion exposedRegion;
diff --git a/src/gui/graphicsview/qgraphicswidget.cpp b/src/gui/graphicsview/qgraphicswidget.cpp
index bc8ccb01..06a44b7 100644
--- a/src/gui/graphicsview/qgraphicswidget.cpp
+++ b/src/gui/graphicsview/qgraphicswidget.cpp
@@ -324,11 +324,9 @@ void QGraphicsWidget::resize(const QSizeF &size)
*/
/*!
-
\fn QGraphicsWidget::geometryChanged()
- This signal gets emitted whenever the geometry of the item changes
- \internal
+ This signal gets emitted whenever the geometry is changed in setGeometry().
*/
/*!
@@ -408,12 +406,6 @@ void QGraphicsWidget::setGeometry(const QRectF &rect)
}
/*!
- \fn QGraphicsWidget::geometryChanged()
-
- This signal gets emitted whenever the geometry is changed in setGeometry().
-*/
-
-/*!
\fn QRectF QGraphicsWidget::rect() const
Returns the item's local rect as a QRectF. This function is equivalent
diff --git a/src/gui/image/qicon.cpp b/src/gui/image/qicon.cpp
index bc52e99..891b1db 100644
--- a/src/gui/image/qicon.cpp
+++ b/src/gui/image/qicon.cpp
@@ -441,7 +441,7 @@ void QPixmapIconEngine::virtual_hook(int id, void *data)
}
}
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
(QIconEngineFactoryInterface_iid, QLatin1String("/iconengines"), Qt::CaseInsensitive))
Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loaderV2,
diff --git a/src/gui/image/qimagereader.cpp b/src/gui/image/qimagereader.cpp
index 27f9627..93d5cd3 100644
--- a/src/gui/image/qimagereader.cpp
+++ b/src/gui/image/qimagereader.cpp
@@ -144,7 +144,7 @@
QT_BEGIN_NAMESPACE
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
(QImageIOHandlerFactoryInterface_iid, QLatin1String("/imageformats")))
#endif
@@ -205,7 +205,7 @@ static QImageIOHandler *createReadHandlerHelper(QIODevice *device,
QByteArray form = format.toLower();
QImageIOHandler *handler = 0;
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
// check if we have plugins that support the image format
QFactoryLoader *l = loader();
QStringList keys = l->keys();
@@ -217,7 +217,7 @@ static QImageIOHandler *createReadHandlerHelper(QIODevice *device,
<< keys.size() << "plugins available: " << keys;
#endif
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
int suffixPluginIndex = -1;
if (device && format.isEmpty() && autoDetectImageFormat && !ignoresFormatAndExtension) {
// if there's no format, see if \a device is a file, and if so, find
@@ -246,7 +246,7 @@ static QImageIOHandler *createReadHandlerHelper(QIODevice *device,
if (ignoresFormatAndExtension)
testFormat = QByteArray();
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
if (suffixPluginIndex != -1) {
// check if the plugin that claims support for this format can load
// from this device with this format.
@@ -331,7 +331,7 @@ static QImageIOHandler *createReadHandlerHelper(QIODevice *device,
#endif
}
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
if (!handler && (autoDetectImageFormat || ignoresFormatAndExtension)) {
// check if any of our plugins recognize the file from its contents.
const qint64 pos = device ? device->pos() : 0;
@@ -350,7 +350,7 @@ static QImageIOHandler *createReadHandlerHelper(QIODevice *device,
if (device && !device->isSequential())
device->seek(pos);
}
-#endif
+#endif // QT_NO_LIBRARY
if (!handler && (autoDetectImageFormat || ignoresFormatAndExtension)) {
// check if any of our built-in handlers recognize the file from its
@@ -1414,7 +1414,7 @@ QList<QByteArray> QImageReader::supportedImageFormats()
for (int i = 0; i < _qt_NumFormats; ++i)
formats << _qt_BuiltInFormats[i].extension;
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
QFactoryLoader *l = loader();
QStringList keys = l->keys();
diff --git a/src/gui/image/qimagewriter.cpp b/src/gui/image/qimagewriter.cpp
index 503a1b2..552729f 100644
--- a/src/gui/image/qimagewriter.cpp
+++ b/src/gui/image/qimagewriter.cpp
@@ -117,7 +117,7 @@
QT_BEGIN_NAMESPACE
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
(QImageIOHandlerFactoryInterface_iid, QLatin1String("/imageformats")))
#endif
@@ -129,7 +129,7 @@ static QImageIOHandler *createWriteHandlerHelper(QIODevice *device,
QByteArray suffix;
QImageIOHandler *handler = 0;
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
// check if any plugins can write the image
QFactoryLoader *l = loader();
QStringList keys = l->keys();
@@ -142,7 +142,7 @@ static QImageIOHandler *createWriteHandlerHelper(QIODevice *device,
// this allows plugins to override our built-in handlers.
if (QFile *file = qobject_cast<QFile *>(device)) {
if (!(suffix = QFileInfo(file->fileName()).suffix().toLower().toLatin1()).isEmpty()) {
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
int index = keys.indexOf(QString::fromLatin1(suffix));
if (index != -1)
suffixPluginIndex = index;
@@ -153,7 +153,7 @@ static QImageIOHandler *createWriteHandlerHelper(QIODevice *device,
QByteArray testFormat = !form.isEmpty() ? form : suffix;
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
if (suffixPluginIndex != -1) {
// when format is missing, check if we can find a plugin for the
// suffix.
@@ -161,7 +161,7 @@ static QImageIOHandler *createWriteHandlerHelper(QIODevice *device,
if (plugin && (plugin->capabilities(device, suffix) & QImageIOPlugin::CanWrite))
handler = plugin->create(device, suffix);
}
-#endif // Q_NO_LIBRARY
+#endif // QT_NO_LIBRARY
// check if any built-in handlers can write the image
if (!handler && !testFormat.isEmpty()) {
@@ -192,7 +192,7 @@ static QImageIOHandler *createWriteHandlerHelper(QIODevice *device,
}
}
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
if (!testFormat.isEmpty()) {
for (int i = 0; i < keys.size(); ++i) {
QImageIOPlugin *plugin = qobject_cast<QImageIOPlugin *>(l->instance(keys.at(i)));
@@ -203,7 +203,7 @@ static QImageIOHandler *createWriteHandlerHelper(QIODevice *device,
}
}
}
-#endif
+#endif // QT_NO_LIBRARY
if (!handler)
return 0;
@@ -670,7 +670,7 @@ QList<QByteArray> QImageWriter::supportedImageFormats()
formats << "png";
#endif
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
QFactoryLoader *l = loader();
QStringList keys = l->keys();
for (int i = 0; i < keys.count(); ++i) {
diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp
index b42e0ab..610ac3c 100644
--- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp
+++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp
@@ -87,7 +87,7 @@ QCoeFepInputContext::QCoeFepInputContext(QObject *parent)
m_fepState->SetDefaultInputMode( EAknEditorTextInputMode );
m_fepState->SetPermittedInputModes( EAknEditorAllInputModes );
m_fepState->SetDefaultCase( EAknEditorLowerCase );
- m_fepState->SetPermittedCases( EAknEditorLowerCase|EAknEditorUpperCase );
+ m_fepState->SetPermittedCases( EAknEditorAllCaseModes );
m_fepState->SetSpecialCharacterTableResourceId(R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG);
m_fepState->SetNumericKeymap( EAknEditorStandardNumberModeKeymap );
}
diff --git a/src/gui/inputmethod/qinputcontextfactory.cpp b/src/gui/inputmethod/qinputcontextfactory.cpp
index d47e343..ec8d8e2 100644
--- a/src/gui/inputmethod/qinputcontextfactory.cpp
+++ b/src/gui/inputmethod/qinputcontextfactory.cpp
@@ -81,7 +81,7 @@
QT_BEGIN_NAMESPACE
-#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
(QInputContextFactoryInterface_iid, QLatin1String("/inputmethods")))
#endif
@@ -153,7 +153,7 @@ QInputContext *QInputContextFactory::create( const QString& key, QObject *parent
result = new QCoeFepInputContext;
}
#endif
-#if defined(QT_NO_LIBRARY) || defined(QT_NO_SETTINGS)
+#ifdef QT_NO_LIBRARY
Q_UNUSED(key);
#else
if (QInputContextFactoryInterface *factory =
@@ -193,7 +193,7 @@ QStringList QInputContextFactory::keys()
#if defined(Q_WS_S60)
result << QLatin1String("coefep");
#endif
-#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
result += loader()->keys();
#endif // QT_NO_LIBRARY
return result;
diff --git a/src/gui/itemviews/qsortfilterproxymodel.cpp b/src/gui/itemviews/qsortfilterproxymodel.cpp
index dce5c6a..b12cd45 100644
--- a/src/gui/itemviews/qsortfilterproxymodel.cpp
+++ b/src/gui/itemviews/qsortfilterproxymodel.cpp
@@ -1099,7 +1099,7 @@ void QSortFilterProxyModelPrivate::_q_sourceDataChanged(const QModelIndex &sourc
if (!source_top_left.isValid() || !source_bottom_right.isValid())
return;
QModelIndex source_parent = source_top_left.parent();
- IndexMap::const_iterator it = create_mapping(source_parent);
+ IndexMap::const_iterator it = source_index_mapping.find(source_parent);
if (it == source_index_mapping.constEnd()) {
// Don't care, since we don't have mapping for this index
return;
diff --git a/src/gui/itemviews/qtableview.cpp b/src/gui/itemviews/qtableview.cpp
index 80334a6..4492e53 100644
--- a/src/gui/itemviews/qtableview.cpp
+++ b/src/gui/itemviews/qtableview.cpp
@@ -2145,8 +2145,8 @@ int QTableView::sizeHintForRow(int row) const
ensurePolished();
- int left = qMax(0, columnAt(0));
- int right = columnAt(d->viewport->width());
+ int left = qMax(0, d->horizontalHeader->visualIndexAt(0));
+ int right = d->horizontalHeader->visualIndexAt(d->viewport->width());
if (right == -1) // the table don't have enough columns to fill the viewport
right = d->model->columnCount(d->root) - 1;
@@ -2204,8 +2204,8 @@ int QTableView::sizeHintForColumn(int column) const
ensurePolished();
- int top = qMax(0, rowAt(0));
- int bottom = rowAt(d->viewport->height());
+ int top = qMax(0, d->verticalHeader->visualIndexAt(0));
+ int bottom = d->verticalHeader->visualIndexAt(d->viewport->height());
if (!isVisible() || bottom == -1) // the table don't have enough rows to fill the viewport
bottom = d->model->rowCount(d->root) - 1;
diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp
index c735d1f..f4c7304 100644
--- a/src/gui/kernel/qapplication_s60.cpp
+++ b/src/gui/kernel/qapplication_s60.cpp
@@ -73,6 +73,7 @@
# endif
# include <private/qs60mainapplication_p.h>
# include <centralrepository.h>
+# include "qs60mainappui.h"
#endif
#include "private/qstylesheetstyle_p.h"
@@ -439,7 +440,7 @@ void QSymbianControl::translateAdvancedPointerEvent(const TAdvancedPointerEvent
state |= Qt::TouchPointPrimary;
touchPoint.setState(state);
- QPointF screenPos = QPointF(event->iPosition.iX, event->iPosition.iY);
+ QPointF screenPos = qwidget->mapToGlobal(QPoint(event->iPosition.iX, event->iPosition.iY));
touchPoint.setScreenPos(screenPos);
touchPoint.setNormalizedPos(QPointF(screenPos.x() / screenGeometry.width(),
screenPos.y() / screenGeometry.height()));
@@ -539,6 +540,14 @@ void QSymbianControl::HandlePointerEvent(const TPointerEvent& pEvent)
sendMouseEvent(receiver, type, globalPos, button, modifiers);
}
+#ifdef Q_WS_S60
+void QSymbianControl::HandleStatusPaneSizeChange()
+{
+ QS60MainAppUi *s60AppUi = static_cast<QS60MainAppUi *>(S60->appUi());
+ s60AppUi->HandleStatusPaneSizeChange();
+}
+#endif
+
void QSymbianControl::sendMouseEvent(
QWidget *receiver,
QEvent::Type type,
@@ -982,15 +991,6 @@ void QSymbianControl::FocusChanged(TDrawNow /* aDrawNow */)
const TBool isFullscreen = qwidget->windowState() & Qt::WindowFullScreen;
const TBool cbaVisibilityHint = qwidget->windowFlags() & Qt::WindowSoftkeysVisibleHint;
buttonGroup->MakeVisible(visible || (isFullscreen && cbaVisibilityHint));
-
- // Responsiviness
- CEikCba *cba = static_cast<CEikCba *>( buttonGroup->ButtonGroup() ); // downcast from MEikButtonGroup
- TUint cbaFlags = cba->ButtonGroupFlags();
- if(qwidget->windowFlags() & Qt::WindowSoftkeysRespondHint)
- cbaFlags |= EAknCBAFlagRespondWhenInvisible;
- else
- cbaFlags &= ~EAknCBAFlagRespondWhenInvisible;
- cba->SetButtonGroupFlags(cbaFlags);
}
#endif
} else if (QApplication::activeWindow() == qwidget->window()) {
diff --git a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
index e94d247..8652816 100644
--- a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
+++ b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
@@ -363,3 +363,57 @@ QT_END_NAMESPACE
}
[super displayIfNeeded];
}
+
+// This is a hack and it should be removed once we find the real cause for
+// the painting problems.
+// We have a static variable that signals if we have been called before or not.
+static bool firstDrawingInvocation = true;
+
+// The method below exists only as a workaround to draw/not draw the baseline
+// in the title bar. This is to support unifiedToolbar look.
+
+// This method is very special. To begin with, it is a
+// method that will get called only if we enable documentMode.
+// Furthermore, it won't get called as a normal method, we swap
+// this method with the normal implementation of drawRect in
+// _NSThemeFrame. When this method is active, its mission is to
+// first call the original drawRect implementation so the widget
+// gets proper painting. After that, it needs to detect if there
+// is a toolbar or not, in order to decide how to handle the unified
+// look. The distinction is important since the presence and
+// visibility of a toolbar change the way we enter into unified mode.
+// When there is a toolbar and that toolbar is visible, the problem
+// is as simple as to tell the toolbar not to draw its baseline.
+// However when there is not toolbar or the toolbar is not visible,
+// we need to draw a line on top of the baseline, because the baseline
+// in that case will belong to the title. For this case we need to draw
+// a line on top of the baseline.
+// As usual, there is a special case. When we first are called, we might
+// need to repaint ourselves one more time. We only need that if we
+// didn't get the activation, i.e. when we are launched via the command
+// line. And this only if the toolbar is visible from the beginning,
+// so we have a special flag that signals if we need to repaint or not.
+- (void)drawRectSpecial:(NSRect)rect
+{
+ // Call the original drawing method.
+ [self drawRectOriginal:rect];
+ NSWindow *window = [self window];
+ NSToolbar *toolbar = [window toolbar];
+ if(!toolbar) {
+ // There is no toolbar, we have to draw a line on top of the line drawn by Cocoa.
+ macDrawRectOnTop((void *)window);
+ } else {
+ if([toolbar isVisible]) {
+ // We tell Cocoa to avoid drawing the line at the end.
+ if(firstDrawingInvocation) {
+ firstDrawingInvocation = false;
+ macSyncDrawingOnFirstInvocation((void *)window);
+ } else
+ [toolbar setShowsBaselineSeparator:NO];
+ } else {
+ // There is a toolbar but it is not visible so
+ // we have to draw a line on top of the line drawn by Cocoa.
+ macDrawRectOnTop((void *)window);
+ }
+ }
+}
diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm
index dd12f65..4953c48 100644
--- a/src/gui/kernel/qcocoaview_mac.mm
+++ b/src/gui/kernel/qcocoaview_mac.mm
@@ -1554,7 +1554,8 @@ Qt::DropAction QDragManager::drag(QDrag *o)
qt_button_down = 0;
[dndParams.view release];
[image release];
- dragPrivate()->executed_action = Qt::IgnoreAction;
+ if (dragPrivate())
+ dragPrivate()->executed_action = Qt::IgnoreAction;
object = 0;
Qt::DropAction performedAction(qt_mac_mapNSDragOperation(qMacDnDParams()->performedAction));
// do post drag processing, if required.
diff --git a/src/gui/kernel/qguiplatformplugin.cpp b/src/gui/kernel/qguiplatformplugin.cpp
index c4119af..2dd251b 100644
--- a/src/gui/kernel/qguiplatformplugin.cpp
+++ b/src/gui/kernel/qguiplatformplugin.cpp
@@ -81,7 +81,7 @@ QGuiPlatformPlugin *qt_guiPlatformPlugin()
static QGuiPlatformPlugin *plugin;
if (!plugin)
{
-#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
QString key = QString::fromLocal8Bit(qgetenv("QT_PLATFORM_PLUGIN"));
#ifdef Q_WS_X11
diff --git a/src/gui/kernel/qpalette.cpp b/src/gui/kernel/qpalette.cpp
index 6e8c90e..98e8f66 100644
--- a/src/gui/kernel/qpalette.cpp
+++ b/src/gui/kernel/qpalette.cpp
@@ -795,7 +795,7 @@ const QBrush &QPalette::brush(ColorGroup gr, ColorRole cr) const
/*!
\fn void QPalette::setColor(ColorGroup group, ColorRole role, const QColor &color)
- Sets the brush in the specified color \a group, used for the given
+ Sets the color in the specified color \a group, used for the given
color \a role, to the specified solid \a color.
\sa setBrush() color() ColorRole
diff --git a/src/gui/kernel/qsoftkeymanager_s60.cpp b/src/gui/kernel/qsoftkeymanager_s60.cpp
index e4990b1..6325d95 100644
--- a/src/gui/kernel/qsoftkeymanager_s60.cpp
+++ b/src/gui/kernel/qsoftkeymanager_s60.cpp
@@ -79,6 +79,8 @@ bool QSoftKeyManagerPrivateS60::skipCbaUpdate()
// Note: Cannot use IsDisplayingMenuOrDialog since CBA update can be triggered before
// menu/dialog CBA is actually displayed i.e. it is being costructed.
CEikButtonGroupContainer *appUiCba = S60->buttonGroupContainer();
+ if (!appUiCba)
+ return true;
// CEikButtonGroupContainer::Current returns 0 if CBA is not visible at all
CEikButtonGroupContainer *currentCba = CEikButtonGroupContainer::Current();
// Check if softkey need to be update even they are not visible
diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm
index a05c7d5..8cef03c 100644
--- a/src/gui/kernel/qt_cocoa_helpers_mac.mm
+++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm
@@ -1163,15 +1163,81 @@ void qt_mac_updateContentBorderMetricts(void * /*OSWindowRef */window, const ::H
#endif
}
+#if QT_MAC_USE_COCOA
+void qt_mac_replaceDrawRect(void * /*OSWindowRef */window, QWidgetPrivate *widget)
+{
+ QMacCocoaAutoReleasePool pool;
+ OSWindowRef theWindow = static_cast<OSWindowRef>(window);
+ if(!theWindow)
+ return;
+ id theClass = [[[theWindow contentView] superview] class];
+ // What we do here is basically to add a new selector to NSThemeFrame called
+ // "drawRectOriginal:" which will contain the original implementation of
+ // "drawRect:". After that we get the new implementation from QCocoaWindow
+ // and exchange them. The new implementation is called drawRectSpecial.
+ // We cannot just add the method because it might have been added before and since
+ // we cannot remove a method once it has been added we need to ask QCocoaWindow if
+ // we did the swap or not.
+ if(!widget->drawRectOriginalAdded) {
+ Method m2 = class_getInstanceMethod(theClass, @selector(drawRect:));
+ if(!m2) {
+ // This case is pretty extreme, no drawRect means no drawing!
+ return;
+ }
+ class_addMethod(theClass, @selector(drawRectOriginal:), method_getImplementation(m2), method_getTypeEncoding(m2));
+ widget->drawRectOriginalAdded = true;
+ }
+ if(widget->originalDrawMethod) {
+ Method m0 = class_getInstanceMethod([theWindow class], @selector(drawRectSpecial:));
+ if(!m0) {
+ // Ok, this means the methods were never swapped. Just ignore
+ return;
+ }
+ Method m1 = class_getInstanceMethod(theClass, @selector(drawRect:));
+ if(!m1) {
+ // Ok, this means the methods were never swapped. Just ignore
+ return;
+ }
+ // We have the original method here. Proceed and swap the methods.
+ method_exchangeImplementations(m1, m0);
+ widget->originalDrawMethod = false;
+ [window display];
+ }
+}
+
+void qt_mac_replaceDrawRectOriginal(void * /*OSWindowRef */window, QWidgetPrivate *widget)
+{
+ QMacCocoaAutoReleasePool pool;
+ OSWindowRef theWindow = static_cast<OSWindowRef>(window);
+ id theClass = [[[theWindow contentView] superview] class];
+ // Now we need to revert the methods to their original state.
+ // We cannot remove the method, so we just keep track of it in QCocoaWindow.
+ Method m0 = class_getInstanceMethod([theWindow class], @selector(drawRectSpecial:));
+ if(!m0) {
+ // Ok, this means the methods were never swapped. Just ignore
+ return;
+ }
+ Method m1 = class_getInstanceMethod(theClass, @selector(drawRect:));
+ if(!m1) {
+ // Ok, this means the methods were never swapped. Just ignore
+ return;
+ }
+ method_exchangeImplementations(m1, m0);
+ widget->originalDrawMethod = true;
+ [window display];
+}
+#endif // QT_MAC_USE_COCOA
+
void qt_mac_showBaseLineSeparator(void * /*OSWindowRef */window, bool show)
{
+ if(!window)
+ return;
#if QT_MAC_USE_COCOA
QMacCocoaAutoReleasePool pool;
OSWindowRef theWindow = static_cast<OSWindowRef>(window);
NSToolbar *macToolbar = [theWindow toolbar];
- if (macToolbar)
- [macToolbar setShowsBaselineSeparator: show];
-#endif
+ [macToolbar setShowsBaselineSeparator:show];
+#endif // QT_MAC_USE_COCOA
}
QStringList qt_mac_NSArrayToQStringList(void *nsarray)
@@ -1233,6 +1299,17 @@ CGContextRef qt_mac_graphicsContextFor(QWidget *widget)
return context;
}
+void qt_mac_dispatchPendingUpdateRequests(QWidget *widget)
+{
+ if (!widget)
+ return;
+#ifndef QT_MAC_USE_COCOA
+ HIViewRender(qt_mac_nativeview_for(widget));
+#else
+ [qt_mac_nativeview_for(widget) displayIfNeeded];
+#endif
+}
+
CGFloat qt_mac_get_scalefactor()
{
#ifndef QT_MAC_USE_COCOA
@@ -1403,4 +1480,52 @@ void qt_mac_post_retranslateAppMenu()
#endif
}
+#ifdef QT_MAC_USE_COCOA
+// This method implements the magic for the drawRectSpecial method.
+// We draw a line at the upper edge of the content view in order to
+// override the title baseline.
+void macDrawRectOnTop(void * /*OSWindowRef */window)
+{
+ OSWindowRef theWindow = static_cast<OSWindowRef>(window);
+ NSView *contentView = [theWindow contentView];
+ if(!contentView)
+ return;
+ // Get coordinates of the content view
+ NSRect contentRect = [contentView frame];
+ // Draw a line on top of the already drawn line.
+ // We need to check if we are active or not to use the proper color.
+ if([window isKeyWindow] || [window isMainWindow]) {
+ [[NSColor colorWithCalibratedRed:1.0 green:1.0 blue:1.0 alpha:1.0] set];
+ } else {
+ [[NSColor colorWithCalibratedRed:1.0 green:1.0 blue:1.0 alpha:1.0] set];
+ }
+ NSPoint origin = NSMakePoint(0, contentRect.size.height);
+ NSPoint end = NSMakePoint(contentRect.size.width, contentRect.size.height);
+ [NSBezierPath strokeLineFromPoint:origin toPoint:end];
+}
+
+// This method will (or at least should) get called only once.
+// Its mission is to find out if we are active or not. If we are active
+// we assume that we were launched via finder, otherwise we assume
+// we were called from the command line. The distinction is important,
+// since in the first case we don't need to trigger a paintEvent, while
+// in the second case we do.
+void macSyncDrawingOnFirstInvocation(void * /*OSWindowRef */window)
+{
+ OSWindowRef theWindow = static_cast<OSWindowRef>(window);
+ NSApplication *application = [NSApplication sharedApplication];
+ NSToolbar *toolbar = [window toolbar];
+ if([application isActive]) {
+ // Launched from finder
+ [toolbar setShowsBaselineSeparator:NO];
+ } else {
+ // Launched from commandline
+ [toolbar setVisible:false];
+ [toolbar setShowsBaselineSeparator:NO];
+ [toolbar setVisible:true];
+ [theWindow display];
+ }
+}
+#endif // QT_MAC_USE_COCOA
+
QT_END_NAMESPACE
diff --git a/src/gui/kernel/qt_cocoa_helpers_mac_p.h b/src/gui/kernel/qt_cocoa_helpers_mac_p.h
index 3fd62a4..5db121a 100644
--- a/src/gui/kernel/qt_cocoa_helpers_mac_p.h
+++ b/src/gui/kernel/qt_cocoa_helpers_mac_p.h
@@ -131,6 +131,8 @@ void macWindowSetHasShadow( void * /*OSWindowRef*/ window, bool hasShadow );
void macWindowFlush(void * /*OSWindowRef*/ window);
void macSendToolbarChangeEvent(QWidget *widget);
void qt_mac_updateContentBorderMetricts(void * /*OSWindowRef */window, const ::HIContentBorderMetrics &metrics);
+void qt_mac_replaceDrawRect(void * /*OSWindowRef */window, QWidgetPrivate *widget);
+void qt_mac_replaceDrawRectOriginal(void * /*OSWindowRef */window, QWidgetPrivate *widget);
void qt_mac_showBaseLineSeparator(void * /*OSWindowRef */window, bool show);
void * /*NSImage */qt_mac_create_nsimage(const QPixmap &pm);
void qt_mac_update_mouseTracking(QWidget *widget);
@@ -140,6 +142,9 @@ void qt_dispatchTabletProximityEvent(void * /*NSEvent * */ tabletEvent);
#ifdef QT_MAC_USE_COCOA
bool qt_dispatchKeyEventWithCocoa(void * /*NSEvent * */ keyEvent, QWidget *widgetToGetEvent);
void qt_cocoaChangeOverrideCursor(const QCursor &cursor);
+// These methods exists only for supporting unified mode.
+void macDrawRectOnTop(void * /*OSWindowRef */ window);
+void macSyncDrawingOnFirstInvocation(void * /*OSWindowRef */window);
#endif
void qt_mac_menu_collapseSeparators(void * /*NSMenu */ menu, bool collapse);
bool qt_dispatchKeyEvent(void * /*NSEvent * */ keyEvent, QWidget *widgetToGetEvent);
diff --git a/src/gui/kernel/qt_mac_p.h b/src/gui/kernel/qt_mac_p.h
index 7bfb257..3341ce1 100644
--- a/src/gui/kernel/qt_mac_p.h
+++ b/src/gui/kernel/qt_mac_p.h
@@ -57,6 +57,7 @@
#ifdef __OBJC__
#include <Cocoa/Cocoa.h>
+#include <objc/runtime.h>
#endif
#include <CoreServices/CoreServices.h>
diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h
index a714221..58da302 100644
--- a/src/gui/kernel/qt_s60_p.h
+++ b/src/gui/kernel/qt_s60_p.h
@@ -155,7 +155,7 @@ class QLongTapTimer;
class QSymbianControl : public CCoeControl, public QAbstractLongTapObserver
#ifdef Q_WS_S60
-, public MAknFadedComponent
+, public MAknFadedComponent, public MEikStatusPaneObserver
#endif
{
public:
@@ -183,6 +183,7 @@ public:
#ifdef Q_WS_S60
void FadeBehindPopup(bool fade){ popupFader.FadeBehindPopup( this, this, fade); }
+ void HandleStatusPaneSizeChange();
protected: // from MAknFadedComponent
TInt CountFadedComponents() {return 1;}
diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp
index b59824c..c058280 100644
--- a/src/gui/kernel/qwidget.cpp
+++ b/src/gui/kernel/qwidget.cpp
@@ -220,6 +220,11 @@ QWidgetPrivate::QWidgetPrivate(int version)
isWidget = true;
memset(high_attributes, 0, sizeof(high_attributes));
+#if QT_MAC_USE_COCOA
+ drawRectOriginalAdded = false;
+ originalDrawMethod = true;
+ changeMethods = false;
+#endif // QT_MAC_USE_COCOA
#ifdef QWIDGET_EXTRA_DEBUG
static int count = 0;
qDebug() << "widgets" << ++count;
@@ -2530,7 +2535,7 @@ void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool
Q_Q(QWidget);
QStyle *oldStyle = q->style();
#ifndef QT_NO_STYLE_STYLESHEET
- QStyle *origStyle = 0;
+ QWeakPointer<QStyle> origStyle;
#endif
#ifdef Q_WS_MAC
@@ -2544,7 +2549,7 @@ void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool
createExtra();
#ifndef QT_NO_STYLE_STYLESHEET
- origStyle = extra->style;
+ origStyle = extra->style.data();
#endif
extra->style = newStyle;
}
@@ -2573,23 +2578,23 @@ void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool
}
}
- QEvent e(QEvent::StyleChange);
- QApplication::sendEvent(q, &e);
-#ifdef QT3_SUPPORT
- q->styleChange(*oldStyle);
-#endif
-
#ifndef QT_NO_STYLE_STYLESHEET
if (!qobject_cast<QStyleSheetStyle*>(newStyle)) {
- if (const QStyleSheetStyle* cssStyle = qobject_cast<QStyleSheetStyle*>(origStyle)) {
+ if (const QStyleSheetStyle* cssStyle = qobject_cast<QStyleSheetStyle*>(origStyle.data())) {
cssStyle->clearWidgetFont(q);
}
}
#endif
+ QEvent e(QEvent::StyleChange);
+ QApplication::sendEvent(q, &e);
+#ifdef QT3_SUPPORT
+ q->styleChange(*oldStyle);
+#endif
+
#ifndef QT_NO_STYLE_STYLESHEET
// dereference the old stylesheet style
- if (QStyleSheetStyle *proxy = qobject_cast<QStyleSheetStyle *>(origStyle))
+ if (QStyleSheetStyle *proxy = qobject_cast<QStyleSheetStyle *>(origStyle.data()))
proxy->deref();
#endif
}
@@ -5578,52 +5583,23 @@ QPixmap QWidgetEffectSourcePrivate::pixmap(Qt::CoordinateSystem system, QPoint *
pixmapOffset = painterTransform.map(pixmapOffset);
}
-
QRect effectRect;
- if (mode == QGraphicsEffect::PadToEffectiveBoundingRect) {
+ if (mode == QGraphicsEffect::PadToEffectiveBoundingRect)
effectRect = m_widget->graphicsEffect()->boundingRectFor(sourceRect).toAlignedRect();
-
- } else if (mode == QGraphicsEffect::PadToTransparentBorder) {
+ else if (mode == QGraphicsEffect::PadToTransparentBorder)
effectRect = sourceRect.adjusted(-1, -1, 1, 1).toAlignedRect();
-
- } else {
+ else
effectRect = sourceRect.toAlignedRect();
- }
-
if (offset)
*offset = effectRect.topLeft();
- if (deviceCoordinates) {
- // Clip to device rect.
- int left, top, right, bottom;
- effectRect.getCoords(&left, &top, &right, &bottom);
- if (left < 0) {
- if (offset)
- offset->rx() += -left;
- effectRect.setX(0);
- }
- if (top < 0) {
- if (offset)
- offset->ry() += -top;
- effectRect.setY(0);
- }
- // NB! We use +-1 for historical reasons (see QRect documentation).
- QPaintDevice *device = context->painter->device();
- const int deviceWidth = device->width();
- const int deviceHeight = device->height();
- if (right + 1 > deviceWidth)
- effectRect.setRight(deviceWidth - 1);
- if (bottom + 1 > deviceHeight)
- effectRect.setBottom(deviceHeight -1);
- }
-
pixmapOffset -= effectRect.topLeft();
QPixmap pixmap(effectRect.size());
pixmap.fill(Qt::transparent);
- m_widget->render(&pixmap, pixmapOffset);
+ m_widget->render(&pixmap, pixmapOffset, QRegion(), QWidget::DrawChildren);
return pixmap;
}
#endif //QT_NO_GRAPHICSEFFECT
@@ -12292,6 +12268,28 @@ void QWidgetPrivate::_q_delayedDestroy(WId winId)
}
#endif
+#if QT_MAC_USE_COCOA
+void QWidgetPrivate::syncUnifiedMode() {
+ // The whole purpose of this method is to keep the unifiedToolbar in sync.
+ // That means making sure we either exchange the drawing methods or we let
+ // the toolbar know that it does not require to draw the baseline.
+ Q_Q(QWidget);
+ // This function makes sense only if this is a top level
+ if(!q->isWindow())
+ return;
+ OSWindowRef window = qt_mac_window_for(q);
+ if(changeMethods) {
+ // Ok, we are in documentMode.
+ if(originalDrawMethod)
+ qt_mac_replaceDrawRect(window, this);
+ } else {
+ if(!originalDrawMethod)
+ qt_mac_replaceDrawRectOriginal(window, this);
+ }
+}
+
+#endif // QT_MAC_USE_COCOA
+
QT_END_NAMESPACE
#include "moc_qwidget.cpp"
diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm
index d7cd2eb..e29b755 100644
--- a/src/gui/kernel/qwidget_mac.mm
+++ b/src/gui/kernel/qwidget_mac.mm
@@ -2300,6 +2300,12 @@ void QWidgetPrivate::finishCreateWindow_sys_Cocoa(void * /*NSWindow * */ voidWin
if (q->testAttribute(Qt::WA_DropSiteRegistered))
registerDropSite(true);
transferChildren();
+
+ // Tell Cocoa explicit that we wan't the view to receive key events
+ // (regardless of focus policy) because this is how it works on other
+ // platforms (and in the carbon port):
+ if (!qApp->focusWidget())
+ [windowRef makeFirstResponder:nsview];
}
if (topExtra->posFromMove) {
diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h
index 89ea256..cad60b5 100644
--- a/src/gui/kernel/qwidget_p.h
+++ b/src/gui/kernel/qwidget_p.h
@@ -773,6 +773,13 @@ public:
void finishCreateWindow_sys_Cocoa(void * /*NSWindow * */ windowRef);
void syncCocoaMask();
void finishCocoaMaskSetup();
+ void syncUnifiedMode();
+ // Did we add the drawRectOriginal method?
+ bool drawRectOriginalAdded;
+ // Is the original drawRect method available?
+ bool originalDrawMethod;
+ // Do we need to change the methods?
+ bool changeMethods;
#endif
void determineWindowClass();
void transferChildren();
diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp
index bfa7050..a0429d3 100644
--- a/src/gui/kernel/qwidget_s60.cpp
+++ b/src/gui/kernel/qwidget_s60.cpp
@@ -387,16 +387,7 @@ void QWidgetPrivate::create_sys(WId window, bool /* initializeWindow */, bool de
| EPointerFilterMove | EPointerFilterDrag, 0);
drawableWindow->EnableVisibilityChangeEvents();
- if (!isOpaque) {
- RWindow *const window = static_cast<RWindow *>(drawableWindow);
-#ifdef Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE
- window->SetSurfaceTransparency(true);
-#else
- const TDisplayMode displayMode = static_cast<TDisplayMode>(window->SetRequiredDisplayMode(EColor16MA));
- if (window->SetTransparencyAlphaChannel() == KErrNone)
- window->SetBackgroundColor(TRgb(255, 255, 255, 0));
-#endif
- }
+ s60UpdateIsOpaque();
}
q->setAttribute(Qt::WA_WState_Created);
@@ -488,6 +479,47 @@ void QWidgetPrivate::show_sys()
QSymbianControl *id = static_cast<QSymbianControl *>(q->internalWinId());
+#ifdef Q_WS_S60
+ // Lazily initialize the S60 screen furniture when the first window is shown.
+ if (!QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes)
+ && !S60->buttonGroupContainer() && !S60->statusPane()) {
+
+ bool isFullscreen = q->windowState() & Qt::WindowFullScreen;
+ bool cbaRequested = q->windowFlags() & Qt::WindowSoftkeysVisibleHint;
+
+ // If the window is fullscreen and has not explicitly requested that the CBA be visible
+ // we delay the creation even more.
+ if ((!isFullscreen || cbaRequested) && !q->testAttribute(Qt::WA_DontShowOnScreen)) {
+
+ // Create the status pane and CBA here
+ CEikAppUi *ui = static_cast<CEikAppUi *>(S60->appUi());
+ MEikAppUiFactory *factory = CEikonEnv::Static()->AppUiFactory();
+ TRAP_IGNORE(factory->ReadAppInfoResourceL(0, ui));
+ if (S60->buttonGroupContainer())
+ S60->buttonGroupContainer()->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY_WITH_IDS);
+
+ if (S60->statusPane()) {
+ // Use QDesktopWidget as the status pane observer to proxy for the AppUi.
+ // Can't use AppUi directly because it privately inherits from MEikStatusPaneObserver.
+ QSymbianControl *desktopControl = static_cast<QSymbianControl *>(QApplication::desktop()->winId());
+ S60->statusPane()->SetObserver(desktopControl);
+
+ // Hide the status pane if fullscreen OR
+ // Fill client area if maximized OR
+ // Put window below status pane unless the window has an explicit position.
+ if (isFullscreen) {
+ S60->statusPane()->MakeVisible(false);
+ } else if (q->windowState() & Qt::WindowMaximized) {
+ TRect r = static_cast<CEikAppUi*>(S60->appUi())->ClientRect();
+ id->SetExtent(r.iTl, r.Size());
+ } else if (!q->testAttribute(Qt::WA_Moved)) {
+ id->SetPosition(static_cast<CEikAppUi*>(S60->appUi())->ClientRect().iTl);
+ }
+ }
+ }
+ }
+#endif
+
id->MakeVisible(true);
if(q->isWindow())
@@ -1063,6 +1095,9 @@ void QWidget::setWindowState(Qt::WindowStates newstate)
return;
if (isWindow()) {
+ createWinId();
+ Q_ASSERT(testAttribute(Qt::WA_WState_Created));
+
const bool wasResized = testAttribute(Qt::WA_Resized);
const bool wasMoved = testAttribute(Qt::WA_Moved);
@@ -1088,35 +1123,35 @@ void QWidget::setWindowState(Qt::WindowStates newstate)
if (buttonGroup) {
// Visibility
buttonGroup->MakeVisible(visible || (isFullscreen && cbaRequested));
-
- // Responsiviness
- CEikCba *cba = static_cast<CEikCba *>( buttonGroup->ButtonGroup() ); // downcast from MEikButtonGroup
- TUint cbaFlags = cba->ButtonGroupFlags();
- if(windowFlags() & Qt::WindowSoftkeysRespondHint)
- cbaFlags |= EAknCBAFlagRespondWhenInvisible;
- else
- cbaFlags &= ~EAknCBAFlagRespondWhenInvisible;
- cba->SetButtonGroupFlags(cbaFlags);
}
#endif // Q_WS_S60
- createWinId();
- Q_ASSERT(testAttribute(Qt::WA_WState_Created));
// Ensure the initial size is valid, since we store it as normalGeometry below.
if (!wasResized && !isVisible())
adjustSize();
QTLWExtra *top = d->topData();
- const QRect normalGeometry = (top->normalGeometry.width() < 0) ? geometry() : top->normalGeometry;
-
+ QRect normalGeometry = (top->normalGeometry.width() < 0) ? geometry() : top->normalGeometry;
const bool cbaVisibilityHint = windowFlags() & Qt::WindowSoftkeysVisibleHint;
- if (newstate & Qt::WindowFullScreen && !cbaVisibilityHint)
- setGeometry(qApp->desktop()->screenGeometry(this));
- else if (newstate & Qt::WindowMaximized || ((newstate & Qt::WindowFullScreen) && cbaVisibilityHint))
- setGeometry(qApp->desktop()->availableGeometry(this));
- else
+ if (newstate & Qt::WindowFullScreen && !cbaVisibilityHint) {
+ window->SetExtentToWholeScreen();
+ } else if (newstate & Qt::WindowMaximized || ((newstate & Qt::WindowFullScreen) && cbaVisibilityHint)) {
+ TRect maxExtent = qt_QRect2TRect(qApp->desktop()->availableGeometry(this));
+ window->SetExtent(maxExtent.iTl, maxExtent.Size());
+ } else {
+#ifdef Q_WS_S60
+ // With delayed creation of S60 app panes, the normalGeometry calculated above is not
+ // accurate because it did not consider the status pane. This means that when returning
+ // normal mode after showing the status pane, the geometry would overlap so we should
+ // move it if it never had an explicit position.
+ if (!wasMoved && statusPane && visible) {
+ TPoint tl = static_cast<CEikAppUi*>(S60->appUi())->ClientRect().iTl;
+ normalGeometry.setTopLeft(QPoint(tl.iX, tl.iY));
+ }
+#endif
setGeometry(normalGeometry);
+ }
//restore normal geometry
top->normalGeometry = normalGeometry;
diff --git a/src/gui/painting/qgraphicssystemfactory.cpp b/src/gui/painting/qgraphicssystemfactory.cpp
index 29f24a3..3c09894 100644
--- a/src/gui/painting/qgraphicssystemfactory.cpp
+++ b/src/gui/painting/qgraphicssystemfactory.cpp
@@ -50,7 +50,7 @@
QT_BEGIN_NAMESPACE
-#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
(QGraphicsSystemFactoryInterface_iid, QLatin1String("/graphicssystems"), Qt::CaseInsensitive))
#endif
@@ -79,7 +79,7 @@ QGraphicsSystem *QGraphicsSystemFactory::create(const QString& key)
else if (system.isEmpty() || system == QLatin1String("native"))
return 0;
-#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
if (!ret) {
if (QGraphicsSystemFactoryInterface *factory = qobject_cast<QGraphicsSystemFactoryInterface*>(loader()->instance(system)))
ret = factory->create(system);
@@ -100,7 +100,7 @@ QGraphicsSystem *QGraphicsSystemFactory::create(const QString& key)
*/
QStringList QGraphicsSystemFactory::keys()
{
-#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
QStringList list = loader()->keys();
#else
QStringList list;
diff --git a/src/gui/painting/qpaintengine_mac.cpp b/src/gui/painting/qpaintengine_mac.cpp
index ac2fcf4..14ba94e 100644
--- a/src/gui/painting/qpaintengine_mac.cpp
+++ b/src/gui/painting/qpaintengine_mac.cpp
@@ -118,9 +118,10 @@ QMacCGContext::QMacCGContext(QPainter *p)
QRegion clip = p->paintEngine()->systemClip();
QTransform native = p->deviceTransform();
QTransform logical = p->combinedTransform();
+
if (p->hasClipping()) {
QRegion r = p->clipRegion();
- r.translate(native.dx() - logical.dx(), native.dy() - logical.dy());
+ r.translate(native.dx(), native.dy());
if (clip.isEmpty())
clip = r;
else
@@ -128,10 +129,7 @@ QMacCGContext::QMacCGContext(QPainter *p)
}
qt_mac_clip_cg(context, clip, 0);
- QPainterState *state = static_cast<QPainterState *>(pe->state);
- Q_ASSERT(state);
- if (!state->redirectionMatrix.isIdentity())
- CGContextTranslateCTM(context, state->redirectionMatrix.dx(), state->redirectionMatrix.dy());
+ CGContextTranslateCTM(context, native.dx(), native.dy());
}
}
CGContextRetain(context);
diff --git a/src/gui/painting/qprintengine_ps.cpp b/src/gui/painting/qprintengine_ps.cpp
index ac94de3..28e9a7a 100644
--- a/src/gui/painting/qprintengine_ps.cpp
+++ b/src/gui/painting/qprintengine_ps.cpp
@@ -485,7 +485,6 @@ void QPSPrintEnginePrivate::emitHeader(bool finished)
QByteArray header;
QPdf::ByteStream s(&header);
- s << "%!PS-Adobe-1.0";
qreal scale = 72. / ((qreal) q->metric(QPaintDevice::PdmDpiY));
QRect pageRect = this->pageRect();
@@ -497,28 +496,32 @@ void QPSPrintEnginePrivate::emitHeader(bool finished)
int width = pageRect.width();
int height = pageRect.height();
if (finished && pageCount == 1 && copies == 1 &&
- ((fullPage && qt_gen_epsf) || (outputFileName.endsWith(QLatin1String(".eps"))))
- ) {
+ ((fullPage && qt_gen_epsf) || (outputFileName.endsWith(QLatin1String(".eps")))))
+ {
+ // According to the EPSF 3.0 spec it is required that the PS
+ // version is PS-Adobe-3.0
+ s << "%!PS-Adobe-3.0";
if (!boundingBox.isValid())
boundingBox.setRect(0, 0, width, height);
if (orientation == QPrinter::Landscape) {
if (!fullPage)
boundingBox.translate(-mleft, -mtop);
s << " EPSF-3.0\n%%BoundingBox: "
- << (int)(printer->height() - boundingBox.bottom())*scale // llx
- << (int)(printer->width() - boundingBox.right())*scale - 1 // lly
- << (int)(printer->height() - boundingBox.top())*scale + 1 // urx
- << (int)(printer->width() - boundingBox.left())*scale; // ury
+ << int((printer->height() - boundingBox.bottom())*scale) // llx
+ << int((printer->width() - boundingBox.right())*scale - 1) // lly
+ << int((printer->height() - boundingBox.top())*scale + 1) // urx
+ << int((printer->width() - boundingBox.left())*scale); // ury
} else {
if (!fullPage)
boundingBox.translate(mleft, -mtop);
s << " EPSF-3.0\n%%BoundingBox: "
- << (int)(boundingBox.left())*scale
- << (int)(printer->height() - boundingBox.bottom())*scale - 1
- << (int)(boundingBox.right())*scale + 1
- << (int)(printer->height() - boundingBox.top())*scale;
+ << int((boundingBox.left())*scale)
+ << int((printer->height() - boundingBox.bottom())*scale - 1)
+ << int((boundingBox.right())*scale + 1)
+ << int((printer->height() - boundingBox.top())*scale);
}
} else {
+ s << "%!PS-Adobe-1.0";
int w = width + (fullPage ? 0 : mleft + mright);
int h = height + (fullPage ? 0 : mtop + mbottom);
w = (int)(w*scale);
diff --git a/src/gui/painting/qprintengine_win.cpp b/src/gui/painting/qprintengine_win.cpp
index ea9dc5d..dd4de99 100644
--- a/src/gui/painting/qprintengine_win.cpp
+++ b/src/gui/painting/qprintengine_win.cpp
@@ -965,12 +965,13 @@ void QWin32PrintEnginePrivate::queryDefault()
return;
QStringList info = output.split(QLatin1Char(','));
- if (info.size() > 0) {
+ int infoSize = info.size();
+ if (infoSize > 0) {
if (name.isEmpty())
name = info.at(0);
- if (program.isEmpty())
+ if (program.isEmpty() && infoSize > 1)
program = info.at(1);
- if (port.isEmpty())
+ if (port.isEmpty() && infoSize > 2)
port = info.at(2);
}
}
diff --git a/src/gui/painting/qtextureglyphcache_p.h b/src/gui/painting/qtextureglyphcache_p.h
index 390fe51..a818978 100644
--- a/src/gui/painting/qtextureglyphcache_p.h
+++ b/src/gui/painting/qtextureglyphcache_p.h
@@ -125,7 +125,7 @@ protected:
};
-class QImageTextureGlyphCache : public QTextureGlyphCache
+class Q_GUI_EXPORT QImageTextureGlyphCache : public QTextureGlyphCache
{
public:
QImageTextureGlyphCache(QFontEngineGlyphCache::Type type, const QTransform &matrix)
diff --git a/src/gui/s60framework/qs60mainappui.cpp b/src/gui/s60framework/qs60mainappui.cpp
index 3b5b9d3..feffc9f 100644
--- a/src/gui/s60framework/qs60mainappui.cpp
+++ b/src/gui/s60framework/qs60mainappui.cpp
@@ -112,16 +112,10 @@ void QS60MainAppUi::ConstructL()
// ENoAppResourceFile and ENonStandardResourceFile makes UI to work without
// resource files in most SDKs. S60 3rd FP1 public seems to require resource file
// even these flags are defined
- TInt flags = CAknAppUi::EAknEnableSkin;
- if (QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes)) {
- flags |= CAknAppUi::ENoScreenFurniture | CAknAppUi::ENonStandardResourceFile;
- }
+ TInt flags = CAknAppUi::EAknEnableSkin
+ | CAknAppUi::ENoScreenFurniture
+ | CAknAppUi::ENonStandardResourceFile;
BaseConstructL(flags);
-
- if (!QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes)) {
- CEikButtonGroupContainer* nativeContainer = Cba();
- nativeContainer->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY_WITH_IDS);
- }
}
/*!
diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp
index 7587343..20297ae 100644
--- a/src/gui/styles/qs60style.cpp
+++ b/src/gui/styles/qs60style.cpp
@@ -92,10 +92,10 @@ static const qreal goldenRatio = 1.618;
const layoutHeader QS60StylePrivate::m_layoutHeaders[] = {
// *** generated layout data ***
-{240,320,1,17,"QVGA Landscape"},
-{320,240,1,17,"QVGA Portrait"},
-{360,640,1,17,"NHD Landscape"},
-{640,360,1,17,"NHD Portrait"},
+{240,320,1,18,"QVGA Landscape"},
+{320,240,1,18,"QVGA Portrait"},
+{360,640,1,18,"NHD Landscape"},
+{640,360,1,18,"NHD Portrait"},
{352,800,1,12,"E90 Landscape"}
// *** End of generated data ***
};
@@ -104,11 +104,11 @@ const int QS60StylePrivate::m_numberOfLayouts =
const short QS60StylePrivate::data[][MAX_PIXELMETRICS] = {
// *** generated pixel metrics ***
-{5,0,-909,0,0,2,0,0,-1,7,12,19,13,13,6,200,-909,-909,-909,20,13,2,0,0,21,7,18,0,3,3,1,-909,-909,0,1,0,0,12,20,15,15,18,18,1,115,18,0,-909,-909,-909,-909,0,0,16,2,-909,0,0,-909,16,-909,-909,-909,-909,32,18,55,24,55,4,4,4,9,13,-909,5,51,11,5,0,3,3,6,8,3,3,-909,2,-909,-909,-909,-909,5,5,3,1, 106},
-{5,0,-909,0,0,1,0,0,-1,8,14,22,15,15,7,164,-909,-909,-909,19,15,2,0,0,21,8,27,0,4,4,1,-909,-909,0,7,6,0,13,23,17,17,21,21,7,115,21,0,-909,-909,-909,-909,0,0,15,1,-909,0,0,-909,15,-909,-909,-909,-909,32,21,65,27,65,3,3,5,10,15,-909,5,58,13,5,0,4,4,7,9,4,4,-909,2,-909,-909,-909,-909,6,6,3,1, 106},
-{7,0,-909,0,0,2,0,0,-1,25,69,28,19,19,9,258,-909,-909,-909,23,19,26,0,0,32,25,72,0,5,5,2,-909,-909,0,7,21,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,25,2,-909,0,0,-909,25,-909,-909,-909,-909,87,27,77,35,77,13,13,6,8,19,-909,7,74,19,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1, 135},
-{7,0,-909,0,0,2,0,0,-1,25,68,28,19,19,9,258,-909,-909,-909,31,19,6,0,0,32,25,60,0,5,5,2,-909,-909,0,7,32,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,26,2,-909,0,0,-909,26,-909,-909,-909,-909,87,27,96,35,96,12,12,6,8,19,-909,7,74,22,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1, 135},
-{7,0,-909,0,0,2,0,0,-1,10,20,27,18,18,9,301,-909,-909,-909,29,18,5,0,0,35,7,32,0,5,5,2,-909,-909,0,2,8,0,16,28,21,21,26,26,2,170,26,0,-909,-909,-909,-909,0,0,21,6,-909,0,0,-909,-909,-909,-909,-909,-909,54,26,265,34,265,5,5,6,3,18,-909,7,72,19,7,0,5,6,8,11,6,5,-909,2,-909,-909,-909,-909,5,5,3,1, 106}
+{5,0,-909,0,0,2,0,0,-1,7,12,19,13,13,6,200,-909,-909,-909,20,13,2,0,0,21,7,18,30,3,3,1,-909,-909,0,1,0,0,12,20,15,15,18,18,1,115,18,0,-909,-909,-909,-909,0,0,16,2,-909,0,0,-909,16,-909,-909,-909,-909,32,18,55,24,55,4,4,4,9,13,-909,5,51,11,5,0,3,3,6,8,3,3,-909,2,-909,-909,-909,-909,5,5,3,1, 106},
+{5,0,-909,0,0,1,0,0,-1,8,14,22,15,15,7,164,-909,-909,-909,19,15,2,0,0,21,8,27,28,4,4,1,-909,-909,0,7,6,0,13,23,17,17,21,21,7,115,21,0,-909,-909,-909,-909,0,0,15,1,-909,0,0,-909,15,-909,-909,-909,-909,32,21,65,27,65,3,3,5,10,15,-909,5,58,13,5,0,4,4,7,9,4,4,-909,2,-909,-909,-909,-909,6,6,3,1, 106},
+{7,0,-909,0,0,2,0,0,-1,25,69,28,19,19,9,258,-909,-909,-909,23,19,26,0,0,32,25,72,44,5,5,2,-909,-909,0,7,21,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,25,2,-909,0,0,-909,25,-909,-909,-909,-909,87,27,77,35,77,13,13,6,8,19,-909,7,74,19,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1, 135},
+{7,0,-909,0,0,2,0,0,-1,25,68,28,19,19,9,258,-909,-909,-909,31,19,6,0,0,32,25,60,52,5,5,2,-909,-909,0,7,32,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,26,2,-909,0,0,-909,26,-909,-909,-909,-909,87,27,96,35,96,12,12,6,8,19,-909,7,74,22,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1, 135},
+{7,0,-909,0,0,2,0,0,-1,10,20,27,18,18,9,301,-909,-909,-909,29,18,5,0,0,35,7,32,30,5,5,2,-909,-909,0,2,8,0,16,28,21,21,26,26,2,170,26,0,-909,-909,-909,-909,0,0,21,6,-909,0,0,-909,-909,-909,-909,-909,-909,54,26,265,34,265,5,5,6,3,18,-909,7,72,19,7,0,5,6,8,11,6,5,-909,2,-909,-909,-909,-909,5,5,3,1, 106}
// *** End of generated data ***
};
@@ -651,6 +651,8 @@ void QS60StylePrivate::setFont(QWidget *widget) const
fontCategory = QS60StyleEnums::FC_Title;
} else if (qobject_cast<QMessageBox *>(widget)){
fontCategory = QS60StyleEnums::FC_Primary;
+ } else if (qobject_cast<QMenu *>(widget)){
+ fontCategory = QS60StyleEnums::FC_Primary;
}
if (fontCategory != QS60StyleEnums::FC_Undefined) {
const bool resolveFontSize = widget->testAttribute(Qt::WA_SetFont)
@@ -1544,18 +1546,35 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
QS60StylePrivate::pixelMetric(PM_DefaultFrameWidth);
const int tabOverlap =
QS60StylePrivate::pixelMetric(PM_TabBarTabOverlap) - borderThickness;
-
- if (skinElement==QS60StylePrivate::SE_TabBarTabEastInactive||
- skinElement==QS60StylePrivate::SE_TabBarTabEastActive||
- skinElement==QS60StylePrivate::SE_TabBarTabWestInactive||
- skinElement==QS60StylePrivate::SE_TabBarTabWestActive){
- optionTabAdj.rect.adjust(0, 0, 0, tabOverlap);
- } else {
- if (directionMirrored)
- optionTabAdj.rect.adjust(-tabOverlap, 0, 0, 0);
+ const bool usesScrollButtons =
+ (widget) ? (qobject_cast<const QTabBar*>(widget))->usesScrollButtons() : false;
+ const int roomForScrollButton =
+ usesScrollButtons ? QS60StylePrivate::pixelMetric(PM_TabBarScrollButtonWidth) : 0;
+
+ // adjust for overlapping tabs and scrollbuttons, if necessary
+ if (skinElement == QS60StylePrivate::SE_TabBarTabEastInactive ||
+ skinElement == QS60StylePrivate::SE_TabBarTabEastActive ||
+ skinElement == QS60StylePrivate::SE_TabBarTabWestInactive ||
+ skinElement == QS60StylePrivate::SE_TabBarTabWestActive){
+ if (optionTabAdj.position == QStyleOptionTabV3::Beginning)
+ optionTabAdj.rect.adjust(0, roomForScrollButton, 0, tabOverlap);
+ else if (optionTabAdj.position == QStyleOptionTabV3::End)
+ optionTabAdj.rect.adjust(0, 0, 0, tabOverlap);
else
- optionTabAdj.rect.adjust(0, 0, tabOverlap, 0);
+ optionTabAdj.rect.adjust(0, 0, 0, tabOverlap);
+ } else {
+ if (directionMirrored) {
+ if (optionTabAdj.position == QStyleOptionTabV3::Beginning)
+ optionTabAdj.rect.adjust(-tabOverlap, 0, -roomForScrollButton, 0);
+ else
+ optionTabAdj.rect.adjust(-tabOverlap, 0, 0, 0);
+ } else {
+ if (optionTabAdj.position == QStyleOptionTabV3::Beginning)
+ optionTabAdj.rect.adjust(roomForScrollButton, 0, tabOverlap, 0);
+ else
+ optionTabAdj.rect.adjust(0, 0, tabOverlap, 0);
}
+ }
}
QS60StylePrivate::drawSkinElement(skinElement, painter, optionTabAdj.rect, flags);
}
@@ -1568,7 +1587,10 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
const int borderThickness = QS60StylePrivate::pixelMetric(PM_DefaultFrameWidth);
const int tabOverlap =
QS60StylePrivate::pixelMetric(PM_TabBarTabOverlap) - borderThickness;
- const QRect windowRect = painter->window();
+ const bool usesScrollButtons =
+ (widget) ? (qobject_cast<const QTabBar*>(widget))->usesScrollButtons() : false;
+ const int roomForScrollButton =
+ usesScrollButtons ? QS60StylePrivate::pixelMetric(PM_TabBarScrollButtonWidth) : 0;
switch (tab->shape) {
case QTabBar::TriangularWest:
@@ -1603,6 +1625,17 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
|| optionTab.shape == QTabBar::TriangularEast
|| optionTab.shape == QTabBar::TriangularWest;
+ //make room for scrollbuttons
+ if (!verticalTabs) {
+ if ((tab->position == QStyleOptionTabV3::Beginning && !directionMirrored))
+ tr.adjust(roomForScrollButton, 0, 0, 0);
+ else if ((tab->position == QStyleOptionTabV3::Beginning && directionMirrored))
+ tr.adjust(0, 0, -roomForScrollButton, 0);
+ } else {
+ if (tab->position == QStyleOptionTabV3::Beginning)
+ tr.adjust(0, roomForScrollButton, 0, 0);
+ }
+
if (verticalTabs) {
painter->save();
int newX, newY, newRotation;
@@ -1634,9 +1667,10 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
alignment |= Qt::TextHideMnemonic;
if (!optionTab.icon.isNull()) {
QSize iconSize = optionTab.iconSize;
- int iconExtent = pixelMetric(PM_TabBarIconSize);
- if (iconSize.height() > iconExtent || iconSize.width() > iconExtent)
+ if (!iconSize.isValid()) {
+ const int iconExtent = pixelMetric(PM_TabBarIconSize);
iconSize = QSize(iconExtent, iconExtent);
+ }
QPixmap tabIcon = optionTab.icon.pixmap(iconSize,
(optionTab.state & State_Enabled) ? QIcon::Normal : QIcon::Disabled);
if (tab->text.isEmpty())
@@ -1744,6 +1778,9 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
optionCheckBox.QStyleOptionMenuItem::operator=(*menuItem);
optionCheckBox.rect.setWidth(pixelMetric(PM_IndicatorWidth));
optionCheckBox.rect.setHeight(pixelMetric(PM_IndicatorHeight));
+ optionCheckBox.rect.moveCenter(QPoint(
+ optionCheckBox.rect.center().x(),
+ menuItem->rect.center().y()));
const int moveByX = optionCheckBox.rect.width() + vSpacing;
if (optionMenuItem.direction == Qt::LeftToRight) {
textRect.translate(moveByX, 0);
@@ -2424,6 +2461,10 @@ int QS60Style::pixelMetric(PixelMetric metric, const QStyleOption *option, const
if (metricValue == KNotFound)
metricValue = QCommonStyle::pixelMetric(metric, option, widget);
+ // Menu scrollers should be set to zero height for combobox popups
+ if (metric == PM_MenuScrollerHeight && !qobject_cast<const QMenu *>(widget))
+ metricValue = 0;
+
//if layout direction is mirrored, switch left and right border margins
if (option && option->direction == Qt::RightToLeft) {
if (metric == PM_LayoutLeftMargin)
@@ -2481,9 +2522,29 @@ QSize QS60Style::sizeFromContents(ContentsType ct, const QStyleOption *opt,
sz = QCommonStyle::sizeFromContents(ct, opt, csz, widget);
if (naviPaneSize.height() > sz.height())
sz.setHeight(naviPaneSize.height());
+ // Adjust beginning tabbar item size, if scrollbuttons are used. This is to ensure that the
+ // tabbar item content fits, since scrollbuttons are making beginning tabbar item smaller.
+ int scrollButtonSize = 0;
+ if (const QTabBar *tabBar = qobject_cast<const QTabBar *>(widget))
+ scrollButtonSize = tabBar->usesScrollButtons() ? pixelMetric(PM_TabBarScrollButtonWidth) : 0;
+ if (const QStyleOptionTab *tab = qstyleoption_cast<const QStyleOptionTab *>(opt)) {
+ const bool verticalTabs = tab->shape == QTabBar::RoundedEast
+ || tab->shape == QTabBar::RoundedWest
+ || tab->shape == QTabBar::TriangularEast
+ || tab->shape == QTabBar::TriangularWest;
+ if (tab->position == QStyleOptionTab::Beginning)
+ sz += QSize(verticalTabs ? 0 : scrollButtonSize, !verticalTabs ? 0 : scrollButtonSize);
+ }
}
break;
+ case CT_MenuItem:
case CT_ItemViewItem:
+ if (const QStyleOptionMenuItem *menuItem = qstyleoption_cast<const QStyleOptionMenuItem *>(opt)) {
+ if (menuItem->menuItemType == QStyleOptionMenuItem::Separator) {
+ sz = QSize();
+ break;
+ }
+ }
sz = QCommonStyle::sizeFromContents( ct, opt, csz, widget);
if (QS60StylePrivate::isTouchSupported())
//Make itemview easier to use in touch devices
@@ -2564,6 +2625,9 @@ int QS60Style::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w
case SH_Menu_SelectionWrap:
retValue = true;
break;
+ case SH_Menu_MouseTracking:
+ retValue = true;
+ break;
case SH_ItemView_ShowDecorationSelected:
retValue = true;
break;
@@ -3150,6 +3214,12 @@ bool QS60Style::event(QEvent *e)
#ifdef QT_KEYPAD_NAVIGATION
case QEvent::FocusIn:
if (QWidget *focusWidget = QApplication::focusWidget()) {
+
+ // Menus and combobox popups do not draw focus frame around them
+ if (qobject_cast<QComboBoxListView *>(focusWidget) ||
+ qobject_cast<QMenu *>(focusWidget))
+ break;
+
if (!d->m_focusFrame)
d->m_focusFrame = new QFocusFrame(focusWidget);
d->m_focusFrame->setWidget(focusWidget);
diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp
index 58a7159..55aa6b0 100644
--- a/src/gui/styles/qs60style_s60.cpp
+++ b/src/gui/styles/qs60style_s60.cpp
@@ -310,7 +310,7 @@ const partMapEntry QS60StyleModeSpecifics::m_partMap[] = {
/* SP_QsnFrPopupSideB */ {KAknsIIDQsnFrPopupSideB, ENoDraw, ES60_All, -1,-1},
/* SP_QsnFrPopupSideL */ {KAknsIIDQsnFrPopupSideL, ENoDraw, ES60_All, -1,-1},
/* SP_QsnFrPopupSideR */ {KAknsIIDQsnFrPopupSideR, ENoDraw, ES60_All, -1,-1},
- /* SP_QsnFrPopupCenter */ {KAknsIIDQsnFrPopupCenter, ENoDraw, ES60_All, -1,-1},
+ /* SP_QsnFrPopupCenter */ {KAknsIIDQsnFrPopupCenterSubmenu, ENoDraw, ES60_All, -1,-1},
// ToolTip graphics different in 3.1 vs. 3.2+.
/* SP_QsnFrPopupPreviewCornerTl */ {KAknsIIDQsnFrPopupCornerTl, ENoDraw, ES60_3_1, EAknsMajorSkin, 0x19c5}, /* KAknsIIDQsnFrPopupPreviewCornerTl */
@@ -919,7 +919,7 @@ QPixmap QS60StyleModeSpecifics::createSkinnedGraphicsLX(QS60StylePrivate::SkinFr
result = fromFbsBitmap(frame, NULL, flags, targetSize);
}
} else {
- TDisplayMode maskDepth = EGray2;
+ TDisplayMode maskDepth = EGray256;
// Query the skin item for possible frame graphics mask details.
if (skinInstance) {
CAknsMaskedBitmapItemData* skinMaskedBmp = static_cast<CAknsMaskedBitmapItemData*>(
@@ -983,6 +983,10 @@ void QS60StyleModeSpecifics::frameIdAndCenterId(QS60StylePrivate::SkinFrameEleme
frameId.Set(KAknsIIDQsnFrPopupSub);
}
break;
+ case QS60StylePrivate::SF_PopupBackground:
+ centerId.Set(KAknsIIDQsnFrPopupCenterSubmenu);
+ frameId.Set(KAknsIIDQsnFrPopupSub);
+ break;
case QS60StylePrivate::SF_PanelBackground:
// remove center piece for panel graphics, so that only border is drawn
centerId.Set(KAknsIIDNone);
diff --git a/src/gui/styles/qstylefactory.cpp b/src/gui/styles/qstylefactory.cpp
index 0dbb21f..9009878 100644
--- a/src/gui/styles/qstylefactory.cpp
+++ b/src/gui/styles/qstylefactory.cpp
@@ -81,7 +81,7 @@ QT_BEGIN_INCLUDE_NAMESPACE
QT_END_INCLUDE_NAMESPACE
#endif
-#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
(QStyleFactoryInterface_iid, QLatin1String("/styles"), Qt::CaseInsensitive))
#endif
diff --git a/src/gui/styles/qstylesheetstyle.cpp b/src/gui/styles/qstylesheetstyle.cpp
index 81b923b..515b6c7 100644
--- a/src/gui/styles/qstylesheetstyle.cpp
+++ b/src/gui/styles/qstylesheetstyle.cpp
@@ -1539,7 +1539,9 @@ QVector<QCss::StyleRule> QStyleSheetStyle::styleRules(const QWidget *w) const
QHash<const void *, StyleSheet>::const_iterator defaultCacheIt = styleSheetCache->constFind(baseStyle());
if (defaultCacheIt == styleSheetCache->constEnd()) {
defaultSs = getDefaultStyleSheet();
- styleSheetCache->insert(baseStyle(), defaultSs);
+ QStyle *bs = baseStyle();
+ styleSheetCache->insert(bs, defaultSs);
+ QObject::connect(bs, SIGNAL(destroyed(QObject*)), this, SLOT(styleDestroyed(QObject*)), Qt::UniqueConnection);
} else {
defaultSs = defaultCacheIt.value();
}
@@ -2666,6 +2668,11 @@ void QStyleSheetStyle::widgetDestroyed(QObject *o)
autoFillDisabledWidgets->remove((const QWidget *)o);
}
+void QStyleSheetStyle::styleDestroyed(QObject *o)
+{
+ styleSheetCache->remove(o);
+}
+
/*!
* Make sure that the cache will be clean by connecting destroyed if needed.
* return false if the widget is not stylable;
diff --git a/src/gui/styles/qstylesheetstyle_p.h b/src/gui/styles/qstylesheetstyle_p.h
index 50abef9..fd81437 100644
--- a/src/gui/styles/qstylesheetstyle_p.h
+++ b/src/gui/styles/qstylesheetstyle_p.h
@@ -147,6 +147,7 @@ protected:
private Q_SLOTS:
void widgetDestroyed(QObject *);
+ void styleDestroyed(QObject *);
private:
int refcount;
diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp
index 24887b5..21a31a3 100644
--- a/src/gui/text/qfont.cpp
+++ b/src/gui/text/qfont.cpp
@@ -2616,10 +2616,8 @@ void QFontCache::cleanup()
} QT_CATCH (const std::bad_alloc &) {
// no cache - just ignore
}
- if (cache && cache->hasLocalData()) {
- cache->localData()->clear();
+ if (cache && cache->hasLocalData())
cache->setLocalData(0);
- }
}
#endif // QT_NO_THREAD
@@ -2631,6 +2629,7 @@ QFontCache::QFontCache()
QFontCache::~QFontCache()
{
+ clear();
{
EngineDataCache::ConstIterator it = engineDataCache.constBegin(),
end = engineDataCache.constEnd();
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp
index ae5e9ca..ff29462 100644
--- a/src/gui/text/qfontdatabase.cpp
+++ b/src/gui/text/qfontdatabase.cpp
@@ -598,10 +598,10 @@ static QList<QFontDatabase::WritingSystem> determineWritingSystemsFromTrueTypeBi
#if defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE)
// class with virtual destructor, derived in qfontdatabase_s60.cpp
-class QFontDatabaseS60Store
+class QSymbianFontDatabaseExtras
{
public:
- virtual ~QFontDatabaseS60Store() {}
+ virtual ~QSymbianFontDatabaseExtras() {}
};
#endif
@@ -614,7 +614,7 @@ public:
, stream(0)
#endif
#if defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE)
- , s60Store(0)
+ , symbianExtras(0)
#endif
{ }
~QFontDatabasePrivate() {
@@ -628,9 +628,9 @@ public:
families = 0;
count = 0;
#if defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE)
- if (s60Store) {
- delete s60Store;
- s60Store = 0;
+ if (symbianExtras) {
+ delete symbianExtras;
+ symbianExtras = 0;
}
#endif
// don't clear the memory fonts!
@@ -675,7 +675,7 @@ public:
QDataStream *stream;
QStringList fallbackFamilies;
#elif defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE)
- const QFontDatabaseS60Store *s60Store;
+ const QSymbianFontDatabaseExtras *symbianExtras;
#endif
};
diff --git a/src/gui/text/qfontdatabase_s60.cpp b/src/gui/text/qfontdatabase_s60.cpp
index ef5e0c4..95774f9 100644
--- a/src/gui/text/qfontdatabase_s60.cpp
+++ b/src/gui/text/qfontdatabase_s60.cpp
@@ -92,24 +92,32 @@ QFileInfoList alternativeFilePaths(const QString &path, const QStringList &nameF
}
#if defined(QT_NO_FREETYPE)
-class QFontDatabaseS60StoreImplementation : public QFontDatabaseS60Store
+class QSymbianFontDatabaseExtrasImplementation : public QSymbianFontDatabaseExtras
{
public:
- QFontDatabaseS60StoreImplementation();
- ~QFontDatabaseS60StoreImplementation();
+ QSymbianFontDatabaseExtrasImplementation();
+ ~QSymbianFontDatabaseExtrasImplementation();
- const QFontEngineS60Extensions *extension(const QString &typeface) const;
+ const QSymbianTypeFaceExtras *extras(const QString &typeface, bool bold, bool italic) const;
private:
RHeap* m_heap;
CFontStore *m_store;
COpenFontRasterizer *m_rasterizer;
- mutable QHash<QString, const QFontEngineS60Extensions *> m_extensions;
+ mutable QList<const QSymbianTypeFaceExtras *> m_extras;
+ mutable QHash<QString, const QSymbianTypeFaceExtras *> m_extrasHash;
};
-QFontDatabaseS60StoreImplementation::QFontDatabaseS60StoreImplementation()
+QSymbianFontDatabaseExtrasImplementation::QSymbianFontDatabaseExtrasImplementation()
{
- m_heap = User::ChunkHeap(NULL, 0x1000, 0x100000);
+ QStringList filters;
+ filters.append(QLatin1String("*.ttf"));
+ filters.append(QLatin1String("*.ccc"));
+ const QFileInfoList fontFiles = alternativeFilePaths(QLatin1String("resource\\Fonts"), filters);
+
+ const TInt heapMinLength = 0x1000;
+ const TInt heapMaxLength = qMax(0x20000 * fontFiles.count(), heapMinLength);
+ m_heap = User::ChunkHeap(NULL, heapMinLength, heapMaxLength);
QT_TRAP_THROWING(
m_store = CFontStore::NewL(m_heap);
m_rasterizer = COpenFontRasterizer::NewL(TUid::Uid(0x101F7F5E));
@@ -117,20 +125,17 @@ QFontDatabaseS60StoreImplementation::QFontDatabaseS60StoreImplementation()
m_store->InstallRasterizerL(m_rasterizer);
CleanupStack::Pop(m_rasterizer););
- QStringList filters;
- filters.append(QString::fromLatin1("*.ttf"));
- filters.append(QString::fromLatin1("*.ccc"));
- const QFileInfoList fontFiles = alternativeFilePaths(QString::fromLatin1("resource\\Fonts"), filters);
foreach (const QFileInfo &fontFileInfo, fontFiles) {
const QString fontFile = QDir::toNativeSeparators(fontFileInfo.absoluteFilePath());
TPtrC fontFilePtr(qt_QString2TPtrC(fontFile));
QT_TRAP_THROWING(m_store->AddFileL(fontFilePtr));
}
}
-QFontDatabaseS60StoreImplementation::~QFontDatabaseS60StoreImplementation()
+
+QSymbianFontDatabaseExtrasImplementation::~QSymbianFontDatabaseExtrasImplementation()
{
- typedef QHash<QString, const QFontEngineS60Extensions *>::iterator iterator;
- for (iterator p = m_extensions.begin(); p != m_extensions.end(); ++p) {
+ typedef QList<const QSymbianTypeFaceExtras *>::iterator iterator;
+ for (iterator p = m_extras.begin(); p != m_extras.end(); ++p) {
m_store->ReleaseFont((*p)->fontOwner());
delete *p;
}
@@ -156,13 +161,18 @@ COpenFont* OpenFontFromBitmapFont(const CBitmapFont* aBitmapFont)
}
#endif // FNTSTORE_H_INLINES_SUPPORT_FMM
-const QFontEngineS60Extensions *QFontDatabaseS60StoreImplementation::extension(const QString &typeface) const
+const QSymbianTypeFaceExtras *QSymbianFontDatabaseExtrasImplementation::extras(const QString &typeface,
+ bool bold, bool italic) const
{
- if (!m_extensions.contains(typeface)) {
+ const QString searchKey = typeface + QString::number(int(bold)) + QString::number(int(italic));
+ if (!m_extrasHash.contains(searchKey)) {
CFont* font = NULL;
- TFontSpec spec(qt_QString2TPtrC(typeface), 1);
- spec.iHeight = 1;
- const TInt err = m_store->GetNearestFontToDesignHeightInPixels(font, spec);
+ TFontSpec searchSpec(qt_QString2TPtrC(typeface), 1);
+ if (bold)
+ searchSpec.iFontStyle.SetStrokeWeight(EStrokeWeightBold);
+ if (italic)
+ searchSpec.iFontStyle.SetPosture(EPostureItalic);
+ const TInt err = m_store->GetNearestFontToDesignHeightInPixels(font, searchSpec);
Q_ASSERT(err == KErrNone && font);
const CBitmapFont *bitmapFont = static_cast<CBitmapFont*>(font);
COpenFont *openFont =
@@ -171,9 +181,20 @@ const QFontEngineS60Extensions *QFontDatabaseS60StoreImplementation::extension(c
#else
OpenFontFromBitmapFont(bitmapFont);
#endif // FNTSTORE_H_INLINES_SUPPORT_FMM
- m_extensions.insert(typeface, new QFontEngineS60Extensions(font, openFont));
+ const TOpenFontFaceAttrib* const attrib = openFont->FaceAttrib();
+ const QString foundKey =
+ QString((const QChar*)attrib->FullName().Ptr(), attrib->FullName().Length());
+ if (!m_extrasHash.contains(foundKey)) {
+ QSymbianTypeFaceExtras *extras = new QSymbianTypeFaceExtras(font, openFont);
+ m_extras.append(extras);
+ m_extrasHash.insert(searchKey, extras);
+ m_extrasHash.insert(foundKey, extras);
+ } else {
+ m_store->ReleaseFont(font);
+ m_extrasHash.insert(searchKey, m_extrasHash.value(foundKey));
+ }
}
- return m_extensions.value(typeface);
+ return m_extrasHash.value(searchKey);
}
#else
class QFontEngineFTS60 : public QFontEngineFT
@@ -240,14 +261,14 @@ static void initializeDb()
return;
#if defined(QT_NO_FREETYPE)
- if (!db->s60Store)
- db->s60Store = new QFontDatabaseS60StoreImplementation;
+ if (!db->symbianExtras)
+ db->symbianExtras = new QSymbianFontDatabaseExtrasImplementation;
QSymbianFbsHeapLock lock(QSymbianFbsHeapLock::Unlock);
const int numTypeFaces = QS60Data::screenDevice()->NumTypefaces();
- const QFontDatabaseS60StoreImplementation *store =
- static_cast<const QFontDatabaseS60StoreImplementation*>(db->s60Store);
+ const QSymbianFontDatabaseExtrasImplementation *dbExtras =
+ static_cast<const QSymbianFontDatabaseExtrasImplementation*>(db->symbianExtras);
bool fontAdded = false;
for (int i = 0; i < numTypeFaces; i++) {
TTypefaceSupport typefaceSupport;
@@ -273,8 +294,9 @@ static void initializeDb()
style->smoothScalable = typefaceSupport.iIsScalable;
style->pixelSize(0, true);
- const QFontEngineS60Extensions *extension = store->extension(familyName);
- const QByteArray os2Table = extension->getSfntTable(MAKE_TAG('O', 'S', '/', '2'));
+ const QSymbianTypeFaceExtras *typeFaceExtras =
+ dbExtras->extras(familyName, faceAttrib.IsBold(), faceAttrib.IsItalic());
+ const QByteArray os2Table = typeFaceExtras->getSfntTable(MAKE_TAG('O', 'S', '/', '2'));
const unsigned char* data = reinterpret_cast<const unsigned char*>(os2Table.constData());
const unsigned char* ulUnicodeRange = data + 42;
quint32 unicodeRange[4] = {
@@ -394,10 +416,11 @@ QFontEngine *QFontDatabase::findFont(int script, const QFontPrivate *, const QFo
QFontDef request = req;
request.family = fontFamily;
#if defined(QT_NO_FREETYPE)
- const QFontDatabaseS60StoreImplementation *store =
- static_cast<const QFontDatabaseS60StoreImplementation*>(db->s60Store);
- const QFontEngineS60Extensions *extension = store->extension(fontFamily);
- fe = new QFontEngineS60(request, extension);
+ const QSymbianFontDatabaseExtrasImplementation *dbExtras =
+ static_cast<const QSymbianFontDatabaseExtrasImplementation*>(db->symbianExtras);
+ const QSymbianTypeFaceExtras *typeFaceExtras =
+ dbExtras->extras(fontFamily, request.weight > QFont::Normal, request.style != QFont::StyleNormal);
+ fe = new QFontEngineS60(request, typeFaceExtras);
#else
QFontEngine::FaceId faceId;
const QtFontFamily * const reqQtFontFamily = db->family(fontFamily);
diff --git a/src/gui/text/qfontengine_s60.cpp b/src/gui/text/qfontengine_s60.cpp
index c9ff661..93f02ff 100644
--- a/src/gui/text/qfontengine_s60.cpp
+++ b/src/gui/text/qfontengine_s60.cpp
@@ -53,22 +53,19 @@
QT_BEGIN_NAMESPACE
-QFontEngineS60Extensions::QFontEngineS60Extensions(CFont* fontOwner, COpenFont *font)
+QSymbianTypeFaceExtras::QSymbianTypeFaceExtras(CFont* fontOwner, COpenFont *font)
: m_font(font)
, m_cmap(0)
, m_symbolCMap(false)
, m_fontOwner(fontOwner)
{
- TAny *shapingExtension = NULL;
- m_font->ExtendedInterface(KUidOpenFontShapingExtension, shapingExtension);
- m_shapingExtension = static_cast<MOpenFontShapingExtension*>(shapingExtension);
TAny *trueTypeExtension = NULL;
m_font->ExtendedInterface(KUidOpenFontTrueTypeExtension, trueTypeExtension);
m_trueTypeExtension = static_cast<MOpenFontTrueTypeExtension*>(trueTypeExtension);
- Q_ASSERT(m_shapingExtension && m_trueTypeExtension);
+ Q_ASSERT(m_trueTypeExtension);
}
-QByteArray QFontEngineS60Extensions::getSfntTable(uint tag) const
+QByteArray QSymbianTypeFaceExtras::getSfntTable(uint tag) const
{
Q_ASSERT(m_trueTypeExtension->HasTrueTypeTable(tag));
TInt error = KErrNone;
@@ -79,7 +76,7 @@ QByteArray QFontEngineS60Extensions::getSfntTable(uint tag) const
return result;
}
-bool QFontEngineS60Extensions::getSfntTableData(uint tag, uchar *buffer, uint *length) const
+bool QSymbianTypeFaceExtras::getSfntTableData(uint tag, uchar *buffer, uint *length) const
{
if (!m_trueTypeExtension->HasTrueTypeTable(tag))
return false;
@@ -104,7 +101,7 @@ bool QFontEngineS60Extensions::getSfntTableData(uint tag, uchar *buffer, uint *l
return result;
}
-const unsigned char *QFontEngineS60Extensions::cmap() const
+const unsigned char *QSymbianTypeFaceExtras::cmap() const
{
if (!m_cmap) {
m_cmapTable = getSfntTable(MAKE_TAG('c', 'm', 'a', 'p'));
@@ -114,27 +111,7 @@ const unsigned char *QFontEngineS60Extensions::cmap() const
return m_cmap;
}
-QPainterPath QFontEngineS60Extensions::glyphOutline(glyph_t glyph) const
-{
- QPainterPath result;
- QPolygonF polygon;
- TInt glyphIndex = glyph;
- TInt pointNumber = 0;
- TInt x, y;
- while (m_shapingExtension->GlyphPointInFontUnits(glyphIndex, pointNumber++, x, y)) {
- const QPointF point(qreal(x) / 0xffff, qreal(y) / 0xffff);
- if (polygon.contains(point)) {
- result.addPolygon(polygon);
- result.closeSubpath();
- polygon.clear();
- } else {
- polygon.append(point);
- }
- }
- return result;
-}
-
-CFont *QFontEngineS60Extensions::fontOwner() const
+CFont *QSymbianTypeFaceExtras::fontOwner() const
{
return m_fontOwner;
}
@@ -192,8 +169,8 @@ void QFontEngineS60::releaseFont(CFont *&font)
}
}
-QFontEngineS60::QFontEngineS60(const QFontDef &request, const QFontEngineS60Extensions *extensions)
- : m_extensions(extensions)
+QFontEngineS60::QFontEngineS60(const QFontDef &request, const QSymbianTypeFaceExtras *extras)
+ : m_extras(extras)
, m_originalFont(0)
, m_originalFontSizeInPixels((request.pixelSize >= 0)?
request.pixelSize:pointsToPixels(request.pointSize))
@@ -220,10 +197,12 @@ bool QFontEngineS60::stringToCMap(const QChar *characters, int len, QGlyphLayout
}
HB_Glyph *g = glyphs->glyphs;
- const unsigned char* cmap = m_extensions->cmap();
+ const unsigned char* cmap = m_extras->cmap();
+ const bool isRtl = (flags & QTextEngine::RightToLeft);
for (int i = 0; i < len; ++i) {
const unsigned int uc = getChar(characters, i, len);
- *g++ = QFontEngine::getTrueTypeGlyphIndex(cmap, uc);
+ *g++ = QFontEngine::getTrueTypeGlyphIndex(cmap,
+ isRtl ? QChar::mirroredChar(uc) : uc);
}
glyphs->numGlyphs = g - glyphs->glyphs;
@@ -241,8 +220,8 @@ void QFontEngineS60::recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFla
Q_UNUSED(flags);
for (int i = 0; i < glyphs->numGlyphs; i++) {
const glyph_metrics_t bbox = boundingBox_const(glyphs->glyphs[i]);
- glyphs->advances_x[i] = glyphs->offsets[i].x = bbox.xoff;
- glyphs->advances_y[i] = glyphs->offsets[i].y = bbox.yoff;
+ glyphs->advances_x[i] = bbox.xoff;
+ glyphs->advances_y[i] = bbox.yoff;
}
}
@@ -337,7 +316,7 @@ const char *QFontEngineS60::name() const
bool QFontEngineS60::canRender(const QChar *string, int len)
{
- const unsigned char *cmap = m_extensions->cmap();
+ const unsigned char *cmap = m_extras->cmap();
for (int i = 0; i < len; ++i) {
const unsigned int uc = getChar(string, i, len);
if (QFontEngine::getTrueTypeGlyphIndex(cmap, uc) == 0)
@@ -348,12 +327,12 @@ bool QFontEngineS60::canRender(const QChar *string, int len)
QByteArray QFontEngineS60::getSfntTable(uint tag) const
{
- return m_extensions->getSfntTable(tag);
+ return m_extras->getSfntTable(tag);
}
bool QFontEngineS60::getSfntTableData(uint tag, uchar *buffer, uint *length) const
{
- return m_extensions->getSfntTableData(tag, buffer, length);
+ return m_extras->getSfntTableData(tag, buffer, length);
}
QFontEngine::Type QFontEngineS60::type() const
diff --git a/src/gui/text/qfontengine_s60_p.h b/src/gui/text/qfontengine_s60_p.h
index a80af4d..6883730 100644
--- a/src/gui/text/qfontengine_s60_p.h
+++ b/src/gui/text/qfontengine_s60_p.h
@@ -62,21 +62,19 @@ class CFont;
QT_BEGIN_NAMESPACE
-// ..gives us access to truetype tables, UTF-16<->GlyphID mapping, and glyph outlines
-class QFontEngineS60Extensions
+// ..gives us access to truetype tables
+class QSymbianTypeFaceExtras
{
public:
- QFontEngineS60Extensions(CFont* fontOwner, COpenFont *font);
+ QSymbianTypeFaceExtras(CFont* fontOwner, COpenFont *font);
QByteArray getSfntTable(uint tag) const;
bool getSfntTableData(uint tag, uchar *buffer, uint *length) const;
const unsigned char *cmap() const;
- QPainterPath glyphOutline(glyph_t glyph) const;
CFont *fontOwner() const;
private:
COpenFont *m_font;
- const MOpenFontShapingExtension *m_shapingExtension;
mutable MOpenFontTrueTypeExtension *m_trueTypeExtension;
mutable const unsigned char *m_cmap;
mutable bool m_symbolCMap;
@@ -87,7 +85,7 @@ private:
class QFontEngineS60 : public QFontEngine
{
public:
- QFontEngineS60(const QFontDef &fontDef, const QFontEngineS60Extensions *extensions);
+ QFontEngineS60(const QFontDef &fontDef, const QSymbianTypeFaceExtras *extras);
~QFontEngineS60();
bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, QTextEngine::ShaperFlags flags) const;
@@ -128,7 +126,7 @@ private:
CFont *fontWithSize(qreal size) const;
static void releaseFont(CFont *&font);
- const QFontEngineS60Extensions *m_extensions;
+ const QSymbianTypeFaceExtras *m_extras;
CFont* m_originalFont;
const qreal m_originalFontSizeInPixels;
CFont* m_scaledFont;
diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp
index 3e556a7..afba678 100644
--- a/src/gui/text/qtextdocument.cpp
+++ b/src/gui/text/qtextdocument.cpp
@@ -1704,7 +1704,7 @@ void QTextDocument::print(QPrinter *printer) const
return;
const QTextDocument *doc = this;
- QTextDocument *clonedDoc = 0;
+ QScopedPointer<QTextDocument> clonedDoc;
(void)doc->documentLayout(); // make sure that there is a layout
QRectF body = QRectF(QPointF(0, 0), d->pageSize);
@@ -1737,7 +1737,7 @@ void QTextDocument::print(QPrinter *printer) const
printerPageSize.height() / scaledPageSize.height());
} else {
doc = clone(const_cast<QTextDocument *>(this));
- clonedDoc = const_cast<QTextDocument *>(doc);
+ clonedDoc.reset(const_cast<QTextDocument *>(doc));
for (QTextBlock srcBlock = firstBlock(), dstBlock = clonedDoc->firstBlock();
srcBlock.isValid() && dstBlock.isValid();
@@ -1812,7 +1812,7 @@ void QTextDocument::print(QPrinter *printer) const
for (int j = 0; j < pageCopies; ++j) {
if (printer->printerState() == QPrinter::Aborted
|| printer->printerState() == QPrinter::Error)
- goto UserCanceled;
+ return;
printPage(page, &p, doc, body, pageNumberPos);
if (j < pageCopies - 1)
printer->newPage();
@@ -1832,9 +1832,6 @@ void QTextDocument::print(QPrinter *printer) const
if ( i < docCopies - 1)
printer->newPage();
}
-
-UserCanceled:
- delete clonedDoc;
}
#endif
diff --git a/src/gui/widgets/qcombobox_p.h b/src/gui/widgets/qcombobox_p.h
index 92d85cc..29a628c 100644
--- a/src/gui/widgets/qcombobox_p.h
+++ b/src/gui/widgets/qcombobox_p.h
@@ -200,7 +200,9 @@ protected:
menuOpt.menuItemType = QStyleOptionMenuItem::Scroller;
if (sliderAction == QAbstractSlider::SliderSingleStepAdd)
menuOpt.state |= QStyle::State_DownArrow;
+#ifndef Q_WS_S60
p.eraseRect(rect());
+#endif
style()->drawControl(QStyle::CE_MenuScroller, &menuOpt, &p);
}
diff --git a/src/gui/widgets/qdockarealayout.cpp b/src/gui/widgets/qdockarealayout.cpp
index 806654c..171000b 100644
--- a/src/gui/widgets/qdockarealayout.cpp
+++ b/src/gui/widgets/qdockarealayout.cpp
@@ -225,7 +225,7 @@ static const int zero = 0;
QDockAreaLayoutInfo::QDockAreaLayoutInfo()
: sep(&zero), dockPos(QInternal::LeftDock), o(Qt::Horizontal), mainWindow(0)
#ifndef QT_NO_TABBAR
- , tabbed(false), tabBar(0), tabBarShape(QTabBar::RoundedSouth), tabBarVisible(false)
+ , tabbed(false), tabBar(0), tabBarShape(QTabBar::RoundedSouth)
#endif
{
}
@@ -235,7 +235,7 @@ QDockAreaLayoutInfo::QDockAreaLayoutInfo(const int *_sep, QInternal::DockPositio
QMainWindow *window)
: sep(_sep), dockPos(_dockPos), o(_o), mainWindow(window)
#ifndef QT_NO_TABBAR
- , tabbed(false), tabBar(0), tabBarShape(static_cast<QTabBar::Shape>(tbshape)), tabBarVisible(false)
+ , tabbed(false), tabBar(0), tabBarShape(static_cast<QTabBar::Shape>(tbshape))
#endif
{
#ifdef QT_NO_TABBAR
@@ -296,8 +296,8 @@ QSize QDockAreaLayoutInfo::minimumSize() const
rperp(o, result) = b;
#ifndef QT_NO_TABBAR
- if (tabbed) {
- QSize tbm = tabBarMinimumSize();
+ QSize tbm = tabBarMinimumSize();
+ if (!tbm.isNull()) {
switch (tabBarShape) {
case QTabBar::RoundedNorth:
case QTabBar::RoundedSouth:
@@ -369,8 +369,8 @@ QSize QDockAreaLayoutInfo::maximumSize() const
rperp(o, result) = b;
#ifndef QT_NO_TABBAR
- if (tabbed) {
- QSize tbh = tabBarSizeHint();
+ QSize tbh = tabBarSizeHint();
+ if (!tbh.isNull()) {
switch (tabBarShape) {
case QTabBar::RoundedNorth:
case QTabBar::RoundedSouth:
@@ -1500,7 +1500,7 @@ void QDockAreaLayoutInfo::apply(bool animate)
QRect tab_rect;
QSize tbh = tabBarSizeHint();
- if (tabBarVisible) {
+ if (!tbh.isNull()) {
switch (tabBarShape) {
case QTabBar::RoundedNorth:
case QTabBar::TriangularNorth:
@@ -2079,10 +2079,11 @@ void QDockAreaLayoutInfo::updateSeparatorWidgets() const
#endif //QT_NO_TABBAR
#ifndef QT_NO_TABBAR
-void QDockAreaLayoutInfo::updateTabBar() const
+//returns whether the tabbar is visible or not
+bool QDockAreaLayoutInfo::updateTabBar() const
{
if (!tabbed)
- return;
+ return false;
QDockAreaLayoutInfo *that = const_cast<QDockAreaLayoutInfo*>(this);
@@ -2150,12 +2151,8 @@ void QDockAreaLayoutInfo::updateTabBar() const
tabBar->blockSignals(blocked);
- that->tabBarVisible = ( (gap ? 1 : 0) + tabBar->count()) > 1;
-
- if (changed || !tabBarMin.isValid() | !tabBarHint.isValid()) {
- that->tabBarMin = tabBar->minimumSizeHint();
- that->tabBarHint = tabBar->sizeHint();
- }
+ //returns if the tabbar is visible or not
+ return ( (gap ? 1 : 0) + tabBar->count()) > 1;
}
void QDockAreaLayoutInfo::setTabBarShape(int shape)
@@ -2163,11 +2160,8 @@ void QDockAreaLayoutInfo::setTabBarShape(int shape)
if (shape == tabBarShape)
return;
tabBarShape = shape;
- if (tabBar != 0) {
+ if (tabBar != 0)
tabBar->setShape(static_cast<QTabBar::Shape>(shape));
- tabBarMin = QSize();
- tabBarHint = QSize();
- }
for (int i = 0; i < item_list.count(); ++i) {
QDockAreaLayoutItem &item = item_list[i];
@@ -2178,22 +2172,18 @@ void QDockAreaLayoutInfo::setTabBarShape(int shape)
QSize QDockAreaLayoutInfo::tabBarMinimumSize() const
{
- if (!tabbed)
+ if (!updateTabBar())
return QSize(0, 0);
- updateTabBar();
-
- return tabBarMin;
+ return tabBar->minimumSizeHint();
}
QSize QDockAreaLayoutInfo::tabBarSizeHint() const
{
- if (!tabbed)
+ if (!updateTabBar())
return QSize(0, 0);
- updateTabBar();
-
- return tabBarHint;
+ return tabBar->sizeHint();
}
QSet<QTabBar*> QDockAreaLayoutInfo::usedTabBars() const
@@ -2240,7 +2230,7 @@ QRect QDockAreaLayoutInfo::tabContentRect() const
QRect result = rect;
QSize tbh = tabBarSizeHint();
- if (tabBarVisible) {
+ if (!tbh.isNull()) {
switch (tabBarShape) {
case QTabBar::RoundedNorth:
case QTabBar::TriangularNorth:
diff --git a/src/gui/widgets/qdockarealayout_p.h b/src/gui/widgets/qdockarealayout_p.h
index 0088f00..9cb77ba 100644
--- a/src/gui/widgets/qdockarealayout_p.h
+++ b/src/gui/widgets/qdockarealayout_p.h
@@ -208,11 +208,9 @@ public:
QRect tabContentRect() const;
bool tabbed;
QTabBar *tabBar;
- QSize tabBarMin, tabBarHint;
int tabBarShape;
- bool tabBarVisible;
- void updateTabBar() const;
+ bool updateTabBar() const;
void setTabBarShape(int shape);
QSize tabBarMinimumSize() const;
QSize tabBarSizeHint() const;
diff --git a/src/gui/widgets/qdockwidget.cpp b/src/gui/widgets/qdockwidget.cpp
index 54189de..ae00710 100644
--- a/src/gui/widgets/qdockwidget.cpp
+++ b/src/gui/widgets/qdockwidget.cpp
@@ -1270,11 +1270,7 @@ void QDockWidget::setFloating(bool floating)
d->setWindowState(floating, false, floating ? r : QRect());
if (floating && r.isNull()) {
- QDockWidgetLayout *layout = qobject_cast<QDockWidgetLayout*>(this->layout());
- QRect titleArea = layout->titleArea();
- int h = layout->verticalTitleBar ? titleArea.width() : titleArea.height();
- QPoint p = mapToGlobal(QPoint(h, h));
- move(p);
+ setAttribute(Qt::WA_Moved, false); //we want it at the default position
}
}
diff --git a/src/gui/widgets/qlineedit.cpp b/src/gui/widgets/qlineedit.cpp
index 655fc61..c1c4abf 100644
--- a/src/gui/widgets/qlineedit.cpp
+++ b/src/gui/widgets/qlineedit.cpp
@@ -740,8 +740,14 @@ bool QLineEdit::validateAndSet(const QString &newText, int newPos,
setText(oldText);
return false;
}
- setCursorPosition(newPos);
- setSelection(qMin(newMarkAnchor, newMarkDrag), qAbs(newMarkAnchor - newMarkDrag));
+ int selstart = qMin(newMarkAnchor, newMarkDrag);
+ int sellength = qAbs(newMarkAnchor - newMarkDrag);
+ if (selstart == newPos) {
+ selstart = qMax(newMarkAnchor, newMarkDrag);
+ sellength = -sellength;
+ }
+ //setSelection also set the position
+ setSelection(selstart, sellength);
return true;
}
#endif //QT3_SUPPORT
diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp
index 907dd14..f84059d 100644
--- a/src/gui/widgets/qmenu.cpp
+++ b/src/gui/widgets/qmenu.cpp
@@ -2803,7 +2803,9 @@ void QMenu::mouseMoveEvent(QMouseEvent *e)
QAction *action = d->actionAt(e->pos());
if (!action) {
- if (d->hasHadMouse)
+ if (d->hasHadMouse
+ && (!d->currentAction
+ || !(d->currentAction->menu() && d->currentAction->menu()->isVisible())))
d->setCurrentAction(0);
return;
} else if(e->buttons()) {
diff --git a/src/gui/widgets/qmenu_mac.mm b/src/gui/widgets/qmenu_mac.mm
index e8400d6..aaa113b 100644
--- a/src/gui/widgets/qmenu_mac.mm
+++ b/src/gui/widgets/qmenu_mac.mm
@@ -2066,6 +2066,7 @@ bool QMenuBarPrivate::macUpdateMenuBarImmediatly()
cancelAllMenuTracking();
QWidget *w = findWindowThatShouldDisplayMenubar();
QMenuBar *mb = findMenubarForWindow(w);
+ extern bool qt_mac_app_fullscreen; //qapplication_mac.mm
// We need to see if we are in full screen mode, if so we need to
// switch the full screen mode to be able to show or hide the menubar.
@@ -2074,12 +2075,14 @@ bool QMenuBarPrivate::macUpdateMenuBarImmediatly()
if(w->isFullScreen()) {
// Ok, switch to showing the menubar when hovering over it.
SetSystemUIMode(kUIModeAllHidden, kUIOptionAutoShowMenuBar);
+ qt_mac_app_fullscreen = true;
}
} else if(w) {
// Removing a menubar
if(w->isFullScreen()) {
// Ok, switch to not showing the menubar when hovering on it
SetSystemUIMode(kUIModeAllHidden, 0);
+ qt_mac_app_fullscreen = true;
}
}
diff --git a/src/gui/widgets/qmenu_symbian.cpp b/src/gui/widgets/qmenu_symbian.cpp
index 4a9cfed..ab2bdea 100644
--- a/src/gui/widgets/qmenu_symbian.cpp
+++ b/src/gui/widgets/qmenu_symbian.cpp
@@ -149,8 +149,12 @@ static void qt_symbian_insert_action(QSymbianMenuAction* action, QList<SymbianMe
"Too many menu actions");
const int underlineShortCut = QApplication::style()->styleHint(QStyle::SH_UnderlineShortcut);
- QString iconText = action->action->iconText();
- TPtrC menuItemText = qt_QString2TPtrC( underlineShortCut ? action->action->text() : iconText);
+ QString actionText;
+ if (underlineShortCut)
+ actionText = action->action->text().left(CEikMenuPaneItem::SData::ENominalTextLength);
+ else
+ actionText = action->action->iconText().left(CEikMenuPaneItem::SData::ENominalTextLength);
+ TPtrC menuItemText = qt_QString2TPtrC(actionText);
if (action->action->menu()) {
SymbianMenuItem* menuItem = new SymbianMenuItem();
menuItem->menuItemData.iCascadeId = action->command;
diff --git a/src/gui/widgets/qtabbar.cpp b/src/gui/widgets/qtabbar.cpp
index d03a2f4..d692307 100644
--- a/src/gui/widgets/qtabbar.cpp
+++ b/src/gui/widgets/qtabbar.cpp
@@ -67,8 +67,13 @@
#include <private/qt_cocoa_helpers_mac_p.h>
#endif
+#ifndef QT_NO_STYLE_S60
+#include "qs60style.h"
+#endif
+
QT_BEGIN_NAMESPACE
+
inline static bool verticalTabs(QTabBar::Shape shape)
{
return shape == QTabBar::RoundedWest
@@ -95,9 +100,20 @@ void QTabBarPrivate::updateMacBorderMetrics()
metrics.left = 0;
metrics.right = 0;
qt_mac_updateContentBorderMetricts(window, metrics);
-
- // hide the base line separator if the tabs have docuemnt mode enabled (Cocoa)
- qt_mac_showBaseLineSeparator(window, !documentMode);
+#if QT_MAC_USE_COCOA
+ // In Cocoa we need to keep track of the drawRect method.
+ // If documentMode is enabled we need to change it, unless
+ // a toolbar is present.
+ // Notice that all the information is kept in the window,
+ // that's why we get the private widget for it instead of
+ // the private widget for this widget.
+ QWidgetPrivate *privateWidget = qt_widget_private(q->window());
+ if(privateWidget)
+ privateWidget->changeMethods = documentMode;
+ // Since in Cocoa there is no simple way to remove the baseline, so we just ask the
+ // top level to do the magic for us.
+ privateWidget->syncUnifiedMode();
+#endif // QT_MAC_USE_COCOA
}
#endif
}
@@ -478,6 +494,9 @@ void QTabBarPrivate::layoutTabs()
if (useScrollButtons && tabList.count() && last > available) {
int extra = extraWidth();
+#ifndef QT_NO_STYLE_S60
+ QS60Style *s60Style = qobject_cast<QS60Style*>(QApplication::style());
+#endif
if (!vertTabs) {
Qt::LayoutDirection ld = q->layoutDirection();
QRect arrows = QStyle::visualRect(ld, q->rect(),
@@ -485,25 +504,57 @@ void QTabBarPrivate::layoutTabs()
int buttonOverlap = q->style()->pixelMetric(QStyle::PM_TabBar_ScrollButtonOverlap, 0, q);
if (ld == Qt::LeftToRight) {
+// In S60style, tab scroll buttons are layoutted separately, on the sides of the tabbar.
+#ifndef QT_NO_STYLE_S60
+ if (s60Style) {
+ rightB->setGeometry(arrows.left() + extra / 2, arrows.top(), extra / 2, arrows.height());
+ leftB->setGeometry(0, arrows.top(), extra / 2, arrows.height());
+ } else {
+#endif
leftB->setGeometry(arrows.left(), arrows.top(), extra/2, arrows.height());
rightB->setGeometry(arrows.right() - extra/2 + buttonOverlap, arrows.top(),
extra/2, arrows.height());
+#ifndef QT_NO_STYLE_S60
+ }
+#endif
leftB->setArrowType(Qt::LeftArrow);
rightB->setArrowType(Qt::RightArrow);
} else {
+#ifndef QT_NO_STYLE_S60
+ if (s60Style) {
+ rightB->setGeometry(arrows.left() + extra / 2, arrows.top(), extra / 2, arrows.height());
+ leftB->setGeometry(0, arrows.top(), extra / 2, arrows.height());
+ } else {
+#endif
rightB->setGeometry(arrows.left(), arrows.top(), extra/2, arrows.height());
leftB->setGeometry(arrows.right() - extra/2 + buttonOverlap, arrows.top(),
extra/2, arrows.height());
+#ifndef QT_NO_STYLE_S60
+ }
+#endif
rightB->setArrowType(Qt::LeftArrow);
leftB->setArrowType(Qt::RightArrow);
}
} else {
+#ifndef QT_NO_STYLE_S60
+ if (s60Style) {
+ QRect arrows = QRect(0, 0, size.width(), available );
+ leftB->setGeometry(arrows.left(), arrows.top(), arrows.width(), extra / 2);
+ leftB->setArrowType(Qt::UpArrow);
+ rightB->setGeometry(arrows.left(), arrows.bottom() - extra / 2 + 1,
+ arrows.width(), extra / 2);
+ rightB->setArrowType(Qt::DownArrow);
+ } else {
+#endif
QRect arrows = QRect(0, available - extra, size.width(), extra );
leftB->setGeometry(arrows.left(), arrows.top(), arrows.width(), extra/2);
leftB->setArrowType(Qt::UpArrow);
rightB->setGeometry(arrows.left(), arrows.bottom() - extra/2 + 1,
arrows.width(), extra/2);
rightB->setArrowType(Qt::DownArrow);
+#ifndef QT_NO_STYLE_S60
+ }
+#endif
}
leftB->setEnabled(scrollOffset > 0);
rightB->setEnabled(last - scrollOffset >= available - extra);
@@ -2193,6 +2244,7 @@ bool QTabBar::documentMode() const
void QTabBar::setDocumentMode(bool enabled)
{
Q_D(QTabBar);
+
d->documentMode = enabled;
d->updateMacBorderMetrics();
}
diff --git a/src/gui/widgets/qtabwidget.cpp b/src/gui/widgets/qtabwidget.cpp
index 047a905..4a61935 100644
--- a/src/gui/widgets/qtabwidget.cpp
+++ b/src/gui/widgets/qtabwidget.cpp
@@ -542,6 +542,8 @@ void QTabWidget::setTabEnabled(int index, bool enable)
{
Q_D(QTabWidget);
d->tabs->setTabEnabled(index, enable);
+ if (QWidget *widget = d->stack->widget(index))
+ widget->setEnabled(enable);
}
/*!
diff --git a/src/imports/multimedia/qdeclarativeaudio.cpp b/src/imports/multimedia/qdeclarativeaudio.cpp
index 896f9b7..a163b10 100644
--- a/src/imports/multimedia/qdeclarativeaudio.cpp
+++ b/src/imports/multimedia/qdeclarativeaudio.cpp
@@ -57,7 +57,21 @@ QT_BEGIN_NAMESPACE
import Qt 4.7
import Qt.multimedia 4.7
- Audio { source: "audio/song.mp3" }
+ Text {
+ text: "Click Me!";
+ font.pointSize: 24;
+ width: 150; height: 50;
+
+ Audio {
+ id: playMusic
+ source: "music.wav"
+ }
+ MouseArea {
+ id: playArea
+ anchors.fill: parent
+ onPressed: { playMusic.play() }
+ }
+ }
\endqml
\sa Video
diff --git a/src/imports/multimedia/qdeclarativevideo.cpp b/src/imports/multimedia/qdeclarativevideo.cpp
index 9b02795..1b51e2c 100644
--- a/src/imports/multimedia/qdeclarativevideo.cpp
+++ b/src/imports/multimedia/qdeclarativevideo.cpp
@@ -79,7 +79,24 @@ void QDeclarativeVideo::_q_error(int errorCode, const QString &errorString)
import Qt 4.7
import Qt.multimedia 4.7
- Video { source: "video/movie.mpg" }
+ Video {
+ id: video
+ width : 800
+ height : 600
+ source: "video.avi"
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ video.play()
+ }
+ }
+
+ focus: true
+ Keys.onSpacePressed: video.paused = !video.paused
+ Keys.onLeftPressed: video.position -= 5000
+ Keys.onRightPressed: video.position += 5000
+ }
\endqml
The Video item supports untransformed, stretched, and uniformly scaled video presentation.
diff --git a/src/multimedia/mediaservices/effects/qsoundeffect.cpp b/src/multimedia/mediaservices/effects/qsoundeffect.cpp
index 1992ee5..3537566 100644
--- a/src/multimedia/mediaservices/effects/qsoundeffect.cpp
+++ b/src/multimedia/mediaservices/effects/qsoundeffect.cpp
@@ -64,17 +64,19 @@ QT_BEGIN_NAMESPACE
import Qt 4.7
import Qt.multimedia 4.7
- Item {
+ Text {
+ text: "Click Me!";
+ font.pointSize: 24;
+ width: 150; height: 50;
+
SoundEffect {
id: playSound
- source: "test.wav"
+ source: "soundeffect.wav"
}
MouseArea {
id: playArea
anchors.fill: parent
- onPressed: {
- playSound.play()
- }
+ onPressed: { playSound.play() }
}
}
\endqml
diff --git a/src/multimedia/multimedia/audio/qaudiodevicefactory.cpp b/src/multimedia/multimedia/audio/qaudiodevicefactory.cpp
index 74add64..96545b4 100644
--- a/src/multimedia/multimedia/audio/qaudiodevicefactory.cpp
+++ b/src/multimedia/multimedia/audio/qaudiodevicefactory.cpp
@@ -67,7 +67,7 @@
QT_BEGIN_NAMESPACE
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
(QAudioEngineFactoryInterface_iid, QLatin1String("/audio"), Qt::CaseInsensitive))
#endif
@@ -139,7 +139,7 @@ QList<QAudioDeviceInfo> QAudioDeviceFactory::availableDevices(QAudio::Mode mode)
#endif
#endif
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
QFactoryLoader* l = loader();
foreach (QString const& key, l->keys()) {
@@ -158,7 +158,7 @@ QList<QAudioDeviceInfo> QAudioDeviceFactory::availableDevices(QAudio::Mode mode)
QAudioDeviceInfo QAudioDeviceFactory::defaultInputDevice()
{
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
QAudioEngineFactoryInterface* plugin = qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(QLatin1String("default")));
if (plugin) {
@@ -178,7 +178,7 @@ QAudioDeviceInfo QAudioDeviceFactory::defaultInputDevice()
QAudioDeviceInfo QAudioDeviceFactory::defaultOutputDevice()
{
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
QAudioEngineFactoryInterface* plugin = qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(QLatin1String("default")));
if (plugin) {
@@ -207,7 +207,7 @@ QAbstractAudioDeviceInfo* QAudioDeviceFactory::audioDeviceInfo(const QString &re
#endif
#endif
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
QAudioEngineFactoryInterface* plugin =
qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(realm));
@@ -238,7 +238,7 @@ QAbstractAudioInput* QAudioDeviceFactory::createInputDevice(QAudioDeviceInfo con
return new QAudioInputPrivate(deviceInfo.handle(), format);
#endif
#endif
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
QAudioEngineFactoryInterface* plugin =
qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(deviceInfo.realm()));
@@ -260,7 +260,7 @@ QAbstractAudioOutput* QAudioDeviceFactory::createOutputDevice(QAudioDeviceInfo c
#endif
#endif
-#if !defined (QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
QAudioEngineFactoryInterface* plugin =
qobject_cast<QAudioEngineFactoryInterface*>(loader()->instance(deviceInfo.realm()));
diff --git a/src/multimedia/multimedia/audio/qaudioinput.cpp b/src/multimedia/multimedia/audio/qaudioinput.cpp
index c99e870..3676f64 100644
--- a/src/multimedia/multimedia/audio/qaudioinput.cpp
+++ b/src/multimedia/multimedia/audio/qaudioinput.cpp
@@ -211,7 +211,7 @@ QAudioInput::~QAudioInput()
If a problem occurs during this process the error() is set to QAudio::OpenError,
state() is set to QAudio::StoppedState and stateChanged() signal is emitted.
- \sa {Symbian Platform Security Requirements}
+ \l{QAudioInput#Symbian Platform Security Requirements}
\sa QIODevice
*/
@@ -233,7 +233,7 @@ void QAudioInput::start(QIODevice* device)
If a problem occurs during this process the error() is set to QAudio::OpenError,
state() is set to QAudio::StoppedState and stateChanged() signal is emitted.
- \sa {Symbian Platform Security Requirements}
+ \l{QAudioInput#Symbian Platform Security Requirements}
\sa QIODevice
*/
diff --git a/src/multimedia/multimedia/audio/qaudioinput_alsa_p.cpp b/src/multimedia/multimedia/audio/qaudioinput_alsa_p.cpp
index 6b15008..c9a8b71 100644
--- a/src/multimedia/multimedia/audio/qaudioinput_alsa_p.cpp
+++ b/src/multimedia/multimedia/audio/qaudioinput_alsa_p.cpp
@@ -58,8 +58,6 @@ QT_BEGIN_NAMESPACE
//#define DEBUG_AUDIO 1
-static const int minimumIntervalTime = 50;
-
QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device, const QAudioFormat& audioFormat):
settings(audioFormat)
{
@@ -594,10 +592,7 @@ int QAudioInputPrivate::periodSize() const
void QAudioInputPrivate::setNotifyInterval(int ms)
{
- if(ms >= minimumIntervalTime)
- intervalTime = ms;
- else
- intervalTime = minimumIntervalTime;
+ intervalTime = qMax(0, ms);
}
int QAudioInputPrivate::notifyInterval() const
@@ -649,7 +644,7 @@ bool QAudioInputPrivate::deviceReady()
if(deviceState != QAudio::ActiveState)
return true;
- if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
+ if(intervalTime && (timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
emit notify();
elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime;
timeStamp.restart();
diff --git a/src/multimedia/multimedia/audio/qaudioinput_win32_p.cpp b/src/multimedia/multimedia/audio/qaudioinput_win32_p.cpp
index b5d673e..14a1cf3 100644
--- a/src/multimedia/multimedia/audio/qaudioinput_win32_p.cpp
+++ b/src/multimedia/multimedia/audio/qaudioinput_win32_p.cpp
@@ -57,8 +57,6 @@ QT_BEGIN_NAMESPACE
//#define DEBUG_AUDIO 1
-static const int minimumIntervalTime = 50;
-
QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device, const QAudioFormat& audioFormat):
settings(audioFormat)
{
@@ -74,16 +72,11 @@ QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device, const QAudioFor
pullMode = true;
resuming = false;
finished = false;
-
- connect(this,SIGNAL(processMore()),SLOT(deviceReady()));
-
- InitializeCriticalSection(&waveInCriticalSection);
}
QAudioInputPrivate::~QAudioInputPrivate()
{
stop();
- DeleteCriticalSection(&waveInCriticalSection);
}
void QT_WIN_CALLBACK QAudioInputPrivate::waveInProc( HWAVEIN hWaveIn, UINT uMsg,
@@ -98,20 +91,18 @@ void QT_WIN_CALLBACK QAudioInputPrivate::waveInProc( HWAVEIN hWaveIn, UINT uMsg,
if(!qAudio)
return;
+ QMutexLocker(&qAudio->mutex);
+
switch(uMsg) {
case WIM_OPEN:
break;
case WIM_DATA:
- EnterCriticalSection(&qAudio->waveInCriticalSection);
if(qAudio->waveFreeBlockCount > 0)
qAudio->waveFreeBlockCount--;
qAudio->feedback();
- LeaveCriticalSection(&qAudio->waveInCriticalSection);
break;
case WIM_CLOSE:
- EnterCriticalSection(&qAudio->waveInCriticalSection);
qAudio->finished = true;
- LeaveCriticalSection(&qAudio->waveInCriticalSection);
break;
default:
return;
@@ -156,7 +147,7 @@ void QAudioInputPrivate::freeBlocks(WAVEHDR* blockArray)
int count = buffer_size/period_size;
for(int i = 0; i < count; i++) {
- waveInUnprepareHeader(hWaveIn,&blocks[i], sizeof(WAVEHDR));
+ waveInUnprepareHeader(hWaveIn,blocks, sizeof(WAVEHDR));
blocks+=sizeof(WAVEHDR);
}
HeapFree(GetProcessHeap(), 0, blockArray);
@@ -283,9 +274,9 @@ bool QAudioInputPrivate::open()
return false;
}
- EnterCriticalSection(&waveInCriticalSection);
+ mutex.lock();
waveFreeBlockCount = buffer_size/period_size;
- LeaveCriticalSection(&waveInCriticalSection);
+ mutex.unlock();
waveCurrentBlock = 0;
@@ -329,13 +320,11 @@ void QAudioInputPrivate::close()
Sleep(10);
}
- EnterCriticalSection(&waveInCriticalSection);
- for(int i=0; i<waveFreeBlockCount; i++) {
- if(waveBlocks[i].dwFlags & WHDR_PREPARED)
- waveInUnprepareHeader(hWaveIn,&waveBlocks[i],sizeof(WAVEHDR));
- }
- LeaveCriticalSection(&waveInCriticalSection);
+ mutex.lock();
+ for(int i=0; i<waveFreeBlockCount; i++)
+ waveInUnprepareHeader(hWaveIn,&waveBlocks[i],sizeof(WAVEHDR));
freeBlocks(waveBlocks);
+ mutex.unlock();
}
int QAudioInputPrivate::bytesReady() const
@@ -406,9 +395,10 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len)
waveInUnprepareHeader(hWaveIn,&waveBlocks[header], sizeof(WAVEHDR));
- EnterCriticalSection(&waveInCriticalSection);
+ mutex.lock();
waveFreeBlockCount++;
- LeaveCriticalSection(&waveInCriticalSection);
+ mutex.unlock();
+
waveBlocks[header].dwBytesRecorded=0;
waveBlocks[header].dwFlags = 0L;
result = waveInPrepareHeader(hWaveIn,&waveBlocks[header], sizeof(WAVEHDR));
@@ -416,18 +406,22 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len)
result = waveInPrepareHeader(hWaveIn,&waveBlocks[header], sizeof(WAVEHDR));
qWarning("QAudioInput: failed to prepare block %d,err=%d",header,result);
errorState = QAudio::IOError;
- EnterCriticalSection(&waveInCriticalSection);
+
+ mutex.lock();
waveFreeBlockCount--;
- LeaveCriticalSection(&waveInCriticalSection);
+ mutex.unlock();
+
return 0;
}
result = waveInAddBuffer(hWaveIn, &waveBlocks[header], sizeof(WAVEHDR));
if(result != MMSYSERR_NOERROR) {
qWarning("QAudioInput: failed to setup block %d,err=%d",header,result);
errorState = QAudio::IOError;
- EnterCriticalSection(&waveInCriticalSection);
+
+ mutex.lock();
waveFreeBlockCount--;
- LeaveCriticalSection(&waveInCriticalSection);
+ mutex.unlock();
+
return 0;
}
header++;
@@ -435,7 +429,7 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len)
header = 0;
p+=l;
- EnterCriticalSection(&waveInCriticalSection);
+ mutex.lock();
if(!pullMode) {
if(l+period_size > len && waveFreeBlockCount == buffer_size/period_size)
done = true;
@@ -443,7 +437,7 @@ qint64 QAudioInputPrivate::read(char* data, qint64 len)
if(waveFreeBlockCount == buffer_size/period_size)
done = true;
}
- LeaveCriticalSection(&waveInCriticalSection);
+ mutex.unlock();
written+=l;
}
@@ -467,9 +461,10 @@ void QAudioInputPrivate::resume()
return;
}
}
- EnterCriticalSection(&waveInCriticalSection);
+
+ mutex.lock();
waveFreeBlockCount = buffer_size/period_size;
- LeaveCriticalSection(&waveInCriticalSection);
+ mutex.unlock();
waveCurrentBlock = 0;
header = 0;
@@ -497,10 +492,7 @@ int QAudioInputPrivate::periodSize() const
void QAudioInputPrivate::setNotifyInterval(int ms)
{
- if(ms >= minimumIntervalTime)
- intervalTime = ms;
- else
- intervalTime = minimumIntervalTime;
+ intervalTime = qMax(0, ms);
}
int QAudioInputPrivate::notifyInterval() const
@@ -534,14 +526,13 @@ void QAudioInputPrivate::feedback()
QTime now(QTime::currentTime());
qDebug()<<now.second()<<"s "<<now.msec()<<"ms :feedback() INPUT "<<this;
#endif
- bytesAvailable = bytesReady();
-
if(!(deviceState==QAudio::StoppedState||deviceState==QAudio::SuspendedState))
- emit processMore();
+ QMetaObject::invokeMethod(this, "deviceReady", Qt::QueuedConnection);
}
bool QAudioInputPrivate::deviceReady()
{
+ bytesAvailable = bytesReady();
#ifdef DEBUG_AUDIO
QTime now(QTime::currentTime());
qDebug()<<now.second()<<"s "<<now.msec()<<"ms :deviceReady() INPUT";
@@ -558,7 +549,7 @@ bool QAudioInputPrivate::deviceReady()
a->trigger();
}
- if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
+ if(intervalTime && (timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
emit notify();
elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime;
timeStamp.restart();
diff --git a/src/multimedia/multimedia/audio/qaudioinput_win32_p.h b/src/multimedia/multimedia/audio/qaudioinput_win32_p.h
index 66c2535..8a9b02b 100644
--- a/src/multimedia/multimedia/audio/qaudioinput_win32_p.h
+++ b/src/multimedia/multimedia/audio/qaudioinput_win32_p.h
@@ -62,6 +62,7 @@
#include <QtCore/qstring.h>
#include <QtCore/qstringlist.h>
#include <QtCore/qdatetime.h>
+#include <QtCore/qmutex.h>
#include <QtMultimedia/qaudio.h>
#include <QtMultimedia/qaudiodeviceinfo.h>
@@ -122,7 +123,7 @@ private:
volatile int waveFreeBlockCount;
int waveCurrentBlock;
- CRITICAL_SECTION waveInCriticalSection;
+ QMutex mutex;
static void QT_WIN_CALLBACK waveInProc( HWAVEIN hWaveIn, UINT uMsg,
DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 );
diff --git a/src/multimedia/multimedia/audio/qaudiooutput_alsa_p.cpp b/src/multimedia/multimedia/audio/qaudiooutput_alsa_p.cpp
index cf3726b..49b32c0 100644
--- a/src/multimedia/multimedia/audio/qaudiooutput_alsa_p.cpp
+++ b/src/multimedia/multimedia/audio/qaudiooutput_alsa_p.cpp
@@ -58,8 +58,6 @@ QT_BEGIN_NAMESPACE
//#define DEBUG_AUDIO 1
-static const int minimumIntervalTime = 50;
-
QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioFormat& audioFormat):
settings(audioFormat)
{
@@ -84,8 +82,7 @@ QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioF
resuming = false;
opened = 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()));
@@ -282,11 +279,11 @@ bool QAudioOutputPrivate::open()
int count=0;
unsigned int freakuency=settings.frequency();
- QString dev = QLatin1String(m_device.constData());
+ QString dev = QString(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());
+ dev = QLatin1String(devices.first());
#else
dev = QLatin1String("hw:0,0");
#endif
@@ -574,10 +571,7 @@ int QAudioOutputPrivate::bufferSize() const
void QAudioOutputPrivate::setNotifyInterval(int ms)
{
- if(ms >= minimumIntervalTime)
- intervalTime = ms;
- else
- intervalTime = minimumIntervalTime;
+ intervalTime = qMax(0, ms);
}
int QAudioOutputPrivate::notifyInterval() const
@@ -719,7 +713,7 @@ bool QAudioOutputPrivate::deviceReady()
if(deviceState != QAudio::ActiveState)
return true;
- if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
+ if(intervalTime && (timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
emit notify();
elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime;
timeStamp.restart();
diff --git a/src/multimedia/multimedia/audio/qaudiooutput_win32_p.cpp b/src/multimedia/multimedia/audio/qaudiooutput_win32_p.cpp
index 13bce58..a8aeb41 100644
--- a/src/multimedia/multimedia/audio/qaudiooutput_win32_p.cpp
+++ b/src/multimedia/multimedia/audio/qaudiooutput_win32_p.cpp
@@ -56,8 +56,6 @@
QT_BEGIN_NAMESPACE
-static const int minimumIntervalTime = 50;
-
QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioFormat& audioFormat):
settings(audioFormat)
{
@@ -73,17 +71,15 @@ QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioF
audioSource = 0;
pullMode = true;
finished = false;
- InitializeCriticalSection(&waveOutCriticalSection);
}
QAudioOutputPrivate::~QAudioOutputPrivate()
{
- EnterCriticalSection(&waveOutCriticalSection);
+ mutex.lock();
finished = true;
- LeaveCriticalSection(&waveOutCriticalSection);
+ mutex.unlock();
close();
- DeleteCriticalSection(&waveOutCriticalSection);
}
void CALLBACK QAudioOutputPrivate::waveOutProc( HWAVEOUT hWaveOut, UINT uMsg,
@@ -98,6 +94,8 @@ void CALLBACK QAudioOutputPrivate::waveOutProc( HWAVEOUT hWaveOut, UINT uMsg,
if(!qAudio)
return;
+ QMutexLocker(&qAudio->mutex);
+
switch(uMsg) {
case WOM_OPEN:
qAudio->feedback();
@@ -105,16 +103,13 @@ void CALLBACK QAudioOutputPrivate::waveOutProc( HWAVEOUT hWaveOut, UINT uMsg,
case WOM_CLOSE:
return;
case WOM_DONE:
- EnterCriticalSection(&qAudio->waveOutCriticalSection);
if(qAudio->finished || qAudio->buffer_size == 0 || qAudio->period_size == 0) {
- LeaveCriticalSection(&qAudio->waveOutCriticalSection);
return;
}
qAudio->waveFreeBlockCount++;
if(qAudio->waveFreeBlockCount >= qAudio->buffer_size/qAudio->period_size)
qAudio->waveFreeBlockCount = qAudio->buffer_size/qAudio->period_size;
qAudio->feedback();
- LeaveCriticalSection(&qAudio->waveOutCriticalSection);
break;
default:
return;
@@ -150,7 +145,7 @@ void QAudioOutputPrivate::freeBlocks(WAVEHDR* blockArray)
int count = buffer_size/period_size;
for(int i = 0; i < count; i++) {
- waveOutUnprepareHeader(hWaveOut,&blocks[i], sizeof(WAVEHDR));
+ waveOutUnprepareHeader(hWaveOut,blocks, sizeof(WAVEHDR));
blocks+=sizeof(WAVEHDR);
}
HeapFree(GetProcessHeap(), 0, blockArray);
@@ -225,9 +220,9 @@ bool QAudioOutputPrivate::open()
}
waveBlocks = allocateBlocks(period_size, buffer_size/period_size);
- EnterCriticalSection(&waveOutCriticalSection);
+ mutex.lock();
waveFreeBlockCount = buffer_size/period_size;
- LeaveCriticalSection(&waveOutCriticalSection);
+ mutex.unlock();
waveCurrentBlock = 0;
@@ -333,10 +328,7 @@ int QAudioOutputPrivate::bufferSize() const
void QAudioOutputPrivate::setNotifyInterval(int ms)
{
- if(ms >= minimumIntervalTime)
- intervalTime = ms;
- else
- intervalTime = minimumIntervalTime;
+ intervalTime = qMax(0, ms);
}
int QAudioOutputPrivate::notifyInterval() const
@@ -368,12 +360,12 @@ qint64 QAudioOutputPrivate::write( const char *data, qint64 len )
int remain;
current = &waveBlocks[waveCurrentBlock];
while(l > 0) {
- EnterCriticalSection(&waveOutCriticalSection);
+ mutex.lock();
if(waveFreeBlockCount==0) {
- LeaveCriticalSection(&waveOutCriticalSection);
+ mutex.unlock();
break;
}
- LeaveCriticalSection(&waveOutCriticalSection);
+ mutex.unlock();
if(current->dwFlags & WHDR_PREPARED)
waveOutUnprepareHeader(hWaveOut, current, sizeof(WAVEHDR));
@@ -390,15 +382,13 @@ qint64 QAudioOutputPrivate::write( const char *data, qint64 len )
waveOutPrepareHeader(hWaveOut, current, sizeof(WAVEHDR));
waveOutWrite(hWaveOut, current, sizeof(WAVEHDR));
- EnterCriticalSection(&waveOutCriticalSection);
+ mutex.lock();
waveFreeBlockCount--;
- LeaveCriticalSection(&waveOutCriticalSection);
#ifdef DEBUG_AUDIO
- EnterCriticalSection(&waveOutCriticalSection);
qDebug("write out l=%d, waveFreeBlockCount=%d",
current->dwBufferLength,waveFreeBlockCount);
- LeaveCriticalSection(&waveOutCriticalSection);
#endif
+ mutex.unlock();
totalTimeValue += current->dwBufferLength;
waveCurrentBlock++;
waveCurrentBlock %= buffer_size/period_size;
@@ -453,7 +443,7 @@ void QAudioOutputPrivate::feedback()
bool QAudioOutputPrivate::deviceReady()
{
- if(deviceState == QAudio::StoppedState)
+ if(deviceState == QAudio::StoppedState || deviceState == QAudio::SuspendedState)
return false;
if(pullMode) {
@@ -467,14 +457,16 @@ bool QAudioOutputPrivate::deviceReady()
startup = true;
bool full=false;
- EnterCriticalSection(&waveOutCriticalSection);
+
+ mutex.lock();
if(waveFreeBlockCount==0) full = true;
- LeaveCriticalSection(&waveOutCriticalSection);
+ mutex.unlock();
+
if (full){
#ifdef DEBUG_AUDIO
qDebug() << "Skipping data as unable to write";
#endif
- if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime ) {
+ if(intervalTime && (timeStamp.elapsed() + elapsedTimeOffset) > intervalTime ) {
emit notify();
elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime;
timeStamp.restart();
@@ -504,12 +496,14 @@ bool QAudioOutputPrivate::deviceReady()
bytesAvailable = bytesFree();
int check = 0;
- EnterCriticalSection(&waveOutCriticalSection);
+
+ mutex.lock();
check = waveFreeBlockCount;
- LeaveCriticalSection(&waveOutCriticalSection);
+ mutex.unlock();
+
if(check == buffer_size/period_size) {
- errorState = QAudio::UnderrunError;
if (deviceState != QAudio::IdleState) {
+ errorState = QAudio::UnderrunError;
deviceState = QAudio::IdleState;
emit stateChanged(deviceState);
}
@@ -521,19 +515,23 @@ bool QAudioOutputPrivate::deviceReady()
}
} else {
int buffered;
- EnterCriticalSection(&waveOutCriticalSection);
+
+ mutex.lock();
buffered = waveFreeBlockCount;
- LeaveCriticalSection(&waveOutCriticalSection);
- errorState = QAudio::UnderrunError;
+ mutex.unlock();
+
if (buffered >= buffer_size/period_size && deviceState == QAudio::ActiveState) {
- deviceState = QAudio::IdleState;
- emit stateChanged(deviceState);
+ if (deviceState != QAudio::IdleState) {
+ errorState = QAudio::UnderrunError;
+ deviceState = QAudio::IdleState;
+ emit stateChanged(deviceState);
+ }
}
}
if(deviceState != QAudio::ActiveState && deviceState != QAudio::IdleState)
return true;
- if((timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
+ if(intervalTime && (timeStamp.elapsed() + elapsedTimeOffset) > intervalTime) {
emit notify();
elapsedTimeOffset = timeStamp.elapsed() + elapsedTimeOffset - intervalTime;
timeStamp.restart();
diff --git a/src/multimedia/multimedia/audio/qaudiooutput_win32_p.h b/src/multimedia/multimedia/audio/qaudiooutput_win32_p.h
index 68a40f7..2d19225 100644
--- a/src/multimedia/multimedia/audio/qaudiooutput_win32_p.h
+++ b/src/multimedia/multimedia/audio/qaudiooutput_win32_p.h
@@ -61,6 +61,7 @@
#include <QtCore/qstring.h>
#include <QtCore/qstringlist.h>
#include <QtCore/qdatetime.h>
+#include <QtCore/qmutex.h>
#include <QtMultimedia/qaudio.h>
#include <QtMultimedia/qaudiodeviceinfo.h>
@@ -119,7 +120,7 @@ private:
static void QT_WIN_CALLBACK waveOutProc( HWAVEOUT hWaveOut, UINT uMsg,
DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 );
- CRITICAL_SECTION waveOutCriticalSection;
+ QMutex mutex;
WAVEHDR* allocateBlocks(int size, int count);
void freeBlocks(WAVEHDR* blockArray);
diff --git a/src/network/access/qftp.cpp b/src/network/access/qftp.cpp
index 7f6df0a..97219f4 100644
--- a/src/network/access/qftp.cpp
+++ b/src/network/access/qftp.cpp
@@ -2311,7 +2311,7 @@ void QFtpPrivate::_q_piError(int errorCode, const QString &text)
Q_Q(QFtp);
if (pending.isEmpty()) {
- qWarning() << "QFtpPrivate::_q_piError was called without pending command!";
+ qWarning("QFtpPrivate::_q_piError was called without pending command!");
return;
}
diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp
index a6322a3..559124f 100644
--- a/src/network/access/qhttpnetworkconnection.cpp
+++ b/src/network/access/qhttpnetworkconnection.cpp
@@ -489,7 +489,11 @@ void QHttpNetworkConnectionPrivate::fillPipeline(QAbstractSocket *socket)
int i = indexOf(socket);
- if (! (defaultPipelineLength - channels[i].alreadyPipelinedRequests.length() >= 2)) {
+ // return fast if there was no reply right now processed
+ if (channels[i].reply == 0)
+ return;
+
+ if (! (defaultPipelineLength - channels[i].alreadyPipelinedRequests.length() >= defaultRePipelineLength)) {
return;
}
diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp
index f9a6de8..3b7bc9e 100644
--- a/src/network/access/qhttpnetworkconnectionchannel.cpp
+++ b/src/network/access/qhttpnetworkconnectionchannel.cpp
@@ -317,6 +317,13 @@ void QHttpNetworkConnectionChannel::_q_receiveReply()
return;
}
+ // only run when the QHttpNetworkConnection is not currently being destructed, e.g.
+ // this function is called from _q_disconnected which is called because
+ // of ~QHttpNetworkConnectionPrivate
+ if (!qobject_cast<QHttpNetworkConnection*>(connection)) {
+ return;
+ }
+
qint64 bytes = 0;
QAbstractSocket::SocketState socketState = socket->state();
@@ -384,7 +391,7 @@ void QHttpNetworkConnectionChannel::_q_receiveReply()
if (!replyPrivate->expectContent()) {
replyPrivate->state = QHttpNetworkReplyPrivate::AllDoneState;
allDone();
- return;
+ break;
}
}
break;
diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp
index 7a48c2b..3154ed6 100644
--- a/src/network/access/qnetworkaccesshttpbackend.cpp
+++ b/src/network/access/qnetworkaccesshttpbackend.cpp
@@ -726,8 +726,7 @@ void QNetworkAccessHttpBackend::readFromHttp()
QByteDataBuffer list;
while (httpReply->bytesAvailable() != 0 && nextDownstreamBlockSize() != 0 && nextDownstreamBlockSize() > list.byteAmount()) {
- QByteArray data = httpReply->readAny();
- list.append(data);
+ list.append(httpReply->readAny());
}
if (!list.isEmpty())
diff --git a/src/network/access/qnetworkaccessmanager.h b/src/network/access/qnetworkaccessmanager.h
index a0ffb07..95e45f0 100644
--- a/src/network/access/qnetworkaccessmanager.h
+++ b/src/network/access/qnetworkaccessmanager.h
@@ -62,7 +62,7 @@ class QNetworkReply;
class QNetworkProxy;
class QNetworkProxyFactory;
class QSslError;
-#ifndef QT_NO_BEARERMANAGEMENT
+#if !defined(QT_NO_BEARERMANAGEMENT) && !defined(QT_MOBILITY_BEARER)
class QNetworkConfiguration;
#endif
@@ -121,11 +121,13 @@ public:
QNetworkReply *deleteResource(const QNetworkRequest &request);
QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = 0);
-#ifndef QT_NO_BEARERMANAGEMENT
+#if !defined(QT_NO_BEARERMANAGEMENT) && !defined(QT_MOBILITY_BEARER)
void setConfiguration(const QNetworkConfiguration &config);
QNetworkConfiguration configuration() const;
QNetworkConfiguration activeConfiguration() const;
+#endif
+#ifndef QT_NO_BEARERMANAGEMENT
void setNetworkAccessible(NetworkAccessibility accessible);
NetworkAccessibility networkAccessible() const;
#endif
@@ -140,9 +142,11 @@ Q_SIGNALS:
void sslErrors(QNetworkReply *reply, const QList<QSslError> &errors);
#endif
-#ifndef QT_NO_BEARERMANAGEMENT
+#if !defined(QT_NO_BEARERMANAGEMENT) && !defined(QT_MOBILITY_BEARER)
void networkSessionConnected();
+#endif
+#ifndef QT_NO_BEARERMANAGEMENT
void networkAccessibleChanged(QNetworkAccessManager::NetworkAccessibility accessible);
#endif
@@ -155,7 +159,7 @@ private:
Q_DECLARE_PRIVATE(QNetworkAccessManager)
Q_PRIVATE_SLOT(d_func(), void _q_replyFinished())
Q_PRIVATE_SLOT(d_func(), void _q_replySslErrors(QList<QSslError>))
-#ifndef QT_NO_BEARERMANAGEMENT
+#if !defined(QT_NO_BEARERMANAGEMENT) && !defined(QT_MOBILITY_BEARER)
Q_PRIVATE_SLOT(d_func(), void _q_networkSessionClosed())
Q_PRIVATE_SLOT(d_func(), void _q_networkSessionNewConfigurationActivated())
Q_PRIVATE_SLOT(d_func(), void _q_networkSessionPreferredConfigurationChanged(QNetworkConfiguration,bool))
diff --git a/src/network/access/qnetworkcookiejar.cpp b/src/network/access/qnetworkcookiejar.cpp
index 8727095..0b3a918 100644
--- a/src/network/access/qnetworkcookiejar.cpp
+++ b/src/network/access/qnetworkcookiejar.cpp
@@ -269,6 +269,7 @@ QList<QNetworkCookie> QNetworkCookieJar::cookiesForUrl(const QUrl &url) const
Q_D(const QNetworkCookieJar);
QDateTime now = QDateTime::currentDateTime();
QList<QNetworkCookie> result;
+ bool isEncrypted = url.scheme().toLower() == QLatin1String("https");
// scan our cookies for something that matches
QList<QNetworkCookie>::ConstIterator it = d->allCookies.constBegin(),
@@ -280,6 +281,8 @@ QList<QNetworkCookie> QNetworkCookieJar::cookiesForUrl(const QUrl &url) const
continue;
if (!(*it).isSessionCookie() && (*it).expirationDate() < now)
continue;
+ if ((*it).isSecure() && !isEncrypted)
+ continue;
// insert this cookie into result, sorted by path
QList<QNetworkCookie>::Iterator insertIt = result.begin();
diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp
index c3dc168..128d18f 100644
--- a/src/network/access/qnetworkreplyimpl.cpp
+++ b/src/network/access/qnetworkreplyimpl.cpp
@@ -478,6 +478,37 @@ qint64 QNetworkReplyImplPrivate::nextDownstreamBlockSize() const
return qMax<qint64>(0, readBufferMaxSize - readBuffer.byteAmount());
}
+void QNetworkReplyImplPrivate::initCacheSaveDevice()
+{
+ Q_Q(QNetworkReplyImpl);
+
+ // save the meta data
+ QNetworkCacheMetaData metaData;
+ metaData.setUrl(url);
+ metaData = backend->fetchCacheMetaData(metaData);
+
+ // save the redirect request also in the cache
+ QVariant redirectionTarget = q->attribute(QNetworkRequest::RedirectionTargetAttribute);
+ if (redirectionTarget.isValid()) {
+ QNetworkCacheMetaData::AttributesMap attributes = metaData.attributes();
+ attributes.insert(QNetworkRequest::RedirectionTargetAttribute, redirectionTarget);
+ metaData.setAttributes(attributes);
+ }
+
+ cacheSaveDevice = networkCache()->prepare(metaData);
+
+ if (!cacheSaveDevice || (cacheSaveDevice && !cacheSaveDevice->isOpen())) {
+ if (cacheSaveDevice && !cacheSaveDevice->isOpen())
+ qCritical("QNetworkReplyImpl: network cache returned a device that is not open -- "
+ "class %s probably needs to be fixed",
+ networkCache()->metaObject()->className());
+
+ networkCache()->remove(url);
+ cacheSaveDevice = 0;
+ cacheEnabled = false;
+ }
+}
+
// we received downstream data and send this to the cache
// and to our readBuffer (which in turn gets read by the user of QNetworkReply)
void QNetworkReplyImplPrivate::appendDownstreamData(QByteDataBuffer &data)
@@ -487,36 +518,12 @@ void QNetworkReplyImplPrivate::appendDownstreamData(QByteDataBuffer &data)
return;
if (cacheEnabled && !cacheSaveDevice) {
- // save the meta data
- QNetworkCacheMetaData metaData;
- metaData.setUrl(url);
- metaData = backend->fetchCacheMetaData(metaData);
-
- // save the redirect request also in the cache
- QVariant redirectionTarget = q->attribute(QNetworkRequest::RedirectionTargetAttribute);
- if (redirectionTarget.isValid()) {
- QNetworkCacheMetaData::AttributesMap attributes = metaData.attributes();
- attributes.insert(QNetworkRequest::RedirectionTargetAttribute, redirectionTarget);
- metaData.setAttributes(attributes);
- }
-
- cacheSaveDevice = networkCache()->prepare(metaData);
-
- if (!cacheSaveDevice || (cacheSaveDevice && !cacheSaveDevice->isOpen())) {
- if (cacheSaveDevice && !cacheSaveDevice->isOpen())
- qCritical("QNetworkReplyImpl: network cache returned a device that is not open -- "
- "class %s probably needs to be fixed",
- networkCache()->metaObject()->className());
-
- networkCache()->remove(url);
- cacheSaveDevice = 0;
- cacheEnabled = false;
- }
+ initCacheSaveDevice();
}
qint64 bytesWritten = 0;
for (int i = 0; i < data.bufferCount(); i++) {
- QByteArray item = data[i];
+ QByteArray const &item = data[i];
if (cacheSaveDevice)
cacheSaveDevice->write(item.constData(), item.size());
@@ -529,6 +536,13 @@ void QNetworkReplyImplPrivate::appendDownstreamData(QByteDataBuffer &data)
bytesDownloaded += bytesWritten;
lastBytesDownloaded = bytesDownloaded;
+ appendDownstreamDataSignalEmissions();
+}
+
+void QNetworkReplyImplPrivate::appendDownstreamDataSignalEmissions()
+{
+ Q_Q(QNetworkReplyImpl);
+
QPointer<QNetworkReplyImpl> qq = q;
QVariant totalSize = cookedHeaders.value(QNetworkRequest::ContentLengthHeader);
@@ -572,6 +586,15 @@ void QNetworkReplyImplPrivate::appendDownstreamData(QIODevice *data)
_q_copyReadyRead();
}
+void QNetworkReplyImplPrivate::appendDownstreamData(const QByteArray &data)
+{
+ // TODO implement
+
+ // TODO call
+
+ qFatal("QNetworkReplyImplPrivate::appendDownstreamData not implemented");
+}
+
void QNetworkReplyImplPrivate::finished()
{
Q_Q(QNetworkReplyImpl);
@@ -689,8 +712,13 @@ QNetworkReplyImpl::QNetworkReplyImpl(QObject *parent)
QNetworkReplyImpl::~QNetworkReplyImpl()
{
Q_D(QNetworkReplyImpl);
+
+ // This code removes the data from the cache if it was prematurely aborted.
+ // See QNetworkReplyImplPrivate::completeCacheSave(), we disable caching there after the cache
+ // save had been properly finished. So if it is still enabled it means we got deleted/aborted.
if (d->isCachingEnabled())
d->networkCache()->remove(url());
+
if (d->outgoingDataBuffer)
delete d->outgoingDataBuffer;
}
diff --git a/src/network/access/qnetworkreplyimpl_p.h b/src/network/access/qnetworkreplyimpl_p.h
index bc7e408..38084bd 100644
--- a/src/network/access/qnetworkreplyimpl_p.h
+++ b/src/network/access/qnetworkreplyimpl_p.h
@@ -156,8 +156,13 @@ public:
void consume(qint64 count);
void emitUploadProgress(qint64 bytesSent, qint64 bytesTotal);
qint64 nextDownstreamBlockSize() const;
+
+ void initCacheSaveDevice();
+ void appendDownstreamDataSignalEmissions();
void appendDownstreamData(QByteDataBuffer &data);
void appendDownstreamData(QIODevice *data);
+ void appendDownstreamData(const QByteArray &data);
+
void finished();
void error(QNetworkReply::NetworkError code, const QString &errorString);
void metaDataChanged();
diff --git a/src/network/bearer/qnetworkconfigmanager_p.cpp b/src/network/bearer/qnetworkconfigmanager_p.cpp
index a7bd2d5..471927a 100644
--- a/src/network/bearer/qnetworkconfigmanager_p.cpp
+++ b/src/network/bearer/qnetworkconfigmanager_p.cpp
@@ -54,8 +54,10 @@
QT_BEGIN_NAMESPACE
+#ifndef QT_NO_LIBRARY
Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
(QBearerEngineFactoryInterface_iid, QLatin1String("/bearer")))
+#endif
QNetworkConfigurationManagerPrivate::QNetworkConfigurationManagerPrivate()
: pollTimer(0), mutex(QMutex::Recursive), forcedPolling(0), firstUpdate(true)
@@ -354,6 +356,7 @@ void QNetworkConfigurationManagerPrivate::updateConfigurations()
updating = false;
+#ifndef QT_NO_LIBRARY
QFactoryLoader *l = loader();
QBearerEngine *generic = 0;
@@ -387,6 +390,7 @@ void QNetworkConfigurationManagerPrivate::updateConfigurations()
if (generic)
sessionEngines.append(generic);
+#endif // QT_NO_LIBRARY
}
QBearerEngine *engine = qobject_cast<QBearerEngine *>(sender());
diff --git a/src/network/socket/qlocalserver_win.cpp b/src/network/socket/qlocalserver_win.cpp
index 5d2be72..07baf1e 100644
--- a/src/network/socket/qlocalserver_win.cpp
+++ b/src/network/socket/qlocalserver_win.cpp
@@ -167,8 +167,8 @@ void QLocalServerPrivate::_q_onNewConnection()
q->incomingConnection((quintptr)handle);
} else {
if (GetLastError() != ERROR_IO_INCOMPLETE) {
+ q->close();
setError(QLatin1String("QLocalServerPrivate::_q_onNewConnection"));
- closeServer();
return;
}
diff --git a/src/opengl/gl2paintengineex/qglengineshadersource_p.h b/src/opengl/gl2paintengineex/qglengineshadersource_p.h
index 3379296..8dba951 100644
--- a/src/opengl/gl2paintengineex/qglengineshadersource_p.h
+++ b/src/opengl/gl2paintengineex/qglengineshadersource_p.h
@@ -282,7 +282,7 @@ static const char* const qglslPositionWithTextureBrushVertexShader = "\n\
uniform mediump vec2 halfViewportSize; \n\
uniform highp vec2 invertedTextureSize; \n\
uniform highp mat3 brushTransform; \n\
- varying highp vec2 textureCoords; \n\
+ varying highp vec2 brushTextureCoords; \n\
void setPosition(void) \n\
{ \n\
highp mat3 pmvMatrix = mat3(pmvMatrix1, pmvMatrix2, pmvMatrix3); \n\
@@ -292,7 +292,7 @@ static const char* const qglslPositionWithTextureBrushVertexShader = "\n\
mediump vec3 hTexCoords = brushTransform * vec3(viewportCoords, 1); \n\
mediump float invertedHTexCoordsZ = 1.0 / hTexCoords.z; \n\
gl_Position = vec4(gl_Position.xy * invertedHTexCoordsZ, 0.0, invertedHTexCoordsZ); \n\
- textureCoords.xy = (hTexCoords.xy * invertedTextureSize) * gl_Position.w; \n\
+ brushTextureCoords.xy = (hTexCoords.xy * invertedTextureSize) * gl_Position.w; \n\
}\n";
static const char* const qglslAffinePositionWithTextureBrushVertexShader
@@ -303,28 +303,28 @@ static const char* const qglslAffinePositionWithTextureBrushVertexShader
// we emulate GL_REPEAT by only taking the fractional part of the texture coords.
// TODO: Special case POT textures which don't need this emulation
static const char* const qglslTextureBrushSrcFragmentShader = "\n\
- varying highp vec2 textureCoords; \n\
+ varying highp vec2 brushTextureCoords; \n\
uniform lowp sampler2D brushTexture; \n\
lowp vec4 srcPixel() { \n\
- return texture2D(brushTexture, fract(textureCoords)); \n\
+ return texture2D(brushTexture, fract(brushTextureCoords)); \n\
}\n";
#else
static const char* const qglslTextureBrushSrcFragmentShader = "\n\
- varying highp vec2 textureCoords; \n\
+ varying highp vec2 brushTextureCoords; \n\
uniform lowp sampler2D brushTexture; \n\
lowp vec4 srcPixel() \n\
{ \n\
- return texture2D(brushTexture, textureCoords); \n\
+ return texture2D(brushTexture, brushTextureCoords); \n\
}\n";
#endif
static const char* const qglslTextureBrushSrcWithPatternFragmentShader = "\n\
- varying highp vec2 textureCoords; \n\
+ varying highp vec2 brushTextureCoords; \n\
uniform lowp vec4 patternColor; \n\
uniform lowp sampler2D brushTexture; \n\
lowp vec4 srcPixel() \n\
{ \n\
- return patternColor * (1.0 - texture2D(brushTexture, textureCoords).r); \n\
+ return patternColor * (1.0 - texture2D(brushTexture, brushTextureCoords).r); \n\
}\n";
// Solid Fill Brush
diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp
index 994c1c9..452d37d 100644
--- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp
+++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp
@@ -42,6 +42,10 @@
#include "qtextureglyphcache_gl_p.h"
#include "qpaintengineex_opengl2_p.h"
+#if defined QT_OPENGL_ES_2 && !defined(QT_NO_EGL)
+#include "private/qeglcontext_p.h"
+#endif
+
QT_BEGIN_NAMESPACE
#ifdef Q_WS_WIN
@@ -49,12 +53,27 @@ extern Q_GUI_EXPORT bool qt_cleartype_enabled;
#endif
QGLTextureGlyphCache::QGLTextureGlyphCache(QGLContext *context, QFontEngineGlyphCache::Type type, const QTransform &matrix)
- : QTextureGlyphCache(type, matrix)
+ : QImageTextureGlyphCache(type, matrix)
, ctx(context)
, m_width(0)
, m_height(0)
+ , m_broken_fbo_readback(false)
{
- glGenFramebuffers(1, &m_fbo);
+ // broken FBO readback is a bug in the SGX 1.3 and 1.4 drivers for the N900 where
+ // copying between FBO's is broken if the texture is either GL_ALPHA or POT. The
+ // workaround is to use a system-memory copy of the glyph cache for this device.
+ // Switching to NPOT and GL_RGBA would both cost a lot more graphics memory and
+ // be slower, so that is not desireable.
+#if defined QT_OPENGL_ES_2 && !defined(QT_NO_EGL)
+ if (QByteArray((char*) glGetString(GL_RENDERER)).contains("SGX")) {
+ QGLContextPrivate *ctxd = context->d_func();
+ m_broken_fbo_readback = QByteArray((char *) eglQueryString(ctxd->eglContext->display(), EGL_VERSION)).contains("1.3");
+ }
+#endif
+
+ if (!m_broken_fbo_readback)
+ glGenFramebuffers(1, &m_fbo);
+
connect(QGLSignalProxy::instance(), SIGNAL(aboutToDestroyContext(const QGLContext*)),
SLOT(contextDestroyed(const QGLContext*)));
}
@@ -63,7 +82,9 @@ QGLTextureGlyphCache::~QGLTextureGlyphCache()
{
if (ctx) {
QGLShareContextScope scope(ctx);
- glDeleteFramebuffers(1, &m_fbo);
+
+ if (!m_broken_fbo_readback)
+ glDeleteFramebuffers(1, &m_fbo);
if (m_width || m_height)
glDeleteTextures(1, &m_texture);
@@ -72,6 +93,12 @@ QGLTextureGlyphCache::~QGLTextureGlyphCache()
void QGLTextureGlyphCache::createTextureData(int width, int height)
{
+ // create in QImageTextureGlyphCache baseclass is meant to be called
+ // only to create the initial image and does not preserve the content,
+ // so we don't call when this function is called from resize.
+ if (m_broken_fbo_readback && image().isNull())
+ QImageTextureGlyphCache::createTextureData(width, height);
+
glGenTextures(1, &m_texture);
glBindTexture(GL_TEXTURE_2D, m_texture);
@@ -93,14 +120,22 @@ void QGLTextureGlyphCache::createTextureData(int width, int height)
void QGLTextureGlyphCache::resizeTextureData(int width, int height)
{
- // ### the QTextureGlyphCache API needs to be reworked to allow
- // ### resizeTextureData to fail
-
int oldWidth = m_width;
int oldHeight = m_height;
GLuint oldTexture = m_texture;
createTextureData(width, height);
+
+ if (m_broken_fbo_readback) {
+ QImageTextureGlyphCache::resizeTextureData(width, height);
+ Q_ASSERT(image().depth() == 8);
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, oldWidth, oldHeight, GL_ALPHA, GL_UNSIGNED_BYTE, image().constBits());
+ glDeleteTextures(1, &oldTexture);
+ return;
+ }
+
+ // ### the QTextureGlyphCache API needs to be reworked to allow
+ // ### resizeTextureData to fail
glBindFramebuffer(GL_FRAMEBUFFER_EXT, m_fbo);
@@ -159,20 +194,7 @@ void QGLTextureGlyphCache::resizeTextureData(int width, int height)
glBindTexture(GL_TEXTURE_2D, m_texture);
-#ifdef QT_OPENGL_ES_2
- QDataBuffer<uchar> buffer(4*oldWidth*oldHeight);
- buffer.resize(4*oldWidth*oldHeight);
- glReadPixels(0, 0, oldWidth, oldHeight, GL_RGBA, GL_UNSIGNED_BYTE, buffer.data());
-
- // do an in-place conversion from GL_RGBA to GL_ALPHA
- for (int i=0; i<oldWidth*oldHeight; ++i)
- buffer.data()[i] = buffer.at(4*i + 3);
-
- glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, oldWidth, oldHeight,
- GL_ALPHA, GL_UNSIGNED_BYTE, buffer.data());
-#else
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, oldWidth, oldHeight);
-#endif
glFramebufferRenderbuffer(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
GL_RENDERBUFFER_EXT, 0);
@@ -187,6 +209,21 @@ void QGLTextureGlyphCache::resizeTextureData(int width, int height)
void QGLTextureGlyphCache::fillTexture(const Coord &c, glyph_t glyph)
{
+ if (m_broken_fbo_readback) {
+ QImageTextureGlyphCache::fillTexture(c, glyph);
+
+ glBindTexture(GL_TEXTURE_2D, m_texture);
+ const QImage &texture = image();
+ const uchar *bits = texture.constBits();
+ bits += c.y * texture.bytesPerLine() + c.x;
+ for (int i=0; i<c.h; ++i) {
+ glTexSubImage2D(GL_TEXTURE_2D, 0, c.x, c.y + i, c.w, 1, GL_ALPHA, GL_UNSIGNED_BYTE, bits);
+ bits += texture.bytesPerLine();
+ }
+
+ return;
+ }
+
QImage mask = textureMapForGlyph(glyph);
const int maskWidth = mask.width();
const int maskHeight = mask.height();
@@ -235,17 +272,6 @@ void QGLTextureGlyphCache::fillTexture(const Coord &c, glyph_t glyph)
}
}
-int QGLTextureGlyphCache::glyphMargin() const
-{
-#if defined(Q_WS_MAC)
- return 2;
-#elif defined (Q_WS_X11)
- return 0;
-#else
- return m_type == QFontEngineGlyphCache::Raster_RGBMask ? 2 : 0;
-#endif
-}
-
int QGLTextureGlyphCache::glyphPadding() const
{
return 1;
diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
index 75c2bb1..efb7435 100644
--- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
+++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
@@ -62,7 +62,7 @@ QT_BEGIN_NAMESPACE
class QGL2PaintEngineExPrivate;
-class Q_OPENGL_EXPORT QGLTextureGlyphCache : public QObject, public QTextureGlyphCache
+class Q_OPENGL_EXPORT QGLTextureGlyphCache : public QObject, public QImageTextureGlyphCache
{
Q_OBJECT
public:
@@ -72,7 +72,6 @@ public:
virtual void createTextureData(int width, int height);
virtual void resizeTextureData(int width, int height);
virtual void fillTexture(const Coord &c, glyph_t glyph);
- virtual int glyphMargin() const;
virtual int glyphPadding() const;
inline GLuint texture() const { return m_texture; }
@@ -116,6 +115,8 @@ private:
int m_height;
QGLShaderProgram *m_program;
+
+ bool m_broken_fbo_readback;
};
QT_END_NAMESPACE
diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp
index 52efea5..cfacf26 100644
--- a/src/opengl/qgl.cpp
+++ b/src/opengl/qgl.cpp
@@ -1259,11 +1259,24 @@ QGLFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(co
versionFlags |= QGLFormat::OpenGL_Version_3_2;
case '1':
versionFlags |= QGLFormat::OpenGL_Version_3_1;
+ case '0':
+ break;
default:
+ versionFlags |= QGLFormat::OpenGL_Version_3_1 |
+ QGLFormat::OpenGL_Version_3_2;
break;
}
} else {
- qWarning("Unrecognised OpenGL version");
+ versionFlags |= QGLFormat::OpenGL_Version_1_1 |
+ QGLFormat::OpenGL_Version_1_2 |
+ QGLFormat::OpenGL_Version_1_3 |
+ QGLFormat::OpenGL_Version_1_4 |
+ QGLFormat::OpenGL_Version_1_5 |
+ QGLFormat::OpenGL_Version_2_0 |
+ QGLFormat::OpenGL_Version_2_1 |
+ QGLFormat::OpenGL_Version_3_0 |
+ QGLFormat::OpenGL_Version_3_1 |
+ QGLFormat::OpenGL_Version_3_2;
}
}
return versionFlags;
@@ -1637,7 +1650,14 @@ static void convertFromGLImage(QImage &img, int w, int h, bool alpha_format, boo
uint *q = (uint*)img.scanLine(y);
for (int x=0; x < w; ++x) {
const uint pixel = *q;
- *q = ((pixel << 16) & 0xff0000) | ((pixel >> 16) & 0xff) | (pixel & 0xff00ff00);
+ if (alpha_format && include_alpha) {
+ *q = ((pixel << 16) & 0xff0000) | ((pixel >> 16) & 0xff)
+ | (pixel & 0xff00ff00);
+ } else {
+ *q = 0xff000000 | ((pixel << 16) & 0xff0000)
+ | ((pixel >> 16) & 0xff) | (pixel & 0x00ff00);
+ }
+
q++;
}
}
@@ -1648,7 +1668,8 @@ static void convertFromGLImage(QImage &img, int w, int h, bool alpha_format, boo
QImage qt_gl_read_framebuffer(const QSize &size, bool alpha_format, bool include_alpha)
{
- QImage img(size, alpha_format ? QImage::Format_ARGB32 : QImage::Format_RGB32);
+ QImage img(size, (alpha_format && include_alpha) ? QImage::Format_ARGB32
+ : QImage::Format_RGB32);
int w = size.width();
int h = size.height();
glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, img.bits());
@@ -5161,11 +5182,17 @@ Q_OPENGL_EXPORT void qt_set_gl_library_name(const QString& name)
Q_OPENGL_EXPORT const QString qt_gl_library_name()
{
if (qt_gl_lib_name()->isNull()) {
-#if defined(Q_WS_X11) || defined(Q_WS_QWS)
- return QLatin1String("GL");
-#else // Q_WS_MAC
+#ifdef Q_WS_MAC
return QLatin1String("/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib");
-#endif
+#else
+# if defined(QT_OPENGL_ES_1)
+ return QLatin1String("GLES_CM");
+# elif defined(QT_OPENGL_ES_2)
+ return QLatin1String("GLESv2");
+# else
+ return QLatin1String("GL");
+# endif
+#endif // defined Q_WS_MAC
}
return *qt_gl_lib_name();
}
diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp
index 5ae69cd..f602c73 100644
--- a/src/openvg/qpaintengine_vg.cpp
+++ b/src/openvg/qpaintengine_vg.cpp
@@ -182,7 +182,6 @@ public:
qreal penScale; // Pen scaling factor from "transform".
QTransform pathTransform; // Calculated VG path transformation.
- QTransform glyphTransform; // Calculated VG glyph transformation.
QTransform imageTransform; // Calculated VG image transformation.
bool pathTransformSet; // True if path transform set in the VG context.
@@ -507,24 +506,15 @@ void QVGPaintEnginePrivate::updateTransform(QPaintDevice *pdev)
// | 1 0 0 |
// | 0 -1 devh |
// | 0 0 1 |
- // The glyph transform uses a slightly different transformation:
- // | 1 0 0 | | 1 0 0.5 | | 1 0 0.5 |
- // | 0 -1 devh - 1 | * | 0 1 -0.5 | = | 0 -1 (devh - 0.5) |
- // | 0 0 1 | | 0 0 1 | | 0 0 1 |
// The full VG transform is effectively:
// 1. Apply the user's transformation matrix.
- // 2. Translate glyphs by an extra (0.5, -0.5).
- // 3. Flip the co-ordinate system upside down.
+ // 2. Flip the co-ordinate system upside down.
QTransform viewport(1.0f, 0.0f, 0.0f,
0.0f, -1.0f, 0.0f,
0.0f, devh, 1.0f);
- QTransform gviewport(1.0f, 0.0f, 0.0f,
- 0.0f, -1.0f, 0.0f,
- 0.5f, devh - 0.5f, 1.0f);
// Compute the path transform and determine if it is projective.
pathTransform = transform * viewport;
- glyphTransform = transform * gviewport;
bool projective = (pathTransform.m13() != 0.0f ||
pathTransform.m23() != 0.0f ||
pathTransform.m33() != 1.0f);
@@ -533,7 +523,6 @@ void QVGPaintEnginePrivate::updateTransform(QPaintDevice *pdev)
// so we will have to convert the co-ordinates ourselves.
// Change the matrix to just the viewport transformation.
pathTransform = viewport;
- glyphTransform = gviewport;
simpleTransform = false;
} else {
simpleTransform = true;
@@ -3242,10 +3231,10 @@ void QVGFontGlyphCache::cacheGlyphs(QVGPaintEnginePrivate *d,
vgImageSubData(vgImage, img.constBits(), img.bytesPerLine(), VG_sARGB_8888_PRE, 0, 0, img.width(), img.height());
}
}
- origin[0] = -metrics.x.toReal() + 0.5f;
- origin[1] = -metrics.y.toReal() + 0.5f;
- escapement[0] = metrics.xoff.toReal();
- escapement[1] = metrics.yoff.toReal();
+ origin[0] = -metrics.x.toReal();
+ origin[1] = -metrics.y.toReal();
+ escapement[0] = 0;
+ escapement[1] = 0;
vgSetGlyphToImage(font, glyph, vgImage, origin, escapement);
vgDestroyImage(vgImage); // Reduce reference count.
#else
@@ -3261,8 +3250,8 @@ void QVGFontGlyphCache::cacheGlyphs(QVGPaintEnginePrivate *d,
}
origin[0] = 0;
origin[1] = 0;
- escapement[0] = metrics.xoff.toReal();
- escapement[1] = metrics.yoff.toReal();
+ escapement[0] = 0;
+ escapement[1] = 0;
vgSetGlyphToPath(font, glyph, vgPath, VG_FALSE, origin, escapement);
vgDestroyPath(vgPath); // Reduce reference count.
#endif // !defined(QVG_NO_IMAGE_GLYPHS)
@@ -3287,12 +3276,10 @@ void QVGPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textItem)
// Get the glyphs and positions associated with the text item.
QVarLengthArray<QFixedPoint> positions;
QVarLengthArray<glyph_t> glyphs;
- QTransform matrix = d->transform;
- matrix.translate(p.x(), p.y());
- ti.fontEngine->getGlyphPositions
- (ti.glyphs, matrix, ti.flags, glyphs, positions);
+ QTransform matrix;
+ ti.fontEngine->getGlyphPositions(ti.glyphs, matrix, ti.flags, glyphs, positions);
- if (!drawCachedGlyphs(glyphs.size(), glyphs.data(), ti.font(), ti.fontEngine, p))
+ if (!drawCachedGlyphs(glyphs.size(), glyphs.data(), ti.font(), ti.fontEngine, p, positions.data()))
QPaintEngineEx::drawTextItem(p, textItem);
#else
// OpenGL 1.0 does not have support for VGFont and glyphs,
@@ -3304,11 +3291,12 @@ void QVGPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textItem)
void QVGPaintEngine::drawStaticTextItem(QStaticTextItem *textItem)
{
drawCachedGlyphs(textItem->numGlyphs, textItem->glyphs, textItem->font, textItem->fontEngine,
- QPointF(0, 0));
+ QPointF(0, 0), textItem->glyphPositions);
}
bool QVGPaintEngine::drawCachedGlyphs(int numGlyphs, const glyph_t *glyphs, const QFont &font,
- QFontEngine *fontEngine, const QPointF &p)
+ QFontEngine *fontEngine, const QPointF &p,
+ const QFixedPoint *positions)
{
#if !defined(QVG_NO_DRAW_GLYPHS)
Q_D(QVGPaintEngine);
@@ -3334,7 +3322,7 @@ void QVGPaintEngine::drawStaticTextItem(QStaticTextItem *textItem)
}
// Set the transformation to use for drawing the current glyphs.
- QTransform glyphTransform(d->glyphTransform);
+ QTransform glyphTransform(d->pathTransform);
glyphTransform.translate(p.x(), p.y());
#if defined(QVG_NO_IMAGE_GLYPHS)
glyphTransform.scale(glyphCache->scaleX, glyphCache->scaleY);
@@ -3344,10 +3332,18 @@ void QVGPaintEngine::drawStaticTextItem(QStaticTextItem *textItem)
// Add the glyphs from the text item into the glyph cache.
glyphCache->cacheGlyphs(d, fontEngine, glyphs, numGlyphs);
+ // Create the array of adjustments between glyphs
+ QVarLengthArray<VGfloat> adjustments_x(numGlyphs);
+ QVarLengthArray<VGfloat> adjustments_y(numGlyphs);
+ for (int i = 1; i < numGlyphs; ++i) {
+ adjustments_x[i-1] = (positions[i].x - positions[i-1].x).toReal();
+ adjustments_y[i-1] = (positions[i].y - positions[i-1].y).toReal();
+ }
+
// Set the glyph drawing origin.
VGfloat origin[2];
- origin[0] = 0;
- origin[1] = 0;
+ origin[0] = positions[0].x.toReal();
+ origin[1] = positions[0].y.toReal();
vgSetfv(VG_GLYPH_ORIGIN, 2, origin);
// Fast anti-aliasing for paths, better for images.
@@ -3362,8 +3358,7 @@ void QVGPaintEngine::drawStaticTextItem(QStaticTextItem *textItem)
// the Qt pen, not the Qt brush.
d->ensureBrush(state()->pen.brush());
vgDrawGlyphs(glyphCache->font, numGlyphs, (VGuint*)glyphs,
- NULL, NULL, VG_FILL_PATH, VG_TRUE);
-
+ adjustments_x.data(), adjustments_y.data(), VG_FILL_PATH, VG_TRUE);
return true;
#else
Q_UNUSED(numGlyphs);
@@ -3371,6 +3366,7 @@ void QVGPaintEngine::drawStaticTextItem(QStaticTextItem *textItem)
Q_UNUSED(font);
Q_UNUSED(fontEngine);
Q_UNUSED(p);
+ Q_UNUSED(positions);
return false;
#endif
}
diff --git a/src/openvg/qpaintengine_vg_p.h b/src/openvg/qpaintengine_vg_p.h
index 1e7e26c..33c49ba 100644
--- a/src/openvg/qpaintengine_vg_p.h
+++ b/src/openvg/qpaintengine_vg_p.h
@@ -58,6 +58,7 @@
QT_BEGIN_NAMESPACE
+class QFixedPoint;
class QVGPaintEnginePrivate;
class QPixmapData;
class QVGEGLWindowSurfacePrivate;
@@ -143,7 +144,8 @@ public:
void drawTextItem(const QPointF &p, const QTextItem &textItem);
void drawStaticTextItem(QStaticTextItem *staticTextItem);
bool drawCachedGlyphs(int numGlyphs, const glyph_t *glyphs, const QFont &font,
- QFontEngine *fontEngine, const QPointF &p);
+ QFontEngine *fontEngine, const QPointF &p,
+ const QFixedPoint *positions);
void setState(QPainterState *s);
QVGPainterState *state() { return static_cast<QVGPainterState *>(QPaintEngineEx::state()); }
diff --git a/src/plugins/accessible/widgets/simplewidgets.cpp b/src/plugins/accessible/widgets/simplewidgets.cpp
index daa827e..f39d538 100644
--- a/src/plugins/accessible/widgets/simplewidgets.cpp
+++ b/src/plugins/accessible/widgets/simplewidgets.cpp
@@ -605,7 +605,11 @@ int QAccessibleDisplay::navigate(RelationFlag rel, int entry, QAccessibleInterfa
/*! \reimp */
QString QAccessibleDisplay::imageDescription()
{
+#ifndef QT_NO_TOOLTIP
return widget()->toolTip();
+#else
+ return QString::null;
+#endif
}
/*! \reimp */
diff --git a/src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglscreen.cpp b/src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglscreen.cpp
index 964fa53..9de2a34 100644
--- a/src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglscreen.cpp
+++ b/src/plugins/gfxdrivers/powervr/pvreglscreen/pvreglscreen.cpp
@@ -259,7 +259,7 @@ int PvrEglScreen::transformation() const
if (parent->classId() != QScreen::TransformedClass)
return 0;
return 90 * static_cast<const QTransformedScreen *>(parent)
- ->transformation();
+ ->transformOrientation();
}
#else
diff --git a/src/plugins/imageformats/jpeg/qjpeghandler.cpp b/src/plugins/imageformats/jpeg/qjpeghandler.cpp
index 1c6a289..72dde15 100644
--- a/src/plugins/imageformats/jpeg/qjpeghandler.cpp
+++ b/src/plugins/imageformats/jpeg/qjpeghandler.cpp
@@ -121,8 +121,8 @@ static boolean qt_fill_input_buffer(j_decompress_ptr cinfo)
{
my_jpeg_source_mgr* src = (my_jpeg_source_mgr*)cinfo->src;
if (src->memDevice) {
- src->next_input_byte = (const JOCTET *)src->memDevice->data().constData();
- src->bytes_in_buffer = (size_t)src->memDevice->data().size();
+ src->next_input_byte = (const JOCTET *)(src->memDevice->data().constData() + src->memDevice->pos());
+ src->bytes_in_buffer = (size_t)(src->memDevice->data().size() - src->memDevice->pos());
return true;
}
src->next_input_byte = src->buffer;
@@ -169,7 +169,13 @@ static void qt_term_source(j_decompress_ptr cinfo)
{
my_jpeg_source_mgr* src = (my_jpeg_source_mgr*)cinfo->src;
if (!src->device->isSequential())
- src->device->seek(src->device->pos() - src->bytes_in_buffer);
+ {
+ // read() isn't used for memDevice, so seek past everything that was used
+ if (src->memDevice)
+ src->device->seek(src->device->pos() + (src->memDevice->data().size() - src->memDevice->pos() - src->bytes_in_buffer));
+ else
+ src->device->seek(src->device->pos() - src->bytes_in_buffer);
+ }
}
#if defined(Q_C_CALLBACKS)
diff --git a/src/plugins/imageformats/svg/qsvgiohandler.cpp b/src/plugins/imageformats/svg/qsvgiohandler.cpp
index 8155569..7b8463d 100644
--- a/src/plugins/imageformats/svg/qsvgiohandler.cpp
+++ b/src/plugins/imageformats/svg/qsvgiohandler.cpp
@@ -82,15 +82,19 @@ bool QSvgIOHandlerPrivate::load(QIODevice *device)
if (q->format().isEmpty())
q->canRead();
+ // # The SVG renderer doesn't handle trailing, unrelated data, so we must
+ // assume that all available data in the device is to be read.
bool res = false;
QBuffer *buf = qobject_cast<QBuffer *>(device);
if (buf) {
- res = r.load(buf->data());
+ const QByteArray &ba = buf->data();
+ res = r.load(QByteArray::fromRawData(ba.constData() + buf->pos(), ba.size() - buf->pos()));
+ buf->seek(ba.size());
} else if (q->format() == "svgz") {
- res = r.load(device->readAll()); // ### can't stream svgz
+ res = r.load(device->readAll());
} else {
xmlReader.setDevice(device);
- res = r.load(&xmlReader); //### doesn't leave pos() correctly
+ res = r.load(&xmlReader);
}
if (res) {
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowsamplescheduler.cpp b/src/plugins/mediaservices/directshow/mediaplayer/directshowsamplescheduler.cpp
index 150860f..23675fb 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowsamplescheduler.cpp
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowsamplescheduler.cpp
@@ -118,7 +118,7 @@ bool DirectShowTimedSample::isReady(IReferenceClock *clock) const
}
DirectShowSampleScheduler::DirectShowSampleScheduler(IUnknown *pin, QObject *parent)
- : QWinEventNotifier(parent)
+ : QObject(parent)
, m_pin(pin)
, m_clock(0)
, m_allocator(0)
@@ -131,13 +131,15 @@ DirectShowSampleScheduler::DirectShowSampleScheduler(IUnknown *pin, QObject *par
{
m_semaphore.release(m_maximumSamples);
- setHandle(m_timeoutEvent);
- setEnabled(true);
+ m_eventNotifier.setHandle(m_timeoutEvent);
+ m_eventNotifier.setEnabled(true);
+
+ connect(&m_eventNotifier, SIGNAL(activated(HANDLE)), this, SIGNAL(sampleReady()));
}
DirectShowSampleScheduler::~DirectShowSampleScheduler()
{
- setEnabled(false);
+ m_eventNotifier.setEnabled(false);
::CloseHandle(m_timeoutEvent);
@@ -398,17 +400,4 @@ bool DirectShowSampleScheduler::scheduleEndOfStream()
}
}
-bool DirectShowSampleScheduler::event(QEvent *event)
-{
- if (event->type() == QEvent::WinEventAct) {
- QObject::event(event);
-
- emit sampleReady();
-
- return true;
- } else {
- return QWinEventNotifier::event(event);
- }
-}
-
QT_END_NAMESPACE
diff --git a/src/plugins/mediaservices/directshow/mediaplayer/directshowsamplescheduler.h b/src/plugins/mediaservices/directshow/mediaplayer/directshowsamplescheduler.h
index 007fa99..21823c3 100644
--- a/src/plugins/mediaservices/directshow/mediaplayer/directshowsamplescheduler.h
+++ b/src/plugins/mediaservices/directshow/mediaplayer/directshowsamplescheduler.h
@@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE
class DirectShowTimedSample;
-class DirectShowSampleScheduler : public QWinEventNotifier, public IMemInputPin
+class DirectShowSampleScheduler : public QObject, public IMemInputPin
{
Q_OBJECT
public:
@@ -101,8 +101,6 @@ public:
IMediaSample *takeSample(bool *eos);
- bool event(QEvent *event);
-
Q_SIGNALS:
void sampleReady();
@@ -118,6 +116,7 @@ private:
HANDLE m_timeoutEvent;
QSemaphore m_semaphore;
QMutex m_mutex;
+ QWinEventNotifier m_eventNotifier;
};
QT_END_NAMESPACE
diff --git a/src/plugins/mediaservices/gstreamer/gstreamer.pro b/src/plugins/mediaservices/gstreamer/gstreamer.pro
index 0273139..6e05120 100644
--- a/src/plugins/mediaservices/gstreamer/gstreamer.pro
+++ b/src/plugins/mediaservices/gstreamer/gstreamer.pro
@@ -9,39 +9,48 @@ unix:contains(QT_CONFIG, alsa) {
}
QMAKE_CXXFLAGS += $$QT_CFLAGS_GSTREAMER
-LIBS += -lXv $$QT_LIBS_GSTREAMER -lgstinterfaces-0.10 -lgstvideo-0.10 -lgstbase-0.10 -lgstaudio-0.10
+LIBS += $$QT_LIBS_GSTREAMER -lgstinterfaces-0.10 -lgstvideo-0.10 -lgstbase-0.10 -lgstaudio-0.10
# Input
HEADERS += \
qgstreamermessage.h \
qgstreamerbushelper.h \
qgstreamervideooutputcontrol.h \
- qgstreamervideorendererinterface.h \
- qgstreamervideowidget.h \
+ qgstreamervideorendererinterface.h \
qgstreamerserviceplugin.h \
qgstreamervideoinputdevicecontrol.h \
- qgstreamervideooverlay.h \
qgstreamervideorenderer.h \
qgstvideobuffer.h \
- qvideosurfacegstsink.h \
- qx11videosurface.h \
- qgstxvimagebuffer.h
+ qvideosurfacegstsink.h
SOURCES += \
qgstreamermessage.cpp \
qgstreamerbushelper.cpp \
qgstreamervideooutputcontrol.cpp \
- qgstreamervideorendererinterface.cpp \
- qgstreamervideowidget.cpp \
+ qgstreamervideorendererinterface.cpp \
qgstreamerserviceplugin.cpp \
qgstreamervideoinputdevicecontrol.cpp \
- qgstreamervideooverlay.cpp \
qgstreamervideorenderer.cpp \
qgstvideobuffer.cpp \
- qvideosurfacegstsink.cpp \
- qx11videosurface.cpp \
- qgstxvimagebuffer.cpp
+ qvideosurfacegstsink.cpp
+
+
+!win32:!embedded:!mac:!symbian {
+ LIBS += -lXv
+
+ HEADERS += \
+ qgstreamervideooverlay.h \
+ qgstreamervideowidget.h \
+ qx11videosurface.h \
+ qgstxvimagebuffer.h
+
+ SOURCES += \
+ qgstreamervideooverlay.cpp \
+ qgstreamervideowidget.cpp \
+ qx11videosurface.cpp \
+ qgstxvimagebuffer.cpp
+}
include(mediaplayer/mediaplayer.pri)
diff --git a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayerservice.cpp b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayerservice.cpp
index d5d7bd0..3228722 100644
--- a/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayerservice.cpp
+++ b/src/plugins/mediaservices/gstreamer/mediaplayer/qgstreamerplayerservice.cpp
@@ -63,7 +63,10 @@ QT_BEGIN_NAMESPACE
QGstreamerPlayerService::QGstreamerPlayerService(QObject *parent):
- QMediaService(parent)
+ QMediaService(parent),
+ m_videoRenderer(0),
+ m_videoWindow(0),
+ m_videoWidget(0)
{
m_session = new QGstreamerPlayerSession(this);
m_control = new QGstreamerPlayerControl(m_session, this);
@@ -74,13 +77,22 @@ QGstreamerPlayerService::QGstreamerPlayerService(QObject *parent):
connect(m_videoOutput, SIGNAL(outputChanged(QVideoOutputControl::Output)),
this, SLOT(videoOutputChanged(QVideoOutputControl::Output)));
m_videoRenderer = new QGstreamerVideoRenderer(this);
+
+#ifdef Q_WS_X11
m_videoWindow = new QGstreamerVideoOverlay(this);
m_videoWidget = new QGstreamerVideoWidgetControl(this);
+#endif
+
+ QList<QVideoOutputControl::Output> outputs;
+
+ if (m_videoRenderer)
+ outputs << QVideoOutputControl::RendererOutput;
+ if (m_videoWidget)
+ outputs << QVideoOutputControl::WidgetOutput;
+ if (m_videoWindow)
+ outputs << QVideoOutputControl::WindowOutput;
- m_videoOutput->setAvailableOutputs(QList<QVideoOutputControl::Output>()
- << QVideoOutputControl::RendererOutput
- << QVideoOutputControl::WindowOutput
- << QVideoOutputControl::WidgetOutput);
+ m_videoOutput->setAvailableOutputs(outputs);
}
QGstreamerPlayerService::~QGstreamerPlayerService()
diff --git a/src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.cpp b/src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.cpp
index 76d87ce..596e39d 100644
--- a/src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.cpp
+++ b/src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.cpp
@@ -44,12 +44,16 @@
#include <QtCore/qdebug.h>
#include <QMap>
#include <QThread>
+
+#include "qgstvideobuffer.h"
+
+#ifdef Q_WS_X11
#include <QtGui/qx11info_x11.h>
+#include "qgstxvimagebuffer.h"
+#endif
#include "qvideosurfacegstsink.h"
-#include "qgstvideobuffer.h"
-#include "qgstxvimagebuffer.h"
@@ -131,11 +135,13 @@ GstFlowReturn QVideoSurfaceGstDelegate::render(GstBuffer *buffer)
QGstVideoBuffer *videoBuffer = 0;
+#ifdef Q_WS_X11
if (G_TYPE_CHECK_INSTANCE_TYPE(buffer, QGstXvImageBuffer::get_type())) {
QGstXvImageBuffer *xvBuffer = reinterpret_cast<QGstXvImageBuffer *>(buffer);
QVariant handle = QVariant::fromValue(xvBuffer->xvImage);
videoBuffer = new QGstVideoBuffer(buffer, m_bytesPerLine, XvHandleType, handle);
} else
+#endif
videoBuffer = new QGstVideoBuffer(buffer, m_bytesPerLine);
m_frame = QVideoFrame(
@@ -387,7 +393,9 @@ void QVideoSurfaceGstSink::instance_init(GTypeInstance *instance, gpointer g_cla
Q_UNUSED(g_class);
sink->delegate = 0;
+#ifdef Q_WS_X11
sink->pool = new QGstXvImageBufferPool();
+#endif
sink->lastRequestedCaps = 0;
sink->lastBufferCaps = 0;
sink->lastSurfaceFormat = new QVideoSurfaceFormat;
@@ -396,8 +404,11 @@ void QVideoSurfaceGstSink::instance_init(GTypeInstance *instance, gpointer g_cla
void QVideoSurfaceGstSink::finalize(GObject *object)
{
VO_SINK(object);
+#ifdef Q_WS_X11
delete sink->pool;
sink->pool = 0;
+#endif
+
delete sink->lastSurfaceFormat;
sink->lastSurfaceFormat = 0;
@@ -588,6 +599,8 @@ GstFlowReturn QVideoSurfaceGstSink::buffer_alloc(
*buffer = 0;
+#ifdef Q_WS_X11
+
if (sink->lastRequestedCaps && gst_caps_is_equal(sink->lastRequestedCaps, caps)) {
//qDebug() << "reusing last caps";
*buffer = GST_BUFFER(sink->pool->takeBuffer(*sink->lastSurfaceFormat, sink->lastBufferCaps));
@@ -649,6 +662,7 @@ GstFlowReturn QVideoSurfaceGstSink::buffer_alloc(
*buffer = GST_BUFFER(sink->pool->takeBuffer(surfaceFormat, intersection));
+#endif
return GST_FLOW_OK;
}
diff --git a/src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.h b/src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.h
index f59a43c..75fa854 100644
--- a/src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.h
+++ b/src/plugins/mediaservices/gstreamer/qvideosurfacegstsink.h
@@ -59,8 +59,10 @@ QT_BEGIN_NAMESPACE
class QAbstractVideoSurface;
+#ifdef Q_WS_X11
class QGstXvImageBuffer;
class QGstXvImageBufferPool;
+#endif
class QVideoSurfaceGstDelegate : public QObject
@@ -137,7 +139,11 @@ private:
private:
QVideoSurfaceGstDelegate *delegate;
+
+#ifdef Q_WS_X11
QGstXvImageBufferPool *pool;
+#endif
+
GstCaps *lastRequestedCaps;
GstCaps *lastBufferCaps;
QVideoSurfaceFormat *lastSurfaceFormat;
diff --git a/src/plugins/mediaservices/mediaservices.pro b/src/plugins/mediaservices/mediaservices.pro
index 6a00a14..27f05bc 100644
--- a/src/plugins/mediaservices/mediaservices.pro
+++ b/src/plugins/mediaservices/mediaservices.pro
@@ -5,7 +5,9 @@ contains(QT_CONFIG, media-backend) {
mac: SUBDIRS += qt7
- unix:!mac:!symbian:contains(QT_CONFIG, xvideo):contains(QT_CONFIG, gstreamer) {
+ unix:!mac:!symbian:contains(QT_CONFIG, gstreamer) {
SUBDIRS += gstreamer
}
+
+ symbian:SUBDIRS += symbian
}
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/mediaplayer.pri b/src/plugins/mediaservices/symbian/mediaplayer/mediaplayer.pri
new file mode 100644
index 0000000..205e014
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/mediaplayer.pri
@@ -0,0 +1,63 @@
+INCLUDEPATH += $$PWD
+LIBS += -lmediaclientvideo \
+ -lmediaclientaudio \
+ -lws32 \
+ -lfbscli \
+ -lcone \
+ -lmmfcontrollerframework \
+ -lefsrv \
+ -lbitgdi \
+ -lapgrfx \
+ -lapmime
+
+
+# We are building Symbian backend with media player support
+DEFINES += QMEDIA_MMF_PLAYER
+
+
+HEADERS += \
+ $$PWD/s60mediaplayercontrol.h \
+ $$PWD/s60mediaplayerservice.h \
+ $$PWD/s60mediaplayersession.h \
+ $$PWD/s60videoplayersession.h \
+ $$PWD/s60mediametadataprovider.h \
+ $$PWD/s60videosurface.h \
+ $$PWD/s60videooverlay.h \
+ $$PWD/s60videorenderer.h \
+ $$PWD/s60mediarecognizer.h \
+ $$PWD/s60audioplayersession.h \
+ $$PWD/ms60mediaplayerresolver.h \
+ $$PWD/s60videowidget.h \
+ $$PWD/s60mediaplayeraudioendpointselector.h
+
+SOURCES += \
+ $$PWD/s60mediaplayercontrol.cpp \
+ $$PWD/s60mediaplayerservice.cpp \
+ $$PWD/s60mediaplayersession.cpp \
+ $$PWD/s60videoplayersession.cpp \
+ $$PWD/s60mediametadataprovider.cpp \
+ $$PWD/s60videosurface.cpp \
+ $$PWD/s60videooverlay.cpp \
+ $$PWD/s60videorenderer.cpp \
+ $$PWD/s60mediarecognizer.cpp \
+ $$PWD/s60audioplayersession.cpp \
+ $$PWD/s60videowidget.cpp \
+ $$PWD/s60mediaplayeraudioendpointselector.cpp
+
+contains(S60_VERSION, 3.1) {
+
+ #3.1 doesn't provide audio routing in videoplayer
+ DEFINES += HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER
+
+ !exists($${EPOCROOT}epoc32\release\winscw\udeb\audiooutputrouting.lib) {
+ MMP_RULES += "$${LITERAL_HASH}ifdef WINSCW" \
+ "MACRO HAS_NO_AUDIOROUTING" \
+ "$${LITERAL_HASH}else" \
+ "LIBRARY audiooutputrouting.lib" \
+ "$${LITERAL_HASH}endif"
+ }
+
+} else {
+ LIBS += -laudiooutputrouting
+}
+
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/ms60mediaplayerresolver.h b/src/plugins/mediaservices/symbian/mediaplayer/ms60mediaplayerresolver.h
new file mode 100644
index 0000000..b655a83
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/ms60mediaplayerresolver.h
@@ -0,0 +1,58 @@
+/****************************************************************************
+**
+** 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 plugins 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 MS60MEDIAPLAYERRESOLVER_H
+#define MS60MEDIAPLAYERRESOLVER_H
+
+QT_BEGIN_NAMESPACE
+
+class S60MediaPlayerSession;
+
+class MS60MediaPlayerResolver
+{
+ public:
+ virtual S60MediaPlayerSession* PlayerSession() = 0;
+ virtual S60MediaPlayerSession* VideoPlayerSession() = 0;
+ virtual S60MediaPlayerSession* AudioPlayerSession() = 0;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60audioplayersession.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60audioplayersession.cpp
new file mode 100644
index 0000000..1bebe0a
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60audioplayersession.cpp
@@ -0,0 +1,275 @@
+/****************************************************************************
+**
+** 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 plugins 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 "s60audioplayersession.h"
+#include <QtCore/qdebug.h>
+#include <QtCore/qvariant.h>
+
+#include <AudioOutput.h>
+#include <MAudioOutputObserver.h>
+
+QT_BEGIN_NAMESPACE
+
+S60AudioPlayerSession::S60AudioPlayerSession(QObject *parent)
+ : S60MediaPlayerSession(parent)
+ , m_player(0)
+ , m_audioEndpoint("Default")
+{
+#ifndef HAS_NO_AUDIOROUTING
+ m_audioOutput = 0;
+#endif
+ QT_TRAP_THROWING(m_player = CAudioPlayer::NewL(*this, 0, EMdaPriorityPreferenceNone));
+ m_player->RegisterForAudioLoadingNotification(*this);
+}
+
+S60AudioPlayerSession::~S60AudioPlayerSession()
+{
+#if !defined(HAS_NO_AUDIOROUTING)
+ if (m_audioOutput)
+ m_audioOutput->UnregisterObserver(*this);
+ delete m_audioOutput;
+#endif
+ m_player->Close();
+ delete m_player;
+}
+
+void S60AudioPlayerSession::doLoadL(const TDesC &path)
+{
+#ifndef HAS_NO_AUDIOROUTING
+ // m_audioOutput needs to be reinitialized after MapcInitComplete
+ if (m_audioOutput)
+ m_audioOutput->UnregisterObserver(*this);
+ delete m_audioOutput;
+ m_audioOutput = NULL;
+#endif
+
+ m_player->OpenFileL(path);
+}
+
+qint64 S60AudioPlayerSession::doGetDurationL() const
+{
+ return m_player->Duration().Int64() / qint64(1000);
+}
+
+qint64 S60AudioPlayerSession::doGetPositionL() const
+{
+ TTimeIntervalMicroSeconds ms = 0;
+ m_player->GetPosition(ms);
+ return ms.Int64() / qint64(1000);
+}
+
+bool S60AudioPlayerSession::isVideoAvailable() const
+{
+ return false;
+}
+bool S60AudioPlayerSession::isAudioAvailable() const
+{
+ return true; // this is a bit happy scenario, but we do emit error that we can't play
+}
+
+void S60AudioPlayerSession::MaloLoadingStarted()
+{
+ buffering();
+}
+
+void S60AudioPlayerSession::MaloLoadingComplete()
+{
+ buffered();
+}
+
+void S60AudioPlayerSession::doPlay()
+{
+// For some reason loading progress callbalck are not called on emulator
+#ifdef __WINSCW__
+ buffering();
+#endif
+ m_player->Play();
+#ifdef __WINSCW__
+ buffered();
+#endif
+
+}
+
+void S60AudioPlayerSession::doPauseL()
+{
+ m_player->Pause();
+}
+
+void S60AudioPlayerSession::doStop()
+{
+ m_player->Stop();
+}
+
+void S60AudioPlayerSession::doSetVolumeL(int volume)
+{
+ m_player->SetVolume((volume / 100.0) * m_player->MaxVolume());
+}
+
+void S60AudioPlayerSession::doSetPositionL(qint64 microSeconds)
+{
+ m_player->SetPosition(TTimeIntervalMicroSeconds(microSeconds));
+}
+
+void S60AudioPlayerSession::updateMetaDataEntriesL()
+{
+ metaDataEntries().clear();
+ int numberOfMetaDataEntries = 0;
+
+ m_player->GetNumberOfMetaDataEntries(numberOfMetaDataEntries);
+
+ for (int i = 0; i < numberOfMetaDataEntries; i++) {
+ CMMFMetaDataEntry *entry = NULL;
+ entry = m_player->GetMetaDataEntryL(i);
+ metaDataEntries().insert(QString::fromUtf16(entry->Name().Ptr(), entry->Name().Length()), QString::fromUtf16(entry->Value().Ptr(), entry->Value().Length()));
+ delete entry;
+ }
+ emit metaDataChanged();
+}
+
+int S60AudioPlayerSession::doGetBufferStatusL() const
+{
+ int progress = 0;
+ m_player->GetAudioLoadingProgressL(progress);
+ return progress;
+}
+
+void S60AudioPlayerSession::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration)
+{
+ Q_UNUSED(aDuration);
+ setError(aError);
+#ifndef HAS_NO_AUDIOROUTING
+ TRAPD(err,
+ m_audioOutput = CAudioOutput::NewL(*m_player);
+ m_audioOutput->RegisterObserverL(*this);
+ );
+ setActiveEndpoint(m_audioEndpoint);
+ setError(err);
+#endif
+ loaded();
+}
+
+void S60AudioPlayerSession::MapcPlayComplete(TInt aError)
+{
+ setError(aError);
+ endOfMedia();
+}
+
+void S60AudioPlayerSession::doSetAudioEndpoint(const QString& audioEndpoint)
+{
+ m_audioEndpoint = audioEndpoint;
+}
+
+QString S60AudioPlayerSession::activeEndpoint() const
+{
+ QString outputName = QString("Default");
+#if !defined(HAS_NO_AUDIOROUTING)
+ if (m_audioOutput) {
+ CAudioOutput::TAudioOutputPreference output = m_audioOutput->AudioOutput();
+ outputName = qStringFromTAudioOutputPreference(output);
+ }
+#endif
+ return outputName;
+}
+
+QString S60AudioPlayerSession::defaultEndpoint() const
+{
+ QString outputName = QString("Default");
+#if !defined(HAS_NO_AUDIOROUTING)
+ if (m_audioOutput) {
+ CAudioOutput::TAudioOutputPreference output = m_audioOutput->DefaultAudioOutput();
+ outputName = qStringFromTAudioOutputPreference(output);
+ }
+#endif
+ return outputName;
+}
+
+void S60AudioPlayerSession::setActiveEndpoint(const QString& name)
+{
+#if !defined(HAS_NO_AUDIOROUTING)
+ CAudioOutput::TAudioOutputPreference output = CAudioOutput::ENoPreference;
+
+ if (name == QString("Default"))
+ output = CAudioOutput::ENoPreference;
+ else if (name == QString("All"))
+ output = CAudioOutput::EAll;
+ else if (name == QString("None"))
+ output = CAudioOutput::ENoOutput;
+ else if (name == QString("Earphone"))
+ output = CAudioOutput::EPrivate;
+ else if (name == QString("Speaker"))
+ output = CAudioOutput::EPublic;
+ if (m_audioOutput) {
+ TRAPD(err, m_audioOutput->SetAudioOutputL(output));
+ setError(err);
+
+ if (m_audioEndpoint != name) {
+ m_audioEndpoint = name;
+ emit activeEndpointChanged(name);
+ }
+ }
+#endif
+}
+
+#if !defined(HAS_NO_AUDIOROUTING)
+void S60AudioPlayerSession::DefaultAudioOutputChanged(CAudioOutput& aAudioOutput,
+ CAudioOutput::TAudioOutputPreference aNewDefault)
+{
+ // Emit already implemented in setActiveEndpoint function
+ Q_UNUSED(aAudioOutput)
+ Q_UNUSED(aNewDefault)
+}
+
+QString S60AudioPlayerSession::qStringFromTAudioOutputPreference(CAudioOutput::TAudioOutputPreference output) const
+{
+ if (output == CAudioOutput::ENoPreference)
+ return QString("Default");
+ else if (output == CAudioOutput::EAll)
+ return QString("All");
+ else if (output == CAudioOutput::ENoOutput)
+ return QString("None");
+ else if (output == CAudioOutput::EPrivate)
+ return QString("Earphone");
+ else if (output == CAudioOutput::EPublic)
+ return QString("Speaker");
+ return QString("Default");
+}
+#endif
+QT_END_NAMESPACE
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60audioplayersession.h b/src/plugins/mediaservices/symbian/mediaplayer/s60audioplayersession.h
new file mode 100644
index 0000000..d7259b9
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60audioplayersession.h
@@ -0,0 +1,124 @@
+/****************************************************************************
+**
+** 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 plugins 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 S60AUDIOPLAYERSESSION_H
+#define S60AUDIOPLAYERSESSION_H
+
+#include "s60mediaplayersession.h"
+
+#include <mdaaudiosampleplayer.h>
+typedef CMdaAudioPlayerUtility CAudioPlayer;
+typedef MMdaAudioPlayerCallback MAudioPlayerObserver;
+
+#ifndef HAS_NO_AUDIOROUTING
+#include <AudioOutput.h>
+#include <MAudioOutputObserver.h>
+#endif
+
+QT_BEGIN_NAMESPACE
+
+class S60AudioPlayerSession : public S60MediaPlayerSession
+ , public MAudioPlayerObserver
+ , public MAudioLoadingObserver
+#ifndef HAS_NO_AUDIOROUTING
+ , public MAudioOutputObserver
+#endif
+{
+ Q_OBJECT
+
+public:
+ S60AudioPlayerSession(QObject *parent);
+ ~S60AudioPlayerSession();
+
+ //From S60MediaPlayerSession
+ bool isVideoAvailable() const;
+ bool isAudioAvailable() const;
+
+ // From MAudioLoadingObserver
+ void MaloLoadingStarted();
+ void MaloLoadingComplete();
+
+#ifndef HAS_NO_AUDIOROUTING
+ // From MAudioOutputObserver
+ void DefaultAudioOutputChanged( CAudioOutput& aAudioOutput,
+ CAudioOutput::TAudioOutputPreference aNewDefault );
+#endif
+public:
+ // From S60MediaPlayerAudioEndpointSelector
+ QString activeEndpoint() const;
+ QString defaultEndpoint() const;
+public Q_SLOTS:
+ void setActiveEndpoint(const QString& name);
+Q_SIGNALS:
+ void activeEndpointChanged(const QString & name);
+
+protected:
+ //From S60MediaPlayerSession
+ void doLoadL(const TDesC &path);
+ void doLoadUrlL(const TDesC &path){Q_UNUSED(path)/*empty implementation*/}
+ void doPlay();
+ void doStop();
+ void doPauseL();
+ void doSetVolumeL(int volume);
+ qint64 doGetPositionL() const;
+ void doSetPositionL(qint64 microSeconds);
+ void updateMetaDataEntriesL();
+ int doGetBufferStatusL() const;
+ qint64 doGetDurationL() const;
+ void doSetAudioEndpoint(const QString& audioEndpoint);
+
+private:
+ void MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration);
+ void MapcPlayComplete(TInt aError);
+#ifndef HAS_NO_AUDIOROUTING
+ QString qStringFromTAudioOutputPreference(CAudioOutput::TAudioOutputPreference output) const;
+#endif
+private:
+ CAudioPlayer *m_player;
+#ifndef HAS_NO_AUDIOROUTING
+ CAudioOutput *m_audioOutput;
+#endif
+ QString m_audioEndpoint;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediametadataprovider.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60mediametadataprovider.cpp
new file mode 100644
index 0000000..e80c487
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediametadataprovider.cpp
@@ -0,0 +1,185 @@
+/****************************************************************************
+**
+** 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 plugins 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 "s60mediametadataprovider.h"
+#include "s60mediaplayersession.h"
+#include <QtCore/qdebug.h>
+
+QT_BEGIN_NAMESPACE
+
+S60MediaMetaDataProvider::S60MediaMetaDataProvider(MS60MediaPlayerResolver& mediaPlayerResolver, QObject *parent)
+ : QMetaDataControl(parent)
+ , m_mediaPlayerResolver(mediaPlayerResolver)
+ , m_session(NULL)
+{
+}
+
+S60MediaMetaDataProvider::~S60MediaMetaDataProvider()
+{
+}
+
+bool S60MediaMetaDataProvider::isMetaDataAvailable() const
+{
+ m_session = m_mediaPlayerResolver.PlayerSession();
+ if (m_session)
+ return m_session->isMetadataAvailable();
+ return false;
+}
+
+bool S60MediaMetaDataProvider::isWritable() const
+{
+ return false;
+}
+
+QVariant S60MediaMetaDataProvider::metaData(QtMediaServices::MetaData key) const
+{
+ m_session = m_mediaPlayerResolver.PlayerSession();
+ if (m_session && m_session->isMetadataAvailable())
+ return m_session->metaData(metaDataKeyAsString(key));
+ return QVariant();
+}
+
+void S60MediaMetaDataProvider::setMetaData(QtMediaServices::MetaData key, QVariant const &value)
+{
+ Q_UNUSED(key);
+ Q_UNUSED(value);
+}
+QList<QtMediaServices::MetaData> S60MediaMetaDataProvider::availableMetaData() const
+{
+ m_session = m_mediaPlayerResolver.PlayerSession();
+ QList<QtMediaServices::MetaData> metaDataTags;
+ if (m_session && m_session->isMetadataAvailable()) {
+ for (int i = QtMediaServices::Title; i <= QtMediaServices::DeviceSettingDescription; i++) {
+ QString metaData = metaDataKeyAsString((QtMediaServices::MetaData)i);
+ if (!metaData.isEmpty()) {
+ if (!m_session->metaData(metaData).toString().isEmpty()) {
+ metaDataTags.append((QtMediaServices::MetaData)i);
+ }
+ }
+ }
+ }
+ return metaDataTags;
+}
+
+QVariant S60MediaMetaDataProvider::extendedMetaData(const QString &key) const
+{
+ m_session = m_mediaPlayerResolver.PlayerSession();
+ if (m_session && m_session->isMetadataAvailable())
+ return m_session->metaData(key);
+ return QVariant();
+}
+
+void S60MediaMetaDataProvider::setExtendedMetaData(const QString &key, QVariant const &value)
+{
+ Q_UNUSED(key);
+ Q_UNUSED(value);
+}
+
+QStringList S60MediaMetaDataProvider::availableExtendedMetaData() const
+{
+ m_session = m_mediaPlayerResolver.PlayerSession();
+ if (m_session && m_session->isMetadataAvailable())
+ return m_session->availableMetaData().keys();
+ return QStringList();
+}
+
+QString S60MediaMetaDataProvider::metaDataKeyAsString(QtMediaServices::MetaData key) const
+{
+ switch(key) {
+ case QtMediaServices::Title: return "title";
+ case QtMediaServices::AlbumArtist: return "artist";
+ case QtMediaServices::Comment: return "comment";
+ case QtMediaServices::Genre: return "genre";
+ case QtMediaServices::Year: return "year";
+ case QtMediaServices::Copyright: return "copyright";
+ case QtMediaServices::AlbumTitle: return "album";
+ case QtMediaServices::Composer: return "composer";
+ case QtMediaServices::TrackNumber: return "albumtrack";
+ case QtMediaServices::AudioBitRate: return "audiobitrate";
+ case QtMediaServices::VideoBitRate: return "videobitrate";
+ case QtMediaServices::Duration: return "duration";
+ case QtMediaServices::MediaType: return "contenttype";
+ case QtMediaServices::SubTitle: // TODO: Find the matching metadata keys
+ case QtMediaServices::Description:
+ case QtMediaServices::Category:
+ case QtMediaServices::Date:
+ case QtMediaServices::UserRating:
+ case QtMediaServices::Keywords:
+ case QtMediaServices::Language:
+ case QtMediaServices::Publisher:
+ case QtMediaServices::ParentalRating:
+ case QtMediaServices::RatingOrganisation:
+ case QtMediaServices::Size:
+ case QtMediaServices::AudioCodec:
+ case QtMediaServices::AverageLevel:
+ case QtMediaServices::ChannelCount:
+ case QtMediaServices::PeakValue:
+ case QtMediaServices::SampleRate:
+ case QtMediaServices::Author:
+ case QtMediaServices::ContributingArtist:
+ case QtMediaServices::Conductor:
+ case QtMediaServices::Lyrics:
+ case QtMediaServices::Mood:
+ case QtMediaServices::TrackCount:
+ case QtMediaServices::CoverArtUrlSmall:
+ case QtMediaServices::CoverArtUrlLarge:
+ case QtMediaServices::Resolution:
+ case QtMediaServices::PixelAspectRatio:
+ case QtMediaServices::VideoFrameRate:
+ case QtMediaServices::VideoCodec:
+ case QtMediaServices::PosterUrl:
+ case QtMediaServices::ChapterNumber:
+ case QtMediaServices::Director:
+ case QtMediaServices::LeadPerformer:
+ case QtMediaServices::Writer:
+ case QtMediaServices::CameraManufacturer:
+ case QtMediaServices::CameraModel:
+ case QtMediaServices::Event:
+ case QtMediaServices::Subject:
+ default:
+ break;
+ }
+
+ return QString();
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediametadataprovider.h b/src/plugins/mediaservices/symbian/mediaplayer/s60mediametadataprovider.h
new file mode 100644
index 0000000..07ae494
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediametadataprovider.h
@@ -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 plugins 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 S60MEDIAMETADATAPROVIDER_H
+#define S60MEDIAMETADATAPROVIDER_H
+
+#include <qmetadatacontrol.h>
+#include "ms60mediaplayerresolver.h"
+
+QT_BEGIN_NAMESPACE
+
+class S60MediaPlayerSession;
+
+class S60MediaMetaDataProvider : public QMetaDataControl
+{
+ Q_OBJECT
+
+public:
+ S60MediaMetaDataProvider(MS60MediaPlayerResolver& mediaPlayerResolver, QObject *parent = 0);
+ ~S60MediaMetaDataProvider();
+
+ bool isMetaDataAvailable() const;
+ bool isWritable() const;
+
+ QVariant metaData(QtMediaServices::MetaData key) const;
+ void setMetaData(QtMediaServices::MetaData key, const QVariant &value);
+ QList<QtMediaServices::MetaData> availableMetaData() const;
+
+ QVariant extendedMetaData(const QString &key) const ;
+ void setExtendedMetaData(const QString &key, const QVariant &value);
+ QStringList availableExtendedMetaData() const;
+
+private:
+ QString metaDataKeyAsString(QtMediaServices::MetaData key) const;
+
+private:
+ MS60MediaPlayerResolver& m_mediaPlayerResolver;
+ mutable S60MediaPlayerSession *m_session;
+};
+
+QT_END_NAMESPACE
+
+#endif // S60VIDEOMETADATAPROVIDER_H
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayeraudioendpointselector.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayeraudioendpointselector.cpp
new file mode 100644
index 0000000..dbeed90
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayeraudioendpointselector.cpp
@@ -0,0 +1,127 @@
+/****************************************************************************
+**
+** 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 plugins 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 "s60mediaplayercontrol.h"
+#include "s60mediaplayersession.h"
+#include "s60mediaplayeraudioendpointselector.h"
+
+#include <QtGui/QIcon>
+#include <QtCore/QDebug>
+
+QT_BEGIN_NAMESPACE
+
+S60MediaPlayerAudioEndpointSelector::S60MediaPlayerAudioEndpointSelector(QObject *control, QObject *parent)
+ :QMediaControl(parent)
+ , m_control(0)
+ , m_audioEndpointNames(0)
+{
+ m_control = qobject_cast<S60MediaPlayerControl*>(control);
+}
+
+S60MediaPlayerAudioEndpointSelector::~S60MediaPlayerAudioEndpointSelector()
+{
+ delete m_audioEndpointNames;
+}
+
+QList<QString> S60MediaPlayerAudioEndpointSelector::availableEndpoints() const
+{
+ if(m_audioEndpointNames->count() == 0) {
+ m_audioEndpointNames->append("Default");
+ m_audioEndpointNames->append("All");
+ m_audioEndpointNames->append("None");
+ m_audioEndpointNames->append("Earphone");
+ m_audioEndpointNames->append("Speaker");
+ }
+ return *m_audioEndpointNames;
+}
+
+QString S60MediaPlayerAudioEndpointSelector::endpointDescription(const QString& name) const
+{
+ if (name == QString("Default")) //ENoPreference
+ return QString("Used to indicate that the playing audio can be routed to"
+ "any speaker. This is the default value for audio.");
+ else if (name == QString("All")) //EAll
+ return QString("Used to indicate that the playing audio should be routed to all speakers.");
+ else if (name == QString("None")) //ENoOutput
+ return QString("Used to indicate that the playing audio should not be routed to any output.");
+ else if (name == QString("Earphone")) //EPrivate
+ return QString("Used to indicate that the playing audio should be routed to"
+ "the default private speaker. A private speaker is one that can only"
+ "be heard by one person.");
+ else if (name == QString("Speaker")) //EPublic
+ return QString("Used to indicate that the playing audio should be routed to"
+ "the default public speaker. A public speaker is one that can "
+ "be heard by multiple people.");
+
+ return QString();
+}
+
+QString S60MediaPlayerAudioEndpointSelector::activeEndpoint() const
+{
+ if (m_control->session())
+ return m_control->session()->activeEndpoint();
+ else
+ return m_control->mediaControlSettings().audioEndpoint();
+}
+
+QString S60MediaPlayerAudioEndpointSelector::defaultEndpoint() const
+{
+ if (m_control->session())
+ return m_control->session()->defaultEndpoint();
+ else
+ return m_control->mediaControlSettings().audioEndpoint();
+}
+
+void S60MediaPlayerAudioEndpointSelector::setActiveEndpoint(const QString& name)
+{
+ QString oldEndpoint = m_control->mediaControlSettings().audioEndpoint();
+
+ if (name != oldEndpoint && (name == QString("Default") || name == QString("All") ||
+ name == QString("None") || name == QString("Earphone") || name == QString("Speaker"))) {
+
+ if (m_control->session()) {
+ m_control->session()->setActiveEndpoint(name);
+ }
+ m_control->setAudioEndpoint(name);
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayeraudioendpointselector.h b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayeraudioendpointselector.h
new file mode 100644
index 0000000..a110ae8
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayeraudioendpointselector.h
@@ -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 plugins 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 S60MEDIAPLAYERAUDIOENDPOINTSELECTOR_H
+#define S60MEDIAPLAYERAUDIOENDPOINTSELECTOR_H
+
+#include <QStringList>
+
+#include <QtMediaServices/qmediacontrol.h>
+
+QT_BEGIN_NAMESPACE
+
+class S60MediaPlayerControl;
+class S60MediaPlayerSession;
+
+class S60MediaPlayerAudioEndpointSelector : public QMediaControl
+{
+
+Q_OBJECT
+
+public:
+ S60MediaPlayerAudioEndpointSelector(QObject *control, QObject *parent = 0);
+ ~S60MediaPlayerAudioEndpointSelector();
+
+ QList<QString> availableEndpoints() const ;
+ QString endpointDescription(const QString& name) const;
+ QString defaultEndpoint() const;
+ QString activeEndpoint() const;
+
+public Q_SLOTS:
+ void setActiveEndpoint(const QString& name);
+
+private:
+ S60MediaPlayerControl* m_control;
+ QString m_audioInput;
+ QList<QString> *m_audioEndpointNames;
+};
+
+#define QAudioEndpointSelector_iid "com.nokia.Qt.QAudioEndpointSelector/1.0"
+
+QT_END_NAMESPACE
+
+#endif // S60MEDIAPLAYERAUDIOENDPOINTSELECTOR_H
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayercontrol.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayercontrol.cpp
new file mode 100644
index 0000000..8e03afd
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayercontrol.cpp
@@ -0,0 +1,274 @@
+
+/****************************************************************************
+**
+** 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 plugins 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 "s60mediaplayercontrol.h"
+#include "s60mediaplayersession.h"
+
+#include <QtCore/qdir.h>
+#include <QtCore/qurl.h>
+#include <QtCore/qdebug.h>
+
+QT_BEGIN_NAMESPACE
+
+S60MediaPlayerControl::S60MediaPlayerControl(MS60MediaPlayerResolver& mediaPlayerResolver, QObject *parent)
+ : QMediaPlayerControl(parent),
+ m_mediaPlayerResolver(mediaPlayerResolver),
+ m_session(NULL),
+ m_stream(NULL)
+{
+}
+
+S60MediaPlayerControl::~S60MediaPlayerControl()
+{
+}
+
+qint64 S60MediaPlayerControl::position() const
+{
+ if (m_session)
+ return m_session->position();
+ return 0;
+}
+
+qint64 S60MediaPlayerControl::duration() const
+{
+ if (m_session)
+ return m_session->duration();
+ return -1;
+}
+
+QMediaPlayer::State S60MediaPlayerControl::state() const
+{
+ if (m_session)
+ return m_session->state();
+ return QMediaPlayer::StoppedState;
+}
+
+QMediaPlayer::MediaStatus S60MediaPlayerControl::mediaStatus() const
+{
+ if (m_session)
+ return m_session->mediaStatus();
+ return m_mediaSettings.mediaStatus();
+}
+
+int S60MediaPlayerControl::bufferStatus() const
+{
+ if (m_session)
+ return m_session->bufferStatus();
+ return 0;
+}
+
+int S60MediaPlayerControl::volume() const
+{
+ if (m_session)
+ return m_session->volume();
+ return m_mediaSettings.volume();
+}
+
+bool S60MediaPlayerControl::isMuted() const
+{
+ if (m_session)
+ return m_session->isMuted();
+ return m_mediaSettings.isMuted();
+}
+
+bool S60MediaPlayerControl::isSeekable() const
+{
+ if (m_session)
+ return m_session->isSeekable();
+ return false;
+}
+
+QMediaTimeRange S60MediaPlayerControl::availablePlaybackRanges() const
+{
+ QMediaTimeRange ranges;
+
+ if(m_session && m_session->isSeekable())
+ ranges.addInterval(0, m_session->duration());
+
+ return ranges;
+}
+
+qreal S60MediaPlayerControl::playbackRate() const
+{
+ //None of symbian players supports this.
+ return m_mediaSettings.playbackRate();
+}
+
+void S60MediaPlayerControl::setPlaybackRate(qreal rate)
+{
+ //None of symbian players supports this.
+ m_mediaSettings.setPlaybackRate(rate);
+ emit playbackRateChanged(playbackRate());
+
+}
+
+void S60MediaPlayerControl::setPosition(qint64 pos)
+{
+ if (m_session)
+ m_session->setPosition(pos);
+}
+
+void S60MediaPlayerControl::play()
+{
+ if (m_session)
+ m_session->play();
+}
+
+void S60MediaPlayerControl::pause()
+{
+ if (m_session)
+ m_session->pause();
+}
+
+void S60MediaPlayerControl::stop()
+{
+ if (m_session)
+ m_session->stop();
+}
+
+void S60MediaPlayerControl::setVolume(int volume)
+{
+ int boundVolume = qBound(0, volume, 100);
+ if (boundVolume == m_mediaSettings.volume())
+ return;
+
+ m_mediaSettings.setVolume(boundVolume);
+ if (m_session)
+ m_session->setVolume(boundVolume);
+
+ emit volumeChanged(boundVolume);
+}
+
+void S60MediaPlayerControl::setMuted(bool muted)
+{
+ if (m_mediaSettings.isMuted() == muted)
+ return;
+
+ m_mediaSettings.setMuted(muted);
+ if (m_session)
+ m_session->setMuted(muted);
+
+ emit mutedChanged(muted);
+}
+
+QMediaContent S60MediaPlayerControl::media() const
+{
+ return m_currentResource;
+}
+
+const QIODevice *S60MediaPlayerControl::mediaStream() const
+{
+ return m_stream;
+}
+
+void S60MediaPlayerControl::setMedia(const QMediaContent &source, QIODevice *stream)
+{
+ Q_UNUSED(stream)
+ // we don't want to set & load media again when it is already loaded
+ if (m_session && m_currentResource == source)
+ return;
+
+ // store to variable as session is created based on the content type.
+ m_currentResource = source;
+ S60MediaPlayerSession *newSession = m_mediaPlayerResolver.PlayerSession();
+ m_mediaSettings.setMediaStatus(QMediaPlayer::UnknownMediaStatus);
+
+ if (m_session)
+ m_session->reset();
+ else {
+ emit mediaStatusChanged(QMediaPlayer::UnknownMediaStatus);
+ emit error(QMediaPlayer::NoError, QString());
+ }
+
+ m_session = newSession;
+
+ if (m_session)
+ m_session->load(source.canonicalUrl());
+ else {
+ QMediaPlayer::MediaStatus status = (source.isNull()) ? QMediaPlayer::NoMedia : QMediaPlayer::InvalidMedia;
+ m_mediaSettings.setMediaStatus(status);
+ emit stateChanged(QMediaPlayer::StoppedState);
+ emit error((source.isNull()) ? QMediaPlayer::NoError : QMediaPlayer::ResourceError,
+ (source.isNull()) ? "" : tr("Media couldn't be resolved"));
+ emit mediaStatusChanged(status);
+ }
+ emit mediaChanged(m_currentResource);
+ }
+
+S60MediaPlayerSession* S60MediaPlayerControl::session()
+{
+ return m_session;
+}
+
+void S60MediaPlayerControl::setVideoOutput(QObject *output)
+{
+ S60MediaPlayerSession *session = NULL;
+ session = m_mediaPlayerResolver.VideoPlayerSession();
+ session->setVideoRenderer(output);
+}
+
+bool S60MediaPlayerControl::isAudioAvailable() const
+{
+ if (m_session)
+ return m_session->isAudioAvailable();
+ return false;
+}
+
+bool S60MediaPlayerControl::isVideoAvailable() const
+{
+ if (m_session)
+ return m_session->isVideoAvailable();
+ return false;
+}
+
+const S60MediaSettings& S60MediaPlayerControl::mediaControlSettings() const
+{
+ return m_mediaSettings;
+}
+
+void S60MediaPlayerControl::setAudioEndpoint(const QString& name)
+{
+ m_mediaSettings.setAudioEndpoint(name);
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayercontrol.h b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayercontrol.h
new file mode 100644
index 0000000..3d26a5e
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayercontrol.h
@@ -0,0 +1,143 @@
+/****************************************************************************
+**
+** 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 plugins 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 S60MEDIAPLAYERCONTROL_H
+#define S60MEDIAPLAYERCONTROL_H
+
+#include <QtCore/qobject.h>
+
+#include <qmediaplayercontrol.h>
+
+#include "ms60mediaplayerresolver.h"
+#include <QtCore/qdebug.h>
+
+QT_BEGIN_NAMESPACE
+
+class QMediaPlayer;
+class QMediaTimeRange;
+class QMediaContent;
+
+
+class S60MediaPlayerSession;
+class S60MediaPlayerService;
+
+class S60MediaSettings
+{
+
+public:
+ S60MediaSettings()
+ : m_volume(0)
+ , m_muted(false)
+ , m_playbackRate(0)
+ , m_mediaStatus(QMediaPlayer::UnknownMediaStatus)
+ , m_audioEndpoint(QString("Default"))
+ {
+ }
+
+ void setVolume(int volume) { m_volume = volume; }
+ void setMuted(bool muted) { m_muted = muted; }
+ void setPlaybackRate(int rate) { m_playbackRate = rate; }
+ void setMediaStatus(QMediaPlayer::MediaStatus status) {m_mediaStatus=status;}
+ void setAudioEndpoint(const QString& audioEndpoint) { m_audioEndpoint = audioEndpoint; }
+
+ int volume() const { return m_volume; }
+ bool isMuted() const { return m_muted; }
+ qreal playbackRate() const { return m_playbackRate; }
+ QMediaPlayer::MediaStatus mediaStatus() const {return m_mediaStatus;}
+ QString audioEndpoint() const { return m_audioEndpoint; }
+
+private:
+ int m_volume;
+ bool m_muted;
+ qreal m_playbackRate;
+ QMediaPlayer::MediaStatus m_mediaStatus;
+ QString m_audioEndpoint;
+};
+
+class S60MediaPlayerControl : public QMediaPlayerControl
+{
+ Q_OBJECT
+
+public:
+ S60MediaPlayerControl(MS60MediaPlayerResolver& mediaPlayerResolver, QObject *parent = 0);
+ ~S60MediaPlayerControl();
+
+ // from QMediaPlayerControl
+ virtual QMediaPlayer::State state() const;
+ virtual QMediaPlayer::MediaStatus mediaStatus() const;
+ virtual qint64 duration() const;
+ virtual qint64 position() const;
+ virtual void setPosition(qint64 pos);
+ virtual int volume() const;
+ virtual void setVolume(int volume);
+ virtual bool isMuted() const;
+ virtual void setMuted(bool muted);
+ virtual int bufferStatus() const;
+ virtual bool isAudioAvailable() const;
+ virtual bool isVideoAvailable() const;
+ virtual bool isSeekable() const;
+ virtual QMediaTimeRange availablePlaybackRanges() const;
+ virtual qreal playbackRate() const;
+ virtual void setPlaybackRate(qreal rate);
+ virtual QMediaContent media() const;
+ virtual const QIODevice *mediaStream() const;
+ virtual void setMedia(const QMediaContent&, QIODevice *);
+ virtual void play();
+ virtual void pause();
+ virtual void stop();
+ S60MediaPlayerSession* session();
+ void setAudioEndpoint(const QString& name);
+
+ // Own methods
+ void setVideoOutput(QObject *output);
+ const S60MediaSettings& mediaControlSettings() const;
+
+private:
+ MS60MediaPlayerResolver &m_mediaPlayerResolver;
+ S60MediaPlayerSession *m_session;
+ QMediaContent m_currentResource;
+ QIODevice *m_stream;
+ S60MediaSettings m_mediaSettings;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayerservice.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayerservice.cpp
new file mode 100644
index 0000000..0b1c7d5
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayerservice.cpp
@@ -0,0 +1,259 @@
+/****************************************************************************
+**
+** 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 plugins 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 <QtCore/qvariant.h>
+#include <QtCore/qdebug.h>
+#include <QtGui/qwidget.h>
+
+#include "s60mediaplayerservice.h"
+#include "s60mediaplayercontrol.h"
+#include "s60videoplayersession.h"
+#include "s60audioplayersession.h"
+#include "s60mediametadataprovider.h"
+#include "s60videowidget.h"
+#include "s60mediarecognizer.h"
+//#include <qmediatimerange.h>
+#include "s60videooverlay.h"
+#include "s60videorenderer.h"
+#include "s60mediaplayeraudioendpointselector.h"
+
+#include <qmediaplaylistnavigator.h>
+#include <qmediaplaylist.h>
+
+QT_BEGIN_NAMESPACE
+
+S60MediaPlayerService::S60MediaPlayerService(QObject *parent)
+ : QMediaService(parent)
+ , m_control(NULL)
+ , m_videoOutput(NULL)
+ , m_videoPlayerSession(NULL)
+ , m_audioPlayerSession(NULL)
+ , m_metaData(NULL)
+ , m_videoWidget(NULL)
+ , m_videoWindow(NULL)
+ , m_videoRenderer(NULL)
+ , m_audioEndpointSelector(NULL)
+{
+ m_control = new S60MediaPlayerControl(*this, this);
+ m_metaData = new S60MediaMetaDataProvider(*this);
+ m_audioEndpointSelector = new S60MediaPlayerAudioEndpointSelector(m_control, this);
+}
+
+S60MediaPlayerService::~S60MediaPlayerService()
+{
+ delete m_videoWidget;
+ delete m_videoRenderer;
+ delete m_videoWindow;
+ delete m_videoOutput;
+}
+
+QMediaControl *S60MediaPlayerService::control(const char *name) const
+{
+ if (qstrcmp(name, QMediaPlayerControl_iid) == 0)
+ return m_control;
+
+ if (qstrcmp(name, QMetaDataControl_iid) == 0) {
+ return m_metaData;
+ }
+
+ if (qstrcmp(name, QVideoOutputControl_iid) == 0) {
+ if (!m_videoOutput) {
+ m_videoOutput = new S60VideoOutputControl;
+ connect(m_videoOutput, SIGNAL(outputChanged(QVideoOutputControl::Output)),
+ this, SLOT(videoOutputChanged(QVideoOutputControl::Output)));
+ m_videoOutput->setAvailableOutputs(QList<QVideoOutputControl::Output>()
+// << QVideoOutputControl::RendererOutput
+// << QVideoOutputControl::WindowOutput
+ << QVideoOutputControl::WidgetOutput);
+
+ }
+ return m_videoOutput;
+ }
+
+ if (qstrcmp(name, QVideoWidgetControl_iid) == 0) {
+ if (!m_videoWidget)
+ m_videoWidget = new S60VideoWidgetControl;
+ return m_videoWidget;
+ }
+
+ if (qstrcmp(name, QVideoRendererControl_iid) == 0) {
+ if (m_videoRenderer)
+ m_videoRenderer = new S60VideoRenderer;
+ return m_videoRenderer;
+ }
+
+ if (qstrcmp(name, QVideoWindowControl_iid) == 0) {
+ if (!m_videoWindow)
+ m_videoWindow = new S60VideoOverlay;
+ return m_videoWindow;
+ }
+
+ if (qstrcmp(name, QAudioEndpointSelector_iid) == 0) {
+ return m_audioEndpointSelector;
+ }
+
+ return 0;
+
+}
+
+void S60MediaPlayerService::videoOutputChanged(QVideoOutputControl::Output output)
+{
+ switch (output) {
+ case QVideoOutputControl::NoOutput:
+ m_control->setVideoOutput(0);
+ break;
+
+ case QVideoOutputControl::RendererOutput:
+ m_control->setVideoOutput(m_videoRenderer);
+ break;
+ case QVideoOutputControl::WindowOutput:
+ m_control->setVideoOutput(m_videoWindow);
+ break;
+
+ case QVideoOutputControl::WidgetOutput:
+ m_control->setVideoOutput(m_videoWidget);
+ break;
+ default:
+ qWarning("Invalid video output selection");
+ break;
+ }
+}
+
+S60MediaPlayerSession* S60MediaPlayerService::PlayerSession()
+{
+ QUrl url = m_control->media().canonicalUrl();
+
+ if (url.isEmpty() == true) {
+ return NULL;
+ }
+
+ S60MediaRecognizer *m_mediaRecognizer = new S60MediaRecognizer(this);
+ S60MediaRecognizer::MediaType mediaType = m_mediaRecognizer->mediaType(url);
+
+ switch (mediaType) {
+ case S60MediaRecognizer::Video:
+ case S60MediaRecognizer::Url:
+ return VideoPlayerSession();
+ case S60MediaRecognizer::Audio:
+ return AudioPlayerSession();
+ default:
+ break;
+ }
+
+ return NULL;
+}
+
+S60MediaPlayerSession* S60MediaPlayerService::VideoPlayerSession()
+{
+ if (!m_videoPlayerSession) {
+ m_videoPlayerSession = new S60VideoPlayerSession(this);
+
+ connect(m_videoPlayerSession, SIGNAL(positionChanged(qint64)),
+ m_control, SIGNAL(positionChanged(qint64)));
+ connect(m_videoPlayerSession, SIGNAL(durationChanged(qint64)),
+ m_control, SIGNAL(durationChanged(qint64)));
+ connect(m_videoPlayerSession, SIGNAL(stateChanged(QMediaPlayer::State)),
+ m_control, SIGNAL(stateChanged(QMediaPlayer::State)));
+ connect(m_videoPlayerSession, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),
+ m_control, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)));
+ connect(m_videoPlayerSession,SIGNAL(bufferStatusChanged(int)),
+ m_control, SIGNAL(bufferStatusChanged(int)));
+ connect(m_videoPlayerSession, SIGNAL(videoAvailableChanged(bool)),
+ m_control, SIGNAL(videoAvailableChanged(bool)));
+ connect(m_videoPlayerSession, SIGNAL(audioAvailableChanged(bool)),
+ m_control, SIGNAL(audioAvailableChanged(bool)));
+ connect(m_videoPlayerSession, SIGNAL(seekableChanged(bool)),
+ m_control, SIGNAL(seekableChanged(bool)));
+ connect(m_videoPlayerSession, SIGNAL(availablePlaybackRangesChanged(const QMediaTimeRange&)),
+ m_control, SIGNAL(availablePlaybackRangesChanged(const QMediaTimeRange&)));
+ connect(m_videoPlayerSession, SIGNAL(error(int, const QString &)),
+ m_control, SIGNAL(error(int, const QString &)));
+ connect(m_videoPlayerSession, SIGNAL(metaDataChanged()),
+ m_metaData, SIGNAL(metaDataChanged()));
+ connect(m_videoPlayerSession, SIGNAL(activeEndpointChanged(const QString&)),
+ m_audioEndpointSelector, SIGNAL(activeEndpointChanged(const QString&)));
+ }
+
+ m_videoPlayerSession->setVolume(m_control->mediaControlSettings().volume());
+ m_videoPlayerSession->setMuted(m_control->mediaControlSettings().isMuted());
+ m_videoPlayerSession->setAudioEndpoint(m_control->mediaControlSettings().audioEndpoint());
+ return m_videoPlayerSession;
+}
+
+S60MediaPlayerSession* S60MediaPlayerService::AudioPlayerSession()
+{
+ if (!m_audioPlayerSession) {
+ m_audioPlayerSession = new S60AudioPlayerSession(this);
+
+ connect(m_audioPlayerSession, SIGNAL(positionChanged(qint64)),
+ m_control, SIGNAL(positionChanged(qint64)));
+ connect(m_audioPlayerSession, SIGNAL(durationChanged(qint64)),
+ m_control, SIGNAL(durationChanged(qint64)));
+ connect(m_audioPlayerSession, SIGNAL(stateChanged(QMediaPlayer::State)),
+ m_control, SIGNAL(stateChanged(QMediaPlayer::State)));
+ connect(m_audioPlayerSession, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)),
+ m_control, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)));
+ connect(m_audioPlayerSession,SIGNAL(bufferStatusChanged(int)),
+ m_control, SIGNAL(bufferStatusChanged(int)));
+ connect(m_audioPlayerSession, SIGNAL(videoAvailableChanged(bool)),
+ m_control, SIGNAL(videoAvailableChanged(bool)));
+ connect(m_audioPlayerSession, SIGNAL(audioAvailableChanged(bool)),
+ m_control, SIGNAL(audioAvailableChanged(bool)));
+ connect(m_audioPlayerSession, SIGNAL(seekableChanged(bool)),
+ m_control, SIGNAL(seekableChanged(bool)));
+ connect(m_audioPlayerSession, SIGNAL(availablePlaybackRangesChanged(const QMediaTimeRange&)),
+ m_control, SIGNAL(availablePlaybackRangesChanged(const QMediaTimeRange&)));
+ connect(m_audioPlayerSession, SIGNAL(error(int, const QString &)),
+ m_control, SIGNAL(error(int, const QString &)));
+ connect(m_audioPlayerSession, SIGNAL(metaDataChanged()),
+ m_metaData, SIGNAL(metaDataChanged()));
+ connect(m_audioPlayerSession, SIGNAL(activeEndpointChanged(const QString&)),
+ m_audioEndpointSelector, SIGNAL(activeEndpointChanged(const QString&)));
+ }
+
+ m_audioPlayerSession->setVolume(m_control->mediaControlSettings().volume());
+ m_audioPlayerSession->setMuted(m_control->mediaControlSettings().isMuted());
+ m_audioPlayerSession->setAudioEndpoint(m_control->mediaControlSettings().audioEndpoint());
+ return m_audioPlayerSession;
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayerservice.h b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayerservice.h
new file mode 100644
index 0000000..6c8155d
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayerservice.h
@@ -0,0 +1,105 @@
+/****************************************************************************
+**
+** 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 plugins 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 S60VIDEOPLAYERSERVICE_H
+#define S60VIDEOPLAYERSERVICE_H
+
+#include <QtCore/qobject.h>
+
+#include <qmediaservice.h>
+#include <qvideooutputcontrol.h>
+
+#include "s60videooutputcontrol.h"
+#include "ms60mediaplayerresolver.h"
+
+#include "s60mediaplayeraudioendpointselector.h"
+
+QT_BEGIN_NAMESPACE
+
+class QMediaMetaData;
+class QMediaPlayerControl;
+class QMediaPlaylist;
+
+
+class S60VideoPlayerSession;
+class S60AudioPlayerSession;
+class S60MediaPlayerControl;
+class S60MediaMetaDataProvider;
+class S60VideoWidgetControl;
+class S60MediaRecognizer;
+class S60VideoRenderer;
+class S60VideoOverlay;
+
+class QMediaPlaylistNavigator;
+
+class S60MediaPlayerService : public QMediaService, public MS60MediaPlayerResolver
+{
+ Q_OBJECT
+
+public:
+ S60MediaPlayerService(QObject *parent = 0);
+ ~S60MediaPlayerService();
+
+ QMediaControl *control(const char *name) const;
+
+private slots:
+ void videoOutputChanged(QVideoOutputControl::Output output);
+
+protected: // From MS60MediaPlayerResolver
+ S60MediaPlayerSession* PlayerSession();
+ S60MediaPlayerSession* VideoPlayerSession();
+ S60MediaPlayerSession* AudioPlayerSession();
+
+private:
+ S60MediaPlayerControl *m_control;
+ mutable S60VideoOutputControl *m_videoOutput;
+ S60VideoPlayerSession *m_videoPlayerSession;
+ S60AudioPlayerSession *m_audioPlayerSession;
+ mutable S60MediaMetaDataProvider *m_metaData;
+ mutable S60VideoWidgetControl *m_videoWidget;
+ mutable S60VideoOverlay *m_videoWindow;
+ mutable S60VideoRenderer *m_videoRenderer;
+ S60MediaPlayerAudioEndpointSelector *m_audioEndpointSelector;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayersession.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayersession.cpp
new file mode 100644
index 0000000..693c103
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayersession.cpp
@@ -0,0 +1,496 @@
+/****************************************************************************
+**
+** 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 plugins 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 "s60mediaplayersession.h"
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qdir.h>
+#include <QtCore/qvariant.h>
+#include <QtCore/qtimer.h>
+#include <mmf/common/mmferrors.h>
+#include <qmediatimerange.h>
+
+QT_BEGIN_NAMESPACE
+
+S60MediaPlayerSession::S60MediaPlayerSession(QObject *parent)
+ : QObject(parent)
+ , m_playbackRate(0)
+ , m_muted(false)
+ , m_volume(0)
+ , m_state(QMediaPlayer::StoppedState)
+ , m_mediaStatus(QMediaPlayer::UnknownMediaStatus)
+ , m_progressTimer(new QTimer(this))
+ , m_stalledTimer(new QTimer(this))
+ , m_error(KErrNone)
+ , m_play_requested(false)
+ , m_stream(false)
+{
+ connect(m_progressTimer, SIGNAL(timeout()), this, SLOT(tick()));
+ connect(m_stalledTimer, SIGNAL(timeout()), this, SLOT(stalled()));
+}
+
+S60MediaPlayerSession::~S60MediaPlayerSession()
+{
+}
+
+int S60MediaPlayerSession::volume() const
+{
+ return m_volume;
+}
+
+void S60MediaPlayerSession::setVolume(int volume)
+{
+ if (m_volume == volume)
+ return;
+
+ m_volume = volume;
+ // Dont set symbian players volume until media loaded.
+ // Leaves with KerrNotReady although documentation says otherwise.
+ if (!m_muted &&
+ ( mediaStatus() == QMediaPlayer::LoadedMedia
+ || mediaStatus() == QMediaPlayer::StalledMedia
+ || mediaStatus() == QMediaPlayer::BufferingMedia
+ || mediaStatus() == QMediaPlayer::BufferedMedia
+ || mediaStatus() == QMediaPlayer::EndOfMedia)) {
+ TRAPD(err, doSetVolumeL(m_volume));
+ setError(err);
+ }
+}
+
+bool S60MediaPlayerSession::isMuted() const
+{
+ return m_muted;
+}
+
+bool S60MediaPlayerSession::isSeekable() const
+{
+ return (m_stream)?false:true;
+}
+
+void S60MediaPlayerSession::setMediaStatus(QMediaPlayer::MediaStatus status)
+{
+ if (m_mediaStatus == status)
+ return;
+
+ m_mediaStatus = status;
+
+ emit mediaStatusChanged(m_mediaStatus);
+
+ if (m_play_requested)
+ play();
+}
+
+void S60MediaPlayerSession::setState(QMediaPlayer::State state)
+{
+ if (m_state == state)
+ return;
+
+ m_state = state;
+ emit stateChanged(m_state);
+}
+
+QMediaPlayer::State S60MediaPlayerSession::state() const
+{
+ return m_state;
+}
+
+QMediaPlayer::MediaStatus S60MediaPlayerSession::mediaStatus() const
+{
+ return m_mediaStatus;
+}
+
+void S60MediaPlayerSession::load(QUrl url)
+{
+ setMediaStatus(QMediaPlayer::LoadingMedia);
+ startStalledTimer();
+ m_stream = (url.scheme() == "file")?false:true;
+ TRAPD(err,
+ if(m_stream)
+ doLoadUrlL(QString2TPtrC(url.toString()));
+ else
+ doLoadL(QString2TPtrC(QDir::toNativeSeparators(url.toLocalFile()))));
+ setError(err);
+}
+
+void S60MediaPlayerSession::play()
+{
+ if (state() == QMediaPlayer::PlayingState
+ || mediaStatus() == QMediaPlayer::UnknownMediaStatus
+ || mediaStatus() == QMediaPlayer::NoMedia
+ || mediaStatus() == QMediaPlayer::InvalidMedia)
+ return;
+
+ if (mediaStatus() == QMediaPlayer::LoadingMedia) {
+ m_play_requested = true;
+ return;
+ }
+
+ m_play_requested = false;
+ setState(QMediaPlayer::PlayingState);
+ startProgressTimer();
+ doPlay();
+}
+
+void S60MediaPlayerSession::pause()
+{
+ if (mediaStatus() == QMediaPlayer::NoMedia ||
+ mediaStatus() == QMediaPlayer::InvalidMedia)
+ return;
+
+ setState(QMediaPlayer::PausedState);
+ stopProgressTimer();
+ TRAP_IGNORE(doPauseL());
+}
+
+void S60MediaPlayerSession::stop()
+{
+ m_play_requested = false;
+ setState(QMediaPlayer::StoppedState);
+ if (mediaStatus() == QMediaPlayer::BufferingMedia ||
+ mediaStatus() == QMediaPlayer::BufferedMedia)
+ setMediaStatus(QMediaPlayer::LoadedMedia);
+ if (mediaStatus() == QMediaPlayer::LoadingMedia)
+ setMediaStatus(QMediaPlayer::UnknownMediaStatus);
+ stopProgressTimer();
+ stopStalledTimer();
+ doStop();
+ emit positionChanged(0);
+}
+void S60MediaPlayerSession::reset()
+{
+ m_play_requested = false;
+ setError(KErrNone, QString(), true);
+ stopProgressTimer();
+ stopStalledTimer();
+ doStop();
+ setState(QMediaPlayer::StoppedState);
+ setMediaStatus(QMediaPlayer::UnknownMediaStatus);
+}
+
+void S60MediaPlayerSession::setVideoRenderer(QObject *renderer)
+{
+ Q_UNUSED(renderer);
+}
+
+int S60MediaPlayerSession::bufferStatus()
+{
+ if( mediaStatus() == QMediaPlayer::LoadingMedia
+ || mediaStatus() == QMediaPlayer::UnknownMediaStatus
+ || mediaStatus() == QMediaPlayer::NoMedia
+ || mediaStatus() == QMediaPlayer::InvalidMedia)
+ return 0;
+
+ int progress = 0;
+ TRAPD(err, progress = doGetBufferStatusL());
+
+ // If buffer status query not supported by codec return 100
+ // do not set error
+ if(err == KErrNotSupported)
+ return 100;
+
+ setError(err);
+ return progress;
+}
+
+bool S60MediaPlayerSession::isMetadataAvailable() const
+{
+ return !m_metaDataMap.isEmpty();
+}
+
+QVariant S60MediaPlayerSession::metaData(const QString &key) const
+{
+ return m_metaDataMap.value(key);
+}
+
+QMap<QString, QVariant> S60MediaPlayerSession::availableMetaData() const
+{
+ return m_metaDataMap;
+}
+
+void S60MediaPlayerSession::setMuted(bool muted)
+{
+ m_muted = muted;
+
+ if( m_mediaStatus == QMediaPlayer::LoadedMedia
+ || m_mediaStatus == QMediaPlayer::StalledMedia
+ || m_mediaStatus == QMediaPlayer::BufferingMedia
+ || m_mediaStatus == QMediaPlayer::BufferedMedia
+ || m_mediaStatus == QMediaPlayer::EndOfMedia) {
+ TRAPD(err, doSetVolumeL((m_muted)?0:m_volume));
+ setError(err);
+ }
+}
+
+qint64 S60MediaPlayerSession::duration() const
+{
+ if( mediaStatus() == QMediaPlayer::LoadingMedia
+ || mediaStatus() == QMediaPlayer::UnknownMediaStatus
+ || mediaStatus() == QMediaPlayer::NoMedia
+ || mediaStatus() == QMediaPlayer::InvalidMedia)
+ return -1;
+
+ qint64 pos = 0;
+ TRAP_IGNORE(pos = doGetDurationL());
+ return pos;
+}
+
+qint64 S60MediaPlayerSession::position() const
+{
+ if( mediaStatus() == QMediaPlayer::LoadingMedia
+ || mediaStatus() == QMediaPlayer::UnknownMediaStatus
+ || mediaStatus() == QMediaPlayer::NoMedia
+ || mediaStatus() == QMediaPlayer::InvalidMedia)
+ return 0;
+
+ qint64 pos = 0;
+ TRAP_IGNORE(pos = doGetPositionL());
+ return pos;
+}
+
+void S60MediaPlayerSession::setPosition(qint64 pos)
+{
+ if (position() == pos)
+ return;
+
+ if (state() == QMediaPlayer::PlayingState)
+ pause();
+
+ TRAPD(err, doSetPositionL(pos * 1000));
+ setError(err);
+
+ if (state() == QMediaPlayer::PausedState)
+ play();
+
+ emit positionChanged(position());
+}
+
+void S60MediaPlayerSession::setAudioEndpoint(const QString& audioEndpoint)
+{
+ doSetAudioEndpoint(audioEndpoint);
+}
+
+void S60MediaPlayerSession::loaded()
+{
+ stopStalledTimer();
+ if (m_error == KErrNone || m_error == KErrMMPartialPlayback) {
+ setMediaStatus(QMediaPlayer::LoadedMedia);
+ TRAPD(err, updateMetaDataEntriesL());
+ setError(err);
+ setVolume(m_volume);
+ setMuted(m_muted);
+ emit durationChanged(duration());
+ emit videoAvailableChanged(isVideoAvailable());
+ emit audioAvailableChanged(isAudioAvailable());
+ }
+}
+
+void S60MediaPlayerSession::endOfMedia()
+{
+ setMediaStatus(QMediaPlayer::EndOfMedia);
+ setState(QMediaPlayer::StoppedState);
+ emit positionChanged(0);
+}
+
+void S60MediaPlayerSession::buffering()
+{
+ startStalledTimer();
+ setMediaStatus(QMediaPlayer::BufferingMedia);
+}
+
+void S60MediaPlayerSession::buffered()
+{
+ stopStalledTimer();
+ setMediaStatus(QMediaPlayer::BufferedMedia);
+}
+void S60MediaPlayerSession::stalled()
+{
+ setMediaStatus(QMediaPlayer::StalledMedia);
+}
+
+QMap<QString, QVariant>& S60MediaPlayerSession::metaDataEntries()
+{
+ return m_metaDataMap;
+}
+
+QMediaPlayer::Error S60MediaPlayerSession::fromSymbianErrorToMultimediaError(int error)
+{
+ switch(error) {
+ case KErrNoMemory:
+ case KErrNotFound:
+ case KErrBadHandle:
+ case KErrAbort:
+ case KErrNotSupported:
+ case KErrCorrupt:
+ case KErrGeneral:
+ case KErrArgument:
+ case KErrPathNotFound:
+ case KErrDied:
+ case KErrServerTerminated:
+ case KErrServerBusy:
+ case KErrCompletion:
+ case KErrBadPower:
+ return QMediaPlayer::ResourceError;
+
+ case KErrMMPartialPlayback:
+ return QMediaPlayer::FormatError;
+
+ case KErrMMAudioDevice:
+ case KErrMMVideoDevice:
+ case KErrMMDecoder:
+ case KErrUnknown:
+ return QMediaPlayer::ServiceMissingError;
+
+ case KErrMMNotEnoughBandwidth:
+ case KErrMMSocketServiceNotFound:
+ case KErrMMNetworkRead:
+ case KErrMMNetworkWrite:
+ case KErrMMServerSocket:
+ case KErrMMServerNotSupported:
+ case KErrMMUDPReceive:
+ case KErrMMInvalidProtocol:
+ case KErrMMInvalidURL:
+ case KErrMMMulticast:
+ case KErrMMProxyServer:
+ case KErrMMProxyServerNotSupported:
+ case KErrMMProxyServerConnect:
+ return QMediaPlayer::NetworkError;
+
+ case KErrNotReady:
+ case KErrInUse:
+ case KErrAccessDenied:
+ case KErrLocked:
+ case KErrMMDRMNotAuthorized:
+ case KErrPermissionDenied:
+ case KErrCancel:
+ case KErrAlreadyExists:
+ return QMediaPlayer::AccessDeniedError;
+
+ case KErrNone:
+ default:
+ return QMediaPlayer::NoError;
+ }
+}
+
+void S60MediaPlayerSession::setError(int error, const QString &errorString, bool forceReset)
+{
+ if( forceReset ) {
+ m_error = KErrNone;
+ emit this->error(QMediaPlayer::NoError, QString());
+ return;
+ }
+
+ // If error does not change and m_error is reseted without forceReset flag
+ if (error == m_error ||
+ (m_error != KErrNone && error == KErrNone))
+ return;
+
+ m_error = error;
+ QMediaPlayer::Error mediaError = fromSymbianErrorToMultimediaError(m_error);
+ QString symbianError = QString(errorString);
+
+ if (mediaError != QMediaPlayer::NoError) {
+ // TODO: fix to user friendly string at some point
+ // These error string are only dev usable
+ symbianError.append("Symbian:");
+ symbianError.append(QString::number(m_error));
+ }
+
+ emit this->error(mediaError, symbianError);
+
+ switch(mediaError){
+ case QMediaPlayer::ResourceError:
+ case QMediaPlayer::NetworkError:
+ case QMediaPlayer::AccessDeniedError:
+ case QMediaPlayer::ServiceMissingError:
+ m_play_requested = false;
+ setMediaStatus(QMediaPlayer::InvalidMedia);
+ stop();
+ break;
+ }
+}
+
+void S60MediaPlayerSession::tick()
+{
+ emit positionChanged(position());
+
+ if (bufferStatus() < 100)
+ emit bufferStatusChanged(bufferStatus());
+}
+
+void S60MediaPlayerSession::startProgressTimer()
+{
+ m_progressTimer->start(500);
+}
+
+void S60MediaPlayerSession::stopProgressTimer()
+{
+ m_progressTimer->stop();
+}
+
+void S60MediaPlayerSession::startStalledTimer()
+{
+ m_stalledTimer->start(30000);
+}
+
+void S60MediaPlayerSession::stopStalledTimer()
+{
+ m_stalledTimer->stop();
+}
+QString S60MediaPlayerSession::TDesC2QString(const TDesC& aDescriptor)
+{
+ return QString::fromUtf16(aDescriptor.Ptr(), aDescriptor.Length());
+}
+TPtrC S60MediaPlayerSession::QString2TPtrC( const QString& string )
+{
+ // Returned TPtrC is valid as long as the given parameter is valid and unmodified
+ return TPtrC16(static_cast<const TUint16*>(string.utf16()), string.length());
+}
+QRect S60MediaPlayerSession::TRect2QRect(const TRect& tr)
+{
+ return QRect(tr.iTl.iX, tr.iTl.iY, tr.Width(), tr.Height());
+}
+TRect S60MediaPlayerSession::QRect2TRect(const QRect& qr)
+{
+ return TRect(TPoint(qr.left(), qr.top()), TSize(qr.width(), qr.height()));
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayersession.h b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayersession.h
new file mode 100644
index 0000000..bb9eddd
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediaplayersession.h
@@ -0,0 +1,167 @@
+/****************************************************************************
+**
+** 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 plugins 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 S60MEDIAPLAYERSESSION_H
+#define S60MEDIAPLAYERSESSION_H
+
+#include <QtCore/qobject.h>
+#include <QtCore/qurl.h>
+#include <QtCore/qpair.h>
+#include <qmediaplayer.h>
+#include <e32cmn.h> // for TDesC
+#include <QRect>
+#include "s60mediaplayerservice.h"
+
+QT_BEGIN_NAMESPACE
+
+class QMediaTimeRange;
+
+class QTimer;
+
+class S60MediaPlayerSession : public QObject
+{
+ Q_OBJECT
+
+public:
+ S60MediaPlayerSession(QObject *parent);
+ virtual ~S60MediaPlayerSession();
+
+ // for player control interface to use
+ QMediaPlayer::State state() const;
+ QMediaPlayer::MediaStatus mediaStatus() const;
+ qint64 duration() const;
+ qint64 position() const;
+ void setPosition(qint64 pos);
+ int volume() const;
+ void setVolume(int volume);
+ bool isMuted() const;
+ void setMuted(bool muted);
+ virtual bool isVideoAvailable() const = 0;
+ virtual bool isAudioAvailable() const = 0;
+ bool isSeekable() const;
+ void play();
+ void pause();
+ void stop();
+ void reset();
+ bool isMetadataAvailable() const;
+ QVariant metaData(const QString &key) const;
+ QMap<QString, QVariant> availableMetaData() const;
+ void load(QUrl url);
+ int bufferStatus();
+ virtual void setVideoRenderer(QObject *renderer);
+ void setMediaStatus(QMediaPlayer::MediaStatus);
+ void setState(QMediaPlayer::State state);
+ void setAudioEndpoint(const QString& audioEndpoint);
+
+protected:
+ virtual void doLoadL(const TDesC &path) = 0;
+ virtual void doLoadUrlL(const TDesC &path) = 0;
+ virtual void doPlay() = 0;
+ virtual void doStop() = 0;
+ virtual void doPauseL() = 0;
+ virtual void doSetVolumeL(int volume) = 0;
+ virtual void doSetPositionL(qint64 microSeconds) = 0;
+ virtual qint64 doGetPositionL() const = 0;
+ virtual void updateMetaDataEntriesL() = 0;
+ virtual int doGetBufferStatusL() const = 0;
+ virtual qint64 doGetDurationL() const = 0;
+ virtual void doSetAudioEndpoint(const QString& audioEndpoint) = 0;
+
+public:
+ // From S60MediaPlayerAudioEndpointSelector
+ virtual QString activeEndpoint() const = 0;
+ virtual QString defaultEndpoint() const = 0;
+public Q_SLOTS:
+ virtual void setActiveEndpoint(const QString& name) = 0;
+
+protected:
+ void setError(int error, const QString &errorString = QString(), bool forceReset = false);
+ void loaded();
+ void buffering();
+ void buffered();
+ void endOfMedia();
+ QMap<QString, QVariant>& metaDataEntries();
+ QMediaPlayer::Error fromSymbianErrorToMultimediaError(int error);
+ void startProgressTimer();
+ void stopProgressTimer();
+ void startStalledTimer();
+ void stopStalledTimer();
+ QString TDesC2QString(const TDesC& aDescriptor);
+ TPtrC QString2TPtrC( const QString& string );
+ QRect TRect2QRect(const TRect& tr);
+ TRect QRect2TRect(const QRect& qr);
+
+
+protected slots:
+ void tick();
+ void stalled();
+
+signals:
+ void durationChanged(qint64 duration);
+ void positionChanged(qint64 position);
+ void stateChanged(QMediaPlayer::State state);
+ void mediaStatusChanged(QMediaPlayer::MediaStatus mediaStatus);
+ void videoAvailableChanged(bool videoAvailable);
+ void audioAvailableChanged(bool audioAvailable);
+ void bufferStatusChanged(int percentFilled);
+ void seekableChanged(bool);
+ void availablePlaybackRangesChanged(const QMediaTimeRange&);
+ void metaDataChanged();
+ void error(int error, const QString &errorString);
+ void activeEndpointChanged(const QString &name);
+
+private:
+ qreal m_playbackRate;
+ QMap<QString, QVariant> m_metaDataMap;
+ bool m_muted;
+ int m_volume;
+ QMediaPlayer::State m_state;
+ QMediaPlayer::MediaStatus m_mediaStatus;
+ QTimer *m_progressTimer;
+ QTimer *m_stalledTimer;
+ int m_error;
+ bool m_play_requested;
+ bool m_stream;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediarecognizer.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60mediarecognizer.cpp
new file mode 100644
index 0000000..b563dd9
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediarecognizer.cpp
@@ -0,0 +1,127 @@
+/****************************************************************************
+**
+** 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 plugins 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 "S60mediarecognizer.h"
+#include <e32def.h>
+#include <e32cmn.h>
+#include <QtCore/qurl.h>
+#include <QtCore/qdir.h>
+#include <QtCore/qdebug.h>
+
+#include <apgcli.h>
+
+QT_BEGIN_NAMESPACE
+
+static const TInt KMimeTypePrefixLength = 6; // "audio/" or "video/"
+_LIT(KMimeTypePrefixAudio, "audio/");
+_LIT(KMimeTypePrefixVideo, "video/");
+
+S60MediaRecognizer::S60MediaRecognizer(QObject *parent) : QObject(parent)
+{
+}
+
+S60MediaRecognizer::~S60MediaRecognizer()
+{
+ m_file.Close();
+ m_fileServer.Close();
+ m_recognizer.Close();
+}
+
+S60MediaRecognizer::MediaType S60MediaRecognizer::mediaType(const QUrl &url)
+{
+ bool isStream = (url.scheme() == "file")?false:true;
+
+ if (isStream)
+ return Url;
+ else
+ return identifyMediaType(url.toLocalFile());
+}
+
+S60MediaRecognizer::MediaType S60MediaRecognizer::identifyMediaType(const QString& fileName)
+{
+ S60MediaRecognizer::MediaType result = NotSupported;
+ bool recognizerOpened = false;
+
+ TInt err = m_recognizer.Connect();
+ if (err == KErrNone) {
+ recognizerOpened = true;
+ }
+
+ err = m_fileServer.Connect();
+ if (err == KErrNone) {
+ recognizerOpened = true;
+ }
+
+ // This is needed for sharing file handles for the recognizer
+ err = m_fileServer.ShareProtected();
+ if (err == KErrNone) {
+ recognizerOpened = true;
+ }
+
+ if (recognizerOpened) {
+ m_file.Close();
+ err = m_file.Open(m_fileServer, QString2TPtrC(QDir::toNativeSeparators(fileName)), EFileRead |
+ EFileShareReadersOnly);
+
+ if (err == KErrNone) {
+ TDataRecognitionResult recognizerResult;
+ err = m_recognizer.RecognizeData(m_file, recognizerResult);
+ if (err == KErrNone) {
+ const TPtrC mimeType = recognizerResult.iDataType.Des();
+
+ if (mimeType.Left(KMimeTypePrefixLength).Compare(KMimeTypePrefixAudio) == 0) {
+ result = Audio;
+ } else if (mimeType.Left(KMimeTypePrefixLength).Compare(KMimeTypePrefixVideo) == 0) {
+ result = Video;
+ }
+ }
+ }
+ }
+ return result;
+}
+
+TPtrC S60MediaRecognizer::QString2TPtrC( const QString& string )
+{
+ // Returned TPtrC is valid as long as the given parameter is valid and unmodified
+ return TPtrC16(static_cast<const TUint16*>(string.utf16()), string.length());
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60mediarecognizer.h b/src/plugins/mediaservices/symbian/mediaplayer/s60mediarecognizer.h
new file mode 100644
index 0000000..320c34c
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60mediarecognizer.h
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** 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 plugins 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 S60MEDIARECOGNIZER_H_
+#define S60MEDIARECOGNIZER_H_
+
+#include <QtCore/qobject.h>
+
+#include <apgcli.h>
+#include <f32file.h>
+
+QT_BEGIN_NAMESPACE
+
+class QUrl;
+
+class S60MediaRecognizer : public QObject
+{
+ Q_OBJECT
+
+public:
+ enum MediaType {
+ Audio,
+ Video,
+ Url,
+ NotSupported = -1
+ };
+
+ S60MediaRecognizer(QObject *parent = 0);
+ ~S60MediaRecognizer();
+
+ S60MediaRecognizer::MediaType mediaType(const QUrl &url);
+ S60MediaRecognizer::MediaType identifyMediaType(const QString& fileName);
+
+protected:
+ TPtrC QString2TPtrC( const QString& string );
+
+private:
+ RApaLsSession m_recognizer;
+ RFile m_file;
+ RFs m_fileServer;
+};
+
+QT_END_NAMESPACE
+
+#endif /* S60MEDIARECOGNIZER_H_ */
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60videooverlay.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60videooverlay.cpp
new file mode 100644
index 0000000..489b2e3
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60videooverlay.cpp
@@ -0,0 +1,209 @@
+/****************************************************************************
+**
+** 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 plugins 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 <QtMultimedia/qvideosurfaceformat.h>
+#include "s60videooverlay.h"
+#include "s60videosurface.h"
+
+QT_BEGIN_NAMESPACE
+
+S60VideoOverlay::S60VideoOverlay(QObject *parent)
+ : QVideoWindowControl(parent)
+ , m_surface(new S60VideoSurface)
+ , m_aspectRatioMode(Qt::KeepAspectRatio)
+ , m_fullScreen(false)
+{
+ connect(m_surface, SIGNAL(surfaceFormatChanged(QVideoSurfaceFormat)),
+ this, SLOT(surfaceFormatChanged()));
+}
+
+S60VideoOverlay::~S60VideoOverlay()
+{
+ delete m_surface;
+}
+
+WId S60VideoOverlay::winId() const
+{
+ return m_surface->winId();
+}
+
+void S60VideoOverlay::setWinId(WId id)
+{
+ m_surface->setWinId(id);
+}
+
+QRect S60VideoOverlay::displayRect() const
+{
+ return m_displayRect;
+}
+
+void S60VideoOverlay::setDisplayRect(const QRect &rect)
+{
+ m_displayRect = rect;
+
+ setScaledDisplayRect();
+}
+
+Qt::AspectRatioMode S60VideoOverlay::aspectRatioMode() const
+{
+ return m_aspectRatioMode;
+}
+
+void S60VideoOverlay::setAspectRatioMode(Qt::AspectRatioMode ratio)
+{
+ m_aspectRatioMode = ratio;
+
+ setScaledDisplayRect();
+}
+
+QSize S60VideoOverlay::customAspectRatio() const
+{
+ return m_aspectRatio;
+}
+
+void S60VideoOverlay::setCustomAspectRatio(const QSize &customRatio)
+{
+ m_aspectRatio = customRatio;
+
+ setScaledDisplayRect();
+}
+
+void S60VideoOverlay::repaint()
+{
+}
+
+int S60VideoOverlay::brightness() const
+{
+ return m_surface->brightness();
+}
+
+void S60VideoOverlay::setBrightness(int brightness)
+{
+ m_surface->setBrightness(brightness);
+
+ emit brightnessChanged(m_surface->brightness());
+}
+
+int S60VideoOverlay::contrast() const
+{
+ return m_surface->contrast();
+}
+
+void S60VideoOverlay::setContrast(int contrast)
+{
+ m_surface->setContrast(contrast);
+
+ emit contrastChanged(m_surface->contrast());
+}
+
+int S60VideoOverlay::hue() const
+{
+ return m_surface->hue();
+}
+
+void S60VideoOverlay::setHue(int hue)
+{
+ m_surface->setHue(hue);
+
+ emit hueChanged(m_surface->hue());
+}
+
+int S60VideoOverlay::saturation() const
+{
+ return m_surface->saturation();
+}
+
+void S60VideoOverlay::setSaturation(int saturation)
+{
+ m_surface->setSaturation(saturation);
+
+ emit saturationChanged(m_surface->saturation());
+}
+
+bool S60VideoOverlay::isFullScreen() const
+{
+ return m_fullScreen;
+}
+
+void S60VideoOverlay::setFullScreen(bool fullScreen)
+{
+ emit fullScreenChanged(m_fullScreen = fullScreen);
+}
+
+QSize S60VideoOverlay::nativeSize() const
+{
+ return m_surface->surfaceFormat().sizeHint();
+}
+
+QAbstractVideoSurface *S60VideoOverlay::surface() const
+{
+ return m_surface;
+}
+
+void S60VideoOverlay::surfaceFormatChanged()
+{
+ setScaledDisplayRect();
+
+ emit nativeSizeChanged();
+}
+
+void S60VideoOverlay::setScaledDisplayRect()
+{
+ switch (m_aspectRatioMode) {
+ case Qt::KeepAspectRatio:
+ {
+ QSize size = m_surface->surfaceFormat().viewport().size();
+
+ size.scale(m_displayRect.size(), Qt::KeepAspectRatio);
+
+ QRect rect(QPoint(0, 0), size);
+ rect.moveCenter(m_displayRect.center());
+
+ m_surface->setDisplayRect(rect);
+ }
+ break;
+ case Qt::IgnoreAspectRatio:
+ m_surface->setDisplayRect(m_displayRect);
+ break;
+ };
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60videooverlay.h b/src/plugins/mediaservices/symbian/mediaplayer/s60videooverlay.h
new file mode 100644
index 0000000..d846f32
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60videooverlay.h
@@ -0,0 +1,109 @@
+/****************************************************************************
+**
+** 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 plugins 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 S60VIDEOOVERLAY_H
+#define S60VIDEOOVERLAY_H
+
+#include <QtCore/qobject.h>
+#include <qvideowindowcontrol.h>
+
+QT_BEGIN_NAMESPACE
+
+class QAbstractVideoSurface;
+class S60VideoSurface;
+
+class S60VideoOverlay : public QVideoWindowControl
+{
+ Q_OBJECT
+
+public:
+ S60VideoOverlay(QObject *parent = 0);
+ ~S60VideoOverlay();
+
+ WId winId() const;
+ void setWinId(WId id);
+
+ QRect displayRect() const;
+ void setDisplayRect(const QRect &rect);
+
+ bool isFullScreen() const;
+ void setFullScreen(bool fullScreen);
+
+ QSize nativeSize() const;
+
+ Qt::AspectRatioMode aspectRatioMode() const;
+ void setAspectRatioMode(Qt::AspectRatioMode mode);
+
+ QSize customAspectRatio() const;
+ void setCustomAspectRatio(const QSize &customRatio);
+
+ void repaint();
+
+ int brightness() const;
+ void setBrightness(int brightness);
+
+ int contrast() const;
+ void setContrast(int contrast);
+
+ int hue() const;
+ void setHue(int hue);
+
+ int saturation() const;
+ void setSaturation(int saturation);
+
+ QAbstractVideoSurface *surface() const;
+
+private slots:
+ void surfaceFormatChanged();
+
+private:
+ void setScaledDisplayRect();
+
+ S60VideoSurface *m_surface;
+ Qt::AspectRatioMode m_aspectRatioMode;
+ QRect m_displayRect;
+ QSize m_aspectRatio;
+ bool m_fullScreen;
+};
+
+QT_END_NAMESPACE
+
+#endif // S60VIDEOOVERLAY_H
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60videoplayersession.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60videoplayersession.cpp
new file mode 100644
index 0000000..134d5a0
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60videoplayersession.cpp
@@ -0,0 +1,486 @@
+/****************************************************************************
+**
+** 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 plugins 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 "s60videoplayersession.h"
+#include "s60videowidget.h"
+#include "s60mediaplayerservice.h"
+#include "s60videooverlay.h"
+
+#include <QtCore/qdebug.h>
+#include <QtGui/qwidget.h>
+#include <QtCore/qtimer.h>
+#include <QApplication>
+
+#include <coecntrl.h>
+#include <coemain.h> // For CCoeEnv
+#include <w32std.h>
+#include <mmf/common/mmfcontrollerframeworkbase.h>
+
+#include <AudioOutput.h>
+#include <MAudioOutputObserver.h>
+
+QT_BEGIN_NAMESPACE
+
+S60VideoPlayerSession::S60VideoPlayerSession(QMediaService *service)
+ : S60MediaPlayerSession(service)
+ , m_player(0)
+ , m_rect(0, 0, 0, 0)
+ , m_output(QVideoOutputControl::NoOutput)
+ , m_windowId(0)
+ , m_dsaActive(false)
+ , m_dsaStopped(false)
+ , m_wsSession(CCoeEnv::Static()->WsSession())
+ , m_screenDevice(*CCoeEnv::Static()->ScreenDevice())
+ , m_window(0)
+ , m_service(*service)
+ , m_aspectRatioMode(Qt::KeepAspectRatio)
+ , m_originalSize(1, 1)
+ , m_audioOutput(0)
+ , m_audioEndpoint("Default")
+{
+ resetNativeHandles();
+ QT_TRAP_THROWING(m_player = CVideoPlayerUtility::NewL(
+ *this,
+ 0,
+ EMdaPriorityPreferenceNone,
+ m_wsSession,
+ m_screenDevice,
+ *m_window,
+ m_rect,
+ m_rect));
+ m_dsaActive = true;
+ m_player->RegisterForVideoLoadingNotification(*this);
+}
+
+S60VideoPlayerSession::~S60VideoPlayerSession()
+{
+#if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER)
+ if (m_audioOutput)
+ m_audioOutput->UnregisterObserver(*this);
+ delete m_audioOutput;
+#endif
+ m_player->Close();
+ delete m_player;
+}
+
+void S60VideoPlayerSession::doLoadL(const TDesC &path)
+{
+ // m_audioOutput needs to be reinitialized after MapcInitComplete
+ if (m_audioOutput)
+ m_audioOutput->UnregisterObserver(*this);
+ delete m_audioOutput;
+ m_audioOutput = NULL;
+
+ m_player->OpenFileL(path);
+}
+
+void S60VideoPlayerSession::doLoadUrlL(const TDesC &path)
+{
+ // m_audioOutput needs to be reinitialized after MapcInitComplete
+ if (m_audioOutput)
+ m_audioOutput->UnregisterObserver(*this);
+ delete m_audioOutput;
+ m_audioOutput = NULL;
+
+ m_player->OpenUrlL(path);
+}
+
+int S60VideoPlayerSession::doGetBufferStatusL() const
+{
+ int progress = 0;
+ m_player->GetVideoLoadingProgressL(progress);
+ return progress;
+}
+
+qint64 S60VideoPlayerSession::doGetDurationL() const
+{
+ return m_player->DurationL().Int64() / qint64(1000);
+}
+
+void S60VideoPlayerSession::setVideoRenderer(QObject *videoOutput)
+{
+ Q_UNUSED(videoOutput)
+ QVideoOutputControl *videoControl = qobject_cast<QVideoOutputControl *>(m_service.control(QVideoOutputControl_iid));
+
+ //Render changes
+ if (m_output != videoControl->output()) {
+
+ if (m_output == QVideoOutputControl::WidgetOutput) {
+ S60VideoWidgetControl *widgetControl = qobject_cast<S60VideoWidgetControl *>(m_service.control(QVideoWidgetControl_iid));
+ disconnect(widgetControl, SIGNAL(widgetUpdated()), this, SLOT(resetVideoDisplay()));
+ disconnect(widgetControl, SIGNAL(beginVideoWindowNativePaint()), this, SLOT(suspendDirectScreenAccess()));
+ disconnect(widgetControl, SIGNAL(endVideoWindowNativePaint()), this, SLOT(resumeDirectScreenAccess()));
+ disconnect(this, SIGNAL(stateChanged(QMediaPlayer::State)), widgetControl, SLOT(videoStateChanged(QMediaPlayer::State)));
+ }
+
+ if (videoControl->output() == QVideoOutputControl::WidgetOutput) {
+ S60VideoWidgetControl *widgetControl = qobject_cast<S60VideoWidgetControl *>(m_service.control(QVideoWidgetControl_iid));
+ connect(widgetControl, SIGNAL(widgetUpdated()), this, SLOT(resetVideoDisplay()));
+ connect(widgetControl, SIGNAL(beginVideoWindowNativePaint()), this, SLOT(suspendDirectScreenAccess()));
+ connect(widgetControl, SIGNAL(endVideoWindowNativePaint()), this, SLOT(resumeDirectScreenAccess()));
+ connect(this, SIGNAL(stateChanged(QMediaPlayer::State)), widgetControl, SLOT(videoStateChanged(QMediaPlayer::State)));
+ }
+
+ m_output = videoControl->output();
+ resetVideoDisplay();
+ }
+}
+
+bool S60VideoPlayerSession::resetNativeHandles()
+{
+ QVideoOutputControl* videoControl = qobject_cast<QVideoOutputControl *>(m_service.control(QVideoOutputControl_iid));
+ WId newId = 0;
+ TRect newRect = TRect(0,0,0,0);
+ Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio;
+
+ if (videoControl->output() == QVideoOutputControl::WidgetOutput) {
+ S60VideoWidgetControl* widgetControl = qobject_cast<S60VideoWidgetControl *>(m_service.control(QVideoWidgetControl_iid));
+ QWidget *videoWidget = widgetControl->videoWidget();
+ newId = widgetControl->videoWidgetWId();
+ newRect = QRect2TRect(QRect(videoWidget->mapToGlobal(videoWidget->pos()), videoWidget->size()));
+ aspectRatioMode = widgetControl->aspectRatioMode();
+ } else if (videoControl->output() == QVideoOutputControl::WindowOutput) {
+ S60VideoOverlay* windowControl = qobject_cast<S60VideoOverlay *>(m_service.control(QVideoWindowControl_iid));
+ newId = windowControl->winId();
+ newRect = TRect( newId->DrawableWindow()->AbsPosition(), newId->DrawableWindow()->Size());
+ } else {
+ if (QApplication::activeWindow())
+ newId = QApplication::activeWindow()->effectiveWinId();
+
+ if (!newId && QApplication::allWidgets().count())
+ newId = QApplication::allWidgets().at(0)->effectiveWinId();
+
+ Q_ASSERT(newId != 0);
+ }
+
+ if (newRect == m_rect && newId == m_windowId && aspectRatioMode == m_aspectRatioMode)
+ return false;
+
+ if (newId) {
+ m_rect = newRect;
+ m_windowId = newId;
+ m_window = m_windowId->DrawableWindow();
+ m_aspectRatioMode = aspectRatioMode;
+ return true;
+ }
+ return false;
+}
+
+bool S60VideoPlayerSession::isVideoAvailable() const
+{
+#ifdef PRE_S60_50_PLATFORM
+ return true; // this is not support in pre 5th platforms
+#else
+ if (m_player)
+ return m_player->VideoEnabledL();
+ else
+ return false;
+#endif
+}
+
+bool S60VideoPlayerSession::isAudioAvailable() const
+{
+ if (m_player)
+ return m_player->AudioEnabledL();
+ else
+ return false;
+}
+
+void S60VideoPlayerSession::doPlay()
+{
+ m_player->Play();
+}
+
+void S60VideoPlayerSession::doPauseL()
+{
+ m_player->PauseL();
+}
+
+void S60VideoPlayerSession::doStop()
+{
+ m_player->Stop();
+}
+
+qint64 S60VideoPlayerSession::doGetPositionL() const
+{
+ return m_player->PositionL().Int64() / qint64(1000);
+}
+
+void S60VideoPlayerSession::doSetPositionL(qint64 microSeconds)
+{
+ m_player->SetPositionL(TTimeIntervalMicroSeconds(microSeconds));
+}
+
+void S60VideoPlayerSession::doSetVolumeL(int volume)
+{
+ m_player->SetVolumeL((volume / 100.0)* m_player->MaxVolume());
+}
+
+QPair<qreal, qreal> S60VideoPlayerSession::scaleFactor()
+{
+ QSize scaled = m_originalSize;
+ if (m_aspectRatioMode == Qt::IgnoreAspectRatio)
+ scaled.scale(TRect2QRect(m_rect).size(), Qt::IgnoreAspectRatio);
+ else if(m_aspectRatioMode == Qt::KeepAspectRatio)
+ scaled.scale(TRect2QRect(m_rect).size(), Qt::KeepAspectRatio);
+
+ qreal width = qreal(scaled.width()) / qreal(m_originalSize.width()) * qreal(100);
+ qreal height = qreal(scaled.height()) / qreal(m_originalSize.height()) * qreal(100);
+
+ return QPair<qreal, qreal>(width, height);
+}
+
+void S60VideoPlayerSession::startDirectScreenAccess()
+{
+ if(m_dsaActive)
+ return;
+
+ TRAPD(err, m_player->StartDirectScreenAccessL());
+ if(err == KErrNone)
+ m_dsaActive = true;
+ setError(err);
+}
+
+bool S60VideoPlayerSession::stopDirectScreenAccess()
+{
+ if(!m_dsaActive)
+ return false;
+
+ TRAPD(err, m_player->StopDirectScreenAccessL());
+ if(err == KErrNone)
+ m_dsaActive = false;
+
+ setError(err);
+ return true;
+}
+
+void S60VideoPlayerSession::MvpuoOpenComplete(TInt aError)
+{
+ setError(aError);
+ m_player->Prepare();
+}
+
+void S60VideoPlayerSession::MvpuoPrepareComplete(TInt aError)
+{
+ setError(aError);
+ TRAPD(err,
+ m_player->SetDisplayWindowL(m_wsSession,
+ m_screenDevice,
+ *m_window,
+ m_rect,
+ m_rect);
+ TSize originalSize;
+ m_player->VideoFrameSizeL(originalSize);
+ m_originalSize = QSize(originalSize.iWidth, originalSize.iHeight);
+ m_player->SetScaleFactorL(scaleFactor().first, scaleFactor().second, true));
+
+ setError(err);
+ m_dsaActive = true;
+#if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER)
+ TRAP(err,
+ m_audioOutput = CAudioOutput::NewL(*m_player);
+ m_audioOutput->RegisterObserverL(*this);
+ );
+ setActiveEndpoint(m_audioEndpoint);
+ setError(err);
+#endif
+ loaded();
+}
+
+void S60VideoPlayerSession::MvpuoFrameReady(CFbsBitmap &aFrame, TInt aError)
+{
+ Q_UNUSED(aFrame);
+ Q_UNUSED(aError);
+}
+
+void S60VideoPlayerSession::MvpuoPlayComplete(TInt aError)
+{
+ setError(aError);
+ endOfMedia();
+}
+
+void S60VideoPlayerSession::MvpuoEvent(const TMMFEvent &aEvent)
+{
+ Q_UNUSED(aEvent);
+}
+
+void S60VideoPlayerSession::updateMetaDataEntriesL()
+{
+ metaDataEntries().clear();
+ int numberOfMetaDataEntries = 0;
+
+ numberOfMetaDataEntries = m_player->NumberOfMetaDataEntriesL();
+
+ for (int i = 0; i < numberOfMetaDataEntries; i++) {
+ CMMFMetaDataEntry *entry = NULL;
+ entry = m_player->MetaDataEntryL(i);
+ metaDataEntries().insert(TDesC2QString(entry->Name()), TDesC2QString(entry->Value()));
+ delete entry;
+ }
+ emit metaDataChanged();
+}
+
+void S60VideoPlayerSession::resetVideoDisplay()
+{
+ if (resetNativeHandles()) {
+ TRAPD(err,
+ m_player->SetDisplayWindowL(m_wsSession,
+ m_screenDevice,
+ *m_window,
+ m_rect,
+ m_rect));
+ setError(err);
+ if( mediaStatus() == QMediaPlayer::LoadedMedia
+ || mediaStatus() == QMediaPlayer::StalledMedia
+ || mediaStatus() == QMediaPlayer::BufferingMedia
+ || mediaStatus() == QMediaPlayer::BufferedMedia
+ || mediaStatus() == QMediaPlayer::EndOfMedia) {
+ TRAPD(err, m_player->SetScaleFactorL(scaleFactor().first, scaleFactor().second, true));
+ setError(err);
+ }
+ }
+}
+
+void S60VideoPlayerSession::suspendDirectScreenAccess()
+{
+ m_dsaStopped = stopDirectScreenAccess();
+}
+
+void S60VideoPlayerSession::resumeDirectScreenAccess()
+{
+ if(!m_dsaStopped)
+ return;
+
+ startDirectScreenAccess();
+ m_dsaStopped = false;
+}
+
+void S60VideoPlayerSession::MvloLoadingStarted()
+{
+ buffering();
+}
+
+void S60VideoPlayerSession::MvloLoadingComplete()
+{
+ buffered();
+}
+
+void S60VideoPlayerSession::doSetAudioEndpoint(const QString& audioEndpoint)
+{
+ m_audioEndpoint = audioEndpoint;
+}
+
+QString S60VideoPlayerSession::activeEndpoint() const
+{
+ QString outputName = QString("Default");
+#if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER)
+ if (m_audioOutput) {
+ CAudioOutput::TAudioOutputPreference output = m_audioOutput->AudioOutput();
+ outputName = qStringFromTAudioOutputPreference(output);
+ }
+#endif
+ return outputName;
+}
+
+QString S60VideoPlayerSession::defaultEndpoint() const
+{
+ QString outputName = QString("Default");
+#if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER)
+ if (m_audioOutput) {
+ CAudioOutput::TAudioOutputPreference output = m_audioOutput->DefaultAudioOutput();
+ outputName = qStringFromTAudioOutputPreference(output);
+ }
+#endif
+ return outputName;
+}
+
+void S60VideoPlayerSession::setActiveEndpoint(const QString& name)
+{
+ CAudioOutput::TAudioOutputPreference output = CAudioOutput::ENoPreference;
+
+ if (name == QString("Default"))
+ output = CAudioOutput::ENoPreference;
+ else if (name == QString("All"))
+ output = CAudioOutput::EAll;
+ else if (name == QString("None"))
+ output = CAudioOutput::ENoOutput;
+ else if (name == QString("Earphone"))
+ output = CAudioOutput::EPrivate;
+ else if (name == QString("Speaker"))
+ output = CAudioOutput::EPublic;
+#if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER)
+ if (m_audioOutput) {
+ TRAPD(err, m_audioOutput->SetAudioOutputL(output));
+ setError(err);
+
+ if (m_audioEndpoint != name) {
+ m_audioEndpoint = name;
+ emit activeEndpointChanged(name);
+ }
+ }
+#endif
+}
+
+void S60VideoPlayerSession::DefaultAudioOutputChanged( CAudioOutput& aAudioOutput,
+ CAudioOutput::TAudioOutputPreference aNewDefault )
+{
+ // Emit already implemented in setActiveEndpoint function
+ Q_UNUSED(aAudioOutput)
+ Q_UNUSED(aNewDefault)
+}
+
+QString S60VideoPlayerSession::qStringFromTAudioOutputPreference(CAudioOutput::TAudioOutputPreference output) const
+{
+ if (output == CAudioOutput::ENoPreference)
+ return QString("Default");
+ else if (output == CAudioOutput::EAll)
+ return QString("All");
+ else if (output == CAudioOutput::ENoOutput)
+ return QString("None");
+ else if (output == CAudioOutput::EPrivate)
+ return QString("Earphone");
+ else if (output == CAudioOutput::EPublic)
+ return QString("Speaker");
+ return QString("Default");
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60videoplayersession.h b/src/plugins/mediaservices/symbian/mediaplayer/s60videoplayersession.h
new file mode 100644
index 0000000..52e311a
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60videoplayersession.h
@@ -0,0 +1,148 @@
+/****************************************************************************
+**
+** 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 plugins 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 S60VIDEOPLAYERSESSION_H
+#define S60VIDEOPLAYERSESSION_H
+
+#include "s60mediaplayersession.h"
+#include "s60mediaplayeraudioendpointselector.h"
+#include <videoplayer.h>
+#include <QtGui/qwidget.h>
+#include <qvideowidget.h>
+
+#include <AudioOutput.h>
+#include <MAudioOutputObserver.h>
+
+QT_BEGIN_NAMESPACE
+
+class QTimer;
+
+class S60VideoPlayerSession : public S60MediaPlayerSession,
+ public MVideoPlayerUtilityObserver,
+ public MVideoLoadingObserver,
+ public MAudioOutputObserver
+{
+ Q_OBJECT
+
+public:
+ S60VideoPlayerSession(QMediaService *service);
+ ~S60VideoPlayerSession();
+
+ //From S60MediaPlayerSession
+ bool isVideoAvailable() const;
+ bool isAudioAvailable() const;
+ void setVideoRenderer(QObject *renderer);
+
+ //From MVideoLoadingObserver
+ void MvloLoadingStarted();
+ void MvloLoadingComplete();
+
+ // From MAudioOutputObserver
+ void DefaultAudioOutputChanged(CAudioOutput& aAudioOutput,
+ CAudioOutput::TAudioOutputPreference aNewDefault);
+
+public:
+ // From S60MediaPlayerAudioEndpointSelector
+ QString activeEndpoint() const;
+ QString defaultEndpoint() const;
+public Q_SLOTS:
+ void setActiveEndpoint(const QString& name);
+Q_SIGNALS:
+ void activeEndpointChanged(const QString &name);
+
+protected:
+ //From S60MediaPlayerSession
+ void doLoadL(const TDesC &path);
+ void doLoadUrlL(const TDesC &path);
+ void doPlay();
+ void doStop();
+ void doPauseL();
+ void doSetVolumeL(int volume);
+ qint64 doGetPositionL() const;
+ void doSetPositionL(qint64 microSeconds);
+ void updateMetaDataEntriesL();
+ int doGetBufferStatusL() const;
+ qint64 doGetDurationL() const;
+ void doSetAudioEndpoint(const QString& audioEndpoint);
+
+private slots:
+ void resetVideoDisplay();
+ void suspendDirectScreenAccess();
+ void resumeDirectScreenAccess();
+
+private:
+ bool resetNativeHandles();
+ QPair<qreal, qreal> scaleFactor();
+ void startDirectScreenAccess();
+ bool stopDirectScreenAccess();
+ QString qStringFromTAudioOutputPreference(CAudioOutput::TAudioOutputPreference output) const;
+
+
+ // From MVideoPlayerUtilityObserver
+ void MvpuoOpenComplete(TInt aError);
+ void MvpuoPrepareComplete(TInt aError);
+ void MvpuoFrameReady(CFbsBitmap &aFrame, TInt aError);
+ void MvpuoPlayComplete(TInt aError);
+ void MvpuoEvent(const TMMFEvent &aEvent);
+
+private:
+ // Qwn
+ CVideoPlayerUtility *m_player;
+ TRect m_rect;
+ QVideoOutputControl::Output m_output;
+ WId m_windowId;
+ bool m_dsaActive;
+ bool m_dsaStopped;
+
+ //Reference
+ RWsSession &m_wsSession;
+ CWsScreenDevice &m_screenDevice;
+ RWindowBase *m_window;
+ QMediaService &m_service;
+ Qt::AspectRatioMode m_aspectRatioMode;
+ QSize m_originalSize;
+ CAudioOutput *m_audioOutput;
+ QString m_audioEndpoint;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60videorenderer.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60videorenderer.cpp
new file mode 100644
index 0000000..269dd43
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60videorenderer.cpp
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** 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 plugins 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 "s60videorenderer.h"
+
+#include <QtCore/qcoreevent.h>
+#include <QtGui/qapplication.h>
+
+QT_BEGIN_NAMESPACE
+
+S60VideoRenderer::S60VideoRenderer(QObject *parent)
+ : QVideoRendererControl(parent)
+{
+}
+
+S60VideoRenderer::~S60VideoRenderer()
+{
+}
+
+
+QAbstractVideoSurface *S60VideoRenderer::surface() const
+{
+ return m_surface;
+}
+
+void S60VideoRenderer::setSurface(QAbstractVideoSurface *surface)
+{
+ m_surface = surface;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60videorenderer.h b/src/plugins/mediaservices/symbian/mediaplayer/s60videorenderer.h
new file mode 100644
index 0000000..260dc8b
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60videorenderer.h
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** 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 plugins 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 S60VIDEORENDERER_H
+#define S60VIDEORENDERER_H
+
+#include <QtCore/qobject.h>
+#include <qvideorenderercontrol.h>
+
+QT_BEGIN_NAMESPACE
+
+class S60VideoRenderer : public QVideoRendererControl
+{
+ Q_OBJECT
+
+public:
+ S60VideoRenderer(QObject *parent = 0);
+ virtual ~S60VideoRenderer();
+
+ QAbstractVideoSurface *surface() const;
+ void setSurface(QAbstractVideoSurface *surface);
+
+private:
+
+ QAbstractVideoSurface *m_surface;
+};
+
+QT_END_NAMESPACE
+
+#endif // S60VIDEORENDERER_H
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60videosurface.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60videosurface.cpp
new file mode 100644
index 0000000..bfa7a13
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60videosurface.cpp
@@ -0,0 +1,478 @@
+/****************************************************************************
+**
+** 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 plugins 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/qx11info_x11.h>
+
+#include "s60videosurface.h"
+
+QT_BEGIN_NAMESPACE
+
+/*struct XvFormatRgb
+{
+ QVideoFrame::PixelFormat pixelFormat;
+ int bits_per_pixel;
+ int format;
+ int num_planes;
+
+ int depth;
+ unsigned int red_mask;
+ unsigned int green_mask;
+ unsigned int blue_mask;
+
+};*/
+/*
+bool operator ==(const XvImageFormatValues &format, const XvFormatRgb &rgb)
+{
+ return format.type == XvRGB
+ && format.bits_per_pixel == rgb.bits_per_pixel
+ && format.format == rgb.format
+ && format.num_planes == rgb.num_planes
+ && format.depth == rgb.depth
+ && format.red_mask == rgb.red_mask
+ && format.blue_mask == rgb.blue_mask;
+}
+
+static const XvFormatRgb qt_xvRgbLookup[] =
+{
+ { QVideoFrame::Format_ARGB32, 32, XvPacked, 1, 32, 0x00FF0000, 0x0000FF00, 0x000000FF },
+ { QVideoFrame::Format_RGB32 , 32, XvPacked, 1, 24, 0x00FF0000, 0x0000FF00, 0x000000FF },
+ { QVideoFrame::Format_RGB24 , 24, XvPacked, 1, 24, 0x00FF0000, 0x0000FF00, 0x000000FF },
+ { QVideoFrame::Format_RGB565, 16, XvPacked, 1, 16, 0x0000F800, 0x000007E0, 0x0000001F },
+ { QVideoFrame::Format_BGRA32, 32, XvPacked, 1, 32, 0xFF000000, 0x00FF0000, 0x0000FF00 },
+ { QVideoFrame::Format_BGR32 , 32, XvPacked, 1, 24, 0x00FF0000, 0x0000FF00, 0x000000FF },
+ { QVideoFrame::Format_BGR24 , 24, XvPacked, 1, 24, 0x00FF0000, 0x0000FF00, 0x000000FF },
+ { QVideoFrame::Format_BGR565, 16, XvPacked, 1, 16, 0x0000F800, 0x000007E0, 0x0000001F }
+};
+
+struct XvFormatYuv
+{
+ QVideoFrame::PixelFormat pixelFormat;
+ int bits_per_pixel;
+ int format;
+ int num_planes;
+
+ unsigned int y_sample_bits;
+ unsigned int u_sample_bits;
+ unsigned int v_sample_bits;
+ unsigned int horz_y_period;
+ unsigned int horz_u_period;
+ unsigned int horz_v_period;
+ unsigned int vert_y_period;
+ unsigned int vert_u_period;
+ unsigned int vert_v_period;
+ char component_order[32];
+};
+
+bool operator ==(const XvImageFormatValues &format, const XvFormatYuv &yuv)
+{
+ return format.type == XvYUV
+ && format.bits_per_pixel == yuv.bits_per_pixel
+ && format.format == yuv.format
+ && format.num_planes == yuv.num_planes
+ && format.y_sample_bits == yuv.y_sample_bits
+ && format.u_sample_bits == yuv.u_sample_bits
+ && format.v_sample_bits == yuv.v_sample_bits
+ && format.horz_y_period == yuv.horz_y_period
+ && format.horz_u_period == yuv.horz_u_period
+ && format.horz_v_period == yuv.horz_v_period
+ && format.horz_y_period == yuv.vert_y_period
+ && format.vert_u_period == yuv.vert_u_period
+ && format.vert_v_period == yuv.vert_v_period
+ && qstrncmp(format.component_order, yuv.component_order, 32) == 0;
+}
+
+static const XvFormatYuv qt_xvYuvLookup[] =
+{
+ { QVideoFrame::Format_YUV444 , 24, XvPacked, 1, 8, 8, 8, 1, 1, 1, 1, 1, 1, "YUV" },
+ { QVideoFrame::Format_YUV420P, 12, XvPlanar, 3, 8, 8, 8, 1, 2, 2, 1, 2, 2, "YUV" },
+ { QVideoFrame::Format_YV12 , 12, XvPlanar, 3, 8, 8, 8, 1, 2, 2, 1, 2, 2, "YVU" },
+ { QVideoFrame::Format_UYVY , 16, XvPacked, 1, 8, 8, 8, 1, 2, 2, 1, 1, 1, "UYVY" },
+ { QVideoFrame::Format_YUYV , 16, XvPacked, 1, 8, 8, 8, 1, 2, 2, 1, 1, 1, "YUYV" },
+ { QVideoFrame::Format_NV12 , 12, XvPlanar, 2, 8, 8, 8, 1, 2, 2, 1, 2, 2, "YUV" },
+ { QVideoFrame::Format_NV12 , 12, XvPlanar, 2, 8, 8, 8, 1, 2, 2, 1, 2, 2, "YVU" },
+ { QVideoFrame::Format_Y8 , 8 , XvPlanar, 1, 8, 0, 0, 1, 0, 0, 1, 0, 0, "Y" }
+};
+*/
+
+S60VideoSurface::S60VideoSurface(QObject *parent)
+ : QAbstractVideoSurface(parent)
+ , m_winId(0)
+ //, m_portId(0)
+ //, m_gc(0)
+ //, m_image(0)
+{
+}
+
+S60VideoSurface::~S60VideoSurface()
+{
+ /*if (m_gc)
+ XFreeGC(QX11Info::display(), m_gc);
+
+ if (m_portId != 0)
+ XvUngrabPort(QX11Info::display(), m_portId, 0);
+ */
+}
+
+WId S60VideoSurface::winId() const
+{
+ return m_winId;
+}
+
+void S60VideoSurface::setWinId(WId id)
+{
+ /*if (id == m_winId)
+ return;
+
+ if (m_image)
+ XFree(m_image);
+
+ if (m_gc) {
+ XFreeGC(QX11Info::display(), m_gc);
+ m_gc = 0;
+ }
+
+ if (m_portId != 0)
+ XvUngrabPort(QX11Info::display(), m_portId, 0);
+
+ m_supportedPixelFormats.clear();
+ m_formatIds.clear();
+
+ m_winId = id;
+
+ if (m_winId && findPort()) {
+ querySupportedFormats();
+
+ m_gc = XCreateGC(QX11Info::display(), m_winId, 0, 0);
+
+ if (m_image) {
+ m_image = 0;
+
+ if (!start(surfaceFormat()))
+ QAbstractVideoSurface::stop();
+ }
+ } else if (m_image) {
+ m_image = 0;
+
+ QAbstractVideoSurface::stop();
+ }*/
+}
+
+QRect S60VideoSurface::displayRect() const
+{
+ return m_displayRect;
+}
+
+void S60VideoSurface::setDisplayRect(const QRect &rect)
+{
+ m_displayRect = rect;
+}
+
+int S60VideoSurface::brightness() const
+{
+ //return getAttribute("XV_BRIGHTNESS", m_brightnessRange.first, m_brightnessRange.second);
+}
+
+void S60VideoSurface::setBrightness(int brightness)
+{
+ //setAttribute("XV_BRIGHTNESS", brightness, m_brightnessRange.first, m_brightnessRange.second);
+}
+
+int S60VideoSurface::contrast() const
+{
+ //return getAttribute("XV_CONTRAST", m_contrastRange.first, m_contrastRange.second);
+}
+
+void S60VideoSurface::setContrast(int contrast)
+{
+ //setAttribute("XV_CONTRAST", contrast, m_contrastRange.first, m_contrastRange.second);
+}
+
+int S60VideoSurface::hue() const
+{
+ //return getAttribute("XV_HUE", m_hueRange.first, m_hueRange.second);
+}
+
+void S60VideoSurface::setHue(int hue)
+{
+ // setAttribute("XV_HUE", hue, m_hueRange.first, m_hueRange.second);
+}
+
+int S60VideoSurface::saturation() const
+{
+ //return getAttribute("XV_SATURATION", m_saturationRange.first, m_saturationRange.second);
+}
+
+void S60VideoSurface::setSaturation(int saturation)
+{
+ //setAttribute("XV_SATURATION", saturation, m_saturationRange.first, m_saturationRange.second);
+}
+
+int S60VideoSurface::getAttribute(const char *attribute, int minimum, int maximum) const
+{
+ /*if (m_portId != 0) {
+ Display *display = QX11Info::display();
+
+ Atom atom = XInternAtom(display, attribute, True);
+
+ int value = 0;
+
+ XvGetPortAttribute(display, m_portId, atom, &value);
+
+ return redistribute(value, minimum, maximum, -100, 100);
+ } else {
+ return 0;
+ }*/
+}
+
+void S60VideoSurface::setAttribute(const char *attribute, int value, int minimum, int maximum)
+{
+ /* if (m_portId != 0) {
+ Display *display = QX11Info::display();
+
+ Atom atom = XInternAtom(display, attribute, True);
+
+ XvSetPortAttribute(
+ display, m_portId, atom, redistribute(value, -100, 100, minimum, maximum));
+ }*/
+}
+
+int S60VideoSurface::redistribute(
+ int value, int fromLower, int fromUpper, int toLower, int toUpper)
+{
+ /*return fromUpper != fromLower
+ ? ((value - fromLower) * (toUpper - toLower) / (fromUpper - fromLower)) + toLower
+ : 0;*/
+}
+
+QList<QVideoFrame::PixelFormat> S60VideoSurface::supportedPixelFormats(
+ QAbstractVideoBuffer::HandleType handleType) const
+{
+ /*return handleType == QAbstractVideoBuffer::NoHandle
+ ? m_supportedPixelFormats
+ : QList<QVideoFrame::PixelFormat>();*/
+}
+
+bool S60VideoSurface::start(const QVideoSurfaceFormat &format)
+{
+ /*if (m_image)
+ XFree(m_image);
+
+ int xvFormatId = 0;
+ for (int i = 0; i < m_supportedPixelFormats.count(); ++i) {
+ if (m_supportedPixelFormats.at(i) == format.pixelFormat()) {
+ xvFormatId = m_formatIds.at(i);
+ break;
+ }
+ }
+
+ if (xvFormatId == 0) {
+ setError(UnsupportedFormatError);
+ } else {
+ XvImage *image = XvCreateImage(
+ QX11Info::display(),
+ m_portId,
+ xvFormatId,
+ 0,
+ format.frameWidth(),
+ format.frameHeight());
+
+ if (!image) {
+ setError(ResourceError);
+ } else {
+ m_viewport = format.viewport();
+ m_image = image;
+
+ return QAbstractVideoSurface::start(format);
+ }
+ }
+
+ if (m_image) {
+ m_image = 0;
+
+ QAbstractVideoSurface::stop();
+ }
+*/
+ return false;
+}
+
+void S60VideoSurface::stop()
+{/*
+ if (m_image) {
+ XFree(m_image);
+ m_image = 0;
+
+ QAbstractVideoSurface::stop();
+ }*/
+}
+
+bool S60VideoSurface::present(const QVideoFrame &frame)
+{/*
+ if (!m_image) {
+ setError(StoppedError);
+ return false;
+ } else if (m_image->width != frame.width() || m_image->height != frame.height()) {
+ setError(IncorrectFormatError);
+ return false;
+ } else {
+ QVideoFrame frameCopy(frame);
+
+ if (!frameCopy.map(QAbstractVideoBuffer::ReadOnly)) {
+ setError(IncorrectFormatError);
+ return false;
+ } else {
+ bool presented = false;
+
+ if (m_image->data_size > frame.numBytes()) {
+ qWarning("Insufficient frame buffer size");
+ setError(IncorrectFormatError);
+ } else if (m_image->num_planes > 0 && m_image->pitches[0] != frame.bytesPerLine()) {
+ qWarning("Incompatible frame pitches");
+ setError(IncorrectFormatError);
+ } else {
+ m_image->data = reinterpret_cast<char *>(frameCopy.bits());
+
+ XvPutImage(
+ QX11Info::display(),
+ m_portId,
+ m_winId,
+ m_gc,
+ m_image,
+ m_viewport.x(),
+ m_viewport.y(),
+ m_viewport.width(),
+ m_viewport.height(),
+ m_displayRect.x(),
+ m_displayRect.y(),
+ m_displayRect.width(),
+ m_displayRect.height());
+
+ m_image->data = 0;
+
+ presented = true;
+ }
+
+ frameCopy.unmap();
+
+ return presented;
+ }
+ }*/
+}
+
+bool S60VideoSurface::findPort()
+{/*
+ unsigned int count = 0;
+ XvAdaptorInfo *adaptors = 0;
+ bool portFound = false;
+
+ if (XvQueryAdaptors(QX11Info::display(), m_winId, &count, &adaptors) == Success) {
+ for (unsigned int i = 0; i < count && !portFound; ++i) {
+ if (adaptors[i].type & XvImageMask) {
+ m_portId = adaptors[i].base_id;
+
+ for (unsigned int j = 0; j < adaptors[i].num_ports && !portFound; ++j, ++m_portId)
+ portFound = XvGrabPort(QX11Info::display(), m_portId, 0) == Success;
+ }
+ }
+ XvFreeAdaptorInfo(adaptors);
+ }
+
+ return portFound;*/
+}
+
+void S60VideoSurface::querySupportedFormats()
+{/*
+ int count = 0;
+ if (XvImageFormatValues *imageFormats = XvListImageFormats(
+ QX11Info::display(), m_portId, &count)) {
+ const int rgbCount = sizeof(qt_xvRgbLookup) / sizeof(XvFormatRgb);
+ const int yuvCount = sizeof(qt_xvYuvLookup) / sizeof(XvFormatYuv);
+
+ for (int i = 0; i < count; ++i) {
+ switch (imageFormats[i].type) {
+ case XvRGB:
+ for (int j = 0; j < rgbCount; ++j) {
+ if (imageFormats[i] == qt_xvRgbLookup[j]) {
+ m_supportedPixelFormats.append(qt_xvRgbLookup[j].pixelFormat);
+ m_formatIds.append(imageFormats[i].id);
+ break;
+ }
+ }
+ break;
+ case XvYUV:
+ for (int j = 0; j < yuvCount; ++j) {
+ if (imageFormats[i] == qt_xvYuvLookup[j]) {
+ m_supportedPixelFormats.append(qt_xvYuvLookup[j].pixelFormat);
+ m_formatIds.append(imageFormats[i].id);
+ break;
+ }
+ }
+ break;
+ }
+ }
+ XFree(imageFormats);
+ }
+
+ m_brightnessRange = qMakePair(0, 0);
+ m_contrastRange = qMakePair(0, 0);
+ m_hueRange = qMakePair(0, 0);
+ m_saturationRange = qMakePair(0, 0);
+
+ if (XvAttribute *attributes = XvQueryPortAttributes(QX11Info::display(), m_portId, &count)) {
+ for (int i = 0; i < count; ++i) {
+ if (qstrcmp(attributes[i].name, "XV_BRIGHTNESS") == 0)
+ m_brightnessRange = qMakePair(attributes[i].min_value, attributes[i].max_value);
+ else if (qstrcmp(attributes[i].name, "XV_CONTRAST") == 0)
+ m_contrastRange = qMakePair(attributes[i].min_value, attributes[i].max_value);
+ else if (qstrcmp(attributes[i].name, "XV_HUE") == 0)
+ m_hueRange = qMakePair(attributes[i].min_value, attributes[i].max_value);
+ else if (qstrcmp(attributes[i].name, "XV_SATURATION") == 0)
+ m_saturationRange = qMakePair(attributes[i].min_value, attributes[i].max_value);
+ }
+
+ XFree(attributes);
+ }*/
+}
+
+bool S60VideoSurface::isFormatSupported(const QVideoSurfaceFormat &format) const
+{
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60videosurface.h b/src/plugins/mediaservices/symbian/mediaplayer/s60videosurface.h
new file mode 100644
index 0000000..836e52f
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60videosurface.h
@@ -0,0 +1,112 @@
+/****************************************************************************
+**
+** 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 plugins 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 S60VIDEOSURFACE_H
+#define S60VIDEOSURFACE_H
+
+#include <QtGui/qwidget.h>
+#include <QtMultimedia/qabstractvideosurface.h>
+
+QT_BEGIN_NAMESPACE
+
+class QVideoSurfaceFormat;
+
+class S60VideoSurface : public QAbstractVideoSurface
+{
+ Q_OBJECT
+public:
+ S60VideoSurface(QObject *parent = 0);
+ ~S60VideoSurface();
+
+ WId winId() const;
+ void setWinId(WId id);
+
+ QRect displayRect() const;
+ void setDisplayRect(const QRect &rect);
+
+ int brightness() const;
+ void setBrightness(int brightness);
+
+ int contrast() const;
+ void setContrast(int contrast);
+
+ int hue() const;
+ void setHue(int hue);
+
+ int saturation() const;
+ void setSaturation(int saturation);
+
+ QList<QVideoFrame::PixelFormat> supportedPixelFormats(
+ QAbstractVideoBuffer::HandleType handleType = QAbstractVideoBuffer::NoHandle) const;
+
+ bool isFormatSupported(const QVideoSurfaceFormat &format) const;
+
+ bool start(const QVideoSurfaceFormat &format);
+ void stop();
+
+ bool present(const QVideoFrame &frame);
+
+private:
+ WId m_winId;
+ //XvPortID m_portId;
+ //GC m_gc;
+ //XvImage *m_image;
+ QList<QVideoFrame::PixelFormat> m_supportedPixelFormats;
+ QVector<int> m_formatIds;
+ QRect m_viewport;
+ QRect m_displayRect;
+ QPair<int, int> m_brightnessRange;
+ QPair<int, int> m_contrastRange;
+ QPair<int, int> m_hueRange;
+ QPair<int, int> m_saturationRange;
+
+ bool findPort();
+ void querySupportedFormats();
+
+ int getAttribute(const char *attribute, int minimum, int maximum) const;
+ void setAttribute(const char *attribute, int value, int minimum, int maximum);
+
+ static int redistribute(int value, int fromLower, int fromUpper, int toLower, int toUpper);
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60videowidget.cpp b/src/plugins/mediaservices/symbian/mediaplayer/s60videowidget.cpp
new file mode 100644
index 0000000..84000d5
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60videowidget.cpp
@@ -0,0 +1,208 @@
+/****************************************************************************
+**
+** 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 plugins 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 "s60videowidget.h"
+#include <QtGui/private/qwidget_p.h>
+#include <QEvent>
+#include <coemain.h> // For CCoeEnv
+
+QT_BEGIN_NAMESPACE
+
+QBlackWidget::QBlackWidget(QWidget *parent)
+ : QWidget(parent)
+{
+ setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ setAttribute(Qt::WA_OpaquePaintEvent, true);
+ setAttribute(Qt::WA_NoSystemBackground, true);
+ setAutoFillBackground(false);
+ setPalette(QPalette(Qt::black));
+#if QT_VERSION >= 0x040601 && !defined(__WINSCW__)
+ qt_widget_private(this)->extraData()->nativePaintMode = QWExtra::ZeroFill;
+ qt_widget_private(this)->extraData()->receiveNativePaintEvents = true;
+#endif
+}
+
+QBlackWidget::~QBlackWidget()
+{
+}
+
+void QBlackWidget::beginNativePaintEvent(const QRect& /*controlRect*/)
+{
+ emit beginVideoWindowNativePaint();
+}
+
+void QBlackWidget::endNativePaintEvent(const QRect& /*controlRect*/)
+{
+ CCoeEnv::Static()->WsSession().Flush();
+ emit endVideoWindowNativePaint();
+}
+
+void QBlackWidget::paintEvent(QPaintEvent *event)
+{
+ Q_UNUSED(event);
+ // Do nothing
+}
+
+S60VideoWidgetControl::S60VideoWidgetControl(QObject *parent)
+ : QVideoWidgetControl(parent)
+ , m_widget(0)
+ , m_aspectRatioMode(Qt::KeepAspectRatio)
+{
+ m_widget = new QBlackWidget();
+ connect(m_widget, SIGNAL(beginVideoWindowNativePaint()), this, SIGNAL(beginVideoWindowNativePaint()));
+ connect(m_widget, SIGNAL(endVideoWindowNativePaint()), this, SIGNAL(endVideoWindowNativePaint()));
+ m_widget->installEventFilter(this);
+ m_widget->winId();
+}
+
+S60VideoWidgetControl::~S60VideoWidgetControl()
+{
+ delete m_widget;
+}
+
+QWidget *S60VideoWidgetControl::videoWidget()
+{
+ return m_widget;
+}
+
+Qt::AspectRatioMode S60VideoWidgetControl::aspectRatioMode() const
+{
+ return m_aspectRatioMode;
+}
+
+void S60VideoWidgetControl::setAspectRatioMode(Qt::AspectRatioMode ratio)
+{
+ if (m_aspectRatioMode == ratio)
+ return;
+
+ m_aspectRatioMode = ratio;
+ emit widgetUpdated();
+}
+
+bool S60VideoWidgetControl::isFullScreen() const
+{
+ return m_widget->isFullScreen();
+}
+
+void S60VideoWidgetControl::setFullScreen(bool fullScreen)
+{
+ emit fullScreenChanged(fullScreen);
+}
+
+int S60VideoWidgetControl::brightness() const
+{
+ return 0;
+}
+
+void S60VideoWidgetControl::setBrightness(int brightness)
+{
+ Q_UNUSED(brightness);
+}
+
+int S60VideoWidgetControl::contrast() const
+{
+ return 0;
+}
+
+void S60VideoWidgetControl::setContrast(int contrast)
+{
+ Q_UNUSED(contrast);
+}
+
+int S60VideoWidgetControl::hue() const
+{
+ return 0;
+}
+
+void S60VideoWidgetControl::setHue(int hue)
+{
+ Q_UNUSED(hue);
+}
+
+int S60VideoWidgetControl::saturation() const
+{
+ return 0;
+}
+
+void S60VideoWidgetControl::setSaturation(int saturation)
+{
+ Q_UNUSED(saturation);
+}
+
+bool S60VideoWidgetControl::eventFilter(QObject *object, QEvent *e)
+{
+ if (object == m_widget) {
+ if ( e->type() == QEvent::Resize
+ || e->type() == QEvent::Move
+ || e->type() == QEvent::WinIdChange
+ || e->type() == QEvent::ParentChange
+ || e->type() == QEvent::Show)
+ emit widgetUpdated();
+ }
+ return false;
+}
+
+WId S60VideoWidgetControl::videoWidgetWId()
+{
+ if (m_widget->internalWinId())
+ return m_widget->internalWinId();
+
+ if (m_widget->effectiveWinId())
+ return m_widget->effectiveWinId();
+
+ return NULL;
+}
+
+void S60VideoWidgetControl::videoStateChanged(QMediaPlayer::State state)
+{
+ if (state == QMediaPlayer::StoppedState) {
+#if QT_VERSION <= 0x040600 && !defined(FF_QT)
+ qt_widget_private(m_widget)->extraData()->disableBlit = false;
+#endif
+ m_widget->repaint();
+ } else if (state == QMediaPlayer::PlayingState) {
+#if QT_VERSION <= 0x040600 && !defined(FF_QT)
+ qt_widget_private(m_widget)->extraData()->disableBlit = true;
+#endif
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/mediaservices/symbian/mediaplayer/s60videowidget.h b/src/plugins/mediaservices/symbian/mediaplayer/s60videowidget.h
new file mode 100644
index 0000000..28a1455
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/mediaplayer/s60videowidget.h
@@ -0,0 +1,115 @@
+/****************************************************************************
+**
+** 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 plugins 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 S60VIDEOWIDGET_H
+#define S60VIDEOWIDGET_H
+
+#include <qvideowidgetcontrol.h>
+#include <qmediaplayer.h>
+
+QT_BEGIN_NAMESPACE
+
+class QBlackWidget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ QBlackWidget(QWidget *parent = 0);
+ virtual ~QBlackWidget();
+
+signals:
+ void beginVideoWindowNativePaint();
+ void endVideoWindowNativePaint();
+
+public slots:
+ void beginNativePaintEvent(const QRect&);
+ void endNativePaintEvent(const QRect&);
+
+protected:
+ void paintEvent(QPaintEvent *event);
+};
+
+class S60VideoWidgetControl : public QVideoWidgetControl
+{
+ Q_OBJECT
+
+public:
+ S60VideoWidgetControl(QObject *parent = 0);
+ virtual ~S60VideoWidgetControl();
+
+ // from QVideoWidgetControl
+ QWidget *videoWidget();
+ Qt::AspectRatioMode aspectRatioMode() const;
+ void setAspectRatioMode(Qt::AspectRatioMode ratio);
+ bool isFullScreen() const;
+ void setFullScreen(bool fullScreen);
+ int brightness() const;
+ void setBrightness(int brightness);
+ int contrast() const;
+ void setContrast(int contrast);
+ int hue() const;
+ void setHue(int hue);
+ int saturation() const;
+ void setSaturation(int saturation);
+
+ // from QObject
+ bool eventFilter(QObject *object, QEvent *event);
+
+ //new methods
+ WId videoWidgetWId();
+
+signals:
+ void widgetUpdated();
+ void beginVideoWindowNativePaint();
+ void endVideoWindowNativePaint();
+
+private slots:
+ void videoStateChanged(QMediaPlayer::State state);
+
+private:
+ QBlackWidget *m_widget;
+ Qt::AspectRatioMode m_aspectRatioMode;
+};
+
+QT_END_NAMESPACE
+
+
+#endif // S60VIDEOWIDGET_H
diff --git a/src/plugins/mediaservices/symbian/s60mediaserviceplugin.cpp b/src/plugins/mediaservices/symbian/s60mediaserviceplugin.cpp
new file mode 100644
index 0000000..1185583
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/s60mediaserviceplugin.cpp
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** 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 plugins 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 <QtCore/qstring.h>
+#include <QtCore/qdebug.h>
+
+#include "s60mediaserviceplugin.h"
+#ifdef QMEDIA_MMF_RADIO
+#include "s60radiotunerservice.h"
+#endif
+#ifdef QMEDIA_MMF_PLAYER
+#include "s60mediaplayerservice.h"
+#endif
+#ifdef QMEDIA_MMF_CAPTURE
+#include "s60audiocaptureservice.h"
+#endif
+
+QT_BEGIN_NAMESPACE
+
+QStringList S60MediaServicePlugin::keys() const
+{
+ QStringList list;
+#ifdef QMEDIA_MMF_RADIO
+ list << QLatin1String(Q_MEDIASERVICE_RADIO);
+#endif
+
+#ifdef QMEDIA_MMF_PLAYER
+ list << QLatin1String(Q_MEDIASERVICE_MEDIAPLAYER);
+#endif
+#ifdef QMEDIA_MMF_CAPTURE
+ list << QLatin1String(Q_MEDIASERVICE_AUDIOSOURCE);
+#endif
+ return list;
+}
+
+QMediaService* S60MediaServicePlugin::create(QString const& key)
+{
+#ifdef QMEDIA_MMF_PLAYER
+ if (key == QLatin1String(Q_MEDIASERVICE_MEDIAPLAYER))
+ return new S60MediaPlayerService;
+#endif
+#ifdef QMEDIA_MMF_CAPTURE
+ if (key == QLatin1String(Q_MEDIASERVICE_AUDIOSOURCE))
+ return new S60AudioCaptureService;
+#endif
+#ifdef QMEDIA_MMF_RADIO
+ if (key == QLatin1String(Q_MEDIASERVICE_RADIO))
+ return new S60RadioTunerService;
+#endif
+
+ return 0;
+}
+
+void S60MediaServicePlugin::release(QMediaService *service)
+{
+ delete service;
+}
+
+QT_END_NAMESPACE
+
+Q_EXPORT_PLUGIN2(qmmfengine, S60MediaServicePlugin);
+
diff --git a/src/plugins/mediaservices/symbian/s60mediaserviceplugin.h b/src/plugins/mediaservices/symbian/s60mediaserviceplugin.h
new file mode 100644
index 0000000..be2e05d
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/s60mediaserviceplugin.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 plugins 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 S60SERVICEPLUGIN_H
+#define S60SERVICEPLUGIN_H
+
+#include <QtCore/qobject.h>
+#include <qmediaservice.h>
+#include <qmediaserviceproviderplugin.h>
+
+QT_BEGIN_NAMESPACE
+
+class S60MediaServicePlugin : public QMediaServiceProviderPlugin
+{
+ Q_OBJECT
+public:
+
+ QStringList keys() const;
+ QMediaService* create(QString const& key);
+ void release(QMediaService *service);
+};
+
+QT_END_NAMESPACE
+
+#endif // S60SERVICEPLUGIN_H
diff --git a/src/plugins/mediaservices/symbian/s60videooutputcontrol.cpp b/src/plugins/mediaservices/symbian/s60videooutputcontrol.cpp
new file mode 100644
index 0000000..da07a7d
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/s60videooutputcontrol.cpp
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** 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 plugins 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 "s60videooutputcontrol.h"
+
+QT_BEGIN_NAMESPACE
+
+S60VideoOutputControl::S60VideoOutputControl(QObject *parent)
+ : QVideoOutputControl(parent)
+ , m_output(NoOutput)
+{
+}
+
+QList<QVideoOutputControl::Output> S60VideoOutputControl::availableOutputs() const
+{
+ return m_outputs;
+}
+
+void S60VideoOutputControl::setAvailableOutputs(const QList<Output> &outputs)
+{
+ emit availableOutputsChanged(m_outputs = outputs);
+}
+
+QVideoOutputControl::Output S60VideoOutputControl::output() const
+{
+ return m_output;
+}
+
+void S60VideoOutputControl::setOutput(Output output)
+{
+ if (!m_outputs.contains(output))
+ output = NoOutput;
+
+ if (m_output != output)
+ emit outputChanged(m_output = output);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/mediaservices/symbian/s60videooutputcontrol.h b/src/plugins/mediaservices/symbian/s60videooutputcontrol.h
new file mode 100644
index 0000000..dbad889
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/s60videooutputcontrol.h
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** 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 plugins 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 S60VIDEOOUTPUTCONTROL_H
+#define S60VIDEOOUTPUTCONTROL_H
+
+#include <QObject>
+#include <qvideooutputcontrol.h>
+
+QT_BEGIN_NAMESPACE
+
+class S60VideoOutputControl : public QVideoOutputControl
+{
+ Q_OBJECT
+public:
+ S60VideoOutputControl(QObject *parent = 0);
+
+ QList<Output> availableOutputs() const;
+ void setAvailableOutputs(const QList<Output> &outputs);
+
+ Output output() const;
+ void setOutput(Output output);
+
+Q_SIGNALS:
+ void outputChanged(QVideoOutputControl::Output output);
+
+private:
+ QList<Output> m_outputs;
+ Output m_output;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/mediaservices/symbian/symbian.pro b/src/plugins/mediaservices/symbian/symbian.pro
new file mode 100644
index 0000000..f76858f
--- /dev/null
+++ b/src/plugins/mediaservices/symbian/symbian.pro
@@ -0,0 +1,27 @@
+TARGET = qmmfengine
+QT += multimedia mediaservices
+
+load(data_caging_paths)
+
+include (../../qpluginbase.pri)
+include(mediaplayer/mediaplayer.pri)
+
+HEADERS += s60mediaserviceplugin.h \
+ s60videooutputcontrol.h
+
+SOURCES += s60mediaserviceplugin.cpp \
+ s60videooutputcontrol.cpp
+
+contains(S60_VERSION, 3.2)|contains(S60_VERSION, 3.1) {
+ DEFINES += PRE_S60_50_PLATFORM
+}
+
+INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+symbian-abld:INCLUDEPATH += $$QT_BUILD_TREE/include/QtWidget/private
+
+# This is needed for having the .qtplugin file properly created on Symbian.
+QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/mediaservices
+target.path += $$[QT_INSTALL_PLUGINS]/mediaservices
+INSTALLS += target
+
+TARGET.UID3=0x20021318
diff --git a/src/qt3support/widgets/q3spinwidget.cpp b/src/qt3support/widgets/q3spinwidget.cpp
index 3dc36c5..3bfad06 100644
--- a/src/qt3support/widgets/q3spinwidget.cpp
+++ b/src/qt3support/widgets/q3spinwidget.cpp
@@ -340,11 +340,13 @@ void Q3SpinWidget::paintEvent(QPaintEvent *)
QPainter p(this);
QStyleOptionSpinBox opt = getStyleOption(this);
- if (d->theButton & 1)
+ if (d->theButton & 1) {
opt.activeSubControls = QStyle::SC_SpinBoxDown;
- else if (d->theButton & 2)
+ opt.state |= QStyle::State_Sunken;
+ } else if (d->theButton & 2) {
opt.activeSubControls = QStyle::SC_SpinBoxUp;
- else
+ opt.state |= QStyle::State_Sunken;
+ } else
opt.activeSubControls = QStyle::SC_None;
opt.rect = style()->subControlRect(QStyle::CC_SpinBox, &opt, QStyle::SC_SpinBoxFrame, this);
opt.subControls = QStyle::SC_All;
diff --git a/src/s60installs/bwins/QtCoreu.def b/src/s60installs/bwins/QtCoreu.def
index d0a446b..e309e25 100644
--- a/src/s60installs/bwins/QtCoreu.def
+++ b/src/s60installs/bwins/QtCoreu.def
@@ -3122,7 +3122,7 @@ EXPORTS
?reset@QIODevice@@UAE_NXZ @ 3121 NONAME ; bool QIODevice::reset(void)
?reset@QMetaProperty@@QBE_NPAVQObject@@@Z @ 3122 NONAME ; bool QMetaProperty::reset(class QObject *) const
?reset@QTextStream@@QAEXXZ @ 3123 NONAME ; void QTextStream::reset(void)
- ?resetCurrentSender@QObjectPrivate@@SAXPAVQObject@@PAUSender@1@1@Z @ 3124 NONAME ; void QObjectPrivate::resetCurrentSender(class QObject *, struct QObjectPrivate::Sender *, struct QObjectPrivate::Sender *)
+ ?resetCurrentSender@QObjectPrivate@@SAXPAVQObject@@PAUSender@1@1@Z @ 3124 NONAME ABSENT ; void QObjectPrivate::resetCurrentSender(class QObject *, struct QObjectPrivate::Sender *, struct QObjectPrivate::Sender *)
?resetDeleteWatch@QObjectPrivate@@SAXPAV1@PAHH@Z @ 3125 NONAME ; void QObjectPrivate::resetDeleteWatch(class QObjectPrivate *, int *, int)
?resetStatus@QDataStream@@QAEXXZ @ 3126 NONAME ; void QDataStream::resetStatus(void)
?resetStatus@QTextStream@@QAEXXZ @ 3127 NONAME ; void QTextStream::resetStatus(void)
@@ -3281,7 +3281,7 @@ EXPORTS
?setCoords@QRectF@@QAEXMMMM@Z @ 3280 NONAME ; void QRectF::setCoords(float, float, float, float)
?setCurrent@QDir@@SA_NABVQString@@@Z @ 3281 NONAME ; bool QDir::setCurrent(class QString const &)
?setCurrentPath@QFSFileEngine@@SA_NABVQString@@@Z @ 3282 NONAME ; bool QFSFileEngine::setCurrentPath(class QString const &)
- ?setCurrentSender@QObjectPrivate@@SAPAUSender@1@PAVQObject@@PAU21@@Z @ 3283 NONAME ; struct QObjectPrivate::Sender * QObjectPrivate::setCurrentSender(class QObject *, struct QObjectPrivate::Sender *)
+ ?setCurrentSender@QObjectPrivate@@SAPAUSender@1@PAVQObject@@PAU21@@Z @ 3283 NONAME ABSENT ; struct QObjectPrivate::Sender * QObjectPrivate::setCurrentSender(class QObject *, struct QObjectPrivate::Sender *)
?setCurrentTime@QAbstractAnimation@@QAEXH@Z @ 3284 NONAME ; void QAbstractAnimation::setCurrentTime(int)
?setCurrentTime@QTimeLine@@QAEXH@Z @ 3285 NONAME ; void QTimeLine::setCurrentTime(int)
?setCurveShape@QTimeLine@@QAEXW4CurveShape@1@@Z @ 3286 NONAME ; void QTimeLine::setCurveShape(enum QTimeLine::CurveShape)
diff --git a/src/s60installs/bwins/QtDeclarativeu.def b/src/s60installs/bwins/QtDeclarativeu.def
index ec25b5c..5f05f08 100644
--- a/src/s60installs/bwins/QtDeclarativeu.def
+++ b/src/s60installs/bwins/QtDeclarativeu.def
@@ -3950,7 +3950,7 @@ EXPORTS
?qmlInfo@@YA?AVQDeclarativeInfo@@PBVQObject@@ABVQDeclarativeError@@@Z @ 3949 NONAME ; class QDeclarativeInfo qmlInfo(class QObject const *, class QDeclarativeError const &)
?error@QDeclarativeCustomParser@@IAEXABVQString@@@Z @ 3950 NONAME ; void QDeclarativeCustomParser::error(class QString const &)
?activeChanged@QDeclarativeDrag@@IAEXXZ @ 3951 NONAME ; void QDeclarativeDrag::activeChanged(void)
- ??0QDeclarativeInfo@@AAE@PAUQDeclarativeInfoPrivate@@@Z @ 3952 NONAME ; QDeclarativeInfo::QDeclarativeInfo(struct QDeclarativeInfoPrivate *)
+ ??0QDeclarativeInfo@@AAE@PAUQDeclarativeInfoPrivate@@@Z @ 3952 NONAME ABSENT ; QDeclarativeInfo::QDeclarativeInfo(struct QDeclarativeInfoPrivate *)
?warnings@QDeclarativeEngine@@IAEXABV?$QList@VQDeclarativeError@@@@@Z @ 3953 NONAME ; void QDeclarativeEngine::warnings(class QList<class QDeclarativeError> const &)
?parentModelIndex@QDeclarativeVisualDataModel@@QBE?AVQVariant@@XZ @ 3954 NONAME ; class QVariant QDeclarativeVisualDataModel::parentModelIndex(void) const
?usedAnchors@QDeclarativeAnchors@@QBE?AV?$QFlags@W4Anchor@QDeclarativeAnchors@@@@XZ @ 3955 NONAME ; class QFlags<enum QDeclarativeAnchors::Anchor> QDeclarativeAnchors::usedAnchors(void) const
diff --git a/src/s60installs/eabi/QtCoreu.def b/src/s60installs/eabi/QtCoreu.def
index daa9dc6..92a4020 100644
--- a/src/s60installs/eabi/QtCoreu.def
+++ b/src/s60installs/eabi/QtCoreu.def
@@ -3697,4 +3697,5 @@ EXPORTS
_ZN16QDeclarativeData9destroyedE @ 3696 NONAME DATA 4 ABSENT
_ZN24QAbstractDeclarativeData13parentChangedE @ 3697 NONAME DATA 4
_ZN24QAbstractDeclarativeData9destroyedE @ 3698 NONAME DATA 4
+ _ZN23QEventDispatcherSymbian12selectThreadEv @ 3699 NONAME
diff --git a/src/s60installs/eabi/QtDeclarativeu.def b/src/s60installs/eabi/QtDeclarativeu.def
index 953d0a1..ad12166 100644
--- a/src/s60installs/eabi/QtDeclarativeu.def
+++ b/src/s60installs/eabi/QtDeclarativeu.def
@@ -3496,4 +3496,44 @@ EXPORTS
_ZTIN14QDeclarativeJS3AST18FunctionExpressionE @ 3495 NONAME ABSENT
_ZTIN14QDeclarativeJS3AST4NodeE @ 3496 NONAME ABSENT
_ZTIN14QDeclarativeJS3AST9StatementE @ 3497 NONAME ABSENT
+ _Z7qmlInfoPK7QObjectRK17QDeclarativeError @ 3498 NONAME
+ _Z7qmlInfoPK7QObjectRK5QListI17QDeclarativeErrorE @ 3499 NONAME
+ _ZN16QDeclarativeDrag13activeChangedEv @ 3500 NONAME
+ _ZN16QDeclarativeDrag9setActiveEb @ 3501 NONAME
+ _ZN16QDeclarativeInfoC1EP23QDeclarativeInfoPrivate @ 3502 NONAME
+ _ZN16QDeclarativeInfoC1ERKS_ @ 3503 NONAME
+ _ZN16QDeclarativeInfoC2EP23QDeclarativeInfoPrivate @ 3504 NONAME
+ _ZN16QDeclarativeInfoC2ERKS_ @ 3505 NONAME
+ _ZN16QDeclarativeItem10forceFocusEv @ 3506 NONAME
+ _ZN16QDeclarativeView11eventFilterEP7QObjectP6QEvent @ 3507 NONAME
+ _ZN18QDeclarativeEngine32setOutputWarningsToStandardErrorEb @ 3508 NONAME
+ _ZN18QDeclarativeEngine8warningsERK5QListI17QDeclarativeErrorE @ 3509 NONAME
+ _ZN18QDeclarativeLoader20resetSourceComponentEv @ 3510 NONAME
+ _ZN20QDeclarativeFlipable15retransformBackEv @ 3511 NONAME
+ _ZN20QDeclarativeGridView11animStoppedEv @ 3512 NONAME
+ _ZN21QDeclarativeFlickable17setBoundsBehaviorENS_14BoundsBehaviorE @ 3513 NONAME
+ _ZN21QDeclarativeFlickable21boundsBehaviorChangedEv @ 3514 NONAME
+ _ZN21QDeclarativeMouseArea15geometryChangedERK6QRectFS2_ @ 3515 NONAME
+ _ZN21QDeclarativeMouseArea20mousePositionChangedEP22QDeclarativeMouseEvent @ 3516 NONAME
+ _ZN22QDeclarativeExpression8evaluateEPb @ 3517 NONAME
+ _ZN23QDeclarativeItemPrivate16transformChangedEv @ 3518 NONAME
+ _ZN24QDeclarativeCustomParser5errorERK7QString @ 3519 NONAME
+ _ZN24QDeclarativeDebugService18hasDebuggingClientEv @ 3520 NONAME
+ _ZN24QDeclarativeParentChange7executeEN23QDeclarativeActionEvent6ReasonE @ 3521 NONAME
+ _ZN24QDeclarativeParentChange7reverseEN23QDeclarativeActionEvent6ReasonE @ 3522 NONAME
+ _ZN25QDeclarativeAnchorChanges7executeEN23QDeclarativeActionEvent6ReasonE @ 3523 NONAME
+ _ZN25QDeclarativeAnchorChanges7reverseEN23QDeclarativeActionEvent6ReasonE @ 3524 NONAME
+ _ZN27QDeclarativeVisualDataModel12setRootIndexERK8QVariant @ 3525 NONAME
+ _ZN29QDeclarativeStateChangeScript7executeEN23QDeclarativeActionEvent6ReasonE @ 3526 NONAME
+ _ZNK16QDeclarativeDrag6activeEv @ 3527 NONAME
+ _ZNK16QDeclarativeType16noCreationReasonEv @ 3528 NONAME
+ _ZNK18QDeclarativeEngine29outputWarningsToStandardErrorEv @ 3529 NONAME
+ _ZNK21QDeclarativeFlickable14boundsBehaviorEv @ 3530 NONAME
+ _ZNK27QDeclarativeVisualDataModel10modelIndexEi @ 3531 NONAME
+ _ZNK27QDeclarativeVisualDataModel16parentModelIndexEv @ 3532 NONAME
+ _ZThn8_N24QDeclarativeParentChange7executeEN23QDeclarativeActionEvent6ReasonE @ 3533 NONAME
+ _ZThn8_N24QDeclarativeParentChange7reverseEN23QDeclarativeActionEvent6ReasonE @ 3534 NONAME
+ _ZThn8_N25QDeclarativeAnchorChanges7executeEN23QDeclarativeActionEvent6ReasonE @ 3535 NONAME
+ _ZThn8_N25QDeclarativeAnchorChanges7reverseEN23QDeclarativeActionEvent6ReasonE @ 3536 NONAME
+ _ZThn8_N29QDeclarativeStateChangeScript7executeEN23QDeclarativeActionEvent6ReasonE @ 3537 NONAME
diff --git a/src/s60installs/eabi/QtNetworku.def b/src/s60installs/eabi/QtNetworku.def
index 2796778..2566415 100644
--- a/src/s60installs/eabi/QtNetworku.def
+++ b/src/s60installs/eabi/QtNetworku.def
@@ -1166,4 +1166,5 @@ EXPORTS
_ZNK13QBearerEngine15requiresPollingEv @ 1165 NONAME
_ZNK13QBearerEngine19configurationsInUseEv @ 1166 NONAME
_ZNK21QNetworkAccessManager17networkAccessibleEv @ 1167 NONAME
+ _ZN35QNetworkConfigurationManagerPrivate12capabilitiesEv @ 1168 NONAME
diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro
index ad196a8..dfd2694 100644
--- a/src/s60installs/s60installs.pro
+++ b/src/s60installs/s60installs.pro
@@ -151,9 +151,18 @@ symbian: {
graphicssystems_plugins.sources += $$QT_BUILD_TREE/plugins/graphicssystems/qvggraphicssystem$${QT_LIBINFIX}.dll
}
- contains(QT_CONFIG, multimedia) {
+ contains(QT_CONFIG, multimedia):contains(QT_CONFIG, mediaservices):contains(QT_CONFIG, media-backend) {
qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtMultimedia$${QT_LIBINFIX}.dll
+ }
+
+ contains(QT_CONFIG, media-backend) {
qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtMediaServices$${QT_LIBINFIX}.dll
+
+ mediaservices_plugins.path = c:$$QT_PLUGINS_BASE_DIR/mediaservices
+ mediaservices_plugins.sources += $$QT_BUILD_TREE/plugins/mediaservices/qmmfengine$${QT_LIBINFIX}.dll
+
+ DEPLOYMENT += mediaservices_plugins
+
}
BLD_INF_RULES.prj_exports += "qt.iby $$CORE_MW_LAYER_IBY_EXPORT_PATH(qt.iby)"
diff --git a/src/script/bridge/qscriptqobject_p.h b/src/script/bridge/qscriptqobject_p.h
index b82bcb7..412a784 100644
--- a/src/script/bridge/qscriptqobject_p.h
+++ b/src/script/bridge/qscriptqobject_p.h
@@ -303,7 +303,7 @@ public:
}
protected:
- static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | JSC::OverridesMarkChildren | JSC::OverridesGetPropertyNames | JSObject::StructureFlags;
+ static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | JSC::OverridesMarkChildren | JSC::OverridesGetPropertyNames | JSC::ImplementsHasInstance | JSObject::StructureFlags;
Data *data;
};
diff --git a/src/sql/drivers/sqlite/qsql_sqlite.cpp b/src/sql/drivers/sqlite/qsql_sqlite.cpp
index 24dcad9..4344af4 100644
--- a/src/sql/drivers/sqlite/qsql_sqlite.cpp
+++ b/src/sql/drivers/sqlite/qsql_sqlite.cpp
@@ -259,6 +259,7 @@ bool QSQLiteResultPrivate::fetchNext(QSqlCachedResult::ValueCache &values, int i
q->setAt(QSql::AfterLastRow);
sqlite3_reset(stmt);
return false;
+ case SQLITE_CONSTRAINT:
case SQLITE_ERROR:
// SQLITE_ERROR is a generic error code and we must call sqlite3_reset()
// to get the specific error message.
diff --git a/src/sql/kernel/qsqldatabase.cpp b/src/sql/kernel/qsqldatabase.cpp
index 1416ee3..76bc2b0 100644
--- a/src/sql/kernel/qsqldatabase.cpp
+++ b/src/sql/kernel/qsqldatabase.cpp
@@ -98,7 +98,7 @@
QT_BEGIN_NAMESPACE
-#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
(QSqlDriverFactoryInterface_iid,
QLatin1String("/sqldrivers")))
@@ -576,7 +576,7 @@ QStringList QSqlDatabase::drivers()
list << QLatin1String("QIBASE");
#endif
-#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
if (QFactoryLoader *fl = loader()) {
QStringList keys = fl->keys();
for (QStringList::const_iterator i = keys.constBegin(); i != keys.constEnd(); ++i) {
@@ -774,7 +774,7 @@ void QSqlDatabasePrivate::init(const QString &type)
}
}
-#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS)
+#ifndef QT_NO_LIBRARY
if (!driver && loader()) {
if (QSqlDriverFactoryInterface *factory = qobject_cast<QSqlDriverFactoryInterface*>(loader()->instance(type)))
driver = factory->create(type);
diff --git a/src/testlib/qplaintestlogger.cpp b/src/testlib/qplaintestlogger.cpp
index 46431a8..1a0e737 100644
--- a/src/testlib/qplaintestlogger.cpp
+++ b/src/testlib/qplaintestlogger.cpp
@@ -182,6 +182,7 @@ namespace QTest {
hbuffer->Des().Copy(ptr.Mid(i, size));
RDebug::Print(format, hbuffer);
}
+ delete hbuffer;
}
else {
// fast, no allocations, but truncates silently
diff --git a/src/testlib/qtestlogger.cpp b/src/testlib/qtestlogger.cpp
index 6c76388..f0be6be 100644
--- a/src/testlib/qtestlogger.cpp
+++ b/src/testlib/qtestlogger.cpp
@@ -211,10 +211,7 @@ void QTestLogger::addIncident(IncidentTypes type, const char *description,
QTest::qt_snprintf(buf, sizeof(buf), "%i", line);
failureElement->addAttribute(QTest::AI_Line, buf);
failureElement->addAttribute(QTest::AI_Description, description);
- const char* tag = QTestResult::currentDataTag();
- if (tag) {
- failureElement->addAttribute(QTest::AI_Tag, tag);
- }
+ addTag(failureElement);
currentLogElement->addLogElement(failureElement);
}
@@ -279,6 +276,27 @@ void QTestLogger::addBenchmarkResult(const QBenchmarkResult &result)
currentLogElement->addLogElement(benchmarkElement);
}
+void QTestLogger::addTag(QTestElement* element)
+{
+ const char *tag = QTestResult::currentDataTag();
+ const char *gtag = QTestResult::currentGlobalDataTag();
+ const char *filler = (tag && gtag) ? ":" : "";
+ if ((!tag || !tag[0]) && (!gtag || !gtag[0])) {
+ return;
+ }
+
+ if (!tag) {
+ tag = "";
+ }
+ if (!gtag) {
+ gtag = "";
+ }
+
+ QTestCharBuffer buf;
+ QTest::qt_asprintf(&buf, "%s%s%s", gtag, filler, tag);
+ element->addAttribute(QTest::AI_Tag, buf.constData());
+}
+
void QTestLogger::addMessage(MessageTypes type, const char *message, const char *file, int line)
{
QTestElement *errorElement = new QTestElement(QTest::LET_Error);
@@ -299,7 +317,7 @@ void QTestLogger::addMessage(MessageTypes type, const char *message, const char
break;
case QAbstractTestLogger::QWarning:
++qwarnCounter;
- typeBuf = "qwarning";
+ typeBuf = "qwarn";
break;
case QAbstractTestLogger::QFatal:
++qfatalCounter;
@@ -320,6 +338,7 @@ void QTestLogger::addMessage(MessageTypes type, const char *message, const char
errorElement->addAttribute(QTest::AI_Type, typeBuf);
errorElement->addAttribute(QTest::AI_Description, message);
+ addTag(errorElement);
if(file)
errorElement->addAttribute(QTest::AI_File, file);
diff --git a/src/testlib/qtestlogger_p.h b/src/testlib/qtestlogger_p.h
index 31f7d55..bb7a358 100644
--- a/src/testlib/qtestlogger_p.h
+++ b/src/testlib/qtestlogger_p.h
@@ -83,6 +83,7 @@ class QTestLogger : public QAbstractTestLogger
void addIncident(IncidentTypes type, const char *description,
const char *file = 0, int line = 0);
void addBenchmarkResult(const QBenchmarkResult &result);
+ void addTag(QTestElement* element);
void addMessage(MessageTypes type, const char *message,
const char *file = 0, int line = 0);
diff --git a/src/testlib/qtestxmlstreamer.cpp b/src/testlib/qtestxmlstreamer.cpp
index b9946e5..f63c221 100644
--- a/src/testlib/qtestxmlstreamer.cpp
+++ b/src/testlib/qtestxmlstreamer.cpp
@@ -111,12 +111,20 @@ void QTestXmlStreamer::formatStart(const QTestElement *element, QTestCharBuffer
QXmlTestLogger::xmlQuote(&quotedFile, element->attributeValue(QTest::AI_File));
QXmlTestLogger::xmlCdata(&cdataDesc, element->attributeValue(QTest::AI_Description));
- QTest::qt_asprintf(formatted, "<Message type=\"%s\" %s=\"%s\" %s=\"%s\">\n <Description><![CDATA[%s]]></Description>\n</Message>\n",
+ QTestCharBuffer tagbuf;
+ if (element->attribute(QTest::AI_Tag)) {
+ QTestCharBuffer cdataTag;
+ QXmlTestLogger::xmlCdata(&cdataTag, element->attributeValue(QTest::AI_Tag));
+ QTest::qt_asprintf(&tagbuf, " <DataTag><![CDATA[%s]]></DataTag>\n", cdataTag.constData());
+ }
+
+ QTest::qt_asprintf(formatted, "<Message type=\"%s\" %s=\"%s\" %s=\"%s\">\n%s <Description><![CDATA[%s]]></Description>\n</Message>\n",
element->attributeValue(QTest::AI_Type),
element->attributeName(QTest::AI_File),
quotedFile.constData(),
element->attributeName(QTest::AI_Line),
element->attributeValue(QTest::AI_Line),
+ tagbuf.constData(),
cdataDesc.constData());
break;
}
@@ -149,7 +157,29 @@ void QTestXmlStreamer::formatEnd(const QTestElement *element, QTestCharBuffer *f
return;
if (element->elementType() == QTest::LET_TestCase) {
- QTest::qt_asprintf(formatted, "</TestFunction>\n");
+ bool failed = false;
+ for (QTestElement* child = element->childElements(); child; child = child->nextElement()) {
+ if ( child->elementType() == QTest::LET_Failure
+ && child->attribute(QTest::AI_Result)
+ && ( !strcmp(child->attributeValue(QTest::AI_Result), "fail")
+ || !strcmp(child->attributeValue(QTest::AI_Result), "xpass"))
+ )
+ {
+ failed = true;
+ break;
+ }
+ }
+
+ // For passing functions, no Incident has been output yet.
+ // For failing functions, we already output one.
+ // Please note: we are outputting "pass" even if there was an xfail etc.
+ // This is by design (arguably bad design, but dangerous to change now!)
+ if (element->attribute(QTest::AI_Result) && !failed) {
+ QTest::qt_asprintf(formatted, "<Incident type=\"pass\" file=\"\" line=\"0\" />\n</TestFunction>\n");
+ }
+ else {
+ QTest::qt_asprintf(formatted, "</TestFunction>\n");
+ }
} else {
formatted->data()[0] = '\0';
}
@@ -157,29 +187,11 @@ void QTestXmlStreamer::formatEnd(const QTestElement *element, QTestCharBuffer *f
void QTestXmlStreamer::formatBeforeAttributes(const QTestElement *element, QTestCharBuffer *formatted) const
{
- if(!element || !formatted)
+ Q_UNUSED(element);
+ if (!formatted)
return;
- if (element->elementType() == QTest::LET_TestCase && element->attribute(QTest::AI_Result)){
- QTestCharBuffer buf;
- QTestCharBuffer quotedFile;
- QXmlTestLogger::xmlQuote(&quotedFile, element->attributeValue(QTest::AI_File));
-
- QTest::qt_asprintf(&buf, "%s=\"%s\" %s=\"%s\"",
- element->attributeName(QTest::AI_File),
- quotedFile.constData(),
- element->attributeName(QTest::AI_Line),
- element->attributeValue(QTest::AI_Line));
-
- if( !element->childElements() ) {
- QTest::qt_asprintf(formatted, "<Incident type=\"%s\" %s/>\n",
- element->attributeValue(QTest::AI_Result), buf.constData());
- } else {
- formatted->data()[0] = '\0';
- }
- } else {
- formatted->data()[0] = '\0';
- }
+ formatted->data()[0] = '\0';
}
void QTestXmlStreamer::output(QTestElement *element) const
diff --git a/src/testlib/qxmltestlogger.cpp b/src/testlib/qxmltestlogger.cpp
index 2236666..07e8ef0 100644
--- a/src/testlib/qxmltestlogger.cpp
+++ b/src/testlib/qxmltestlogger.cpp
@@ -244,7 +244,7 @@ void QXmlTestLogger::addBenchmarkResult(const QBenchmarkResult &result)
QTestCharBuffer quotedTag;
xmlQuote(&quotedMetric,
- benchmarkMetricUnit(result.metric));
+ benchmarkMetricName(result.metric));
xmlQuote(&quotedTag, result.context.tag.toAscii().constData());
QTest::qt_asprintf(
diff --git a/src/xmlpatterns/schema/qxsdschemaresolver.cpp b/src/xmlpatterns/schema/qxsdschemaresolver.cpp
index 34eb12c..f3d1ed0 100644
--- a/src/xmlpatterns/schema/qxsdschemaresolver.cpp
+++ b/src/xmlpatterns/schema/qxsdschemaresolver.cpp
@@ -632,7 +632,14 @@ void XsdSchemaResolver::resolveSimpleContentComplexTypes(const XsdComplexType::P
} else {
// 1.2
const XsdSimpleType::Ptr anonType(new XsdSimpleType());
- anonType->setCategory(complexBaseType->contentType()->simpleType()->category());
+ XsdSimpleType::TypeCategory baseCategory = complexBaseType->contentType()->simpleType()->category();
+ anonType->setCategory(baseCategory);
+
+ if (baseCategory == XsdSimpleType::SimpleTypeList) {
+ const XsdSimpleType::Ptr baseSimpleType = complexBaseType->contentType()->simpleType();
+ anonType->setItemType(baseSimpleType->itemType());
+ }
+
anonType->setDerivationMethod(XsdSimpleType::DerivationRestriction);
anonType->setWxsSuperType(complexBaseType->contentType()->simpleType());
anonType->setFacets(complexTypeFacets(complexType));
diff --git a/src/xmlpatterns/type/qschematype_p.h b/src/xmlpatterns/type/qschematype_p.h
index 1b26fb8..ff8b86b 100644
--- a/src/xmlpatterns/type/qschematype_p.h
+++ b/src/xmlpatterns/type/qschematype_p.h
@@ -174,7 +174,7 @@ namespace QPatternist
* a QXmlName instance stored as a member.
*
* If the type code was refactored to not be store globally and
- * therfore by design would be tied to a name pool, this argument could
+ * therefore by design would be tied to a name pool, this argument could
* be removed.
*/
virtual QXmlName name(const NamePool::Ptr &np) const = 0;
diff --git a/src/xmlpatterns/xmlpatterns.pro b/src/xmlpatterns/xmlpatterns.pro
index a224762..e50d184 100644
--- a/src/xmlpatterns/xmlpatterns.pro
+++ b/src/xmlpatterns/xmlpatterns.pro
@@ -24,13 +24,14 @@ include($$PWD/schema/schema.pri)
include($$PWD/type/type.pri)
include($$PWD/utils/utils.pri)
include($$PWD/qobjectmodel/qobjectmodel.pri, "", true)
-wince*:# The Microsoft MIPS compiler crashes if /Og is specified
-:
-# -O2/1 expands to /Og plus additional arguments.
-contains(DEFINES, MIPS): {
- QMAKE_CXXFLAGS_RELEASE ~= s/-O2/-Oi -Ot -Oy -Ob2/
- QMAKE_CXXFLAGS_RELEASE ~= s/-O1/-Os -Oy -Ob2/
+wince* {
+ # The Microsoft MIPS compiler crashes if /Og is specified.
+ # -O2/1 expands to /Og plus additional arguments.
+ contains(DEFINES, MIPS) {
+ QMAKE_CXXFLAGS_RELEASE ~= s/-O2/-Oi -Ot -Oy -Ob2/
+ QMAKE_CXXFLAGS_RELEASE ~= s/-O1/-Os -Oy -Ob2/
+ }
}
+
symbian:TARGET.UID3 = 0x2001E62B
-HEADERS +=